diff --git a/.github/workflows/lib.yml b/.github/workflows/lib.yml index 9cce0d9..24443ce 100644 --- a/.github/workflows/lib.yml +++ b/.github/workflows/lib.yml @@ -44,12 +44,6 @@ jobs: - name: Compile and run tests on robot code run: ./gradlew build - - name: Generate JaCoCo Badge - uses: cicirello/jacoco-badge-generator@v2 - with: - generate-branches-badge: false - jacoco-csv-file: lib/build/reports/jacoco/test/jacocoTestReport.csv - - name: Publish Test Results uses: EnricoMi/publish-unit-test-result-action@v2 if: ${{ always() }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0c76ee8..397108a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,6 @@ # This is a basic workflow to build robot code. -name: Swerve100 Unit Tests +name: Comp Unit Tests # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch. @@ -19,7 +19,7 @@ jobs: timeout-minutes: 10 defaults: run: - working-directory: ./comp/swerve100 + working-directory: ./comp # This grabs the WPILib docker container container: wpilib/roborio-cross-ubuntu:2024-22.04 diff --git a/README.md b/README.md index 819ccbf..abc3164 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,20 @@ -# all24 +# all25 -[![CI](https://github.com/Team100/all24/actions/workflows/main.yml/badge.svg)](https://github.com/Team100/all24/actions/workflows/main.yml) -[![CI](https://github.com/Team100/all24/actions/workflows/lib.yml/badge.svg)](https://github.com/Team100/all24/actions/workflows/lib.yml) -[![CI](https://github.com/Team100/all24/actions/workflows/raspberry_pi.yml/badge.svg)](https://github.com/Team100/all24/actions/workflows/raspberry_pi.yml) +[![CI](https://github.com/Team100/all25/actions/workflows/main.yml/badge.svg)](https://github.com/Team100/all25/actions/workflows/main.yml) +[![CI](https://github.com/Team100/all25/actions/workflows/lib.yml/badge.svg)](https://github.com/Team100/all25/actions/workflows/lib.yml) +[![CI](https://github.com/Team100/all25/actions/workflows/raspberry_pi.yml/badge.svg)](https://github.com/Team100/all25/actions/workflows/raspberry_pi.yml) -all24 contains *all* the Team 100 code for *2024.* There's just one repository, +all25 contains *all* the Team 100 code for *2025.* There's just one repository, so that sharing library code across projects is easier. This style of code management is sometimes called a ["monorepo"](https://en.wikipedia.org/wiki/Monorepo) if you want to read more about it. Here is the directory layout: -* **lib**: evergreen library code -* **comp**: competition code for 2024 - * **swerve100**: roborio code - * **vision**: raspberry pi code +* **lib**: evergreen RoboRIO library code +* **comp**: RoboRIO competition code for 2025 +* **raspberry_pi** coprocessor tasks: vision, logging, GTSAM * **studies**: small independent projects * your project * another project diff --git a/studies/AHRS100/.gitignore b/comp/.gitignore similarity index 90% rename from studies/AHRS100/.gitignore rename to comp/.gitignore index cdbfbfa..7fa0a52 100644 --- a/studies/AHRS100/.gitignore +++ b/comp/.gitignore @@ -169,6 +169,8 @@ out/ .fleet # Simulation GUI and other tools window save file +networktables.json +simgui.json *-window.json # Simulation data log directory @@ -176,3 +178,7 @@ logs/ # Folder that has CTRE Phoenix Sim device config storage ctre_sim/ + +# clangd +/.cache +compile_commands.json diff --git a/comp/swerve100/.vscode/launch.json b/comp/.vscode/launch.json similarity index 100% rename from comp/swerve100/.vscode/launch.json rename to comp/.vscode/launch.json diff --git a/comp/.vscode/settings.json b/comp/.vscode/settings.json new file mode 100644 index 0000000..dccbc7c --- /dev/null +++ b/comp/.vscode/settings.json @@ -0,0 +1,60 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic", + "java.server.launchMode": "Standard", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "bin/": true, + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true, + "**/*~": true + }, + "java.test.config": [ + { + "name": "WPIlibUnitTests", + "workingDirectory": "${workspaceFolder}/build/jni/release", + "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], + "env": { + "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , + "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" + } + }, + ], + "java.test.defaultConfig": "WPIlibUnitTests", + "java.import.gradle.annotationProcessing.enabled": false, + "java.completion.favoriteStaticMembers": [ + "org.junit.Assert.*", + "org.junit.Assume.*", + "org.junit.jupiter.api.Assertions.*", + "org.junit.jupiter.api.Assumptions.*", + "org.junit.jupiter.api.DynamicContainer.*", + "org.junit.jupiter.api.DynamicTest.*", + "org.mockito.Mockito.*", + "org.mockito.ArgumentMatchers.*", + "org.mockito.Answers.*", + "edu.wpi.first.units.Units.*" + ], + "java.completion.filteredTypes": [ + "java.awt.*", + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*", + "java.beans.*", + "java.util.Base64.*", + "java.util.Timer", + "java.sql.*", + "javax.swing.*", + "javax.management.*", + "javax.smartcardio.*", + "edu.wpi.first.math.proto.*", + "edu.wpi.first.math.**.proto.*", + "edu.wpi.first.math.**.struct.*", + ] +} diff --git a/studies/Elevator2018/.wpilib/wpilib_preferences.json b/comp/.wpilib/wpilib_preferences.json similarity index 74% rename from studies/Elevator2018/.wpilib/wpilib_preferences.json rename to comp/.wpilib/wpilib_preferences.json index a8060e4..9831485 100644 --- a/studies/Elevator2018/.wpilib/wpilib_preferences.json +++ b/comp/.wpilib/wpilib_preferences.json @@ -1,6 +1,6 @@ { "enableCppIntellisense": false, "currentLanguage": "java", - "projectYear": "2023", + "projectYear": "2025beta", "teamNumber": 100 } \ No newline at end of file diff --git a/comp/swerve100/README.md b/comp/README.md similarity index 100% rename from comp/swerve100/README.md rename to comp/README.md diff --git a/studies/AHRS100/WPILib-License.md b/comp/WPILib-License.md similarity index 100% rename from studies/AHRS100/WPILib-License.md rename to comp/WPILib-License.md diff --git a/studies/Turret/build.gradle b/comp/build.gradle similarity index 87% rename from studies/Turret/build.gradle rename to comp/build.gradle index 8e92e69..010fea9 100644 --- a/studies/Turret/build.gradle +++ b/comp/build.gradle @@ -1,111 +1,112 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.2" -} - -sourceSets { - main { - java { - srcDir "../../lib/src/main/java" - } - } -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "org.team100.frc2024.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation 'org.msgpack:jackson-dataformat-msgpack:0.9.3' - implementation "org.ejml:ejml-simple:0.43.1" - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} +plugins { + id "java" + id "edu.wpi.first.GradleRIO" version "2025.1.1-beta-3" +} + +sourceSets { + main { + java { + srcDir "../lib/src/main/java" + } + } +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +def ROBOT_MAIN_CLASS = "org.team100.frc2024.Main" + +// Define my targets (RoboRIO) and artifacts (deployable files) +// This is added by GradleRIO's backing project DeployUtils. +deploy { + targets { + roborio(getTargetTypeClass('RoboRIO')) { + // Team number is loaded either from the .wpilib/wpilib_preferences.json + // or from command line. If not found an exception will be thrown. + // You can use getTeamOrDefault(team) instead of getTeamNumber if you + // want to store a team number in this file. + team = project.frc.getTeamNumber() + debug = project.frc.getDebugOrDefault(false) + + artifacts { + // First part is artifact name, 2nd is artifact type + // getTargetTypeClass is a shortcut to get the class type using a string + + frcJava(getArtifactTypeClass('FRCJavaArtifact')) { + } + + // Static files artifact + frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { + files = project.fileTree('src/main/deploy') + directory = '/home/lvuser/deploy' + deleteOldFiles = false // Change to true to delete files on roboRIO that no + // longer exist in deploy directory of this project + } + } + } + } +} + +def deployArtifact = deploy.targets.roborio.artifacts.frcJava + +// Set to true to use debug for JNI. +wpi.java.debugJni = false + +// Set this to true to enable desktop support. +def includeDesktopSupport = true + +// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. +// Also defines JUnit 5. +dependencies { + annotationProcessor wpi.java.deps.wpilibAnnotations() + implementation wpi.java.deps.wpilib() + implementation wpi.java.vendor.java() + + roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) + roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) + + roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) + roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) + + nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) + nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) + simulationDebug wpi.sim.enableDebug() + + nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) + nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) + simulationRelease wpi.sim.enableRelease() + + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +test { + useJUnitPlatform() + systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' +} + +// Simulation configuration (e.g. environment variables). +wpi.sim.addGui().defaultEnabled = true +wpi.sim.addDriverstation() + +// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') +// in order to make them all available at runtime. Also adding the manifest so WPILib +// knows where to look for our Robot Class. +jar { + from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + from sourceSets.main.allSource + manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} + +// Configure jar and deploy tasks +deployArtifact.jarTask = jar +wpi.java.configureExecutableTasks(jar) +wpi.java.configureTestTasks(test) + +// Configure string concat to always inline compile +tasks.withType(JavaCompile) { + options.compilerArgs.add '-XDstringConcat=inline' +} diff --git a/comp/dashboards/betabot/glass-window.json b/comp/dashboards/betabot/glass-window.json deleted file mode 100644 index 861f3f0..0000000 --- a/comp/dashboards/betabot/glass-window.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=25,314 Size=200,48", - "DockNode ID=0x00000002 Pos=1353,417 Size=243,256 Split=Y", - "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=200,100 Split=X Selected=0x9698D817", - "DockNode ID=0x00000005 Parent=0x00000003 SizeRef=177,187 Selected=0x9698D817", - "DockNode ID=0x00000009 Parent=0x00000003 SizeRef=174,187 Selected=0xEC5E699D", - "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=200,98 Split=X Selected=0x685782FF", - "DockNode ID=0x00000007 Parent=0x00000004 SizeRef=86,179 Selected=0x65402E70", - "DockNode ID=0x00000008 Parent=0x00000004 SizeRef=90,179 Selected=0x685782FF", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1666,740 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "864", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1666", - "xpos": "254", - "ypos": "106" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "287", - "Column 1 Width": "206", - "RefScale": "13" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard//Front Left": { - "Collapsed": "0", - "Pos": "757,85", - "Size": "200,200" - }, - "###/SmartDashboard/AmpSubsystem": { - "Collapsed": "0", - "Pos": "872,46", - "Size": "200,200" - }, - "###/SmartDashboard/DrumShooter": { - "Collapsed": "0", - "Pos": "1084,49", - "Size": "200,200" - }, - "###/SmartDashboard/FlushOften": { - "Collapsed": "0", - "Pos": "27,376", - "Size": "200,48" - }, - "###/SmartDashboard/Front Left": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/IndexerSubsystem": { - "Collapsed": "0", - "Pos": "600,46", - "Size": "200,200" - }, - "###/SmartDashboard/IntakeWheel": { - "Collapsed": "0", - "Pos": "370,42", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "25,314", - "Size": "200,48" - }, - "###/SmartDashboard/Module/Front Left": { - "Collapsed": "0", - "Pos": "948,35", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Front Right": { - "Collapsed": "0", - "Pos": "950,236", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Left": { - "Collapsed": "0", - "Pos": "746,36", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Right": { - "Collapsed": "0", - "Pos": "746,238", - "Size": "200,200" - }, - "###/SmartDashboard/Module0": { - "Collapsed": "0", - "Pos": "721,72", - "Size": "103,107" - }, - "###/SmartDashboard/Module1": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "254,54" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "254,54" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "294,31", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "254,54" - }, - "###/SmartDashboard/Swerve Viz/Front Left": { - "Collapsed": "0", - "DockId": "0x00000009,0", - "Pos": "1477,417", - "Size": "119,128" - }, - "###/SmartDashboard/Swerve Viz/Front Right": { - "Collapsed": "0", - "DockId": "0x00000008,0", - "Pos": "1473,547", - "Size": "123,126" - }, - "###/SmartDashboard/Swerve Viz/Rear Left": { - "Collapsed": "0", - "DockId": "0x00000005,0", - "Pos": "1353,417", - "Size": "122,128" - }, - "###/SmartDashboard/Swerve Viz/Rear Right": { - "Collapsed": "0", - "DockId": "0x00000007,0", - "Pos": "1353,547", - "Size": "118,126" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "29,256", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "200,48" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "28,663", - "Size": "254,54" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,572", - "Size": "200,48" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "501,32", - "Size": "200,200" - }, - "###/SmartDashboard/swerve/Front Left": { - "Collapsed": "0", - "Pos": "736,136", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "17,459", - "Size": "342,186" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "303,263", - "Size": "574,544" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "18,41", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "1130,41", - "Size": "527,281" - }, - "###Plot <1>": { - "Collapsed": "0", - "Pos": "959,549", - "Size": "700,313" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "907,259", - "Size": "426,271" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1666,740" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/betabot/glass.json b/comp/dashboards/betabot/glass.json deleted file mode 100644 index b507a43..0000000 --- a/comp/dashboards/betabot/glass.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "NetworkTables": { - "AmpSubsystem": { - "Left": { - "NeoTurningEncoder": { - "open": true - }, - "NeoTurningMotor": { - "open": true - }, - "OutboardVelocityServo": { - "open": true - }, - "SimulatedEncoder": { - "open": true - }, - "open": true - }, - "Right": { - "NeoTurningEncoder": { - "open": true - }, - "NeoTurningMotor": { - "open": true - }, - "open": true - }, - "open": true - }, - "Command100": { - "DriveManually": { - "SimpleManualModuleStates": { - "open": true - }, - "open": true - }, - "open": true - }, - "DrivePursuitController": { - "open": true - }, - "Front Left": { - "Drive": { - "Simulated Encoder": { - "open": true - }, - "Simulated Motor": { - "open": true - }, - "open": true - }, - "Turning": { - "Position Servo": { - "open": true - }, - "open": true - } - }, - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true - }, - "HolonomicDriveController3": { - "open": true - }, - "IndexerSubsystem": { - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "Robot": { - "open": true - }, - "RobotContainer": { - "open": true - }, - "Shuffleboard": { - "open": true - }, - "SmartDashboard": { - "Module": { - "Front Left": { - "Front Left": { - "drive": { - "open": true - }, - "open": true, - "steer": { - "open": true - } - } - }, - "open": true - }, - "Rear Right": { - "Rear Right": { - "drive": { - "open": true - } - }, - "open": true - }, - "SideView": { - "SideRoot": { - "Boom": { - "open": true - } - } - }, - "open": true - }, - "SwerveDriveSubsystem": { - "open": true, - "velocity": { - "open": true - } - }, - "SwerveLocal": { - "AsymSwerveSetpointGenerator": { - "SteeringRateLimiter": { - "open": true - }, - "open": true - }, - "desired chassis speed": { - "open": true - }, - "implied speed": { - "open": true - }, - "open": true, - "setpoint chassis speed": { - "open": true - }, - "setpoint delta": { - "open": true - } - }, - "WCPSwerveModule100": { - "Front Left": { - "Drive": { - "FalconDriveEncoder": { - "open": true - }, - "FalconDriveMotor": { - "open": true - }, - "open": true - }, - "Turning": { - "PositionServo": { - "open": true - } - }, - "open": true - }, - "open": true - }, - "arm": { - "lower": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "upper": { - "open": true - } - }, - "combined": true, - "drive": { - "open": true, - "simulated_motor": { - "open": true - } - }, - "encoder": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "field": { - "double[]##v_/field/robot": { - "open": true - } - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - }, - "SmartDashboard": { - "Telemetry Level": { - "open": false - } - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "transitory": { - "Holonomic3": { - "error": { - "open": false - }, - "measurement": { - "open": false - }, - "open": false, - "setpoint": { - "open": false - }, - "u_FB": { - "open": false - }, - "u_FF": { - "open": false - } - }, - "SmartDashboard": { - "Manual Drive Mode": { - "open": false - }, - "Swerve Module Front Left": { - "open": false - }, - "Swerve Module Front Right": { - "open": false - }, - "UseSetpointGenerator": { - "open": false - }, - "open": false - }, - "center": { - "open": false - }, - "circle": { - "center": { - "open": false - }, - "open": false, - "reference": { - "open": false, - "theta": { - "open": false - } - }, - "target": { - "open": false - }, - "x_state": { - "open": false - }, - "y_state": { - "open": false - } - }, - "current pose": { - "open": false - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": false - } - }, - "position servo Front Left": { - "open": false - }, - "position servo Front Right": { - "open": false - }, - "position servo Rear Left": { - "open": false - }, - "position servo Rear Right": { - "open": false - }, - "robot": { - "open": false - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard//Front Left": "Mechanism2d", - "/SmartDashboard//Front Right": "Mechanism2d", - "/SmartDashboard//Rear Left": "Mechanism2d", - "/SmartDashboard//Rear Right": "Mechanism2d", - "/SmartDashboard/AmpSubsystem": "Mechanism2d", - "/SmartDashboard/DrumShooter": "Mechanism2d", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Front Left": "Mechanism2d", - "/SmartDashboard/Front Right": "Mechanism2d", - "/SmartDashboard/IndexerSubsystem": "Mechanism2d", - "/SmartDashboard/IntakeWheel": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Module/Front Left": "Mechanism2d", - "/SmartDashboard/Module/Front Right": "Mechanism2d", - "/SmartDashboard/Module/Rear Left": "Mechanism2d", - "/SmartDashboard/Module/Rear Right": "Mechanism2d", - "/SmartDashboard/Module0": "Mechanism2d", - "/SmartDashboard/Module1": "Mechanism2d", - "/SmartDashboard/Module2": "Mechanism2d", - "/SmartDashboard/Module3": "Mechanism2d", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Rear Left": "Mechanism2d", - "/SmartDashboard/Rear Right": "Mechanism2d", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Front Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Front Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Rear Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Rear Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/WCPSwerveModule100_Front Left_WCPSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/WCPSwerveModule100_Front Right_WCPSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/WCPSwerveModule100_Rear Left_WCPSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/WCPSwerveModule100_Rear Right_WCPSwerveModule100": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/annunciator": "Mechanism2d", - "/SmartDashboard/elevator": "Mechanism2d", - "/SmartDashboard/swerve/Front Left": "Mechanism2d", - "/SmartDashboard/swerve/Front Right": "Mechanism2d", - "/SmartDashboard/swerve/Rear Left": "Mechanism2d", - "/SmartDashboard/swerve/Rear Right": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/AmpSubsystem": { - "window": { - "visible": true - } - }, - "/SmartDashboard/DrumShooter": { - "window": { - "visible": true - } - }, - "/SmartDashboard/FlushOften": { - "window": { - "visible": true - } - }, - "/SmartDashboard/IndexerSubsystem": { - "window": { - "visible": true - } - }, - "/SmartDashboard/IntakeWheel": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "selectable": false - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 225, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/AmpSubsystem/Left/NeoTurningMotor/current (A)" - } - ] - } - ] - }, - "Plot <1>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 257, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/AmpSubsystem/Left/NeoTurningMotor/duty cycle" - } - ] - } - ] - }, - "Plot <2>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 215, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/AmpSubsystem/Left/NeoTurningEncoder/position (rad)" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/AmpSubsystem/Left/OutboardVelocityServo/Desired setpoint" - } - ] - } - ] - } - } -} diff --git a/comp/dashboards/camera/glass-window.json b/comp/dashboards/camera/glass-window.json deleted file mode 100644 index 952b2e3..0000000 --- a/comp/dashboards/camera/glass-window.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1687,711 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "727", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1687", - "xpos": "162", - "ypos": "280" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "173", - "Column 1 Width": "203", - "RefScale": "10" - }, - "0x886CDEDE,2": { - "Column 0 Width": "100", - "Column 1 Weight": "1.0000", - "RefScale": "10" - }, - "0x965B9C9E,2": { - "Column 0 Width": "100", - "Column 1 Weight": "1.0000", - "RefScale": "10" - }, - "0xD5C61D1D,2": { - "Column 0 Width": "100", - "Column 1 Weight": "1.0000", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###NetworkTables": { - "Collapsed": "0", - "Pos": "345,33", - "Size": "575,471" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "126,220", - "Size": "475,338" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "76,246", - "Size": "600,381" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "20,21", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "964,41", - "Size": "569,234" - }, - "###Plot <1>": { - "Collapsed": "0", - "Pos": "964,278", - "Size": "546,224" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "953,503", - "Size": "576,204" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1687,711" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/camera/glass.json b/comp/dashboards/camera/glass.json deleted file mode 100644 index 319672a..0000000 --- a/comp/dashboards/camera/glass.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "NetworkTables": { - "Persistent Values": { - "open": false - }, - "retained": { - ".schema": { - "open": true - } - }, - "transitory": { - ".schema": { - "open": true - }, - "CameraPublisher": { - "Processed": { - "open": true - } - }, - "Translation2d[]##v_vision": { - "open": true - }, - "Vision24": { - "Translation2d##v_/Vision24/foo": { - "open": true - }, - "open": true - }, - "vision": { - "10000000e31d4a24": { - "Blip24[]##v_vision/10000000e31d4a24/blips": { - "Blip24##v_[0]": { - "Transform3d##v_pose": { - "Translation3d##v_translation": { - "open": true - }, - "open": true - }, - "open": true - }, - "open": true - }, - "open": true - }, - "Blip24[]##v_vision/10000000e31d4a24": { - "Blip24##v_[0]": { - "Transform3d##v_pose": { - "Rotation3d##v_rotation": { - "Quaternion##v_q": { - "open": true - }, - "open": true - }, - "Translation3d##v_translation": { - "open": true - }, - "open": true - }, - "open": true - }, - "open": true - }, - "Blip24[]##v_vision/blips": { - "Blip24##v_[0]": { - "Pose2d##v_pose": { - "Rotation2d##v_rotation": { - "open": true - }, - "Translation2d##v_translation": { - "open": true - }, - "open": true - }, - "Pose2d##v_translation": { - "Rotation2d##v_rotation": { - "open": true - }, - "Translation2d##v_translation": { - "open": true - }, - "open": true - }, - "open": true - }, - "Blip24##v_[1]": { - "Pose2d##v_translation": { - "Rotation2d##v_rotation": { - "open": true - }, - "Translation2d##v_translation": { - "open": true - }, - "open": true - }, - "open": true - }, - "open": true - }, - "Tag[]##v_vision/foo4": { - "Tag##v_[0]": { - "Translation2d##v_translation": { - "open": true - }, - "open": true - }, - "open": true - }, - "Translation2d##v_vision/foo": { - "open": true - }, - "Translation2d##v_vision/foo2": { - "open": true - }, - "Translation2d[]##v_vision/foo": { - "Translation2d##v_[0]": { - "open": true - }, - "Translation2d##v_[1]": { - "open": true - } - }, - "open": true - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/annunciator": "Mechanism2d", - "/SmartDashboard/elevator": "Mechanism2d", - "/field": "Field2d" - } - }, - "NetworkTables Info": { - "Clients": { - "open": true - }, - "Connections": { - "open": true - }, - "Server": { - "Publishers": { - "open": true - }, - "Subscribers": { - "open": true - }, - "open": true - }, - "struct_demo@1": { - "Publishers": { - "open": true - }, - "Subscribers": { - "open": true - }, - "open": true - }, - "tag_finder24@1": { - "Publishers": { - "open": true - }, - "open": true - }, - "visible": true - }, - "NetworkTables Log": { - "visible": true - }, - "NetworkTables Settings": { - "dsClient": false, - "listenAddress": "10.1.0.2", - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 178, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:vision/10000000e31d4a24/blips[0]/pose/translation/x" - } - ] - } - ] - }, - "Plot <1>": { - "plots": [ - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 168, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:vision/10000000e31d4a24/fps" - } - ] - } - ] - }, - "Plot <2>": { - "plots": [ - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 148, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:vision/10000000e31d4a24/latency" - } - ] - } - ] - } - } -} diff --git a/comp/dashboards/drivetrain/glass-window.json b/comp/dashboards/drivetrain/glass-window.json deleted file mode 100644 index ac8ac6a..0000000 --- a/comp/dashboards/drivetrain/glass-window.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=22,168 Size=254,54", - "DockNode ID=0x00000002 Pos=812,19 Size=262,297 Split=Y", - "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=200,100 Split=X Selected=0x9698D817", - "DockNode ID=0x00000005 Parent=0x00000003 SizeRef=177,187 Selected=0x9698D817", - "DockNode ID=0x00000009 Parent=0x00000003 SizeRef=174,187 Selected=0xEC5E699D", - "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=200,98 Split=X Selected=0x685782FF", - "DockNode ID=0x00000007 Parent=0x00000004 SizeRef=86,179 Selected=0x65402E70", - "DockNode ID=0x00000008 Parent=0x00000004 SizeRef=90,179 Selected=0x685782FF", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,19 Size=1666,737 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "756", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1666", - "xpos": "187", - "ypos": "200" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "221", - "Column 1 Width": "105", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard//Front Left": { - "Collapsed": "0", - "Pos": "757,85", - "Size": "200,200" - }, - "###/SmartDashboard/FlushOften": { - "Collapsed": "0", - "Pos": "25,637", - "Size": "254,54" - }, - "###/SmartDashboard/Front Left": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "22,168", - "Size": "254,54" - }, - "###/SmartDashboard/Module/Front Left": { - "Collapsed": "0", - "Pos": "948,35", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Front Right": { - "Collapsed": "0", - "Pos": "950,236", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Left": { - "Collapsed": "0", - "Pos": "746,36", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Right": { - "Collapsed": "0", - "Pos": "746,238", - "Size": "200,200" - }, - "###/SmartDashboard/Module0": { - "Collapsed": "0", - "Pos": "721,72", - "Size": "103,107" - }, - "###/SmartDashboard/Module1": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "254,54" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "254,54" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "727,370", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "254,54" - }, - "###/SmartDashboard/Swerve Viz/Front Left": { - "Collapsed": "0", - "DockId": "0x00000009,0", - "Pos": "945,19", - "Size": "129,149" - }, - "###/SmartDashboard/Swerve Viz/Front Right": { - "Collapsed": "0", - "DockId": "0x00000008,0", - "Pos": "941,170", - "Size": "133,146" - }, - "###/SmartDashboard/Swerve Viz/Rear Left": { - "Collapsed": "0", - "DockId": "0x00000005,0", - "Pos": "812,19", - "Size": "131,149" - }, - "###/SmartDashboard/Swerve Viz/Rear Right": { - "Collapsed": "0", - "DockId": "0x00000007,0", - "Pos": "812,170", - "Size": "127,146" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "23,372", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "254,54" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "23,572", - "Size": "254,54" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,572", - "Size": "254,54" - }, - "###/SmartDashboard/annunciator": { - "Collapsed": "0", - "Pos": "1192,229", - "Size": "200,200" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/swerve/Front Left": { - "Collapsed": "0", - "Pos": "736,136", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "283,19", - "Size": "528,295" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "304,328", - "Size": "710,393" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "1", - "Pos": "20,20", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "255,21", - "Size": "372,172" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,19", - "Size": "1666,737" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/drivetrain/glass.json b/comp/dashboards/drivetrain/glass.json deleted file mode 100644 index 8ebbd1f..0000000 --- a/comp/dashboards/drivetrain/glass.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "NetworkTables": { - "Front Left": { - "Drive": { - "Velocity Servo": { - "open": true - } - }, - "open": true - }, - "Holonomic3": { - "measurement": { - "open": true - }, - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "SmartDashboard": { - "Module": { - "Front Left": { - "Front Left": { - "drive": { - "open": true - }, - "open": true, - "steer": { - "open": true - } - } - }, - "open": true - }, - "Rear Right": { - "Rear Right": { - "drive": { - "open": true - } - }, - "open": true - }, - "SideView": { - "SideRoot": { - "Boom": { - "open": true - } - } - } - }, - "arm": { - "lower": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "open": true, - "upper": { - "open": true - } - }, - "arm position": { - "open": true - }, - "combined": true, - "drive": { - "open": true, - "simulated_motor": { - "open": true - } - }, - "encoder": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "field": { - "double[]##v_/field/robot": { - "open": true - } - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "transitory": { - "SmartDashboard": { - "Swerve Module Front Left": { - "open": false - }, - "Swerve Module Front Right": { - "open": false - } - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": false - } - }, - "position servo Front Left": { - "open": false - }, - "position servo Front Right": { - "open": false - }, - "position servo Rear Left": { - "open": false - }, - "position servo Rear Right": { - "open": false - }, - "robot": { - "open": false - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard//Front Left": "Mechanism2d", - "/SmartDashboard//Front Right": "Mechanism2d", - "/SmartDashboard//Rear Left": "Mechanism2d", - "/SmartDashboard//Rear Right": "Mechanism2d", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Front Left": "Mechanism2d", - "/SmartDashboard/Front Right": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Module/Front Left": "Mechanism2d", - "/SmartDashboard/Module/Front Right": "Mechanism2d", - "/SmartDashboard/Module/Rear Left": "Mechanism2d", - "/SmartDashboard/Module/Rear Right": "Mechanism2d", - "/SmartDashboard/Module0": "Mechanism2d", - "/SmartDashboard/Module1": "Mechanism2d", - "/SmartDashboard/Module2": "Mechanism2d", - "/SmartDashboard/Module3": "Mechanism2d", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Rear Left": "Mechanism2d", - "/SmartDashboard/Rear Right": "Mechanism2d", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/annunciator": "Mechanism2d", - "/SmartDashboard/elevator": "Mechanism2d", - "/SmartDashboard/swerve/Front Left": "Mechanism2d", - "/SmartDashboard/swerve/Front Right": "Mechanism2d", - "/SmartDashboard/swerve/Rear Left": "Mechanism2d", - "/SmartDashboard/swerve/Rear Right": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/FlushOften": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Motion Profile": { - "window": { - "visible": true - } - }, - "/SmartDashboard/OscillateDirect": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Simple Manual Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopDrive": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopSteering": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseInitialVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/SmartDashboard/annunciator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "selectable": false - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - } -} diff --git a/comp/dashboards/everything/glass-window.json b/comp/dashboards/everything/glass-window.json deleted file mode 100644 index 96feb63..0000000 --- a/comp/dashboards/everything/glass-window.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,19 Size=1666,832 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "851", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1666", - "xpos": "187", - "ypos": "105" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "256", - "Column 1 Width": "156", - "RefScale": "13" - } - }, - "Window": { - "###/SmartDashboard/FlushOften": { - "Collapsed": "0", - "Pos": "14,316", - "Size": "254,54" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "Pos": "10,447", - "Size": "254,54" - }, - "###/SmartDashboard/StickyHeading": { - "Collapsed": "0", - "Pos": "15,253", - "Size": "254,54" - }, - "###/SmartDashboard/Swerve Viz/Swerve Modules_Front Left_Sw": { - "Collapsed": "0", - "Pos": "1117,44", - "Size": "115,127" - }, - "###/SmartDashboard/Swerve Viz/Swerve Modules_Front Right_": { - "Collapsed": "0", - "Pos": "1238,44", - "Size": "107,127" - }, - "###/SmartDashboard/Swerve Viz/Swerve Modules_Rear Left_Swer": { - "Collapsed": "0", - "Pos": "1120,177", - "Size": "110,112" - }, - "###/SmartDashboard/Swerve Viz/Swerve Modules_Rear Right_Sw": { - "Collapsed": "0", - "Pos": "1236,175", - "Size": "110,115" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "10,382", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "254,54" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "12,517", - "Size": "254,54" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "1150,396", - "Size": "499,413" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "364,69", - "Size": "750,145" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "12,58", - "Size": "329,169" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "98,33", - "Size": "1005,780" - }, - "###Plot <1>": { - "Collapsed": "0", - "Pos": "231,36", - "Size": "880,763" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,19", - "Size": "1666,832" - } - } -} diff --git a/comp/dashboards/everything/glass.json b/comp/dashboards/everything/glass.json deleted file mode 100644 index 3296c86..0000000 --- a/comp/dashboards/everything/glass.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "NetworkTables": { - "retained": { - "Gyro": { - "open": true - }, - "RobotContainer": { - "ManualWithFullStateHeading": { - "error": { - "open": true - }, - "goal": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "output": { - "open": true - }, - "setpoint": { - "open": true, - "theta": { - "open": true - } - } - }, - "ManualWithHeading": { - "open": true - }, - "ManualWithProfiledHeading": { - "error": { - "open": true - }, - "goal": { - "open": true - }, - "measurement": { - "open": true - }, - "output": { - "open": true - }, - "setpoint": { - "open": true, - "theta": { - "open": true - } - } - }, - "open": true - }, - "SmartDashboard": { - "Manual Drive Mode": { - "open": true - }, - "Telemetry Level": { - "open": true - } - }, - "Swerve Modules": { - "Front Left": { - "Drive": { - "MotorWithEncoder100": { - "open": true - }, - "open": true - }, - "open": true - } - }, - "SwerveDriveSubsystem": { - "drive input": { - "open": true - } - } - }, - "transitory": { - "SmartDashboard": { - "Manual Drive Mode": { - "open": true - }, - "Swerve Module Front Left": { - "open": true - }, - "Swerve Module Front Right": { - "open": true - }, - "UseSetpointGenerator": { - "open": true - } - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": true - } - }, - "position servo Front Left": { - "open": true - }, - "position servo Front Right": { - "open": true - }, - "position servo Rear Left": { - "open": true - }, - "position servo Rear Right": { - "open": true - }, - "robot": { - "open": true - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/LiveWindow/Manipulator": "Subsystem", - "/LiveWindow/Ungrouped/PIDController[10]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[11]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[12]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[13]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[1]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[2]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[3]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[4]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[5]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[6]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[7]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[8]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[9]": "PIDController", - "/LiveWindow/Ungrouped/Scheduler": "Scheduler", - "/LiveWindow/Ungrouped/Talon FX [1]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [2]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [4]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon SRX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [6]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [7]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [8]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [9]": "Motor Controller", - "/LiveWindow/Ungrouped/navX-Sensor[2]": "Gyro", - "/SmartDashboard/Arm": "Subsystem", - "/SmartDashboard/AutoNoteDetection": "String Chooser", - "/SmartDashboard/Auton Routine": "String Chooser", - "/SmartDashboard/AvoidVisionJitter": "String Chooser", - "/SmartDashboard/Drive Subsystem": "Subsystem", - "/SmartDashboard/DriveToNoteWithRotation": "String Chooser", - "/SmartDashboard/Driver Skill Level": "String Chooser", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/FullStateTrajectoryFollower": "String Chooser", - "/SmartDashboard/HeedVision": "String Chooser", - "/SmartDashboard/LimitBatterySag": "String Chooser", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Scheduler": "Scheduler", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/SlipperyTires": "String Chooser", - "/SmartDashboard/StickyHeading": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/Triangulate": "String Chooser", - "/SmartDashboard/UseCameraUpdater": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseCommandExecutor": "String Chooser", - "/SmartDashboard/UseExecutorAsync": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/FlushOften": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/StickyHeading": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Left_SwerveModule100": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Right_SwerveModule100": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Left_SwerveModule100": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Right_SwerveModule100": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 236, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/measurement/omega" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/measurement/theta" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/setpoint/theta/x" - }, - { - "color": [ - 0.7686275243759155, - 0.30588236451148987, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/setpoint/theta/v" - }, - { - "color": [ - 0.5058823823928833, - 0.44705885648727417, - 0.7019608020782471, - 1.0 - ], - "id": "NT:/Swerve Modules/Front Left/Drive/MotorWithEncoder100/output [-1,1]" - }, - { - "color": [ - 0.5764706134796143, - 0.4705882668495178, - 0.3764706254005432, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/goal/theta" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 236, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/error/omega" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/error/theta" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 236, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/thetaFB" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/SwerveDriveSubsystem/drive input/theta rad_s" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithProfiledHeading/omegaFB" - } - ] - } - ], - "window": { - "name": "Profiled", - "visible": false - } - }, - "Plot <1>": { - "plots": [ - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/thetaFB" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/omegaFB" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/measurement/theta" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/measurement/omega" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/error/theta" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/RobotContainer/ManualWithFullStateHeading/error/omega" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Swerve Modules/Front Left/Drive/MotorWithEncoder100/output [-1,1]" - } - ] - } - ], - "window": { - "name": "Full State" - } - } - } -} diff --git a/comp/dashboards/mechanisms/glass-window.json b/comp/dashboards/mechanisms/glass-window.json deleted file mode 100644 index 0fb4502..0000000 --- a/comp/dashboards/mechanisms/glass-window.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=22,168 Size=200,48", - "DockNode ID=0x00000002 Pos=417,209 Size=190,189 Split=Y", - "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=200,100 Split=X Selected=0x9698D817", - "DockNode ID=0x00000005 Parent=0x00000003 SizeRef=177,187 Selected=0x9698D817", - "DockNode ID=0x00000009 Parent=0x00000003 SizeRef=174,187 Selected=0xEC5E699D", - "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=200,98 Split=X Selected=0x685782FF", - "DockNode ID=0x00000007 Parent=0x00000004 SizeRef=86,179 Selected=0x65402E70", - "DockNode ID=0x00000008 Parent=0x00000004 SizeRef=90,179 Selected=0x685782FF", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1077,654 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "645", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1080", - "xpos": "805", - "ypos": "412" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "221", - "Column 1 Width": "105", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard//Front Left": { - "Collapsed": "0", - "Pos": "757,85", - "Size": "200,200" - }, - "###/SmartDashboard/FlushOften": { - "Collapsed": "0", - "Pos": "24,621", - "Size": "200,48" - }, - "###/SmartDashboard/Front Left": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "22,168", - "Size": "200,48" - }, - "###/SmartDashboard/Module/Front Left": { - "Collapsed": "0", - "Pos": "948,35", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Front Right": { - "Collapsed": "0", - "Pos": "950,236", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Left": { - "Collapsed": "0", - "Pos": "746,36", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Right": { - "Collapsed": "0", - "Pos": "746,238", - "Size": "200,200" - }, - "###/SmartDashboard/Module0": { - "Collapsed": "0", - "Pos": "721,72", - "Size": "103,107" - }, - "###/SmartDashboard/Module1": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "200,48" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "200,48" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "294,31", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "200,48" - }, - "###/SmartDashboard/Swerve Viz/Front Left": { - "Collapsed": "0", - "DockId": "0x00000009,0", - "Pos": "514,209", - "Size": "93,94" - }, - "###/SmartDashboard/Swerve Viz/Front Right": { - "Collapsed": "0", - "DockId": "0x00000008,0", - "Pos": "511,305", - "Size": "96,93" - }, - "###/SmartDashboard/Swerve Viz/Rear Left": { - "Collapsed": "0", - "DockId": "0x00000005,0", - "Pos": "417,209", - "Size": "95,94" - }, - "###/SmartDashboard/Swerve Viz/Rear Right": { - "Collapsed": "0", - "DockId": "0x00000007,0", - "Pos": "417,305", - "Size": "92,93" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "23,372", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "200,48" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "23,572", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,572", - "Size": "200,48" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "501,32", - "Size": "200,200" - }, - "###/SmartDashboard/swerve/Front Left": { - "Collapsed": "0", - "Pos": "736,136", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "280,20", - "Size": "342,186" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "246,249", - "Size": "382,321" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "14,20", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "631,35", - "Size": "442,582" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "49,72" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1077,654" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/mechanisms/glass.json b/comp/dashboards/mechanisms/glass.json deleted file mode 100644 index 1b7fa6e..0000000 --- a/comp/dashboards/mechanisms/glass.json +++ /dev/null @@ -1,421 +0,0 @@ -{ - "NetworkTables": { - "Front Left": { - "Drive": { - "Simulated Encoder": { - "open": true - }, - "Simulated Motor": { - "open": true - }, - "open": true - }, - "Turning": { - "Position Servo": { - "open": true - }, - "open": true - } - }, - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "SmartDashboard": { - "Module": { - "Front Left": { - "Front Left": { - "drive": { - "open": true - }, - "open": true, - "steer": { - "open": true - } - } - }, - "open": true - }, - "Rear Right": { - "Rear Right": { - "drive": { - "open": true - } - }, - "open": true - }, - "SideView": { - "SideRoot": { - "Boom": { - "open": true - } - } - } - }, - "arm": { - "lower": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "upper": { - "open": true - } - }, - "combined": true, - "drive": { - "open": true, - "simulated_motor": { - "open": true - } - }, - "encoder": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "field": { - "double[]##v_/field/robot": { - "open": true - } - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - }, - "SmartDashboard": { - "Manual Drive Mode": { - "open": false - }, - "Telemetry Level": { - "open": false - }, - "open": false - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "transitory": { - "FMSInfo": { - "open": false - }, - "Holonomic3": { - "error": { - "open": false - }, - "measurement": { - "open": false - }, - "open": false, - "setpoint": { - "open": false - }, - "u_FB": { - "open": false - }, - "u_FF": { - "open": false - } - }, - "SmartDashboard": { - "Swerve Module Front Left": { - "open": false - }, - "Swerve Module Front Right": { - "open": false - } - }, - "center": { - "open": false - }, - "circle": { - "center": { - "open": false - }, - "open": false, - "reference": { - "open": false, - "theta": { - "open": false - } - }, - "target": { - "open": false - }, - "x_state": { - "open": false - }, - "y_state": { - "open": false - } - }, - "current pose": { - "open": false - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": false - } - }, - "position servo Front Left": { - "open": false - }, - "position servo Front Right": { - "open": false - }, - "position servo Rear Left": { - "open": false - }, - "position servo Rear Right": { - "open": false - }, - "robot": { - "open": false - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard//Front Left": "Mechanism2d", - "/SmartDashboard//Front Right": "Mechanism2d", - "/SmartDashboard//Rear Left": "Mechanism2d", - "/SmartDashboard//Rear Right": "Mechanism2d", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Front Left": "Mechanism2d", - "/SmartDashboard/Front Right": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Module/Front Left": "Mechanism2d", - "/SmartDashboard/Module/Front Right": "Mechanism2d", - "/SmartDashboard/Module/Rear Left": "Mechanism2d", - "/SmartDashboard/Module/Rear Right": "Mechanism2d", - "/SmartDashboard/Module0": "Mechanism2d", - "/SmartDashboard/Module1": "Mechanism2d", - "/SmartDashboard/Module2": "Mechanism2d", - "/SmartDashboard/Module3": "Mechanism2d", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Rear Left": "Mechanism2d", - "/SmartDashboard/Rear Right": "Mechanism2d", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - "/SmartDashboard/swerve/Front Left": "Mechanism2d", - "/SmartDashboard/swerve/Front Right": "Mechanism2d", - "/SmartDashboard/swerve/Rear Left": "Mechanism2d", - "/SmartDashboard/swerve/Rear Right": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Motion Profile": { - "window": { - "visible": true - } - }, - "/SmartDashboard/OscillateDirect": { - "window": { - "visible": true - } - }, - "/SmartDashboard/SideView": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Simple Manual Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopDrive": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopSteering": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseInitialVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/SmartDashboard/elevator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "selectable": false - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - } -} diff --git a/comp/dashboards/swerve modules/glass-window.json b/comp/dashboards/swerve modules/glass-window.json deleted file mode 100644 index c3812f2..0000000 --- a/comp/dashboards/swerve modules/glass-window.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=22,168 Size=200,48", - "DockNode ID=0x00000002 Pos=417,209 Size=190,189 Split=Y", - "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=200,100 Split=X Selected=0x9698D817", - "DockNode ID=0x00000005 Parent=0x00000003 SizeRef=177,187 Selected=0x9698D817", - "DockNode ID=0x00000009 Parent=0x00000003 SizeRef=174,187 Selected=0xEC5E699D", - "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=200,98 Split=X Selected=0x685782FF", - "DockNode ID=0x00000007 Parent=0x00000004 SizeRef=86,179 Selected=0x65402E70", - "DockNode ID=0x00000008 Parent=0x00000004 SizeRef=90,179 Selected=0x685782FF", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1078,625 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "645", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1080", - "xpos": "833", - "ypos": "362" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "221", - "Column 1 Width": "105", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard//Front Left": { - "Collapsed": "0", - "Pos": "757,85", - "Size": "200,200" - }, - "###/SmartDashboard/Front Left": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "22,168", - "Size": "200,48" - }, - "###/SmartDashboard/Module/Front Left": { - "Collapsed": "0", - "Pos": "948,35", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Front Right": { - "Collapsed": "0", - "Pos": "950,236", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Left": { - "Collapsed": "0", - "Pos": "746,36", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Right": { - "Collapsed": "0", - "Pos": "746,238", - "Size": "200,200" - }, - "###/SmartDashboard/Module0": { - "Collapsed": "0", - "Pos": "721,72", - "Size": "103,107" - }, - "###/SmartDashboard/Module1": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "200,48" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "200,48" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "727,370", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "200,48" - }, - "###/SmartDashboard/Swerve Viz/Front Left": { - "Collapsed": "0", - "DockId": "0x00000009,0", - "Pos": "514,209", - "Size": "93,94" - }, - "###/SmartDashboard/Swerve Viz/Front Right": { - "Collapsed": "0", - "DockId": "0x00000008,0", - "Pos": "511,305", - "Size": "96,93" - }, - "###/SmartDashboard/Swerve Viz/Rear Left": { - "Collapsed": "0", - "DockId": "0x00000005,0", - "Pos": "417,209", - "Size": "95,94" - }, - "###/SmartDashboard/Swerve Viz/Rear Right": { - "Collapsed": "0", - "DockId": "0x00000007,0", - "Pos": "417,305", - "Size": "92,93" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "23,372", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "200,48" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "23,572", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,572", - "Size": "200,48" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/swerve/Front Left": { - "Collapsed": "0", - "Pos": "736,136", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "280,20", - "Size": "342,186" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "248,415", - "Size": "377,204" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "14,20", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "631,35", - "Size": "442,582" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1078,625" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/swerve modules/glass.json b/comp/dashboards/swerve modules/glass.json deleted file mode 100644 index 86b9b3e..0000000 --- a/comp/dashboards/swerve modules/glass.json +++ /dev/null @@ -1,433 +0,0 @@ -{ - "NetworkTables": { - "Front Left": { - "Drive": { - "Simulated Encoder": { - "open": true - }, - "Simulated Motor": { - "open": true - }, - "open": true - }, - "Turning": { - "Position Servo": { - "open": true - }, - "open": true - }, - "open": true - }, - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "SmartDashboard": { - "Module": { - "Front Left": { - "Front Left": { - "drive": { - "open": true - }, - "open": true, - "steer": { - "open": true - } - } - }, - "open": true - }, - "Rear Right": { - "Rear Right": { - "drive": { - "open": true - } - }, - "open": true - }, - "SideView": { - "SideRoot": { - "Boom": { - "open": true - } - } - } - }, - "arm": { - "lower": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "upper": { - "open": true - } - }, - "combined": true, - "drive": { - "open": true, - "simulated_motor": { - "open": true - } - }, - "encoder": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "field": { - "double[]##v_/field/robot": { - "open": true - } - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard//Front Left": "Mechanism2d", - "/SmartDashboard//Front Right": "Mechanism2d", - "/SmartDashboard//Rear Left": "Mechanism2d", - "/SmartDashboard//Rear Right": "Mechanism2d", - "/SmartDashboard/Front Left": "Mechanism2d", - "/SmartDashboard/Front Right": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Module/Front Left": "Mechanism2d", - "/SmartDashboard/Module/Front Right": "Mechanism2d", - "/SmartDashboard/Module/Rear Left": "Mechanism2d", - "/SmartDashboard/Module/Rear Right": "Mechanism2d", - "/SmartDashboard/Module0": "Mechanism2d", - "/SmartDashboard/Module1": "Mechanism2d", - "/SmartDashboard/Module2": "Mechanism2d", - "/SmartDashboard/Module3": "Mechanism2d", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/Rear Left": "Mechanism2d", - "/SmartDashboard/Rear Right": "Mechanism2d", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - "/SmartDashboard/swerve/Front Left": "Mechanism2d", - "/SmartDashboard/swerve/Front Right": "Mechanism2d", - "/SmartDashboard/swerve/Rear Left": "Mechanism2d", - "/SmartDashboard/swerve/Rear Right": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Motion Profile": { - "window": { - "visible": true - } - }, - "/SmartDashboard/OscillateDirect": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Simple Manual Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopDrive": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopSteering": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseInitialVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "selectable": false - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "legend": false, - "name": "Steering error", - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Front Left/Turning/Position Servo/Controller Position Error" - } - ] - }, - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "legend": false, - "lockPrevX": true, - "name": "Steering goal and setpoint", - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Front Left/Turning/Position Servo/Goal" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Front Left/Turning/Position Servo/Setpoint" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/Front Left/Turning/Position Servo/Measurement" - } - ] - }, - { - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 172, - "legend": false, - "lockPrevX": true, - "name": "Cartesian error", - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Holonomic3/error/x" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Holonomic3/error/y" - } - ] - } - ] - } - } -} diff --git a/comp/dashboards/target lock/glass-window.json b/comp/dashboards/target lock/glass-window.json deleted file mode 100644 index bde5a94..0000000 --- a/comp/dashboards/target lock/glass-window.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=22,168 Size=200,48", - "DockNode ID=0x00000002 Pos=831,455 Size=190,194 Split=Y", - "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=200,100 Split=X Selected=0x9698D817", - "DockNode ID=0x00000005 Parent=0x00000003 SizeRef=177,187 Selected=0x9698D817", - "DockNode ID=0x00000009 Parent=0x00000003 SizeRef=174,187 Selected=0xEC5E699D", - "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=200,98 Split=X Selected=0x685782FF", - "DockNode ID=0x00000007 Parent=0x00000004 SizeRef=86,179 Selected=0x65402E70", - "DockNode ID=0x00000008 Parent=0x00000004 SizeRef=90,179 Selected=0x685782FF", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1078,725 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "741", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1078", - "xpos": "807", - "ypos": "256" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "221", - "Column 1 Width": "105", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard//Front Left": { - "Collapsed": "0", - "Pos": "757,85", - "Size": "200,200" - }, - "###/SmartDashboard/FlushOften": { - "Collapsed": "0", - "Pos": "20,573", - "Size": "200,48" - }, - "###/SmartDashboard/Front Left": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "22,168", - "Size": "200,48" - }, - "###/SmartDashboard/Module/Front Left": { - "Collapsed": "0", - "Pos": "948,35", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Front Right": { - "Collapsed": "0", - "Pos": "950,236", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Left": { - "Collapsed": "0", - "Pos": "746,36", - "Size": "200,200" - }, - "###/SmartDashboard/Module/Rear Right": { - "Collapsed": "0", - "Pos": "746,238", - "Size": "200,200" - }, - "###/SmartDashboard/Module0": { - "Collapsed": "0", - "Pos": "721,72", - "Size": "103,107" - }, - "###/SmartDashboard/Module1": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "200,48" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "200,48" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "842,364", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "200,48" - }, - "###/SmartDashboard/Swerve Viz/Front Left": { - "Collapsed": "0", - "DockId": "0x00000009,0", - "Pos": "928,455", - "Size": "93,97" - }, - "###/SmartDashboard/Swerve Viz/Front Right": { - "Collapsed": "0", - "DockId": "0x00000008,0", - "Pos": "925,554", - "Size": "96,95" - }, - "###/SmartDashboard/Swerve Viz/Rear Left": { - "Collapsed": "0", - "DockId": "0x00000005,0", - "Pos": "831,455", - "Size": "95,97" - }, - "###/SmartDashboard/Swerve Viz/Rear Right": { - "Collapsed": "0", - "DockId": "0x00000007,0", - "Pos": "831,554", - "Size": "92,95" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "23,372", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "200,48" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "21,680", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,626", - "Size": "200,48" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/swerve/Front Left": { - "Collapsed": "0", - "Pos": "736,136", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "280,21", - "Size": "624,336" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "248,415", - "Size": "377,204" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "14,20", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "631,35", - "Size": "442,582" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "49,72" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1078,725" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/target lock/glass.json b/comp/dashboards/target lock/glass.json deleted file mode 100644 index b493650..0000000 --- a/comp/dashboards/target lock/glass.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "NetworkTables": { - "Front Left": { - "Drive": { - "open": true - }, - "Turning": { - "Position Servo": { - "open": true - }, - "open": true - } - }, - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "SmartDashboard": { - "Module": { - "Front Left": { - "Front Left": { - "drive": { - "open": true - }, - "open": true, - "steer": { - "open": true - } - } - }, - "open": true - }, - "Rear Right": { - "Rear Right": { - "drive": { - "open": true - } - }, - "open": true - }, - "SideView": { - "SideRoot": { - "Boom": { - "open": true - } - } - } - }, - "arm": { - "lower": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "upper": { - "open": true - } - }, - "combined": true, - "drive": { - "open": true, - "simulated_motor": { - "open": true - } - }, - "encoder": { - "Simulated Encoder": { - "open": true - }, - "open": true - }, - "field": { - "double[]##v_/field/robot": { - "open": true - } - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - }, - "SmartDashboard": { - "Manual Drive Mode": { - "open": false - }, - "Telemetry Level": { - "open": false - }, - "open": false - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "transitory": { - "FMSInfo": { - "open": false - }, - "Holonomic3": { - "error": { - "open": false - }, - "measurement": { - "open": false - }, - "open": false, - "setpoint": { - "open": false - }, - "u_FB": { - "open": false - }, - "u_FF": { - "open": false - } - }, - "SmartDashboard": { - "Swerve Module Front Left": { - "open": false - }, - "Swerve Module Front Right": { - "open": false - } - }, - "center": { - "open": false - }, - "circle": { - "center": { - "open": false - }, - "open": false, - "reference": { - "open": false, - "theta": { - "open": false - } - }, - "target": { - "open": false - }, - "x_state": { - "open": false - }, - "y_state": { - "open": false - } - }, - "current pose": { - "open": false - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": false - } - }, - "position servo Front Left": { - "open": false - }, - "position servo Front Right": { - "open": false - }, - "position servo Rear Left": { - "open": false - }, - "position servo Rear Right": { - "open": false - }, - "robot": { - "open": false - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard//Front Left": "Mechanism2d", - "/SmartDashboard//Front Right": "Mechanism2d", - "/SmartDashboard//Rear Left": "Mechanism2d", - "/SmartDashboard//Rear Right": "Mechanism2d", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Front Left": "Mechanism2d", - "/SmartDashboard/Front Right": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Module/Front Left": "Mechanism2d", - "/SmartDashboard/Module/Front Right": "Mechanism2d", - "/SmartDashboard/Module/Rear Left": "Mechanism2d", - "/SmartDashboard/Module/Rear Right": "Mechanism2d", - "/SmartDashboard/Module0": "Mechanism2d", - "/SmartDashboard/Module1": "Mechanism2d", - "/SmartDashboard/Module2": "Mechanism2d", - "/SmartDashboard/Module3": "Mechanism2d", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Rear Left": "Mechanism2d", - "/SmartDashboard/Rear Right": "Mechanism2d", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - "/SmartDashboard/swerve/Front Left": "Mechanism2d", - "/SmartDashboard/swerve/Front Right": "Mechanism2d", - "/SmartDashboard/swerve/Rear Left": "Mechanism2d", - "/SmartDashboard/swerve/Rear Right": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/FlushOften": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Motion Profile": { - "window": { - "visible": true - } - }, - "/SmartDashboard/OscillateDirect": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Simple Manual Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Front Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Left": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Swerve Viz/Rear Right": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopDrive": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopSteering": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseInitialVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/field": { - "ball": { - "arrows": false, - "length": 0.25, - "style": "Box/Image", - "weight": 1.0, - "width": 0.25 - }, - "robot": { - "selectable": false - }, - "target": { - "arrows": false, - "color": [ - 0.0, - 255.0, - 0.0, - 255.0 - ], - "length": 0.5, - "selectable": false, - "weight": 1.0, - "width": 0.5 - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - } -} diff --git a/comp/dashboards/trajectory/glass-window.json b/comp/dashboards/trajectory/glass-window.json deleted file mode 100644 index 673b704..0000000 --- a/comp/dashboards/trajectory/glass-window.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockNode ID=0x00000001 Pos=22,168 Size=200,48", - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1078,693 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "709", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1078", - "xpos": "838", - "ypos": "303" - } - }, - "Table": { - "0x542B5671,2": { - "Column 0 Width": "221", - "Column 1 Width": "105", - "RefScale": "10" - }, - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "DockId": "0x00000001,0", - "Pos": "22,168", - "Size": "200,48" - }, - "###/SmartDashboard/Motion Profile": { - "Collapsed": "0", - "Pos": "21,220", - "Size": "200,48" - }, - "###/SmartDashboard/OscillateDirect": { - "Collapsed": "0", - "Pos": "23,270", - "Size": "200,48" - }, - "###/SmartDashboard/SideView": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/SmartDashboard/Simple Manual Mode": { - "Collapsed": "0", - "Pos": "24,321", - "Size": "200,48" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "23,372", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopDrive": { - "Collapsed": "0", - "Pos": "23,424", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopSteering": { - "Collapsed": "0", - "Pos": "22,474", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "23,525", - "Size": "200,48" - }, - "###/SmartDashboard/UseInitialVelocity": { - "Collapsed": "0", - "Pos": "23,577", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "22,630", - "Size": "200,48" - }, - "###/SmartDashboard/elevator": { - "Collapsed": "0", - "Pos": "400,400", - "Size": "200,200" - }, - "###/field": { - "Collapsed": "0", - "Pos": "398,21", - "Size": "413,219" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "401,256", - "Size": "432,437" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "20,20", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "255,21", - "Size": "372,172" - }, - "About": { - "Collapsed": "0", - "Pos": "87,237", - "Size": "233,112" - }, - "Dear ImGui Debug Log": { - "Collapsed": "0", - "Pos": "78,96", - "Size": "503,480" - }, - "Dear ImGui Demo": { - "Collapsed": "0", - "Pos": "650,20", - "Size": "550,680" - }, - "Dear ImGui Metrics/Debugger": { - "Collapsed": "0", - "Pos": "788,72", - "Size": "361,471" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1078,693" - }, - "Example: Console": { - "Collapsed": "0", - "Pos": "755,49", - "Size": "520,523" - }, - "Example: Log": { - "Collapsed": "0", - "Pos": "80,153", - "Size": "500,400" - } - } -} diff --git a/comp/dashboards/trajectory/glass.json b/comp/dashboards/trajectory/glass.json deleted file mode 100644 index 3527cae..0000000 --- a/comp/dashboards/trajectory/glass.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "NetworkTables": { - "Holonomic3": { - "measurement": { - "open": true - }, - "open": true - }, - "Rear Right": { - "drive velocity servo": { - "open": true, - "velocity servo": { - "open": true - } - } - }, - "combined": true, - "drive": { - "simulated_motor": { - "open": true - } - }, - "field": { - "double[]##v_/field/robot": { - "open": true - }, - "open": true - }, - "planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "open": true - }, - "precision": 3, - "pursuit_planner": { - "current state": { - "open": true - }, - "error": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - }, - "lookahead state": { - "open": true - }, - "lookahead translation": { - "open": true - }, - "pursuit speeds": { - "open": true - }, - "updated lookahead state": { - "open": true - } - }, - "ramsete_planner": { - "current state": { - "open": true, - "translation": { - "open": true - } - }, - "error": { - "open": true, - "translation": { - "open": true - } - }, - "open": true, - "setpoint": { - "open": true, - "posestate": { - "pose": { - "rotation": { - "open": true - } - } - } - } - }, - "retained": { - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - } - } - }, - "swerve": { - "pose": { - "open": true, - "rotation": { - "open": true - }, - "translation": { - "open": true - } - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Motion Profile": { - "window": { - "visible": true - } - }, - "/SmartDashboard/OscillateDirect": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Simple Manual Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopDrive": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopSteering": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseInitialVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "selectable": false - }, - "trajectory": { - "arrows": false, - "color": [ - 255.0, - 152.10525512695313, - 0.0, - 255.0 - ], - "selectable": false, - "style": "Line", - "weight": 1.0 - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "localhost" - } -} diff --git a/comp/swerve100/example server b/comp/example server similarity index 100% rename from comp/swerve100/example server rename to comp/example server diff --git a/comp/swerve100/gradle.properties b/comp/gradle.properties similarity index 100% rename from comp/swerve100/gradle.properties rename to comp/gradle.properties diff --git a/comp/gradle/wrapper/gradle-wrapper.jar b/comp/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..a4b76b9 Binary files /dev/null and b/comp/gradle/wrapper/gradle-wrapper.jar differ diff --git a/comp/swerve100/gradle/wrapper/gradle-wrapper.properties b/comp/gradle/wrapper/gradle-wrapper.properties similarity index 91% rename from comp/swerve100/gradle/wrapper/gradle-wrapper.properties rename to comp/gradle/wrapper/gradle-wrapper.properties index c5c2706..8e975a5 100644 --- a/comp/swerve100/gradle/wrapper/gradle-wrapper.properties +++ b/comp/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/studies/NeoEncoderTest/gradlew b/comp/gradlew old mode 100644 new mode 100755 similarity index 96% rename from studies/NeoEncoderTest/gradlew rename to comp/gradlew index 1aa94a4..f5feea6 --- a/studies/NeoEncoderTest/gradlew +++ b/comp/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/studies/Armproject2-Imported/gradlew.bat b/comp/gradlew.bat similarity index 88% rename from studies/Armproject2-Imported/gradlew.bat rename to comp/gradlew.bat index 93e3f59..9b42019 100644 --- a/studies/Armproject2-Imported/gradlew.bat +++ b/comp/gradlew.bat @@ -1,92 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/studies/Armproject2-Imported/settings.gradle b/comp/settings.gradle similarity index 93% rename from studies/Armproject2-Imported/settings.gradle rename to comp/settings.gradle index d94f73c..7cab49b 100644 --- a/studies/Armproject2-Imported/settings.gradle +++ b/comp/settings.gradle @@ -1,30 +1,30 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); +import org.gradle.internal.os.OperatingSystem + +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + String frcYear = '2025' + File frcHome + if (OperatingSystem.current().isWindows()) { + String publicFolder = System.getenv('PUBLIC') + if (publicFolder == null) { + publicFolder = "C:\\Users\\Public" + } + def homeRoot = new File(publicFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) + } else { + def userFolder = System.getProperty("user.home") + def homeRoot = new File(userFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) + } + def frcHomeMaven = new File(frcHome, 'maven') + maven { + name 'frcHome' + url frcHomeMaven + } + } +} + +Properties props = System.getProperties(); +props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/comp/simgui/everything/simgui-ds.json b/comp/simgui-ds.json similarity index 100% rename from comp/simgui/everything/simgui-ds.json rename to comp/simgui-ds.json diff --git a/comp/simgui/everything/simgui-window.json b/comp/simgui/everything/simgui-window.json deleted file mode 100644 index 0b711ad..0000000 --- a/comp/simgui/everything/simgui-window.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "Docking": { - "Data": [] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "715", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1245", - "xpos": "346", - "ypos": "98" - } - }, - "Table": { - "0xE56EC1C2,4": { - "Column 0 Weight": "1.0000", - "Column 1 Weight": "1.0000", - "Column 2 Weight": "1.0000", - "Column 3 Weight": "1.0000" - } - }, - "Window": { - "###/FMSInfo": { - "Collapsed": "0", - "Pos": "261,422", - "Size": "145,140" - }, - "###/SmartDashboard/Driver Skill Level": { - "Collapsed": "0", - "Pos": "873,32", - "Size": "200,48" - }, - "###/SmartDashboard/Front Left_SwerveModule100": { - "Collapsed": "0", - "Pos": "763,240", - "Size": "200,200" - }, - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "Pos": "869,136", - "Size": "200,48" - }, - "###/SmartDashboard/Scheduler": { - "Collapsed": "0", - "Pos": "459,499", - "Size": "400,200" - }, - "###/SmartDashboard/ShowMode": { - "Collapsed": "0", - "Pos": "60,100", - "Size": "200,48" - }, - "###/SmartDashboard/Swerve Viz/Front Left_SwerveModule100": { - "Collapsed": "0", - "Pos": "706,220", - "Size": "200,200" - }, - "###/SmartDashboard/Swerve Viz/Swerve Modules_Front Left_Sw": { - "Collapsed": "0", - "Pos": "707,253", - "Size": "200,200" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "870,82", - "Size": "200,48" - }, - "###/field": { - "Collapsed": "0", - "Pos": "713,418", - "Size": "400,200" - }, - "###Addressable LEDs": { - "Collapsed": "0", - "Pos": "290,100", - "Size": "114,285" - }, - "###DIO": { - "Collapsed": "0", - "Pos": "728,121", - "Size": "129,68" - }, - "###FMS": { - "Collapsed": "0", - "Pos": "9,409", - "Size": "136,154" - }, - "###Joysticks": { - "Collapsed": "0", - "Pos": "7,577", - "Size": "616,132" - }, - "###Keyboard 1 Settings": { - "Collapsed": "0", - "Pos": "320,50", - "Size": "300,560" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "408,28", - "Size": "428,369" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "166,86", - "Size": "500,96" - }, - "###Other Devices": { - "Collapsed": "0", - "Pos": "683,13", - "Size": "166,463" - }, - "###RoboRIO": { - "Collapsed": "0", - "Pos": "5,125", - "Size": "97,128" - }, - "###System Joysticks": { - "Collapsed": "0", - "Pos": "631,522", - "Size": "151,182" - }, - "###Timing": { - "Collapsed": "0", - "Pos": "5,127", - "Size": "215,192" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "Robot State": { - "Collapsed": "0", - "Pos": "5,20", - "Size": "74,98" - } - } -} diff --git a/comp/simgui/everything/simgui.json b/comp/simgui/everything/simgui.json deleted file mode 100644 index 8c13899..0000000 --- a/comp/simgui/everything/simgui.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "HALProvider": { - "Addressable LEDs": { - "window": { - "visible": true - } - }, - "Other Devices": { - "window": { - "visible": false - } - } - }, - "NTProvider": { - "types": { - "/FMSInfo": "FMSInfo", - "/SmartDashboard/AmpSubsystem": "Mechanism2d", - "/SmartDashboard/AutoNoteDetection": "String Chooser", - "/SmartDashboard/DriveToNoteWithRotation": "String Chooser", - "/SmartDashboard/Driver Skill Level": "String Chooser", - "/SmartDashboard/DrumShooter": "Mechanism2d", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Front Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Front Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/FullStateTrajectoryFollower": "String Chooser", - "/SmartDashboard/HeedVision": "String Chooser", - "/SmartDashboard/IndexerSubsystem": "Mechanism2d", - "/SmartDashboard/Intake": "Mechanism2d", - "/SmartDashboard/IntakeRoller": "Mechanism2d", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/Rear Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Rear Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Shooter": "Mechanism2d", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/StickyHeading": "String Chooser", - "/SmartDashboard/Swerve Viz Front Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz Front Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz Rear Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz Rear Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz SimulatedSwerveModule100_Front Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz SimulatedSwerveModule100_Front Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz SimulatedSwerveModule100_Rear Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz SimulatedSwerveModule100_Rear Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Front Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Front Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Rear Left_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/SimulatedSwerveModule100_Rear Right_SimulatedSwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Front Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Left_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Swerve Modules_Rear Right_SwerveModule100": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/Triangulate": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/annunciator": "Mechanism2d", - "/field": "Field2d" - }, - "windows": { - "/FMSInfo": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Driver Skill Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Front Left_SwerveModule100": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/field": { - "bottom": 1476, - "height": 8.210550308227539, - "left": 150, - "right": 2961, - "top": 79, - "width": 16.541748046875, - "window": { - "visible": true - } - } - } - }, - "NetworkTables": { - "retained": { - "Command100": { - "DriveManually": { - "open": false - }, - "Oscillate": { - "open": true - } - }, - "Experiments": { - "string[]##v_/Experiments/enabled": { - "open": true - } - }, - "Feeder": { - "Feed": { - "open": true - } - }, - "Front Right": { - "Drive": { - "Encoder100": { - "open": true - }, - "Motor100": { - "open": true - }, - "VelocityServo": { - "open": true - }, - "open": true - }, - "Turning": { - "Encoder100": { - "open": true - }, - "Motor100": { - "open": true - }, - "PositionServo": { - "open": true - } - } - }, - "Intake": { - "Center Wheels": { - "open": true - }, - "Intake Roller": { - "open": true - } - }, - "Rear Right": { - "Turning": { - "PositionServo": { - "Goal": { - "open": true - }, - "Setpoint": { - "open": true - }, - "open": true - } - } - }, - "SimulatedSwerveModule100": { - "Front Left": { - "Drive": { - "OutboardVelocityServo": { - "open": true - }, - "SimulatedEncoder": { - "open": true - }, - "SimulatedMotor": { - "open": true - }, - "open": true - }, - "Turning": { - "PositionServo": { - "Goal": { - "open": true - }, - "Setpoint": { - "open": true - }, - "open": true - }, - "SimulatedEncoder": { - "open": true - }, - "SimulatedMotor": { - "open": true - }, - "open": true - }, - "open": true - } - }, - "Swerve Modules": { - "Front Left": { - "Turning": { - "PositionServo": { - "open": true - }, - "open": true - } - } - }, - "SwerveDriveSubsystem": { - "open": true, - "pose": { - "open": true, - "translation": { - "open": true - } - } - }, - "SwerveLocal": { - "implied speed": { - "open": true - } - }, - "field": { - "double[]##v_/field/robot": { - "open": true - }, - "open": true - } - }, - "transitory": { - "SmartDashboard": { - "Scheduler": { - "int[]##v_/SmartDashboard/Scheduler/Ids": { - "open": false - }, - "string[]##v_/SmartDashboard/Scheduler/Names": { - "open": false - } - }, - "Shooter": { - "open": true, - "root": { - "Shooter": { - "open": true - }, - "open": true - } - }, - "Swerve Viz": { - "Swerve Modules_Front Left_SwerveModule100": { - "Swerve Modules_Front Left_SwerveModule100": { - "open": true - }, - "open": true - }, - "open": true - } - } - } - } -} diff --git a/comp/swerve100/src/main/deploy/2023-chargedup.json b/comp/src/main/deploy/2023-chargedup.json similarity index 100% rename from comp/swerve100/src/main/deploy/2023-chargedup.json rename to comp/src/main/deploy/2023-chargedup.json diff --git a/comp/swerve100/src/main/deploy/2023-studies.json b/comp/src/main/deploy/2023-studies.json similarity index 100% rename from comp/swerve100/src/main/deploy/2023-studies.json rename to comp/src/main/deploy/2023-studies.json diff --git a/comp/swerve100/src/main/deploy/2024-crescendo.json b/comp/src/main/deploy/2024-crescendo.json similarity index 100% rename from comp/swerve100/src/main/deploy/2024-crescendo.json rename to comp/src/main/deploy/2024-crescendo.json diff --git a/comp/swerve100/src/main/deploy/GoBackToStation.wpilib.json b/comp/src/main/deploy/GoBackToStation.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/GoBackToStation.wpilib.json rename to comp/src/main/deploy/GoBackToStation.wpilib.json diff --git a/comp/swerve100/src/main/deploy/GoToCube.wpilib.json b/comp/src/main/deploy/GoToCube.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/GoToCube.wpilib.json rename to comp/src/main/deploy/GoToCube.wpilib.json diff --git a/comp/swerve100/src/main/deploy/choreo/Note3to4.traj b/comp/src/main/deploy/choreo/Note3to4.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/Note3to4.traj rename to comp/src/main/deploy/choreo/Note3to4.traj diff --git a/comp/swerve100/src/main/deploy/choreo/centerAmp.traj b/comp/src/main/deploy/choreo/centerAmp.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/centerAmp.traj rename to comp/src/main/deploy/choreo/centerAmp.traj diff --git a/comp/swerve100/src/main/deploy/choreo/crossField.traj b/comp/src/main/deploy/choreo/crossField.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/crossField.traj rename to comp/src/main/deploy/choreo/crossField.traj diff --git a/comp/swerve100/src/main/deploy/choreo/curvyField.traj b/comp/src/main/deploy/choreo/curvyField.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/curvyField.traj rename to comp/src/main/deploy/choreo/curvyField.traj diff --git a/comp/swerve100/src/main/deploy/choreo/fourpiece.traj b/comp/src/main/deploy/choreo/fourpiece.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/fourpiece.traj rename to comp/src/main/deploy/choreo/fourpiece.traj diff --git a/comp/swerve100/src/main/deploy/choreo/fourpiecev2.traj b/comp/src/main/deploy/choreo/fourpiecev2.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/fourpiecev2.traj rename to comp/src/main/deploy/choreo/fourpiecev2.traj diff --git a/comp/swerve100/src/main/deploy/choreo/fourpiecev3.traj b/comp/src/main/deploy/choreo/fourpiecev3.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/fourpiecev3.traj rename to comp/src/main/deploy/choreo/fourpiecev3.traj diff --git a/comp/swerve100/src/main/deploy/choreo/sideAmp.traj b/comp/src/main/deploy/choreo/sideAmp.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/sideAmp.traj rename to comp/src/main/deploy/choreo/sideAmp.traj diff --git a/comp/swerve100/src/main/deploy/choreo/test.traj b/comp/src/main/deploy/choreo/test.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/test.traj rename to comp/src/main/deploy/choreo/test.traj diff --git a/comp/swerve100/src/main/deploy/choreo/test2.chor b/comp/src/main/deploy/choreo/test2.chor similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/test2.chor rename to comp/src/main/deploy/choreo/test2.chor diff --git a/comp/swerve100/src/main/deploy/choreo/teststraightline.traj b/comp/src/main/deploy/choreo/teststraightline.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/teststraightline.traj rename to comp/src/main/deploy/choreo/teststraightline.traj diff --git a/comp/swerve100/src/main/deploy/choreo/testv3.traj b/comp/src/main/deploy/choreo/testv3.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/testv3.traj rename to comp/src/main/deploy/choreo/testv3.traj diff --git a/comp/swerve100/src/main/deploy/choreo/testv4.traj b/comp/src/main/deploy/choreo/testv4.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/testv4.traj rename to comp/src/main/deploy/choreo/testv4.traj diff --git a/comp/swerve100/src/main/deploy/choreo/twopiece.traj b/comp/src/main/deploy/choreo/twopiece.traj similarity index 100% rename from comp/swerve100/src/main/deploy/choreo/twopiece.traj rename to comp/src/main/deploy/choreo/twopiece.traj diff --git a/comp/swerve100/src/main/deploy/e.tct b/comp/src/main/deploy/e.tct similarity index 100% rename from comp/swerve100/src/main/deploy/e.tct rename to comp/src/main/deploy/e.tct diff --git a/comp/swerve100/src/main/deploy/example.txt b/comp/src/main/deploy/example.txt similarity index 100% rename from comp/swerve100/src/main/deploy/example.txt rename to comp/src/main/deploy/example.txt diff --git a/comp/swerve100/src/main/deploy/output/output/BlueLeftExit.wpilib.json b/comp/src/main/deploy/output/output/BlueLeftExit.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/BlueLeftExit.wpilib.json rename to comp/src/main/deploy/output/output/BlueLeftExit.wpilib.json diff --git a/comp/swerve100/src/main/deploy/output/output/BlueMiddleCharge.wpilib.json b/comp/src/main/deploy/output/output/BlueMiddleCharge.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/BlueMiddleCharge.wpilib.json rename to comp/src/main/deploy/output/output/BlueMiddleCharge.wpilib.json diff --git a/comp/swerve100/src/main/deploy/output/output/BlueRightExit.wpilib.json b/comp/src/main/deploy/output/output/BlueRightExit.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/BlueRightExit.wpilib.json rename to comp/src/main/deploy/output/output/BlueRightExit.wpilib.json diff --git a/comp/swerve100/src/main/deploy/output/output/RedLeftExit.wpilib.json b/comp/src/main/deploy/output/output/RedLeftExit.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/RedLeftExit.wpilib.json rename to comp/src/main/deploy/output/output/RedLeftExit.wpilib.json diff --git a/comp/swerve100/src/main/deploy/output/output/RedMidExit.wpilib.json b/comp/src/main/deploy/output/output/RedMidExit.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/RedMidExit.wpilib.json rename to comp/src/main/deploy/output/output/RedMidExit.wpilib.json diff --git a/comp/swerve100/src/main/deploy/output/output/RedRightExit.wpilib.json b/comp/src/main/deploy/output/output/RedRightExit.wpilib.json similarity index 100% rename from comp/swerve100/src/main/deploy/output/output/RedRightExit.wpilib.json rename to comp/src/main/deploy/output/output/RedRightExit.wpilib.json diff --git a/comp/swerve100/src/main/deploy/practice-field.json b/comp/src/main/deploy/practice-field.json similarity index 100% rename from comp/swerve100/src/main/deploy/practice-field.json rename to comp/src/main/deploy/practice-field.json diff --git a/comp/swerve100/src/main/deploy/test.txt b/comp/src/main/deploy/test.txt similarity index 100% rename from comp/swerve100/src/main/deploy/test.txt rename to comp/src/main/deploy/test.txt diff --git a/comp/swerve100/src/main/etc/sysctl.conf b/comp/src/main/etc/sysctl.conf similarity index 100% rename from comp/swerve100/src/main/etc/sysctl.conf rename to comp/src/main/etc/sysctl.conf diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/Amp.java b/comp/src/main/java/org/team100/frc2024/Amp.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/Amp.java rename to comp/src/main/java/org/team100/frc2024/Amp.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/CompSensors.java b/comp/src/main/java/org/team100/frc2024/CompSensors.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/CompSensors.java rename to comp/src/main/java/org/team100/frc2024/CompSensors.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/Empty.java b/comp/src/main/java/org/team100/frc2024/Empty.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/Empty.java rename to comp/src/main/java/org/team100/frc2024/Empty.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/FieldConstants.java b/comp/src/main/java/org/team100/frc2024/FieldConstants.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/FieldConstants.java rename to comp/src/main/java/org/team100/frc2024/FieldConstants.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsBlue.java b/comp/src/main/java/org/team100/frc2024/FieldConstantsBlue.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsBlue.java rename to comp/src/main/java/org/team100/frc2024/FieldConstantsBlue.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsFactory.java b/comp/src/main/java/org/team100/frc2024/FieldConstantsFactory.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsFactory.java rename to comp/src/main/java/org/team100/frc2024/FieldConstantsFactory.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsRed.java b/comp/src/main/java/org/team100/frc2024/FieldConstantsRed.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/FieldConstantsRed.java rename to comp/src/main/java/org/team100/frc2024/FieldConstantsRed.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/LEDSubsystem.java b/comp/src/main/java/org/team100/frc2024/LEDSubsystem.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/LEDSubsystem.java rename to comp/src/main/java/org/team100/frc2024/LEDSubsystem.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/Main.java b/comp/src/main/java/org/team100/frc2024/Main.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/Main.java rename to comp/src/main/java/org/team100/frc2024/Main.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/MockSensors.java b/comp/src/main/java/org/team100/frc2024/MockSensors.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/MockSensors.java rename to comp/src/main/java/org/team100/frc2024/MockSensors.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/README.md b/comp/src/main/java/org/team100/frc2024/README.md similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/README.md rename to comp/src/main/java/org/team100/frc2024/README.md diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/Robot.java b/comp/src/main/java/org/team100/frc2024/Robot.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/Robot.java rename to comp/src/main/java/org/team100/frc2024/Robot.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/RobotContainer.java b/comp/src/main/java/org/team100/frc2024/RobotContainer.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/RobotContainer.java rename to comp/src/main/java/org/team100/frc2024/RobotContainer.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java b/comp/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java similarity index 96% rename from comp/swerve100/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java rename to comp/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java index 985a31e..fe9c18b 100644 --- a/comp/swerve100/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java +++ b/comp/src/main/java/org/team100/frc2024/RobotContainerParkingLot.java @@ -6,7 +6,6 @@ import org.team100.lib.async.Async; import org.team100.lib.async.AsyncFactory; -import org.team100.lib.commands.drivetrain.CommandMaker; import org.team100.lib.commands.drivetrain.DriveToState101; import org.team100.lib.commands.drivetrain.DriveToWaypoint100; import org.team100.lib.commands.drivetrain.FullStateTrajectoryListCommand; @@ -49,9 +48,6 @@ import org.team100.lib.trajectory.TrajectoryMaker; import org.team100.lib.visualization.TrajectoryVisualization; -import com.choreo.lib.Choreo; -import com.choreo.lib.ChoreoTrajectory; - import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.wpilibj.RobotController; import edu.wpi.first.wpilibj.Timer; @@ -139,11 +135,6 @@ public class RobotContainerParkingLot implements Glassy { m_driveInALittleSquare = new DriveInALittleSquare(m_drive); whileTrue(driverControl::never, m_driveInALittleSquare); - /////////////////////// - // trying the new ChoreoLib - ChoreoTrajectory choreoTrajectory = Choreo.getTrajectory("test"); - whileTrue(driverControl::never, CommandMaker.choreo(choreoTrajectory, m_drive, viz)); - /////////////////////// whileTrue(driverControl::never, new DriveInACircle(driveLogger, m_drive, controller, -1, viz)); diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/SensorInterface.java b/comp/src/main/java/org/team100/frc2024/SensorInterface.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/SensorInterface.java rename to comp/src/main/java/org/team100/frc2024/SensorInterface.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/TestCommand.java b/comp/src/main/java/org/team100/frc2024/TestCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/TestCommand.java rename to comp/src/main/java/org/team100/frc2024/TestCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/AutonCommand.java b/comp/src/main/java/org/team100/frc2024/commands/AutonCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/AutonCommand.java rename to comp/src/main/java/org/team100/frc2024/commands/AutonCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/Feed.java b/comp/src/main/java/org/team100/frc2024/commands/Feed.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/Feed.java rename to comp/src/main/java/org/team100/frc2024/commands/Feed.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/Lob.java b/comp/src/main/java/org/team100/frc2024/commands/Lob.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/Lob.java rename to comp/src/main/java/org/team100/frc2024/commands/Lob.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/ShootPreload.java b/comp/src/main/java/org/team100/frc2024/commands/ShootPreload.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/ShootPreload.java rename to comp/src/main/java/org/team100/frc2024/commands/ShootPreload.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/climber/HomeClimber.java b/comp/src/main/java/org/team100/frc2024/commands/climber/HomeClimber.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/climber/HomeClimber.java rename to comp/src/main/java/org/team100/frc2024/commands/climber/HomeClimber.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/DriveWithProfileNote.java b/comp/src/main/java/org/team100/frc2024/commands/drivetrain/DriveWithProfileNote.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/DriveWithProfileNote.java rename to comp/src/main/java/org/team100/frc2024/commands/drivetrain/DriveWithProfileNote.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithAmpLock.java b/comp/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithAmpLock.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithAmpLock.java rename to comp/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithAmpLock.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithShooterLock.java b/comp/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithShooterLock.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithShooterLock.java rename to comp/src/main/java/org/team100/frc2024/commands/drivetrain/manual/ManualWithShooterLock.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/config/AutonChooser.java b/comp/src/main/java/org/team100/frc2024/config/AutonChooser.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/config/AutonChooser.java rename to comp/src/main/java/org/team100/frc2024/config/AutonChooser.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/AmpUtil.java b/comp/src/main/java/org/team100/frc2024/motion/AmpUtil.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/AmpUtil.java rename to comp/src/main/java/org/team100/frc2024/motion/AmpUtil.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/AutoMaker.java b/comp/src/main/java/org/team100/frc2024/motion/AutoMaker.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/AutoMaker.java rename to comp/src/main/java/org/team100/frc2024/motion/AutoMaker.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/CommandGroup.java b/comp/src/main/java/org/team100/frc2024/motion/CommandGroup.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/CommandGroup.java rename to comp/src/main/java/org/team100/frc2024/motion/CommandGroup.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/FeedSmart.java b/comp/src/main/java/org/team100/frc2024/motion/FeedSmart.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/FeedSmart.java rename to comp/src/main/java/org/team100/frc2024/motion/FeedSmart.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/FeedToAmp.java b/comp/src/main/java/org/team100/frc2024/motion/FeedToAmp.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/FeedToAmp.java rename to comp/src/main/java/org/team100/frc2024/motion/FeedToAmp.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/FeederSubsystem.java b/comp/src/main/java/org/team100/frc2024/motion/FeederSubsystem.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/FeederSubsystem.java rename to comp/src/main/java/org/team100/frc2024/motion/FeederSubsystem.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/IntakeSmart.java b/comp/src/main/java/org/team100/frc2024/motion/IntakeSmart.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/IntakeSmart.java rename to comp/src/main/java/org/team100/frc2024/motion/IntakeSmart.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/IntakeWithSensor.java b/comp/src/main/java/org/team100/frc2024/motion/IntakeWithSensor.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/IntakeWithSensor.java rename to comp/src/main/java/org/team100/frc2024/motion/IntakeWithSensor.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/OuttakeCommand.java b/comp/src/main/java/org/team100/frc2024/motion/OuttakeCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/OuttakeCommand.java rename to comp/src/main/java/org/team100/frc2024/motion/OuttakeCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/ResetPoseAuto.java b/comp/src/main/java/org/team100/frc2024/motion/ResetPoseAuto.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/ResetPoseAuto.java rename to comp/src/main/java/org/team100/frc2024/motion/ResetPoseAuto.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/ShootSmart.java b/comp/src/main/java/org/team100/frc2024/motion/ShootSmart.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/ShootSmart.java rename to comp/src/main/java/org/team100/frc2024/motion/ShootSmart.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/ShootSmartWithRotation.java b/comp/src/main/java/org/team100/frc2024/motion/ShootSmartWithRotation.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/ShootSmartWithRotation.java rename to comp/src/main/java/org/team100/frc2024/motion/ShootSmartWithRotation.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/TrajectoryCommand100.java b/comp/src/main/java/org/team100/frc2024/motion/TrajectoryCommand100.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/TrajectoryCommand100.java rename to comp/src/main/java/org/team100/frc2024/motion/TrajectoryCommand100.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpFastThenSlow.java b/comp/src/main/java/org/team100/frc2024/motion/amp/AmpFastThenSlow.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpFastThenSlow.java rename to comp/src/main/java/org/team100/frc2024/motion/amp/AmpFastThenSlow.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpFeeder.java b/comp/src/main/java/org/team100/frc2024/motion/amp/AmpFeeder.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpFeeder.java rename to comp/src/main/java/org/team100/frc2024/motion/amp/AmpFeeder.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpPivot.java b/comp/src/main/java/org/team100/frc2024/motion/amp/AmpPivot.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpPivot.java rename to comp/src/main/java/org/team100/frc2024/motion/amp/AmpPivot.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpState.java b/comp/src/main/java/org/team100/frc2024/motion/amp/AmpState.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/AmpState.java rename to comp/src/main/java/org/team100/frc2024/motion/amp/AmpState.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/DriveToAmp.java b/comp/src/main/java/org/team100/frc2024/motion/amp/DriveToAmp.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/amp/DriveToAmp.java rename to comp/src/main/java/org/team100/frc2024/motion/amp/DriveToAmp.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberDefault.java b/comp/src/main/java/org/team100/frc2024/motion/climber/ClimberDefault.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberDefault.java rename to comp/src/main/java/org/team100/frc2024/motion/climber/ClimberDefault.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberPosition.java b/comp/src/main/java/org/team100/frc2024/motion/climber/ClimberPosition.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberPosition.java rename to comp/src/main/java/org/team100/frc2024/motion/climber/ClimberPosition.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberSubsystem.java b/comp/src/main/java/org/team100/frc2024/motion/climber/ClimberSubsystem.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/climber/ClimberSubsystem.java rename to comp/src/main/java/org/team100/frc2024/motion/climber/ClimberSubsystem.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToAdjacentWithShooterAngle.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToAdjacentWithShooterAngle.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToAdjacentWithShooterAngle.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToAdjacentWithShooterAngle.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToWithAutoStart.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToWithAutoStart.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToWithAutoStart.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/DriveToWithAutoStart.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/ShooterUtil.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/ShooterUtil.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/ShooterUtil.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/ShooterUtil.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/AmpLockCommand.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/AmpLockCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/AmpLockCommand.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/AmpLockCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/DriveSimple.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/DriveSimple.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/DriveSimple.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/DriveSimple.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/ShooterLockCommand.java b/comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/ShooterLockCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/drivetrain/manual/ShooterLockCommand.java rename to comp/src/main/java/org/team100/frc2024/motion/drivetrain/manual/ShooterLockCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/indexer/IndexerSubsystem.java b/comp/src/main/java/org/team100/frc2024/motion/indexer/IndexerSubsystem.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/indexer/IndexerSubsystem.java rename to comp/src/main/java/org/team100/frc2024/motion/indexer/IndexerSubsystem.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState.java b/comp/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState.java rename to comp/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState2.java b/comp/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState2.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState2.java rename to comp/src/main/java/org/team100/frc2024/motion/intake/ChangeIntakeState2.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/Intake.java b/comp/src/main/java/org/team100/frc2024/motion/intake/Intake.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/Intake.java rename to comp/src/main/java/org/team100/frc2024/motion/intake/Intake.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/RunIntakeAndAmpFeeder.java b/comp/src/main/java/org/team100/frc2024/motion/intake/RunIntakeAndAmpFeeder.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/intake/RunIntakeAndAmpFeeder.java rename to comp/src/main/java/org/team100/frc2024/motion/intake/RunIntakeAndAmpFeeder.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/DrumShooter.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/DrumShooter.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/DrumShooter.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/DrumShooter.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/Ramp.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/Ramp.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/Ramp.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/Ramp.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RampShooter.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/RampShooter.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RampShooter.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/RampShooter.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/ResetShooterZero.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/ResetShooterZero.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/ResetShooterZero.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/ResetShooterZero.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RotateCommand.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/RotateCommand.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RotateCommand.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/RotateCommand.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RotateToShooter.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/RotateToShooter.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/RotateToShooter.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/RotateToShooter.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/ShooterTable.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/ShooterTable.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/ShooterTable.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/ShooterTable.java diff --git a/comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/TestShoot.java b/comp/src/main/java/org/team100/frc2024/motion/shooter/TestShoot.java similarity index 100% rename from comp/swerve100/src/main/java/org/team100/frc2024/motion/shooter/TestShoot.java rename to comp/src/main/java/org/team100/frc2024/motion/shooter/TestShoot.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/ExampleTest.java b/comp/src/test/java/org/team100/frc2024/ExampleTest.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/ExampleTest.java rename to comp/src/test/java/org/team100/frc2024/ExampleTest.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/Timeless2024.java b/comp/src/test/java/org/team100/frc2024/Timeless2024.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/Timeless2024.java rename to comp/src/test/java/org/team100/frc2024/Timeless2024.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/motion/AutoMakerTest.java b/comp/src/test/java/org/team100/frc2024/motion/AutoMakerTest.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/motion/AutoMakerTest.java rename to comp/src/test/java/org/team100/frc2024/motion/AutoMakerTest.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/motion/GravityServoTest.java b/comp/src/test/java/org/team100/frc2024/motion/GravityServoTest.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/motion/GravityServoTest.java rename to comp/src/test/java/org/team100/frc2024/motion/GravityServoTest.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/motion/climber/ClimberSubsystemTest.java b/comp/src/test/java/org/team100/frc2024/motion/climber/ClimberSubsystemTest.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/motion/climber/ClimberSubsystemTest.java rename to comp/src/test/java/org/team100/frc2024/motion/climber/ClimberSubsystemTest.java diff --git a/comp/swerve100/src/test/java/org/team100/frc2024/motion/shooter/DrumShooterTest.java b/comp/src/test/java/org/team100/frc2024/motion/shooter/DrumShooterTest.java similarity index 100% rename from comp/swerve100/src/test/java/org/team100/frc2024/motion/shooter/DrumShooterTest.java rename to comp/src/test/java/org/team100/frc2024/motion/shooter/DrumShooterTest.java diff --git a/comp/swerve100/swerve100.code-workspace b/comp/swerve100.code-workspace similarity index 97% rename from comp/swerve100/swerve100.code-workspace rename to comp/swerve100.code-workspace index da6075c..bd9b7d0 100644 --- a/comp/swerve100/swerve100.code-workspace +++ b/comp/swerve100.code-workspace @@ -4,7 +4,7 @@ "path": "." }, { - "path": "../../lib" + "path": "../lib" }, ], "settings": { diff --git a/comp/swerve100/.Glass/glass-window.json b/comp/swerve100/.Glass/glass-window.json deleted file mode 100644 index ef57099..0000000 --- a/comp/swerve100/.Glass/glass-window.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1666,740 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "756", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1666", - "xpos": "187", - "ypos": "200" - } - }, - "Window": { - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "254,54" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "798,124", - "Size": "828,585" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "364,69", - "Size": "750,145" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "12,58", - "Size": "258,148" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "41,50" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1666,740" - } - } -} diff --git a/comp/swerve100/.Glass/glass.json b/comp/swerve100/.Glass/glass.json deleted file mode 100644 index 09a39bd..0000000 --- a/comp/swerve100/.Glass/glass.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "NetworkTables": { - "retained": { - "SmartDashboard": { - "Manual Drive Mode": { - "open": true - }, - "Telemetry Level": { - "open": true - }, - "open": true - } - }, - "transitory": { - "SmartDashboard": { - "Manual Drive Mode": { - "open": true - }, - "Swerve Module Front Left": { - "open": true - }, - "Swerve Module Front Right": { - "open": true - }, - "UseSetpointGenerator": { - "open": true - }, - "open": true - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": true - } - }, - "position servo Front Left": { - "open": true - }, - "position servo Front Right": { - "open": true - }, - "position servo Rear Left": { - "open": true - }, - "position servo Rear Right": { - "open": true - }, - "robot": { - "open": true - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/LiveWindow/Manipulator": "Subsystem", - "/LiveWindow/Ungrouped/PIDController[10]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[11]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[12]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[13]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[1]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[2]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[3]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[4]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[5]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[6]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[7]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[8]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[9]": "PIDController", - "/LiveWindow/Ungrouped/Scheduler": "Scheduler", - "/LiveWindow/Ungrouped/Talon FX [1]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [2]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [4]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon SRX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [6]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [7]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [8]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [9]": "Motor Controller", - "/LiveWindow/Ungrouped/navX-Sensor[2]": "Gyro", - "/SmartDashboard/Arm": "Subsystem", - "/SmartDashboard/Drive Subsystem": "Subsystem", - "/SmartDashboard/FlushOften": "String Chooser", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/OscillateDirect": "String Chooser", - "/SmartDashboard/OscillateTheta": "String Chooser", - "/SmartDashboard/ShowMode": "String Chooser", - "/SmartDashboard/SideView": "Mechanism2d", - "/SmartDashboard/Simple Manual Mode": "String Chooser", - "/SmartDashboard/Swerve Viz/Front Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Front Right": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Left": "Mechanism2d", - "/SmartDashboard/Swerve Viz/Rear Right": "Mechanism2d", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/SmartDashboard/elevator": "Mechanism2d", - - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - } - } - }, - "NetworkTables Info": { - "visible": true - }, - "NetworkTables Settings": { - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.9399999976158142, - 0.9399999976158142, - 0.9399999976158142, - 1.0 - ], - "height": -6, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/position servo Front Left/Goal" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/position servo Front Right/Goal" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/position servo Rear Left/Goal" - }, - { - "color": [ - 0.7686275243759155, - 0.30588236451148987, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/position servo Rear Right/Goal" - }, - { - "color": [ - 0.5058823823928833, - 0.44705885648727417, - 0.7019608020782471, - 1.0 - ], - "id": "NT:/position servo Rear Left/Position" - }, - { - "color": [ - 0.5764706134796143, - 0.4705882668495178, - 0.3764706254005432, - 1.0 - ], - "id": "NT:/position servo Front Right/Position" - }, - { - "color": [ - 0.8549020290374756, - 0.545098066329956, - 0.7647059559822083, - 1.0 - ], - "id": "NT:/position servo Front Left/Position" - }, - { - "color": [ - 0.5490196347236633, - 0.5490196347236633, - 0.5490196347236633, - 1.0 - ], - "id": "NT:/position servo Rear Right/Position" - }, - { - "color": [ - 0.8000000715255737, - 0.7254902124404907, - 0.4549019932746887, - 1.0 - ], - "id": "NT:/position servo Rear Left/Setpoint" - }, - { - "color": [ - 0.3921568989753723, - 0.7098039388656616, - 0.803921639919281, - 1.0 - ], - "id": "NT:/position servo Front Right/Setpoint" - }, - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/position servo Front Left/Setpoint" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/position servo Rear Right/Setpoint" - } - ] - } - ] - } - } -} diff --git a/comp/swerve100/.gitignore b/comp/swerve100/.gitignore deleted file mode 100644 index 246f448..0000000 --- a/comp/swerve100/.gitignore +++ /dev/null @@ -1,168 +0,0 @@ -*.wpilog -unused.txt - -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# Simulation GUI and other tools window save file -# *-window.json - -simgui*.json - diff --git a/comp/swerve100/.vscode/extensions.json b/comp/swerve100/.vscode/extensions.json deleted file mode 100644 index 457ea1a..0000000 --- a/comp/swerve100/.vscode/extensions.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. - // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp - - // List of extensions which should be recommended for users of this workspace. - "recommendations": [ - "sonarsource.sonarlint-vscode" - ], - // List of extensions recommended by VS Code that should not be recommended for users of this workspace. - "unwantedRecommendations": [ - - ] -} \ No newline at end of file diff --git a/comp/swerve100/.vscode/settings.json b/comp/swerve100/.vscode/settings.json deleted file mode 100644 index a27e766..0000000 --- a/comp/swerve100/.vscode/settings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests", -"editor.detectIndentation": false, -"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx64G -Xms100m -Xlog:disable", -"terminal.integrated.scrollback": 100000, -"workbench.colorTheme": "Default Light+", -"files.autoSave": "afterDelay", -"editor.tabSize": 4, -"editor.insertSpaces": true, -"editor.indentSize": "tabSize" -} diff --git a/comp/swerve100/.wpilib/wpilib_preferences.json b/comp/swerve100/.wpilib/wpilib_preferences.json deleted file mode 100644 index 652e4a8..0000000 --- a/comp/swerve100/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024beta", - "teamNumber": 100 -} diff --git a/comp/swerve100/WPILib-License.md b/comp/swerve100/WPILib-License.md deleted file mode 100644 index 8434944..0000000 --- a/comp/swerve100/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2023 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/comp/swerve100/build.gradle b/comp/swerve100/build.gradle deleted file mode 100644 index ac85b20..0000000 --- a/comp/swerve100/build.gradle +++ /dev/null @@ -1,220 +0,0 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - google() - } -} - -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.2" -} - -sourceSets { - main { - java { - srcDir "../../lib/src/main/java" - } - } -} - -// these four lines are for development builds -// https://github.com/wpilibsuite/allwpilib/blob/main/DevelopmentBuilds.md -// wpi.maven.useLocal = false -// wpi.maven.useDevelopment = true -// wpi.versions.wpilibVersion = '2025.+' -// wpi.versions.wpimathVersion = '2025.+' - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "org.team100.frc2024.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - - // "Other" means no gc args at all - // gcType = edu.wpi.first.gradlerio.deploy.roborio.GarbageCollectorType.Other - - // give unused heap back to the kernel - // on full gc. does full gc actually happen? - // jvmArgs.add("-XX:MaxHeapFreeRatio=70") - // 128M is too big, can't malloc it - // 100M is too small, fails with bad_alloc - // jvmArgs.add("-Xmx100M") - // jvmArgs.add("-Xms100M") - - // serial gc is shorter pauses, less throughput - // we don't make much garbage so it might be better? - // jvmArgs.add("-XX:+UseSerialGC") - // small eden, gc often. can't really make it - // less than this or jvm can't start. - // but if it's too small, then doomed objects get - // promoted and then the full gc's happen more - // often and take longer - // jvmArgs.add("-XX:NewSize=1M") - // jvmArgs.add("-XX:MaxNewSize=1M") - - // "info" is less verbose than "debug" - // jvmArgs.add("-Xlog:gc*=info,heap*=info:file=/tmp/jvm.log") - // jvmArgs.add("-Xlog:gc*=debug,heap*=debug:file=/tmp/jvm.log") - - // these are the default wpi gc args - // jvmArgs.add("-XX:+UseG1GC")/ - // try not to pause for long each time - // jvmArgs.add("-XX:MaxGCPauseMillis=1") - // devote as much *total* time as you want - // jvmArgs.add("-XX:GCTimeRatio=1") - - // turn off compilation - // jvmArgs.add("-Djava.compiler=NONE") - - // compile everything at the start - //jvmArgs.add("-Xcomp") - //jvmArgs.add("-Xbatch") - - // "pretouch" means actually committing heap - // with kernel overcommit we definitely don't want this - jvmArgs.remove("-XX:+AlwaysPreTouch") - - // manual heap space size - // jvmArgs.add("-XX:InitialRAMPercentage=30") - // jvmArgs.add("-XX:MinRAMPercentage=30") - // jvmArgs.add("-XX:MaxRAMPercentage=10") - - // print heap space stats at startup - jvmArgs.add("-XshowSettings:vm") - - // these make it possible to connect JConsole - jvmArgs.add("-Dcom.sun.management.jmxremote=true") - jvmArgs.add("-Dcom.sun.management.jmxremote.port=1099") - jvmArgs.add("-Dcom.sun.management.jmxremote.local.only=false") - jvmArgs.add("-Dcom.sun.management.jmxremote.ssl=false") - jvmArgs.add("-Dcom.sun.management.jmxremote.authenticate=false") - // jvmArgs.add("-Djava.rmi.server.hostname=172.22.11.2") - jvmArgs.add("-Djava.rmi.server.hostname=10.1.0.2") - - // these are for native memory tracking - // jvmArgs.add("-XX:NativeMemoryTracking=detail") - // jvmArgs.add("-XX:+UnlockDiagnosticVMOptions") - // jvmArgs.add("-XX:+PrintNMTStatistics") - - // this is so we can see what's taking heap space - //jvmArgs.add("-XX:+HeapDumpOnOutOfMemoryError") - //jvmArgs.add("-XX:HeapDumpPath=/tmp/heap.hprof") - } - - // Static files artifact - // frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - // files = project.fileTree('src/main/deploy/2023-studies.json') - // directory = '/home/lvuser/deploy' - // } - // kernel parameters - // frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - // files = project.fileTree('src/main/etc') - // directory = '/etc' - // } - - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - // kernel parameters - etcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/etc') - directory = '/etc' - } - - // reload the kernel parameters we just changed - reloadSysctl(getArtifactTypeClass('CommandArtifact')) { - command = 'sysctl -p' - } - killKillKill(getArtifactTypeClass('CommandArtifact')) { - command = 'start-stop-daemon --stop --signal KILL --name java' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - implementation 'org.json:json:20231013' - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/comp/swerve100/choreo.config b/comp/swerve100/choreo.config deleted file mode 100644 index 70a3a9d..0000000 --- a/comp/swerve100/choreo.config +++ /dev/null @@ -1,384 +0,0 @@ -{ - "version": "v0.1.1", - "robotConfiguration": { - "mass": 45, - "rotationalInertia": 6, - "wheelMaxTorque": 2, - "wheelMaxVelocity": 70, - "wheelbase": 0.622, - "trackWidth": 0.622, - "bumperLength": 0.9, - "bumperWidth": 0.9, - "wheelRadius": 0.0508 - }, - "paths": { - "NewPath": { - "waypoints": [ - { - "x": 2.8731346130371094, - "y": 4.714258193969727, - "heading": -2.0344439357957027, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 5.427358150482178, - "y": 4.870241165161133, - "heading": -1.2793395323170296, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 7.104176998138428, - "y": 5.494173526763916, - "heading": -1.6233793208483085, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 7.201666355133057, - "y": 4.753253936767578, - "heading": -1.8766748285902493, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 5.7783203125, - "y": 4.5387773513793945, - "heading": -2.4887467166502737, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 3.8870248794555664, - "y": 4.753253936767578, - "heading": -2.6183140328849768, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - }, - { - "x": 2.6001641750335693, - "y": 4.051330089569092, - "heading": -3.0981417812698133, - "isInitialGuess": false, - "translationConstrained": true, - "headingConstrained": true, - "controlIntervalCount": 5 - } - ], - "trajectory": [ - { - "timestamp": 0, - "x": 2.87313461303711, - "y": 4.714258193969727, - "heading": -2.0344439357957027, - "velocityX": 2.8659584352549685, - "velocityY": 2.9169679391786373e-36, - "angularVelocity": 1.4710899761787954 - }, - { - "timestamp": 0.1602907346959254, - "x": 3.346176637332065, - "y": 4.631941718786989, - "heading": -1.7707621992218756, - "velocityX": 2.951150140975553, - "velocityY": -0.5135448118002163, - "angularVelocity": 1.6450216980665564 - }, - { - "timestamp": 0.3205814693918508, - "x": 3.8686907591379134, - "y": 4.602863605818538, - "heading": -1.6263891161901842, - "velocityX": 3.259789923585215, - "velocityY": -0.18140857001880417, - "angularVelocity": 0.9006951231808243 - }, - { - "timestamp": 0.4808722040877762, - "x": 4.407002724875052, - "y": 4.607397758001206, - "heading": -1.5300180526507363, - "velocityX": 3.3583473602409155, - "velocityY": 0.02828705097190944, - "angularVelocity": 0.6012266630523941 - }, - { - "timestamp": 0.6411629387837016, - "x": 4.919934539821654, - "y": 4.695196870697091, - "heading": -1.3796523173714859, - "velocityX": 3.2000091329024305, - "velocityY": 0.5477491438444085, - "angularVelocity": 0.9380812656732601 - }, - { - "timestamp": 0.8014536734796269, - "x": 5.427358150482178, - "y": 4.870241165161133, - "heading": -1.2793395323170296, - "velocityX": 3.1656452983581147, - "velocityY": 1.0920424988762139, - "angularVelocity": 0.6258177382788319 - }, - { - "timestamp": 0.9545356906013281, - "x": 5.8873989508038616, - "y": 5.095757493836416, - "heading": -1.3231373755725029, - "velocityX": 3.005191654588322, - "velocityY": 1.4731732238411557, - "angularVelocity": -0.28610704300201023 - }, - { - "timestamp": 1.1076177077230294, - "x": 6.2757134661194165, - "y": 5.284750019583276, - "heading": -1.4039765165683036, - "velocityX": 2.5366435758867922, - "velocityY": 1.2345834559823574, - "angularVelocity": -0.5280773177396336 - }, - { - "timestamp": 1.2606997248447307, - "x": 6.604825939064322, - "y": 5.417000283164535, - "heading": -1.4870599392320674, - "velocityX": 2.149909435040041, - "velocityY": 0.8639176963295371, - "angularVelocity": -0.5427379663916491 - }, - { - "timestamp": 1.413781741966432, - "x": 6.880067399647987, - "y": 5.487519198513525, - "heading": -1.5618500085502451, - "velocityX": 1.797999959491295, - "velocityY": 0.4606610016964102, - "angularVelocity": -0.48856208406712714 - }, - { - "timestamp": 1.5668637590881334, - "x": 7.104176998138428, - "y": 5.494173526763916, - "heading": -1.6233793208483085, - "velocityX": 1.4639838349678422, - "velocityY": 0.043469039509067664, - "angularVelocity": -0.40193690581661906 - }, - { - "timestamp": 1.7324532279390779, - "x": 7.288700976150357, - "y": 5.425278161186026, - "heading": -1.6710341992953492, - "velocityX": 1.1143460951494994, - "velocityY": -0.4160612752487679, - "angularVelocity": -0.2877893067580114 - }, - { - "timestamp": 1.8980426967900224, - "x": 7.401849579896203, - "y": 5.292420495140573, - "heading": -1.7076941303716797, - "velocityX": 0.6833079695889137, - "velocityY": -0.8023316154546396, - "angularVelocity": -0.22139047447111437 - }, - { - "timestamp": 2.063632165640967, - "x": 7.429454465372851, - "y": 5.116087769469904, - "heading": -1.7448362199822505, - "velocityX": 0.16670676987010677, - "velocityY": -1.0648788651492926, - "angularVelocity": -0.22430224499363818 - }, - { - "timestamp": 2.2292216344919114, - "x": 7.362329481329417, - "y": 4.925805743022923, - "heading": -1.7966549917933037, - "velocityX": -0.4053698855925252, - "velocityY": -1.1491191303854225, - "angularVelocity": -0.3129351894817543 - }, - { - "timestamp": 2.394811103342856, - "x": 7.201666355133057, - "y": 4.753253936767578, - "heading": -1.8766748285902493, - "velocityX": -0.9702496620783377, - "velocityY": -1.0420457741226752, - "angularVelocity": -0.4832423061213844 - }, - { - "timestamp": 2.5277066940050332, - "x": 7.018292703826856, - "y": 4.642199365696589, - "heading": -1.965095903501391, - "velocityX": -1.3798324714349508, - "velocityY": -0.8356527896647185, - "angularVelocity": -0.6653424276198111 - }, - { - "timestamp": 2.6606022846672106, - "x": 6.781590099350449, - "y": 4.560998554983957, - "heading": -2.0752326177367797, - "velocityX": -1.7811170656377087, - "velocityY": -0.6110120757809446, - "angularVelocity": -0.8287461885425373 - }, - { - "timestamp": 2.793497875329388, - "x": 6.493340184159706, - "y": 4.513016617709015, - "heading": -2.2034867277836776, - "velocityX": -2.1689953274934375, - "velocityY": -0.36104988160904133, - "angularVelocity": -0.9650742316419056 - }, - { - "timestamp": 2.9263934659915654, - "x": 6.156736657620552, - "y": 4.503151043038595, - "heading": -2.3443740444286307, - "velocityX": -2.532841946538353, - "velocityY": -0.0742355304736853, - "angularVelocity": -1.0601353735135621 - }, - { - "timestamp": 3.0592890566537427, - "x": 5.7783203125, - "y": 4.5387773513793945, - "heading": -2.4887467166502737, - "velocityX": -2.8474710352316572, - "velocityY": 0.26807742953160013, - "angularVelocity": -1.0863616430182457 - }, - { - "timestamp": 3.192312788583797, - "x": 5.372988068401325, - "y": 4.630082002929063, - "heading": -2.619681530875418, - "velocityX": -3.047067152737856, - "velocityY": 0.6863786651067441, - "angularVelocity": -0.9842966538782065 - }, - { - "timestamp": 3.3253365205138516, - "x": 4.960827221824336, - "y": 4.74405459125079, - "heading": -2.601921761657974, - "velocityX": -3.0984008687540645, - "velocityY": 0.8567838735847241, - "angularVelocity": 0.13350827675457616 - }, - { - "timestamp": 3.458360252443906, - "x": 4.575779810947569, - "y": 4.802574128406953, - "heading": -2.5957731793167818, - "velocityX": -2.89457681941467, - "velocityY": 0.43991802295047, - "angularVelocity": 0.046221694820777745 - }, - { - "timestamp": 3.5913839843739606, - "x": 4.217845765320408, - "y": 4.805640591791747, - "heading": -2.6012365876923305, - "velocityX": -2.690753299684657, - "velocityY": 0.02305200237808626, - "angularVelocity": -0.04107092994820966 - }, - { - "timestamp": 3.724407716304015, - "x": 3.8870248794555664, - "y": 4.753253936767578, - "heading": -2.6183140328849768, - "velocityX": -2.486931324696192, - "velocityY": -0.39381435375542073, - "angularVelocity": -0.12837893618580684 - }, - { - "timestamp": 3.896167596058758, - "x": 3.505071839208058, - "y": 4.593161272724555, - "heading": -2.6597323909186397, - "velocityX": -2.2237616886603595, - "velocityY": -0.9320725204955917, - "angularVelocity": -0.24114105164025634 - }, - { - "timestamp": 4.067927475813502, - "x": 3.1907143651496175, - "y": 4.356026823643122, - "heading": -2.730250770581332, - "velocityX": -1.8302148004953969, - "velocityY": -1.380616063658399, - "angularVelocity": -0.41056374610523494 - }, - { - "timestamp": 4.239687355568245, - "x": 2.971670073793149, - "y": 4.154230107428244, - "heading": -2.843468180092771, - "velocityX": -1.2752936929697605, - "velocityY": -1.1748769066619298, - "angularVelocity": -0.6591609732907526 - }, - { - "timestamp": 4.4114472353229885, - "x": 2.7817854985905752, - "y": 4.051330089569092, - "heading": -2.969053906876152, - "velocityX": -1.1055234521222954, - "velocityY": -0.5990922793267196, - "angularVelocity": -0.7311703231435979 - }, - { - "timestamp": 4.583207115077732, - "x": 2.6001641750335693, - "y": 4.051330089569092, - "heading": -3.0981417812698133, - "velocityX": -1.0574141284701866, - "velocityY": 2.2523808500332187e-34, - "angularVelocity": -0.7515601115812743 - } - ], - "constraints": [ - { - "scope": [ - "first" - ], - "type": "WptVelocityDirection", - "uuid": "1b49d228-95fc-47b0-9ce5-a1f35fe4012b", - "direction": 0 - }, - { - "scope": [ - "last" - ], - "type": "WptVelocityDirection", - "uuid": "e60443ae-1563-4752-ab46-33f8c235f3fd", - "direction": 0 - } - ], - "usesControlIntervalGuessing": false, - "defaultControlIntervalCount": 5 - } - } -} \ No newline at end of file diff --git a/comp/swerve100/glass-window.json b/comp/swerve100/glass-window.json deleted file mode 100644 index d00019a..0000000 --- a/comp/swerve100/glass-window.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,13 Size=682,499 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "512", - "maximized": "0", - "style": "0", - "userScale": "1", - "width": "682", - "xpos": "92", - "ypos": "105" - } - }, - "Window": { - "###NetworkTables": { - "Collapsed": "0", - "Pos": "166,184", - "Size": "500,123" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "166,410", - "Size": "400,86" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "20,20", - "Size": "186,127" - }, - "###Plot <1>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "41,50" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "41,50" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,13", - "Size": "682,499" - } - } -} diff --git a/comp/swerve100/glass_for_sim/glass-window.json b/comp/swerve100/glass_for_sim/glass-window.json deleted file mode 100644 index 32cfa74..0000000 --- a/comp/swerve100/glass_for_sim/glass-window.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1313,574 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "756", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1200", - "xpos": "187", - "ypos": "200" - } - }, - "Window": { - "###/SmartDashboard/Manual Drive Mode": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/SmartDashboard/Telemetry Level": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/SmartDashboard/UseClosedLoopVelocity": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/SmartDashboard/UseSetpointGenerator": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "200,48" - }, - "###/field": { - "Collapsed": "0", - "Pos": "200,200", - "Size": "400,200" - }, - "###NetworkTables": { - "Collapsed": "0", - "Pos": "160,237", - "Size": "500,123" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "12,58", - "Size": "200,68" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "41,50" - }, - "###Plot <2>": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "49,72" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1313,574" - } - } -} diff --git a/comp/swerve100/glass_for_sim/glass.json b/comp/swerve100/glass_for_sim/glass.json deleted file mode 100644 index 4349afc..0000000 --- a/comp/swerve100/glass_for_sim/glass.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "NetworkTables": { - "retained": { - "SmartDashboard": { - "Manual Drive Mode": { - "open": true - }, - "Telemetry Level": { - "open": true - }, - "open": true - } - }, - "transitory": { - "FMSInfo": { - "open": false - }, - "Holonomic3": { - "error": { - "open": true - }, - "measurement": { - "open": true - }, - "open": true, - "setpoint": { - "open": true - }, - "u_FB": { - "open": true - }, - "u_FF": { - "open": true - } - }, - "SmartDashboard": { - "Swerve Module Front Left": { - "open": true - }, - "Swerve Module Front Right": { - "open": true - } - }, - "center": { - "open": true - }, - "circle": { - "center": { - "open": true - }, - "open": true, - "reference": { - "open": true, - "theta": { - "open": true - } - }, - "target": { - "open": true - }, - "x_state": { - "open": true - }, - "y_state": { - "open": true - } - }, - "current pose": { - "open": true - }, - "experiments": { - "string[]##v_/experiments/enabled": { - "open": true - } - }, - "position servo Front Left": { - "open": true - }, - "position servo Front Right": { - "open": true - }, - "position servo Rear Left": { - "open": true - }, - "position servo Rear Right": { - "open": true - }, - "robot": { - "open": false - } - }, - "types": { - "/FMSInfo": "FMSInfo", - "/LiveWindow/Manipulator": "Subsystem", - "/LiveWindow/Ungrouped/PIDController[10]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[11]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[12]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[13]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[1]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[2]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[3]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[4]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[5]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[6]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[7]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[8]": "PIDController", - "/LiveWindow/Ungrouped/PIDController[9]": "PIDController", - "/LiveWindow/Ungrouped/Scheduler": "Scheduler", - "/LiveWindow/Ungrouped/Talon FX [1]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [2]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon FX [4]": "Motor Controller", - "/LiveWindow/Ungrouped/Talon SRX [3]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [6]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [7]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [8]": "Motor Controller", - "/LiveWindow/Ungrouped/Victor SPX [9]": "Motor Controller", - "/LiveWindow/Ungrouped/navX-Sensor[2]": "Gyro", - "/SmartDashboard/Arm": "Subsystem", - "/SmartDashboard/Drive Subsystem": "Subsystem", - "/SmartDashboard/Manual Drive Mode": "String Chooser", - "/SmartDashboard/Motion Profile": "String Chooser", - "/SmartDashboard/Telemetry Level": "String Chooser", - "/SmartDashboard/UseClosedLoopDrive": "String Chooser", - "/SmartDashboard/UseClosedLoopSteering": "String Chooser", - "/SmartDashboard/UseClosedLoopVelocity": "String Chooser", - "/SmartDashboard/UseInitialVelocity": "String Chooser", - "/SmartDashboard/UseSetpointGenerator": "String Chooser", - "/field": "Field2d" - }, - "windows": { - "/SmartDashboard/Manual Drive Mode": { - "window": { - "visible": true - } - }, - "/SmartDashboard/Telemetry Level": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseClosedLoopVelocity": { - "window": { - "visible": true - } - }, - "/SmartDashboard/UseSetpointGenerator": { - "window": { - "visible": true - } - }, - "/field": { - "robot": { - "style": "Box/Image" - }, - "window": { - "visible": true - } - } - } - }, - "NetworkTables Settings": { - "mode": "Client (NT4)", - "serverTeam": "localhost" - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": -6, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Holonomic3/u_FB/theta" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Holonomic3/u_FF/theta" - } - ] - } - ] - }, - "Plot <2>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 2, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Holonomic3/setpoint/x" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Holonomic3/measurement/x" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/Holonomic3/error/x" - } - ] - }, - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 2, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Holonomic3/setpoint/y" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Holonomic3/measurement/y" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/Holonomic3/error/y" - } - ] - }, - { - "axis": [ - { - "autoFit": true - } - ], - "backgroundColor": [ - 0.0, - 0.0, - 0.0, - 0.8500000238418579 - ], - "height": 2, - "lockPrevX": true, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/Holonomic3/setpoint/theta" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/Holonomic3/measurement/theta" - }, - { - "color": [ - 0.3333333432674408, - 0.658823549747467, - 0.4078431725502014, - 1.0 - ], - "id": "NT:/Holonomic3/error/theta" - } - ] - } - ], - "window": { - "name": "Holonomic Controller" - } - } - } -} diff --git a/comp/swerve100/gradle/wrapper/gradle-wrapper.jar b/comp/swerve100/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135..0000000 Binary files a/comp/swerve100/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/comp/swerve100/gradlew b/comp/swerve100/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/comp/swerve100/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/comp/swerve100/gradlew.bat b/comp/swerve100/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/comp/swerve100/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/comp/swerve100/networktables.json b/comp/swerve100/networktables.json deleted file mode 100644 index fe51488..0000000 --- a/comp/swerve100/networktables.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/comp/swerve100/settings.gradle b/comp/swerve100/settings.gradle deleted file mode 100644 index 3e30f84..0000000 --- a/comp/swerve100/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/comp/swerve100/sim_for_sim/glass-window.json b/comp/swerve100/sim_for_sim/glass-window.json deleted file mode 100644 index 300225a..0000000 --- a/comp/swerve100/sim_for_sim/glass-window.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Docking": { - "Data": [ - "DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,16 Size=1313,574 CentralNode=1" - ] - }, - "MainWindow": { - "GLOBAL": { - "fps": "120", - "height": "590", - "maximized": "0", - "style": "0", - "userScale": "2", - "width": "1313", - "xpos": "304", - "ypos": "268" - } - }, - "Window": { - "###NetworkTables": { - "Collapsed": "0", - "Pos": "145,253", - "Size": "500,202" - }, - "###NetworkTables Info": { - "Collapsed": "0", - "Pos": "70,197", - "Size": "475,145" - }, - "###NetworkTables Log": { - "Collapsed": "0", - "Pos": "49,385", - "Size": "600,130" - }, - "###NetworkTables Settings": { - "Collapsed": "0", - "Pos": "20,20", - "Size": "200,68" - }, - "###Plot <0>": { - "Collapsed": "0", - "Pos": "255,21", - "Size": "372,172" - }, - "Debug##Default": { - "Collapsed": "0", - "Pos": "60,60", - "Size": "400,400" - }, - "DockSpaceViewport_11111111": { - "Collapsed": "0", - "Pos": "0,16", - "Size": "1313,574" - } - } -} diff --git a/comp/swerve100/sim_for_sim/glass.json b/comp/swerve100/sim_for_sim/glass.json deleted file mode 100644 index 718ce88..0000000 --- a/comp/swerve100/sim_for_sim/glass.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "NetworkTables": { - "transitory": { - "FMSInfo": { - "open": false - } - } - } -} diff --git a/comp/swerve100/vendordeps/ChoreoLib.json b/comp/swerve100/vendordeps/ChoreoLib.json deleted file mode 100644 index a5f886a..0000000 --- a/comp/swerve100/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.2.3", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.2.3" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.2.3", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/NavX.json b/comp/swerve100/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/comp/swerve100/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/PathplannerLib.json b/comp/swerve100/vendordeps/PathplannerLib.json deleted file mode 100644 index 6dc648d..0000000 --- a/comp/swerve100/vendordeps/PathplannerLib.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "PathplannerLib.json", - "name": "PathplannerLib", - "version": "2024.2.8", - "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", - "frcYear": "2024", - "mavenUrls": [ - "https://3015rangerrobotics.github.io/pathplannerlib/repo" - ], - "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", - "javaDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-java", - "version": "2024.2.8" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-cpp", - "version": "2024.2.8", - "libName": "PathplannerLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/Phoenix5.json b/comp/swerve100/vendordeps/Phoenix5.json deleted file mode 100644 index ff7359e..0000000 --- a/comp/swerve100/vendordeps/Phoenix5.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "fileName": "Phoenix5.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.33.1", - "frcYear": 2024, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", - "requires": [ - { - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.33.1" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.33.1" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.1", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.1", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.33.1", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.33.1", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.1", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.33.1", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.33.1", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.1", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/Phoenix6.json b/comp/swerve100/vendordeps/Phoenix6.json deleted file mode 100644 index 0322385..0000000 --- a/comp/swerve100/vendordeps/Phoenix6.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "fileName": "Phoenix6.json", - "name": "CTRE-Phoenix (v6)", - "version": "24.3.0", - "frcYear": 2024, - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", - "conflictsWith": [ - { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-java", - "version": "24.3.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-cpp", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/REVLib.json b/comp/swerve100/vendordeps/REVLib.json deleted file mode 100644 index f85acd4..0000000 --- a/comp/swerve100/vendordeps/REVLib.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2024.2.4", - "frcYear": "2024", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2024.2.4" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.4", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2024.2.4", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.4", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/ReduxLib_2024.json b/comp/swerve100/vendordeps/ReduxLib_2024.json deleted file mode 100644 index f694966..0000000 --- a/comp/swerve100/vendordeps/ReduxLib_2024.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "fileName": "ReduxLib_2024.json", - "name": "ReduxLib", - "version": "2024.3.1", - "frcYear": 2024, - "uuid": "151ecca8-670b-4026-8160-cdd2679ef2bd", - "mavenUrls": [ - "https://maven.reduxrobotics.com/" - ], - "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2024.json", - "javaDependencies": [ - { - "groupId": "com.reduxrobotics.frc", - "artifactId": "ReduxLib-java", - "version": "2024.3.1" - } - ], - "jniDependencies": [ - { - "groupId": "com.reduxrobotics.frc", - "artifactId": "ReduxLib-driver", - "version": "2024.3.1", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "linuxathena", - "linuxx86-64", - "linuxarm32", - "linuxarm64", - "osxuniversal", - "windowsx86-64" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.reduxrobotics.frc", - "artifactId": "ReduxLib-cpp", - "version": "2024.3.1", - "libName": "ReduxLib-cpp", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxx86-64", - "linuxarm32", - "linuxarm64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/comp/swerve100/vendordeps/WPILibNewCommands.json b/comp/swerve100/vendordeps/WPILibNewCommands.json deleted file mode 100644 index e97bf30..0000000 --- a/comp/swerve100/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/lib/vendordeps/Phoenix5.json b/comp/vendordeps/Phoenix5-frc2025-beta-latest.json similarity index 73% rename from lib/vendordeps/Phoenix5.json rename to comp/vendordeps/Phoenix5-frc2025-beta-latest.json index ff7359e..e990f5b 100644 --- a/lib/vendordeps/Phoenix5.json +++ b/comp/vendordeps/Phoenix5-frc2025-beta-latest.json @@ -1,43 +1,56 @@ { - "fileName": "Phoenix5.json", + "fileName": "Phoenix5-frc2025-beta-latest.json", "name": "CTRE-Phoenix (v5)", - "version": "5.33.1", - "frcYear": 2024, + "version": "5.34.0-beta-4", + "frcYear": "2025", "uuid": "ab676553-b602-441f-a38d-f1296eff6537", "mavenUrls": [ "https://maven.ctr-electronics.com/release/" ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2025-beta-latest.json", "requires": [ { "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" + "offlineFileName": "Phoenix6-frc2025-beta-latest.json", + "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json" + } + ], + "conflictsWith": [ + { + "uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af", + "errorMessage": "Users must use the Phoenix 5 replay vendordep when using the Phoenix 6 replay vendordep.", + "offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json" + }, + { + "uuid": "fbc886a4-2cec-40c0-9835-71086a8cc3df", + "errorMessage": "Users cannot have both the replay and regular Phoenix 5 vendordeps in their robot program.", + "offlineFileName": "Phoenix5-replay-frc2025-beta-latest.json" } ], "javaDependencies": [ { "groupId": "com.ctre.phoenix", "artifactId": "api-java", - "version": "5.33.1" + "version": "5.34.0-beta-4" }, { "groupId": "com.ctre.phoenix", "artifactId": "wpiapi-java", - "version": "5.33.1" + "version": "5.34.0-beta-4" } ], "jniDependencies": [ { "groupId": "com.ctre.phoenix", "artifactId": "cci", - "version": "5.33.1", + "version": "5.34.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -45,12 +58,13 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "cci-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -60,7 +74,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "wpiapi-cpp", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix_WPI", "headerClassifier": "headers", "sharedLibrary": true, @@ -68,6 +82,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -75,7 +90,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "api-cpp", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix", "headerClassifier": "headers", "sharedLibrary": true, @@ -83,6 +98,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -90,7 +106,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "cci", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixCCI", "headerClassifier": "headers", "sharedLibrary": true, @@ -98,6 +114,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -105,7 +122,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "wpiapi-cpp-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix_WPISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -113,6 +130,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -120,7 +138,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "api-cpp-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixSim", "headerClassifier": "headers", "sharedLibrary": true, @@ -128,6 +146,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -135,7 +154,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "cci-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixCCISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -143,6 +162,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" diff --git a/studies/Turn Motor/vendordeps/Phoenix6.json b/comp/vendordeps/Phoenix6-frc2025-beta-latest.json similarity index 75% rename from studies/Turn Motor/vendordeps/Phoenix6.json rename to comp/vendordeps/Phoenix6-frc2025-beta-latest.json index 69a4079..0b786d1 100644 --- a/studies/Turn Motor/vendordeps/Phoenix6.json +++ b/comp/vendordeps/Phoenix6-frc2025-beta-latest.json @@ -1,76 +1,94 @@ { - "fileName": "Phoenix6.json", + "fileName": "Phoenix6-frc2025-beta-latest.json", "name": "CTRE-Phoenix (v6)", - "version": "24.1.0", - "frcYear": 2024, + "version": "25.0.0-beta-4", + "frcYear": "2025", "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", "mavenUrls": [ "https://maven.ctr-electronics.com/release/" ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json", "conflictsWith": [ { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" + "uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af", + "errorMessage": "Users can not have both the replay and regular Phoenix 6 vendordeps in their robot program.", + "offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json" } ], "javaDependencies": [ { "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-java", - "version": "24.1.0" + "version": "25.0.0-beta-4" } ], "jniDependencies": [ + { + "groupId": "com.ctre.phoenix6", + "artifactId": "api-cpp", + "version": "25.0.0-beta-4", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", + "linuxathena" + ], + "simMode": "hwsim" + }, { "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.1.0", + "artifactId": "api-cpp-sim", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.1.0", + "artifactId": "tools-sim", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.1.0", + "artifactId": "simTalonSRX", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -78,12 +96,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -91,12 +110,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -104,12 +124,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -117,12 +138,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -130,12 +152,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "24.1.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -143,12 +166,27 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "24.1.0", + "version": "25.0.0-beta-4", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", + "osxuniversal" + ], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -158,7 +196,7 @@ { "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-cpp", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_Phoenix6_WPI", "headerClassifier": "headers", "sharedLibrary": true, @@ -166,6 +204,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -173,7 +212,7 @@ { "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_PhoenixTools", "headerClassifier": "headers", "sharedLibrary": true, @@ -181,6 +220,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -188,7 +228,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "wpiapi-cpp-sim", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_Phoenix6_WPISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -196,6 +236,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -203,7 +244,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "tools-sim", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_PhoenixTools_Sim", "headerClassifier": "headers", "sharedLibrary": true, @@ -211,6 +252,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -218,7 +260,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonSRX", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimTalonSRX", "headerClassifier": "headers", "sharedLibrary": true, @@ -226,21 +268,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.1.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -248,7 +276,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimVictorSPX", "headerClassifier": "headers", "sharedLibrary": true, @@ -256,6 +284,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -263,7 +292,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimPigeonIMU", "headerClassifier": "headers", "sharedLibrary": true, @@ -271,6 +300,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -278,7 +308,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimCANCoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -286,6 +316,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -293,7 +324,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProTalonFX", "headerClassifier": "headers", "sharedLibrary": true, @@ -301,6 +332,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -308,7 +340,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProCANcoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -316,6 +348,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -323,7 +356,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "24.1.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProPigeon2", "headerClassifier": "headers", "sharedLibrary": true, @@ -331,6 +364,23 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", + "osxuniversal" + ], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.0.0-beta-4", + "libName": "CTRE_SimProCANrange", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" diff --git a/studies/NeoEncoderTest/vendordeps/REVLib.json b/comp/vendordeps/REVLib.json similarity index 89% rename from studies/NeoEncoderTest/vendordeps/REVLib.json rename to comp/vendordeps/REVLib.json index f85acd4..0f73581 100644 --- a/studies/NeoEncoderTest/vendordeps/REVLib.json +++ b/comp/vendordeps/REVLib.json @@ -1,25 +1,25 @@ { "fileName": "REVLib.json", "name": "REVLib", - "version": "2024.2.4", - "frcYear": "2024", + "version": "2025.0.0-beta-4", + "frcYear": "2025", "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", "mavenUrls": [ "https://maven.revrobotics.com/" ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", + "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2025.json", "javaDependencies": [ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-java", - "version": "2024.2.4" + "version": "2025.0.0-beta-4" } ], "jniDependencies": [ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -37,7 +37,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-cpp", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "libName": "REVLib", "headerClassifier": "headers", "sharedLibrary": false, @@ -55,7 +55,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "libName": "REVLibDriver", "headerClassifier": "headers", "sharedLibrary": false, diff --git a/lib/vendordeps/ReduxLib_2024.json b/comp/vendordeps/ReduxLib_2025.json similarity index 59% rename from lib/vendordeps/ReduxLib_2024.json rename to comp/vendordeps/ReduxLib_2025.json index f694966..6988e45 100644 --- a/lib/vendordeps/ReduxLib_2024.json +++ b/comp/vendordeps/ReduxLib_2025.json @@ -1,25 +1,25 @@ { - "fileName": "ReduxLib_2024.json", + "fileName": "ReduxLib_2025.json", "name": "ReduxLib", - "version": "2024.3.1", - "frcYear": 2024, + "version": "2025.0.0-beta2", + "frcYear": 2025, "uuid": "151ecca8-670b-4026-8160-cdd2679ef2bd", "mavenUrls": [ "https://maven.reduxrobotics.com/" ], - "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2024.json", + "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2025.json", "javaDependencies": [ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-java", - "version": "2024.3.1" + "version": "2025.0.0-beta2" } ], "jniDependencies": [ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-driver", - "version": "2024.3.1", + "version": "2025.0.0-beta2", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -36,8 +36,8 @@ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-cpp", - "version": "2024.3.1", - "libName": "ReduxLib-cpp", + "version": "2025.0.0-beta2", + "libName": "ReduxLib", "headerClassifier": "headers", "sourcesClassifier": "sources", "sharedLibrary": true, @@ -50,6 +50,23 @@ "osxuniversal", "windowsx86-64" ] + }, + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-driver", + "version": "2025.0.0-beta2", + "libName": "ReduxCore", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxx86-64", + "linuxarm32", + "linuxarm64", + "osxuniversal", + "windowsx86-64" + ] } ] } \ No newline at end of file diff --git a/studies/Elevator2018/vendordeps/WPILibNewCommands.json b/comp/vendordeps/WPILibNewCommands.json similarity index 97% rename from studies/Elevator2018/vendordeps/WPILibNewCommands.json rename to comp/vendordeps/WPILibNewCommands.json index bd535bf..3718e0a 100644 --- a/studies/Elevator2018/vendordeps/WPILibNewCommands.json +++ b/comp/vendordeps/WPILibNewCommands.json @@ -3,6 +3,7 @@ "name": "WPILib-New-Commands", "version": "1.0.0", "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", + "frcYear": "2025", "mavenUrls": [], "jsonUrl": "", "javaDependencies": [ diff --git a/comp/vision/.gitignore b/comp/vision/.gitignore deleted file mode 100644 index af6f9cc..0000000 --- a/comp/vision/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -__pycache__/* -*.swp diff --git a/comp/vision/.pylintrc b/comp/vision/.pylintrc deleted file mode 100644 index f2d764d..0000000 --- a/comp/vision/.pylintrc +++ /dev/null @@ -1,618 +0,0 @@ -[MAIN] - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Load and enable all available extensions. Use --list-extensions to see a list -# all available extensions. -#enable-all-extensions= - -# In error mode, messages with a category besides ERROR or FATAL are -# suppressed, and no reports are done by default. Error mode is compatible with -# disabling specific errors. -#errors-only= - -# Always return a 0 (non-error) status code, even if lint errors are found. -# This is primarily useful in continuous integration scripts. -#exit-zero= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-allow-list= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. (This is an alternative name to extension-pkg-allow-list -# for backward compatibility.) -extension-pkg-whitelist= - -# Return non-zero exit code if any of these messages/categories are detected, -# even if score is above --fail-under value. Syntax same as enable. Messages -# specified are enabled, while categories only check already-enabled messages. -fail-on= - -# Specify a score threshold under which the program will exit with error. -fail-under=10 - -# Interpret the stdin as a python script, whose filename needs to be passed as -# the module_or_package argument. -#from-stdin= - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regular expressions patterns to the -# ignore-list. The regex matches against paths and can be in Posix or Windows -# format. Because '\' represents the directory delimiter on Windows systems, it -# can't be used as an escape character. -ignore-paths= - -# Files or directories matching the regular expression patterns are skipped. -# The regex matches against base names, not paths. The default value ignores -# Emacs file locks -ignore-patterns=^\.# - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use, and will cap the count on Windows to -# avoid hangs. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.10 - -# Discover python modules and packages in the file system subtree. -recursive=no - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - -# In verbose mode, extra non-checker-related info will be displayed. -#verbose= - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. If left empty, argument names will be checked with the set -# naming style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. If left empty, attribute names will be checked with the set naming -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Bad variable names regexes, separated by a comma. If names match any regex, -# they will always be refused -bad-names-rgxs= - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. If left empty, class attribute names will be checked -# with the set naming style. -#class-attribute-rgx= - -# Naming style matching correct class constant names. -class-const-naming-style=UPPER_CASE - -# Regular expression matching correct class constant names. Overrides class- -# const-naming-style. If left empty, class constant names will be checked with -# the set naming style. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. If left empty, class names will be checked with the set naming style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. If left empty, constant names will be checked with the set naming -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. If left empty, function names will be checked with the set -# naming style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Good variable names regexes, separated by a comma. If names match any regex, -# they will always be accepted -good-names-rgxs= - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. If left empty, inline iteration names will be checked -# with the set naming style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. If left empty, method names will be checked with the set naming style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. If left empty, module names will be checked with the set naming style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Regular expression matching correct type variable names. If left empty, type -# variable names will be checked with the set naming style. -#typevar-rgx= - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. If left empty, variable names will be checked with the set -# naming style. -#variable-rgx= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[DESIGN] - -# List of regular expressions of class ancestor names to ignore when counting -# public methods (see R0903) -exclude-too-few-public-methods= - -# List of qualified class names to ignore when counting class parents (see -# R0901) -ignored-parents= - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when caught. -overgeneral-exceptions=BaseException, - Exception - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules= - -# Output a graph (.gv or any supported image format) of external dependencies -# to the given file (report RP0402 must not be disabled). -ext-import-graph= - -# Output a graph (.gv or any supported image format) of all (i.e. internal and -# external) dependencies to the given file (report RP0402 must not be -# disabled). -import-graph= - -# Output a graph (.gv or any supported image format) of internal dependencies -# to the given file (report RP0402 must not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[LOGGING] - -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, -# UNDEFINED. -confidence=HIGH, - CONTROL_FLOW, - INFERENCE, - INFERENCE_FAILURE, - UNDEFINED - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then re-enable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[METHOD_ARGS] - -# List of qualified names (i.e., library.method) which require a timeout -# parameter e.g. 'requests.api.get,requests.api.post' -timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -notes-rgx= - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit,argparse.parse_error - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'fatal', 'error', 'warning', 'refactor', -# 'convention', and 'info' which contain the number of messages in each -# category, as well as 'statement' which is the total number of statements -# analyzed. This score is used by the global evaluation report (RP0004). -evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -#output-format= - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=yes - -# Signatures are removed from the similarity computation -ignore-signatures=yes - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: en (aspell), en_AU -# (aspell), en_CA (aspell), en_GB (aspell), en_US (aspell). -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear at the beginning of a comment and should not be checked. -spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members=cv2 - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of symbolic message names to ignore for Mixin members. -ignored-checks-for-mixins=no-member, - not-async-context-manager, - not-context-manager, - attribute-defined-outside-init - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# Regex pattern to define which classes are considered mixins. -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of names allowed to shadow builtins -allowed-redefined-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/comp/vision/.vscode/settings.json b/comp/vision/.vscode/settings.json deleted file mode 100644 index f4d3416..0000000 --- a/comp/vision/.vscode/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "python.testing.unittestArgs": [ - "-v", - "-s", - ".", - "-p", - "test_*.py" - ], - "python.testing.pytestEnabled": false, - "python.testing.unittestEnabled": true, - "workbench.colorTheme": "Default Light+", - "editor.minimap.enabled": false, - "python.analysis.typeCheckingMode": "strict", - "mypy-type-checker.reportingScope": "workspace" -} \ No newline at end of file diff --git a/comp/vision/calibration/calibrate.py b/comp/vision/calibration/calibrate.py deleted file mode 100644 index b15b334..0000000 --- a/comp/vision/calibration/calibrate.py +++ /dev/null @@ -1,150 +0,0 @@ -""" Camera Calibration - -This script is mostly based on this example: - -https://github.com/yumashino/Camera-Calibration-with-ChArUco-Board - -I used the "Charuco" board found here: - -https://github.com/carlosmccosta/charuco_detector/blob/master/boards/vector_format/black_and_white/ChArUco__A4_210x297mm__5x7_Board__17_Markers__40mm_SquareSize__30mm_MarkerSize__DictionaryNumber_3_4X4__4_BitsMarkers.pdf - -and I waved it around near each of the cameras, a v2 and a v3 wide. - -""" - -# pylint: disable=C0103 - -import os -import math -import pprint -import numpy as np -import cv2 - -# import matplotlib.pyplot as plt - -print(os.getcwd()) - -# datadir = "../../../../../CALIB/calib2/" -datadir = "../../../../../CALIB/calib3/" -images = np.array([datadir + f for f in os.listdir(datadir) if f.endswith(".png")]) -print(images) - - -# fig = plt.figure() -# ax = fig.add_subplot(1,1,1) -# plt.imshow(cv2.imread(images[0])) -# plt.show() - - -aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50) -board_shape = (5, 7) -# measured -checker_size = 36 -marker_size = 27 -charuco_board = cv2.aruco.CharucoBoard( - board_shape, checker_size, marker_size, aruco_dict -) -charuco_detector = cv2.aruco.CharucoDetector(charuco_board) - - -obj_points_all = [] -img_points_all = [] - -for im in images: - print("=> Processing image {0}".format(im)) - - img = cv2.imread(im) - # plt.imshow(img) - # plt.show() - - result = charuco_detector.detectBoard(img) - - charucoCorners = result[0] - charucoIds = result[1] - markerCorners = result[2] - markerIds = result[3] - - # img2 = cv2.aruco.drawDetectedMarkers(img.copy(), markerCorners, markerIds) - # plt.imshow(img2) - # plt.show() - - # img3 = cv2.aruco.drawDetectedCornersCharuco( - # img.copy(), charucoCorners, charucoIds, (255, 0, 0) - # ) - # plt.imshow(img3) - # plt.show() - - if charucoIds is None: - continue - - obj_point, imgPoint = charuco_board.matchImagePoints(charucoCorners, charucoIds) - if obj_point.shape[0] > 8 and not None in obj_point: - obj_points_all.append(obj_point) - img_points_all.append(imgPoint) - -n_frames_found_corners = len(obj_points_all) -print(f"Found charuco corners in {n_frames_found_corners} frames.\n") - -camera_img_w = 832 -camera_img_h = 616 - -print("Estimating camera parameters. This may take a while...") -# cv2.CALIB_RATIONAL_MODEL is for fisheyes, which the wide one kinda is? -# cv2.CALIB_THIN_PRISM_MODEL, no idea what this is. -# cv2.CALIB_TILTED_MODEL is for tilt/shift which we don't have -# cv2.CALIB_ZERO_TANGENT_DIST doesn't help -ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera( - obj_points_all, - img_points_all, - (camera_img_w, camera_img_h), - None, - None, - flags=cv2.CALIB_RATIONAL_MODEL, -) - -# pprint.pprint(tvecs) - -print(f"Re-projection RMS error: {ret:.4f}") - -fov_x = 2 * math.atan2(camera_img_w, 2 * mtx[0, 0]) * 180 / math.pi -fov_y = 2 * math.atan2(camera_img_h, 2 * mtx[1, 1]) * 180 / math.pi -shift_x = (mtx[0, 2] - camera_img_w / 2) / camera_img_w -shift_y = (mtx[1, 2] - camera_img_h / 2) / camera_img_h - -# Distance from the calibration board to the camera - - -distances = [np.linalg.norm(tvec) for tvec in tvecs] -# pprint.pprint(distances) -mean_distance = np.mean(distances) / 1000 # mm -> m -variance_distance = np.var(distances) / 1000000 # mm -> m -std_deviation_distance = np.sqrt(variance_distance) - -results = { - "rms_re-projection_error": ret, - "n_max_frames_found_corners": float(n_frames_found_corners), - "distance_calibration-board_to_camera_mean_m": float(mean_distance), - "distance_calibration-board_to_camera_variance_m": float(variance_distance), - "distance_calibration-board_to_camera_stddev_m": float(std_deviation_distance), - "camera_matrix": { - "fx": float(mtx[0, 0]), - "fy": float(mtx[1, 1]), - "cx": float(mtx[0, 2]), - "cy": float(mtx[1, 2]), - }, - "camera_matrix_matrix": mtx, - "distortion": { - "k1": float(dist[0][0]), - "k2": float(dist[0][1]), - "p1": float(dist[0][2]), - "p2": float(dist[0][3]), - "k3": float(dist[0][4]), - }, - "distortion_matrix": dist, - "horizontal_fov": float(fov_x), - "vertical_fov": float(fov_y), - "horizontal_shift": float(shift_x), - "vertical_shift": float(shift_y), -} - -pprint.pprint(results) diff --git a/comp/vision/calibration/calibration.md b/comp/vision/calibration/calibration.md deleted file mode 100644 index 6e812b9..0000000 --- a/comp/vision/calibration/calibration.md +++ /dev/null @@ -1,59 +0,0 @@ -# Calibration - -Joel did a round of calibration of the raspberry pi cameras v2 and v3 wide, using the scripts called calibration_recorder.py (to save some images), calibrate.py (to calculate the coefficients), and undistort.py (to view the results), yielding these results: - -## V2 Camera - -``` -{'camera_matrix': {'cx': 421.5895522145918, - 'cy': 318.3343004658085, - 'fx': 657.9975417150848, - 'fy': 660.1629265845845}, - 'distance_calibration-board_to_camera_mean_m': 0.40868474065165356, - 'distance_calibration-board_to_camera_stddev_m': 0.04476317642201338, - 'distance_calibration-board_to_camera_variance_m': 0.0020037419633882943, - 'distortion': {'k1': 0.022676772278455, - 'k2': 39.27926566019575, - 'k3': -65.9779907190678, - 'p1': 0.000534833047305098, - 'p2': -0.0017694920062869132}, - 'distortion_matrix': array([[ 2.26767723e-02, 3.92792657e+01, 5.34833047e-04, - -1.76949201e-03, -6.59779907e+01, -5.75883422e-02, - 3.81831051e+01, -6.37029103e+01, 0.00000000e+00, - 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, - 0.00000000e+00, 0.00000000e+00]]), - 'horizontal_fov': 64.60388467629332, - 'horizontal_shift': 0.006718211796384347, - 'n_max_frames_found_corners': 114.0, - 'rms_re-projection_error': 0.23647283168381936, - 'vertical_fov': 50.0229489011369, - 'vertical_shift': 0.016776461795143662} -``` - -## V3 Wide Camera - -``` -{'camera_matrix': {'cx': 578.3704209176427, - 'cy': 328.00498435183516, - 'fx': 496.9138631279756, - 'fy': 498.6489729088972}, - 'distance_calibration-board_to_camera_mean_m': 0.3968908060351491, - 'distance_calibration-board_to_camera_stddev_m': 0.13316677774375849, - 'distance_calibration-board_to_camera_variance_m': 0.017733390694655567, - 'distortion': {'k1': -1.1834127905420881, - 'k2': 0.7134539898088045, - 'k3': -0.002945290844279676, - 'p1': 0.0007902041630546306, - 'p2': -0.0007388798560729055}, - 'distortion_matrix': array([[-1.18341279e+00, 7.13453990e-01, 7.90204163e-04, - -7.38879856e-04, -2.94529084e-03, -1.14073111e+00, - 6.16356154e-01, 5.86094708e-02, 0.00000000e+00, - 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, - 0.00000000e+00, 0.00000000e+00]]), - 'horizontal_fov': 79.8699314896507, - 'horizontal_shift': 0.19515675591062825, - 'n_max_frames_found_corners': 240.0, - 'rms_re-projection_error': 0.19604692892144363, - 'vertical_fov': 63.404677225730545, - 'vertical_shift': 0.03247562394778435} -``` diff --git a/comp/vision/calibration/calibration_recorder.py b/comp/vision/calibration/calibration_recorder.py deleted file mode 100644 index ffe8c14..0000000 --- a/comp/vision/calibration/calibration_recorder.py +++ /dev/null @@ -1,165 +0,0 @@ -"""Calibration Recorder - -This just takes frames in the same way as the prod detectors, and writes them to disk. -""" - -# pylint: disable=C0115,C0116,E1101,R0903 - -import os -import pprint -from typing import Any, cast - -import cv2 -import ntcore -import numpy as np -from cscore import CameraServer -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore - - -class TagFinder: - IMAGE_DIR = "images" - - def __init__(self, width: int, height: int) -> None: - self.width = width - self.height = height - - self.fx = 666 - self.fy = 666 - - self.output_stream = CameraServer.putVideo("Processed", width, height) - - # make a place to put example images - if not os.path.exists(TagFinder.IMAGE_DIR): - os.mkdir(TagFinder.IMAGE_DIR) - # to keep track of images to write - self.img_ts_sec = 0 - - def analyze(self, request: CompletedRequest) -> None: - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - - y_len = self.width * self.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((self.height, self.width)) - - # TODO: crop regions that never have targets - # this also makes a view, very fast (150 ns) - # img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - # for now use the full frame - # TODO: probably remove this - img = img[: self.height, : self.width] - - now_us = ntcore._now() # pylint:disable=W0212 - - self.output_stream.putFrame(img) # type: ignore - - # Write some of the files for later analysis - # To retrieve these files, use: - # scp pi@10.1.0.11:images/* . - # These will accumulate forever so remember to clean it out: - # ssh pi@10.1.0.11 "rm images/img*" - # return - - now_s = now_us // 1000000 # once per second - if now_s > self.img_ts_sec: - self.img_ts_sec = now_s - filename = TagFinder.IMAGE_DIR + "/img" + str(now_s) + ".png" - cv2.imwrite(filename, img) - - -def main() -> None: - - camera = Picamera2() - - print("SENSOR MODES AVAILABLE") - pprint.pprint(camera.sensor_modes) # type:ignore - - model: str = cast(str, camera.camera_properties["Model"]) # type: ignore - print("MODEL: " + model) - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - width = 1152 - height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - width = 832 - height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - width = 1408 - height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - width = 100 - height = 100 - - camera_config: dict[str, Any] = camera.create_still_configuration( # type:ignore - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # "ExposureTime": 3000, - # limit auto: go as fast as possible but no slower than 30fps - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - }, - ) - - print("\nREQUESTED CONFIG") - print(camera_config) # type:ignore - camera.align_configuration(camera_config) # type:ignore - print("\nALIGNED CONFIG") - print(camera_config) # type:ignore - camera.configure(camera_config) # type:ignore - print("\nCONTROLS") - print(camera.camera_controls) # type:ignore - - output = TagFinder(width, height) - camera.start() # type:ignore - try: - while True: - # the most recent completed frame, from the recent past - request: CompletedRequest = camera.capture_request() # type:ignore - try: - output.analyze(request) - finally: - # the frame is owned by the camera so remember to release it - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/calibration/manual_calibrator.py b/comp/vision/calibration/manual_calibrator.py deleted file mode 100644 index 908b20f..0000000 --- a/comp/vision/calibration/manual_calibrator.py +++ /dev/null @@ -1,220 +0,0 @@ -""" -MANUAL CALIBRATOR - -This simply finds tags in the viewport and displays their centers in pixels and meters. - -It uses 20% scaled tags 33.02 mm - -Force f_x and f_y to be the same -""" - -# pylint: disable=C0115,C0116,E1101 - - -import math -import sys -from typing import Any, cast - -import cv2 -import numpy as np -import robotpy_apriltag -from cscore import CameraServer -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from robotpy_apriltag import AprilTagDetection -from wpimath.geometry import Transform3d - -Mat = NDArray[np.uint8] - - -class TagFinder: - def __init__(self, width: int, height: int, model: str) -> None: - self.width = width - self.height = height - self.model = model - - self.at_detector = robotpy_apriltag.AprilTagDetector() - self.at_detector.addFamily("tag36h11") - - if self.model == "imx708_wide": - # from testing on 3/23/24, k1 and k2 only - # see https://docs.google.com/spreadsheets/d/1hroyVK2Vg2H-gPxu4nAX5R5qa46zbWO7TYqaq_pViE8 - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif self.model == "imx219": - # from testing on 3/22/24, k1 and k2 only - # this is a particular camera, their c_x and c_y probably vary so - # TODO: test each one, keep track via pi serial number. - # see https://docs.google.com/spreadsheets/d/1hroyVK2Vg2H-gPxu4nAX5R5qa46zbWO7TYqaq_pViE8 - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - - tag_size = 0.03302 # tagsize for mini tags - p1 = 0 - p2 = 0 - - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - - self.output_stream = CameraServer.putVideo("Processed", width, height) - - def analyze(self, request: CompletedRequest) -> None: - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - - y_len = self.width * self.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((self.height, self.width)) - - # for calibration we don't undistort - # turn this on to check the calibration! - img = cv2.undistort(img, self.mtx, self.dist) - - result = self.at_detector.detect(img) - - for result_item in result: - if result_item.getHamming() > 0: - continue - pose = self.estimator.estimate(result_item) - self.draw_result(img, result_item, pose) - - self.output_stream.putFrame(img) # type: ignore - - def draw_result( - self, image: Mat, result_item: AprilTagDetection, pose: Transform3d - ) -> None: - color = (255, 255, 255) - - # Draw lines around the tag - for i in range(4): - j = (i + 1) % 4 - point1 = (int(result_item.getCorner(i).x), int(result_item.getCorner(i).y)) - point2 = (int(result_item.getCorner(j).x), int(result_item.getCorner(j).y)) - cv2.line(image, point1, point2, color, 2) - - (c_x, c_y) = (int(result_item.getCenter().x), int(result_item.getCenter().y)) - cv2.circle(image, (c_x, c_y), 10, (255, 255, 255), -1) - self.draw_text(image, f"cx {c_x} cy {c_y}", (20, 40)) # (c_x, c_y)) - fx = self.mtx[0, 0] - cx = self.mtx[0, 2] - oppo = c_x - cx - angle = math.degrees(math.atan2(oppo, fx)) - self.draw_text(image, f"deg {angle:6.2f}", (20, 80)) # (c_x, c_y + 40)) - t = pose.translation() - self.draw_text( - image, - f"t {t.x:5.2f},{t.y:5.2f},{t.z:5.2f}", - (20, 120), # (c_x, c_y + 80), - ) - - # these are white with black outline - def draw_text( - self, image: NDArray[np.uint8], msg: str, loc: tuple[int, int] - ) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2) - - -def main() -> None: - camera = Picamera2() - - model = cast(str, camera.camera_properties["Model"]) # type:ignore - print("\nMODEL " + model) - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - width = 1152 - height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - width = 832 - height = 616 - else: - print("UNKNOWN CAMERA MODEL: " + model) - sys.exit() - - camera_config: dict[str, Any] = camera.create_still_configuration( # type:ignore - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - "ExposureTime": 3000, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - }, - ) - - print("\nREQUESTED CONFIG") - print(camera_config) # type: ignore - camera.align_configuration(camera_config) # type: ignore - print("\nALIGNED CONFIG") - print(camera_config) # type: ignore - camera.configure(camera_config) # type: ignore - print("\nCONTROLS") - print(camera.camera_controls) # type: ignore - output = TagFinder(width, height, model) - - camera.start() # type: ignore - try: - while True: - # the most recent completed frame, from the recent past - request: CompletedRequest = camera.capture_request() # type: ignore - try: - output.analyze(request) - finally: - # the frame is owned by the camera so remember to release it - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/calibration/undistort.py b/comp/vision/calibration/undistort.py deleted file mode 100644 index a486a5d..0000000 --- a/comp/vision/calibration/undistort.py +++ /dev/null @@ -1,76 +0,0 @@ -""" Undistort Viewer -""" - -# pylint: disable=C0103,C0209 - -import os - -import cv2 -import matplotlib.pyplot as plt # type:ignore -import numpy as np - -print(os.getcwd()) - -# v2 -# reprojection err of 0.24 -# hfov = 64.6, vfov = 50.0 -# datadir = "../../../../../CALIB/calib2/" -# mtx = np.array([[657.99754172, 0. , 421.58955221], -# [ 0. , 660.16292658, 318.33430047], -# [ 0. , 0. , 1. ]]) -# dist = np.array([[ 2.26767723e-02, 3.92792657e+01, 5.34833047e-04, -# -1.76949201e-03, -6.59779907e+01, -5.75883422e-02, -# 3.81831051e+01, -6.37029103e+01, 0.00000000e+00, -# 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, -# 0.00000000e+00, 0.00000000e+00]]) - -# v3 -# these lead to a reprojection error of 0.19 -# hfov = 79.9, vfov=63.4, which is smaller than the spec, -# but i think the spec counts a very fishy 5% at the edge which the -# calibration had a hard time even probing; we should mask it out. -datadir = "../../../../../CALIB/calib3/" -mtx = np.array( - [ - [496.91386313, 0.0, 578.37042092], - [0.0, 498.64897291, 328.00498435], - [0.0, 0.0, 1.0], - ] -) -dist = np.array( - [ - [ - -1.18341279e00, - 7.13453990e-01, - 7.90204163e-04, - -7.38879856e-04, - -2.94529084e-03, - -1.14073111e00, - 6.16356154e-01, - 5.86094708e-02, - 0.00000000e00, - 0.00000000e00, - 0.00000000e00, - 0.00000000e00, - 0.00000000e00, - 0.00000000e00, - ] - ] -) -images = np.array([datadir + f for f in os.listdir(datadir) if f.endswith(".png")]) -print(images) - -for im in images: - print("=> Processing image {0}".format(im)) - - img = cv2.imread(im) - - img2 = cv2.undistort(img, mtx, dist) - - f, axarr = plt.subplots(2, 1) # type: ignore - axarr[0].title.set_text("original") - axarr[0].imshow(img) - axarr[1].title.set_text("undistorted") - axarr[1].imshow(img2) - plt.tight_layout() # type: ignore - plt.show() # type: ignore diff --git a/comp/vision/latency/led_timer.py b/comp/vision/latency/led_timer.py deleted file mode 100644 index 3d38870..0000000 --- a/comp/vision/latency/led_timer.py +++ /dev/null @@ -1,185 +0,0 @@ -""" -led-timer.py - -This is a standalone app for the WPILibPi vision system, specifically -to investigate video pipeline latency, separate from any video -interpretation logic. - -To use it, navigate to the "Application" tab of the WPILibPi webserver, -click "Writable" at the top, choose "Uploaded Python File," choose this -file and click "Upload and Save." -""" - -# pylint: disable=C0115,C0116,E0401,E1101,R0903 - -# import time -from typing import Any - -import numpy as np -from cscore import CameraServer -from ntcore import NetworkTableInstance -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from RPi import GPIO # type: ignore - - -class LEDFinder: - def __init__(self, width: int, height: int) -> None: - self.width = width - self.height = height - - inst = NetworkTableInstance.getDefault() - inst.startClient4("led-finder") - inst.setServer("10.1.0.2") # RoboRIO IP - - # Table for vision output information - self.vision_nt = inst.getTable("Vision") - self.vision_nt_led = self.vision_nt.getBooleanTopic("led").publish() - - # self.output_stream = CameraServer.putVideo("Processed", width, height) - # vertical slice - self.output_stream = CameraServer.putVideo( - "Processed", self.width, int(self.height / 2) - ) - self.camera_params = [ - 357.1, - 357.1, - self.width / 2, - self.height / 2, - ] - - def analyze(self, request: CompletedRequest) -> None: - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - # metadata: dict[str, Any] = request.get_metadata() - # print(metadata) - # sensor timestamp is the boottime when the first byte was received from the sensor - # sensor_timestamp = metadata["SensorTimestamp"] - # system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - # time_delta_ns = system_time_ns - sensor_timestamp - # print(sensor_timestamp, system_time_ns, time_delta_ns//1000000) # ms - y_len = self.width * self.height - # truncate, ignore chrominance - # this makes a view, takes 300ns - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - # this also makes a view, takes 150ns - img = img.reshape((self.height, self.width)) - # slice out the middle, there's never a target near the top or the bottom - # TODO: one slice for squares one for circles - # this also makes a view, takes 150ns - img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - # img = img[:self.height, :self.width] - # for debugging the size: - # img = np.frombuffer(buffer, dtype=np.uint8) - # img = img.reshape((int(height*3/2), -1)) - # img = img[: height, ] - # print(img.shape) # (self.width,self.height) = (616,832) - # print("MIN", np.amin(img), "MAX", np.amax(img)) - - # not instant, ~300us - led_on: bool = np.amax(img) > 200 # type: ignore - self.vision_nt_led.set(led_on) - - self.output_stream.putFrame(img) # type: ignore - - # print(led_on) - if led_on: - GPIO.output(37, 1) - else: - GPIO.output(37, 0) - - -def main() -> None: - print("main") - - GPIO.setmode(GPIO.BOARD) - GPIO.setup(37, GPIO.OUT) - - # full frame, 2x2, to set the detector mode - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # fast path, 200fps, narrow crop - # fullwidth = 640 - # fullheight = 480 - # medium crop - # fullwidth = 1920 - # fullheight = 1080 - - # lores for apriltag detector - # option 1: big, all the pixels yields 270ms delay, but seems even higher - # docs say 41 fps is possible - # width=1664 - # height=1232 - # option 2: medium, two circles, three squares, timer says ~80ms but seems more like 500ms - # remember to note this delay in the kalman filter input - # TODO: report the actual delay in network tables - width = 832 - height = 616 - # option 3: tiny, trade speed for detection distance; two circles, three squraes, ~40ms - # width=448 - # height=308 - # fast path - # width=640 - # height=480 - # medium crop - # width=1920 - # height=1080 - - camera = Picamera2() - # don't use video, it tries to process all the frames? - # camera_config = camera.create_video_configuration( - # no need for extra buffers, dropping frames is fine - # buffer_count=4, - # encode="lores", - # use single-frame - camera_config: dict[str, Any] = camera.create_still_configuration( # type: ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=6, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # fast shutter means more gain - "AnalogueGain": 8.0, - # the flashing LED makes the Auto-Exposure freak out, so turn it off: - "ExposureTime": 5000, - # go as fast as possible but no slower than 30fps - # "FrameDurationLimits": (100, 33333), - "FrameDurationLimits": (24000, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - }, - ) - print("REQUESTED") - print(camera_config) # type: ignore - camera.align_configuration(camera_config) # type: ignore - print("ALIGNED") - print(camera_config) # type: ignore - camera.configure(camera_config) # type: ignore - print(camera.camera_controls) # type: ignore - - # Roborio IP: 10.1.0.2 - # Pi IP: 10.1.0.21 - - output = LEDFinder(width, height) - # the callback blocks the camera thread, so don't do that. - # camera.pre_callback = output.pre_callback - camera.start() # type: ignore - try: - while True: - # the most recent frame, maybe from the past - request: CompletedRequest = camera.capture_request() # type: ignore - try: - output.analyze(request) - finally: - # the frame is owned by the camera so remember to release it - request.release() - # time.sleep(1) - finally: - # not in video mode - # camera.stop_recording() - camera.stop() - - -main() diff --git a/comp/vision/old/README.md b/comp/vision/old/README.md deleted file mode 100644 index 226f387..0000000 --- a/comp/vision/old/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Vision - -What's here: - -* led_timer.py: exploration by @Vasili into image capture pipeline latency -* gamepiece_finder.py: color-based cube- and cone-finder using opencv -* blip_serializer.py: find retroreflective poles for 2023 -* tag_finder.py: find apriltags as used in 2023 - - -# How to set up the Raspberry Pi - -* Make sure you're using a Raspberry Pi 4b or 5; the 3 won't work. -* Grab the image from the [WPILibPi Releases page](https://github.com/wpilibsuite/WPILibPi/releases) -* In ubuntu: - * uncompress the zip file - * find the img file in the file browser - * right click and choose "open with disk image writer" - * choose the destination sd card. make sure you choose the right disk from the list. - * click "start restoring" and confirm -* connect it to the internet and to your computer, e.g. through ethernet. -it's not sufficient to connect directly to your laptop at this stage, the pi needs access to the internet. -* open a browser to wpilibpi.local and click "writeable" -* ssh to it (pi@wpilibpi.local, password raspberry) and do: - -``` -sudo date -s '14 Nov 2023 08:31' -sudo apt update -sudo apt upgrade -python3 -m pip install --upgrade pip setuptools wheel numpy -python3 -m pip install pupil-apriltags msgpack -sudo /sbin/reboot now -``` -* go to the browser at wpilibpi.local and click "writeable" again -* click "application" on the left side -* choose "uploaded python file" from the menu near the top -* choose all24/comp/vision/tag_finder.py -* click "upload and save" -* choose "vision settings" on the left side -* click "open stream", the green button on the right - -you should see a small monochrome image with fps and timestamp, and if there are any apriltags in the image, they should be highlighted with id and coordinates. - -# Details - -The pose estimator and rendering steps make some assumptions about the camera focal length, which are -surely wrong. diff --git a/comp/vision/old/blip_serializer.py b/comp/vision/old/blip_serializer.py deleted file mode 100644 index 61302aa..0000000 --- a/comp/vision/old/blip_serializer.py +++ /dev/null @@ -1,21 +0,0 @@ -# pylint: disable=missing-class-docstring,missing-function-docstring,missing-module-docstring - -import msgpack # type: ignore - -def serialize(result) -> bytes: # type: ignore - tags = {} - tags["tags"] = [] - - for result_item in result: # type: ignore - if result_item.hamming > 0: # type: ignore - continue - - tags["tags"].append( # type: ignore - { - "id": result_item.tag_id, # type: ignore - "pose_t": result_item.pose_t.tolist(), # type: ignore - "pose_R": result_item.pose_R.tolist(), # type: ignore - } - ) - - return msgpack.packb(tags) # type: ignore diff --git a/comp/vision/old/camera_view.py b/comp/vision/old/camera_view.py deleted file mode 100644 index 9685721..0000000 --- a/comp/vision/old/camera_view.py +++ /dev/null @@ -1,298 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E0401,R0902,R0915,W0201 - -import dataclasses -import pprint -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore -import numpy as np -import robotpy_apriltag -from cscore import CameraServer -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from wpimath.geometry import Transform3d -from wpiutil import wpistruct - -Mat = NDArray[np.uint8] - - -@wpistruct.make_wpistruct # type: ignore -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - A = "10000000caeaae82" # "BETA FRONT" - C = "10000000a7c673d9" # "GAMMA INTAKE" - - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class CameraData: - def __init__(self, camera_num: int) -> None: - self.camera = Picamera2(camera_num) - model: str = cast(str, self.camera.camera_properties["Model"]) # type:ignore - print("\nMODEL " + model) - self.id = camera_num - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - self.width: int = 1152 - self.height: int = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - self.width: int = 832 - self.height: int = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - self.width: int = 1408 - self.height: int = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth: int = 100 - fullheight = 100 - self.width: int = 100 - self.height = 100 - - camera_config: dict[str, Any] = ( - self.camera.create_still_configuration( # type:ignore - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (self.width, self.height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # 3/23/24, reduced to 2ms, even less blur. - "ExposureTime": 3000, - "AnalogueGain": 8, - # "AeEnable": True, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "ScalerCrop":(0,0,width/2,height/2), - }, - ) - ) - print("SENSOR MODES AVAILABLE") - pprint.pprint(self.camera.sensor_modes) # type: ignore - print("\nREQUESTED CONFIG") - print(camera_config) - self.camera.align_configuration(camera_config) # type: ignore - print("\nALIGNED CONFIG") - print(camera_config) - self.camera.configure(camera_config) # type: ignore - print("\nCONTROLS") - print(self.camera.camera_controls) # type: ignore - if model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - tag_size = 0.1651 - p1 = 0 - p2 = 0 - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.output_stream = CameraServer.putVideo( - str(camera_num), self.width, self.height - ) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - self.camera.start() # type: ignore - self.frame_time = time.time() - self.fps: float = 0 - - def setFPSPublisher(self, FPSPublisher: ntcore.DoublePublisher) -> None: - self.FPSPublisher = FPSPublisher - - def setLatencyPublisher(self, LatencyPublisher: ntcore.DoublePublisher) -> None: - self.LatencyPublisher = LatencyPublisher - - -class Test: - def __init__(self, serial: str, camList: list[CameraData]) -> None: - # the cpu serial number - self.serial = serial - self.initialize_nt(camList) - - def initialize_nt(self, camList: list[CameraData]) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = ntcore.NetworkTableInstance.getDefault() - self.inst.startClient4("tag_finder24") - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "vision/" + self.serial - for camera in camList: - camera.setFPSPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/fps" - ).publish() - ) - camera.setLatencyPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/latency" - ).publish() - ) - - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Blip24).publish().set( - Blip24(0, Transform3d()) - ) - # blip array topic - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/blips", Blip24 - ).publish() - - self.estimatedTagPose = self.inst.getStructArrayTopic( - topic_name + "/estimatedTagPose", Blip24 - ).subscribe([], ntcore.PubSubOptions()) - - def analyze(self, request: CompletedRequest, camera: CameraData) -> None: - buffer: Mat = request.make_buffer("lores") # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - y_len = camera.width * camera.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((camera.height, camera.width)) - # img = cv2.undistort(img, camera.mtx, camera.dist) - - # compute time since last frame - current_time = time.time() - total_et = current_time - camera.frame_time - camera.frame_time = current_time - - fps: float = 1 / total_et - - camera.fps = fps - camera.FPSPublisher.set(fps) - - # sensor timestamp is the boottime when the first byte was received from the sensor - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - camera.LatencyPublisher.set(time_delta_ms) - self.inst.flush() - self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - img_output = cv2.resize(img, (416, 308)) - camera.output_stream.putFrame(img_output) # type: ignore - - # these are white with black outline - def draw_text( - self, image: NDArray[np.uint8], msg: str, loc: tuple[int, int] - ) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - print(Picamera2.global_camera_info()) # type: ignore - camList: list[CameraData] = [] - if len(Picamera2.global_camera_info()) == 0: # type: ignore - print("NO CAMERAS DETECTED, PLEASE TURN OFF PI AND CHECK CAMERA PORT(S)") - for cameraData in Picamera2.global_camera_info(): # type: ignore - camera = CameraData(cast(int, cameraData["Num"])) - camList.append(camera) - serial: str = getserial() - print(serial) - output = Test(serial, camList) - try: - while True: - for camera in camList: - request: CompletedRequest = camera.camera.capture_request() # type: ignore - try: - output.analyze(request, camera) - finally: - request.release() - finally: - for camera in camList: - camera.camera.stop() - - -main() diff --git a/comp/vision/old/gamepiece_finder.py b/comp/vision/old/gamepiece_finder.py deleted file mode 100644 index f852c5e..0000000 --- a/comp/vision/old/gamepiece_finder.py +++ /dev/null @@ -1,242 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E1101,R0902,R0913,R0914,W0612 - -import math -from typing import Any, cast, Callable - -import cv2 -import msgpack # type: ignore -import numpy as np -from cscore import CameraServer -from cv2.typing import MatLike -from ntcore import NetworkTableInstance -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore - -Mat = NDArray[np.uint8] - - -class GamePieceFinder: - - def __init__(self, topic_name: str, camera_params: list[int]) -> None: - self.purple_lower = np.array((150, 100, 0)) - self.purple_higher = np.array((190, 255, 255)) - self.yellow_lower = np.array((15, 100, 0)) - self.yellow_higher = np.array((100, 255, 255)) - self.scale_factor = 1 - self.width = camera_params[0] - self.height = camera_params[1] - self.cube_height = 0.105 - self.cone_height = 0.105 - self.theta = 0 - self.topic_name = topic_name - self.initialize_nt() - self.output_stream = CameraServer.putVideo("Processed", self.width, self.height) - - def initialize_nt(self) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - inst = NetworkTableInstance.getDefault() - inst.startClient4("retro-finder") - # this is always the RIO IP address; set a matching static IP on your - # laptop if you're using this in simulation. - inst.setServer("10.1.0.2") - # Table for vision output information - self.vision_nt = inst.getTable("Vision") - self.vision_nt_msgpack = self.vision_nt.getRawTopic(self.topic_name).publish( - "msgpack" - ) - - def find_cubes(self, img: MatLike) -> list[list[float]]: - # 15, 100, 0 - # 40, 255, 255 - # 120, 100, 0 - # 145, 255, 255 - purple_range = cv2.inRange(img, self.purple_lower, self.purple_higher) - # img_rgb = cv2.cvtColor(img, cv2.COLOR_HSV2RGB) - floodfill = purple_range.copy() - h, w = purple_range.shape[:2] - mask = np.zeros((h + 2, w + 2), np.uint8) - cv2.floodFill(floodfill, mask, [0, 0], [255]) - # floodfill_inv = cv2.bitwise_not(floodfill) - # img_floodfill: MatLike = cv2.bitwise_or(purple_range, floodfill_inv) - median = cv2.medianBlur(purple_range, 5) - contours, _ = cv2.findContours( - median, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE - ) - cubes: list[list[float]] = [] - for c in contours: - _, _, cnt_width, cnt_height = cv2.boundingRect(c) - if cnt_height < 50: - continue - if cnt_height / cnt_width < 0.5: - continue - if cnt_height / cnt_width > 2: - continue - mmnts = cv2.moments(c) - if mmnts["m00"] == 0: - continue - - cX = int(mmnts["m10"] / mmnts["m00"]) - cY = int(mmnts["m01"] / mmnts["m00"]) - - translation_x = (cX - self.width / 2) * ( - self.cube_height * math.cos(self.theta) / cnt_height - ) - translation_y = (cY - self.height / 2) * ( - self.cube_height * math.cos(self.theta) / cnt_height - ) - translation_z = ( - self.cube_height * self.scale_factor * math.cos(self.theta) - ) / (cnt_height) - - cube = [translation_x, translation_y, translation_z] - - cubes.append(cube) - # self.draw_result(img_rgb, c, cX, cY, cube) - # self.output_stream.putFrame(img_rgb) - return cubes - - def find_cones(self, img: MatLike) -> list[list[float]]: - yellow_range = cv2.inRange(img, self.yellow_lower, self.yellow_higher) - img_rgb = cv2.cvtColor(img, cv2.COLOR_HSV2RGB) - floodfill = yellow_range.copy() - h, w = yellow_range.shape[:2] - mask = np.zeros((h + 2, w + 2), np.uint8) - cv2.floodFill(floodfill, mask, [0, 0], [255]) - floodfill_inv = cv2.bitwise_not(floodfill) - img_floodfill = cv2.bitwise_or(yellow_range, floodfill_inv) - median = cv2.medianBlur(img_floodfill, 5) - contours, _ = cv2.findContours( - median, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE - ) - cones: list[list[float]] = [] - for c in contours: - _, _, cnt_width, cnt_height = cv2.boundingRect(c) - if cnt_height < 50: - continue - if cnt_height / cnt_width < 2: - continue - if cnt_height / cnt_width > 5: - continue - mmnts = cv2.moments(c) - if mmnts["m00"] == 0: - continue - - cX = int(mmnts["m10"] / mmnts["m00"]) - cY = int(mmnts["m01"] / mmnts["m00"]) - - translation_x = (cX - self.width / 2) * ( - self.cone_height * math.cos(self.theta) / cnt_height - ) - translation_y = (cY - self.height / 2) * ( - self.cone_height * math.cos(self.theta) / cnt_height - ) - translation_z = ( - self.cone_height * self.scale_factor * math.cos(self.theta) - ) / (cnt_height) - - cone = [translation_x, translation_y, translation_z] - - cones.append( cone) - self.draw_result(img_rgb, c, cX, cY, cone) - self.output_stream.putFrame(img_rgb) # type: ignore - return cones - - def draw_result(self, img: MatLike, cnt: MatLike, cX: int, cY: int, piece: list[float]) -> None: - float_formatter: dict[str, Callable[[float], str]] = { - "float_kind": lambda x: f"{x:4.1f}" - } - wpi_t = np.array([piece[2], -piece[0], -piece[1]]) - cv2.drawContours(img, [cnt], -1, (0, 255, 0), 2) - cv2.circle(img, (int(cX), int(cY)), 7, (0, 0, 0), -1) - cv2.putText( - img, - f"t: {np.array2string(wpi_t.flatten(), formatter=float_formatter)}", # type: ignore - (int(cX) - 20, int(cY) - 20), - cv2.FONT_HERSHEY_SIMPLEX, - 0.5, - (0, 0, 0), - 2, - ) - - def analyze(self, request: CompletedRequest) -> None: - buffer: Mat = cast(Mat, request.make_array("lores")) # type: ignore - # img = np.frombuffer(buffer, dtype=np.uint8) - img = buffer - # print(buffer.shape) - # img = img.reshape((self.height, self.width)) - img_bgr = cv2.cvtColor(img, cv2.COLOR_YUV420p2BGR) - img_bgr: MatLike = img_bgr[201:401, :, :] - img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV) - img_hsv = np.ascontiguousarray(img_hsv) - cubes = self.find_cubes(img_hsv) - cones = self.find_cones(img_hsv) - pieces: dict[str, dict[str, list[list[float]]]] = {} - pieces["pieces"] = {} - pieces["pieces"]["cubes"] = cubes - pieces["pieces"]["cones"] = cones - posebytes: bytes = msgpack.packb(pieces) # type: ignore - - self.vision_nt_msgpack.set(posebytes) - - -def main() -> None: - print("main") - fullwidth = 1664 - fullheight = 1232 - width = 832 - height = 616 - # option 3: tiny, trade speed for detection distance; two circles, three squraes, ~40ms - # width=448 - # height=308 - # fast path - # width=640 - # height=480 - # medium crop - # width=1920 - # height=1080 - - camera = Picamera2() - camera_config: dict[str, Any] = camera.create_still_configuration( # type: ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=6, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - "AwbEnable": False, - # "AeEnable": False, - # "AnalogueGain": 1.0 - }, - ) - print("REQUESTED") - print(camera_config) - camera.align_configuration(camera_config) # type:ignore - print("ALIGNED") - print(camera_config) - camera.configure(camera_config) # type:ignore - print(camera.camera_controls) # type:ignore - - # Roborio IP: 10.1.0.2 - # Pi IP: 10.1.0.21 - camera_params: list[int] = [width, 200] - topic_name = "pieces" - output = GamePieceFinder(topic_name, camera_params) - - camera.start() # type:ignore - try: - while True: - request: CompletedRequest = camera.capture_request() # type:ignore - try: - output.analyze(request) - finally: - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/old/gamepiece_finder24.py b/comp/vision/old/gamepiece_finder24.py deleted file mode 100644 index f570823..0000000 --- a/comp/vision/old/gamepiece_finder24.py +++ /dev/null @@ -1,335 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E0401,R0902,R0914,R0915,W0201 - - -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore as nt -import numpy as np -from cscore import CameraServer -from cv2.typing import MatLike -from ntcore import NetworkTableInstance -from numpy.typing import NDArray -from picamera2 import CompletedRequest # type: ignore -from picamera2 import Picamera2 # type: ignore -from wpimath.geometry import Rotation3d - -Mat = NDArray[np.uint8] - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - C = "10000000a7c673d9" # "GAMMA INTAKE" - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class CameraData: - def __init__(self, camera_num: int) -> None: - self.camera = Picamera2(camera_num) - model: str = cast(str, self.camera.camera_properties["Model"]) # type: ignore - print("\nMODEL " + model) - self.id = camera_num - self.fps: float = 0 - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - self.width = 1152 - self.height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - self.width = 832 - self.height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - self.width = 1408 - self.height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - self.width = 100 - self.height = 100 - - camera_config: dict[str, Any] = ( - self.camera.create_still_configuration( # type:ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (self.width, self.height)}, - controls={ - # no duration limit => sacrifice speed for color - # "FrameDurationLimits": (33333, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "AwbEnable": False, - # "AeEnable": False, - "ExposureTime": 300, - # "AnalogueGain": 1.0 - }, - ) - ) - - print("\nREQUESTED CONFIG") - print(camera_config) - self.camera.align_configuration(camera_config) # type:ignore - print("\nALIGNED CONFIG") - print(camera_config) - self.camera.configure(camera_config) # type:ignore - print("\nCONTROLS") - print(self.camera.camera_controls) # type:ignore - - fx: int - fy: int - cx: int - cy: int - k1: float - k2: float - if model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - p1 = 0 - p2 = 0 - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.output_stream = CameraServer.putVideo( - str(camera_num), self.width, self.height - ) - self.fps = 0 - self.camera.start() # type:ignore - self.frame_time = time.time() - - def setFPSPublisher(self, FPSPublisher: nt.DoublePublisher) -> None: - self.FPSPublisher = FPSPublisher - - def setLatencyPublisher(self, LatencyPublisher: nt.DoublePublisher) -> None: - self.LatencyPublisher = LatencyPublisher - - -class GamePieceFinder: - def __init__(self, serial: str, camList: list[CameraData]) -> None: - self.serial = serial - self.objects: list[Rotation3d] = [] - # opencv hue values are 0-180, half the usual number - self.object_lower = np.array((0, 150, 50)) - self.object_lower2 = np.array((178, 150, 50)) - self.object_higher = np.array((8, 255, 255)) - self.object_higher2 = np.array((180, 255, 255)) - self.frame_time = 0 - self.theta = 0 - self.initialize_nt(camList) - - def initialize_nt(self, camList: list[CameraData]) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = NetworkTableInstance.getDefault() - self.inst.startClient4("gamepiece_finder24") - - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "noteVision/" + self.serial - for camera in camList: - camera.setFPSPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/fps" - ).publish() - ) - camera.setLatencyPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/latency" - ).publish() - ) - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Rotation3d).publish().set( - Rotation3d(0, 0, 0) - ) - - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/Rotation3d", Rotation3d - ).publish(nt.PubSubOptions(keepDuplicates=True)) - - def find_object(self, img_yuv: Mat, camera: CameraData) -> None: - # this says YUV->RGB but it actually makes BGR. - # github.com/raspberrypi/picamera2/issues/848 - img_bgr = cv2.cvtColor(img_yuv, cv2.COLOR_YUV420p2RGB) - serial: str = getserial() - identity = Camera(serial) - if identity == Camera.GAME_PIECE: - img_bgr: MatLike = img_bgr[65:583, :, :] - - img_bgr = cv2.undistort(img_bgr, camera.mtx, camera.dist) - img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV) - img_hsv = np.ascontiguousarray(img_hsv) - - img_range1 = cv2.inRange(img_hsv, self.object_lower, self.object_higher) - img_range2 = cv2.inRange(img_hsv, self.object_lower2, self.object_higher2) - img_range = cv2.bitwise_or(img_range1, img_range2) - floodfill = img_range.copy() - h, w = img_range.shape[:2] - mask = np.zeros((h + 2, w + 2), np.uint8) - cv2.floodFill(floodfill, mask, [0, 0], [255]) - floodfill_inv = cv2.bitwise_not(floodfill) - img_floodfill = cv2.bitwise_or(img_range, floodfill_inv) - median = cv2.medianBlur(img_floodfill, 5) - contours, _ = cv2.findContours(median, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) - width, height = camera.width, camera.height - self.objects = [] - for c in contours: - _, _, cnt_width, cnt_height = cv2.boundingRect(c) - # reject anything taller than it is wide - if cnt_width / cnt_height < 1.2: - continue - # reject big bounding box - if cnt_width > width / 2 or cnt_height > height / 2: - continue - - if (cnt_height < 20 or cnt_width < 20) and cnt_width / cnt_height < 3: - continue - - mmnts = cv2.moments(c) - # reject too small (m00 is in pixels) - # TODO: make this adjustable at runtime - # to pick out distant targets - if mmnts["m00"] < 100: - continue - - cX = int(mmnts["m10"] / mmnts["m00"]) - cY = int(mmnts["m01"] / mmnts["m00"]) - - yNormalized = (height / 2 - cY) / camera.mtx[1, 1] - xNormalized = (width / 2 - cX) / camera.mtx[0, 0] - - # pitchRad = math.atan(yNormalized) - # yawRad = math.atan(zNormalized) - # Puts up angle to the target from the POV of the camera - # these are not extrinsic euler angles; this is wrong. - # rotation = Rotation3d(0, pitchRad, yawRad) - # the correct rotation is one that matches the normalized (x,y) coordinates - rotation = Rotation3d( - initial=np.array([1, 0, 0]), - final=np.array([1, xNormalized, yNormalized]), - ) - self.objects.append(rotation) - self.draw_result(img_bgr, c, cX, cY) - # img_output = cv2.resize(img_bgr, (269, 162)) - camera.output_stream.putFrame(img_range) # type:ignore - - def draw_result(self, img: MatLike, cnt: MatLike, cX: int, cY: int) -> None: - # float_formatter: dict[str, Callable[[float], str]] = {"float_kind": lambda x: f"{x:4.1f}"} - cv2.drawContours(img, [cnt], -1, (0, 255, 0), 2) - cv2.circle(img, (cX, cY), 7, (0, 0, 0), -1) - # cv2.putText(img, f"t: {np.array2string(wpi_t.flatten(), formatter=float_formatter)}", (cX - 20, cY - 20), - # cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) - - def analyze(self, request: CompletedRequest, camera: CameraData) -> None: - img_yuv: Mat = cast(Mat, request.make_array("lores")) # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - self.find_object(img_yuv, camera) - - current_time = time.time() - total_et = current_time - camera.frame_time - camera.frame_time = current_time - - fps = 1 / total_et - - camera.fps = fps - camera.FPSPublisher.set(fps) - - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - camera.LatencyPublisher.set(time_delta_ms) - self.inst.flush() - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - print(Picamera2.global_camera_info()) # type: ignore - camList: list[CameraData] = [] - if len(Picamera2.global_camera_info()) == 0: # type:ignore - print("NO CAMERAS DETECTED, PLEASE TURN OFF PI AND CHECK CAMERA PORT(S)") - for cameraData in Picamera2.global_camera_info(): # type:ignore - camera = CameraData(cast(int, cameraData["Num"])) - camList.append(camera) - serial: str = getserial() - print(serial) - output = GamePieceFinder(serial, camList) - try: - while True: - for camera in camList: - request: CompletedRequest = ( - camera.camera.capture_request() # type:ignore - ) - try: - output.analyze(request, camera) - finally: - request.release() # type: ignore - output.vision_nt_struct.set(output.objects) - output.objects = [] - finally: - for camera in camList: - camera.camera.stop() - - -main() diff --git a/comp/vision/old/gamepiece_finder_one_camera24.py b/comp/vision/old/gamepiece_finder_one_camera24.py deleted file mode 100644 index 78b2bae..0000000 --- a/comp/vision/old/gamepiece_finder_one_camera24.py +++ /dev/null @@ -1,316 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E1101,R0902,R0914 - -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore as nt -import numpy as np -from cscore import CameraServer -from cv2.typing import MatLike -from ntcore import NetworkTableInstance -from numpy.typing import NDArray -from picamera2 import CompletedRequest # type: ignore -from picamera2 import Picamera2 # type: ignore -from wpimath.geometry import Rotation3d - -Mat = NDArray[np.uint8] - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - C = "10000000a7c673d9" # "GAMMA INTAKE" - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class GamePieceFinder: - def __init__(self, serial: str, width: int, height: int, model: str) -> None: - self.serial = serial - self.width = width - self.height = height - self.model = model - - # opencv hue values are 0-180, half the usual number - # for light - lower_value_bound = 190 - lower_saturation_bound = 10 - self.object_lower = np.array((0, lower_saturation_bound, lower_value_bound)) - self.object_higher = np.array((15, 255, 255)) - self.secobject_lower = np.array( - (165, lower_saturation_bound, lower_value_bound) - ) - self.secobject_higher = np.array((180, 255, 255)) - # for darkness - # self.object_lower = np.array((4,150, 100)) - # self.object_higher = np.array((16, 255, 255)) - self.frame_time = 0 - self.theta = 0 - self.initialize_nt() - - # from testing on 3/22/24, k1 and k2 only - - if self.model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif self.model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - - p1 = 0 - p2 = 0 - - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - - # self.horzFOV = 2 * math.atan(self.mtx[0,2]/self.mtx[0,0]) - # self.vertFOV = 2 * math.atan(self.mtx[1,2]/self.mtx[1,1]) - - self.output_stream = CameraServer.putVideo("Processed", width, height) - - def initialize_nt(self) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = NetworkTableInstance.getDefault() - self.inst.startClient4("gamepiece_finder24") - - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "noteVision/" + self.serial - self.vision_fps = self.inst.getDoubleTopic(topic_name + "/fps").publish() - self.vision_latency = self.inst.getDoubleTopic( - topic_name + "/latency" - ).publish() - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Rotation3d).publish().set( - Rotation3d(0, 0, 0) - ) - - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/Rotation3d", Rotation3d - ).publish(nt.PubSubOptions(keepDuplicates=True)) - - def find_object(self, img_yuv: Mat) -> list[Rotation3d]: - # this says YUV->RGB but it actually makes BGR. - # github.com/raspberrypi/picamera2/issues/848 - img_bgr = cv2.cvtColor(img_yuv, cv2.COLOR_YUV420p2RGB) - serial: str = getserial() - identity = Camera(serial) - if identity == Camera.GAME_PIECE: - img_bgr: MatLike = img_bgr[65:583, :, :] - - img_bgr = cv2.undistort(img_bgr, self.mtx, self.dist) - img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV) - img_hsv = np.ascontiguousarray(img_hsv) - - img1 = cv2.inRange(img_hsv, self.object_lower, self.object_higher) - img2 = cv2.inRange(img_hsv, self.secobject_lower, self.secobject_higher) - img_range = cv2.bitwise_or(img1, img2) - - floodfill = img_range.copy() - h, w = img_range.shape[:2] - mask = np.zeros((h + 2, w + 2), np.uint8) - cv2.floodFill(floodfill, mask, [0, 0], [255]) - floodfill_inv = cv2.bitwise_not(floodfill) - img_floodfill = cv2.bitwise_or(img_range, floodfill_inv) - median = cv2.medianBlur(img_floodfill, 5) - contours, _ = cv2.findContours( - median, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE - ) - objects: list[Rotation3d] = [] - for c in contours: - _, _, cnt_width, cnt_height = cv2.boundingRect(c) - # reject anything taller than it is wide - if cnt_width / cnt_height < 1.2: - continue - # reject big bounding box - if cnt_width > self.width / 2 or cnt_height > self.height / 2: - continue - - if (cnt_height < 20 or cnt_width < 20) and cnt_width / cnt_height < 3: - continue - - mmnts = cv2.moments(c) - # reject too small (m00 is in pixels) - # TODO: make this adjustable at runtime - # to pick out distant targets - if mmnts["m00"] < 100: - continue - - cX = int(mmnts["m10"] / mmnts["m00"]) - cY = int(mmnts["m01"] / mmnts["m00"]) - - yNormalized: float = (cY - self.height / 2) / self.mtx[1, 1] - zNormalized: float = (self.width / 2 - cX) / self.mtx[0, 0] - # pitchRad = math.atan(yNormalized) - # yawRad = math.atan(zNormalized) - # Puts up angle to the target from the POV of the camera - # these are not extrinsic euler angles; this is wrong. - # rotation = Rotation3d(0, pitchRad, yawRad) - # the correct rotation is one that matches the normalized (x,y) coordinates - rotation = Rotation3d( - initial=np.array([1, 0, 0]), - final=np.array([1, yNormalized, zNormalized]), - ) - objects.append(rotation) - self.draw_result(img_bgr, c, cX, cY) - img_output = cv2.resize(img_bgr, (269, 162)) - self.output_stream.putFrame(img_output) # type: ignore - return objects - - def draw_result(self, img: MatLike, cnt: MatLike, cX: int, cY: int) -> None: - # float_formatter: dict[str, Callable[[float], str]] = {"float_kind": lambda x: f"{x:4.1f}"} - cv2.drawContours(img, [cnt], -1, (0, 255, 0), 2) - cv2.circle(img, (cX, cY), 7, (0, 0, 0), -1) - # cv2.putText(img, f"t: {np.array2string(wpi_t.flatten(), formatter=float_formatter)}", (cX - 20, cY - 20), - # cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) - - def analyze(self, request: CompletedRequest) -> None: - img_yuv: Mat = cast(Mat, request.make_array("lores")) # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - objects = self.find_object(img_yuv) - - current_time = time.time() - total_et = current_time - self.frame_time - self.frame_time = current_time - - fps = 1 / total_et - - self.vision_nt_struct.set(objects) - self.vision_fps.set(fps) - - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - self.vision_latency.set(time_delta_ms) - self.inst.flush() - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - - camera = Picamera2() - - model: str = cast(str, camera.camera_properties["Model"]) # type: ignore - print("\nMODEL " + model) - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - width = 1152 - height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - width = 832 - height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - width = 1408 - height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - width = 100 - height = 100 - - camera_config: dict[str, Any] = camera.create_still_configuration( # type:ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # no duration limit => sacrifice speed for color - # "FrameDurationLimits": (33333, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - "AwbEnable": False, - "AeEnable": False, - "ExposureTime": 40000, - # "AnalogueGain": 1.0 - }, - ) - - serial: str = getserial() - # identity = Camera(serial) - - print("\nREQUESTED CONFIG") - print(camera_config) # type:ignore - camera.align_configuration(camera_config) # type:ignore - print("\nALIGNED CONFIG") - print(camera_config) # type:ignore - camera.configure(camera_config) # type:ignore - print("\nCONTROLS") - print(camera.camera_controls) # type:ignore - print(serial) - output = GamePieceFinder(serial, width, height, model) - - camera.start() # type:ignore - try: - while True: - request: CompletedRequest = camera.capture_request() # type:ignore - try: - output.analyze(request) - finally: - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/old/robot_detection.py b/comp/vision/old/robot_detection.py deleted file mode 100644 index f72bba1..0000000 --- a/comp/vision/old/robot_detection.py +++ /dev/null @@ -1,314 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,R0902,R0914,R0915,W0201,W0612 - -import math -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore as nt -import numpy as np -from cscore import CameraServer -from cv2.typing import MatLike -from ntcore import NetworkTableInstance -from numpy.typing import NDArray -from picamera2 import CompletedRequest # type: ignore -from picamera2 import Picamera2 # type: ignore -from wpimath.geometry import Rotation3d - -Mat = NDArray[np.uint8] - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - C = "10000000a7c673d9" # "GAMMA INTAKE" - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class CameraData: - def __init__(self, camera_num: int) -> None: - self.camera = Picamera2(camera_num) - model: str = cast(str, self.camera.camera_properties["Model"]) # type: ignore - print("\nMODEL " + model) - self.id = camera_num - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - self.width = 1152 - self.height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - self.width = 832 - self.height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - self.width = 1408 - self.height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - self.width = 100 - self.height = 100 - - camera_config: dict[str, Any] = ( - self.camera.create_still_configuration( # type:ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (self.width, self.height)}, - controls={ - # no duration limit => sacrifice speed for color - # "FrameDurationLimits": (33333, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "AwbEnable": False, - # "AeEnable": False, - "ExposureTime": 3000, - # "AnalogueGain": 1.0 - }, - ) - ) - - print("\nREQUESTED CONFIG") - print(camera_config) - self.camera.align_configuration(camera_config) # type:ignore - print("\nALIGNED CONFIG") - print(camera_config) - self.camera.configure(camera_config) # type:ignore - print("\nCONTROLS") - print(self.camera.camera_controls) # type:ignore - - if model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 704 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - p1 = 0 - p2 = 0 - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.output_stream = CameraServer.putVideo( - str(camera_num), self.width, self.height - ) - self.fps: float = 0 - self.camera.start() # type: ignore - self.frame_time = time.time() - - def setFPSPublisher(self, FPSPublisher: nt.DoublePublisher) -> None: - self.FPSPublisher = FPSPublisher - - def setLatencyPublisher(self, LatencyPublisher: nt.DoublePublisher) -> None: - self.LatencyPublisher = LatencyPublisher - - -class GamePieceFinder: - def __init__(self, serial: str, camList: list[CameraData]) -> None: - self.serial = serial - self.objects: list[Rotation3d] = [] - # opencv hue values are 0-180, half the usual number - self.object_lower = np.array((0, 0, 0)) - self.object_higher = np.array((180, 25, 150)) - self.frame_time = 0 - self.theta = 0 - self.initialize_nt(camList) - - def initialize_nt(self, camList: list[CameraData]) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = NetworkTableInstance.getDefault() - self.inst.startClient4("gamepiece_finder24") - - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "noteVision/" + self.serial - for camera in camList: - camera.setFPSPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/fps" - ).publish() - ) - camera.setLatencyPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/latency" - ).publish() - ) - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Rotation3d).publish().set( - Rotation3d(0, 0, 0) - ) - - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/Rotation3d", Rotation3d - ).publish(nt.PubSubOptions(keepDuplicates=True)) - - def find_object(self, img_yuv: Mat, camera: CameraData): - # this says YUV->RGB but it actually makes BGR. - # github.com/raspberrypi/picamera2/issues/848 - img_bgr = cv2.cvtColor(img_yuv, cv2.COLOR_YUV420p2RGB) - serial: str = getserial() - identity = Camera(serial) - if identity == Camera.GAME_PIECE: - img_bgr: MatLike = img_bgr[65:583, :, :] - - img_bgr = cv2.undistort(img_bgr, camera.mtx, camera.dist) - img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV) - img_hsv = np.ascontiguousarray(img_hsv) - - img_range = cv2.inRange(img_hsv, self.object_lower, self.object_higher) - - floodfill: MatLike = img_range.copy() - h, w = img_range.shape[:2] - mask: MatLike = np.zeros((h + 2, w + 2), np.uint8) - cv2.floodFill(floodfill, mask, [0, 0], [255]) - floodfill_inv = cv2.bitwise_not(floodfill) - img_floodfill = cv2.bitwise_or(img_range, floodfill_inv) - median = cv2.medianBlur(img_floodfill, 5) - contours, _ = cv2.findContours(median, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) - width = camera.width - height = camera.height - # objects: list[Rotation3d] = [] - for c in contours: - # _, _, cnt_width, cnt_height = cv2.boundingRect(c) - # reject anything taller than it is wide - # if cnt_width / cnt_height < 1.2: - # continue - # # reject big bounding box - # if cnt_width > width / 2 or cnt_height > height / 2: - # continue - - # if (cnt_height < 20 or cnt_width < 20) and cnt_width/cnt_height < 3: - # continue - - mmnts = cv2.moments(c) - # reject too small (m00 is in pixels) - # TODO: make this adjustable at runtime - # to pick out distant targets - if mmnts["m00"] < 100: - continue - - cX = int(mmnts["m10"] / mmnts["m00"]) - cY = int(mmnts["m01"] / mmnts["m00"]) - - pitchRad = math.atan((cY - height / 2) / camera.mtx[1, 1]) - yawRad = math.atan((width / 2 - cX) / camera.mtx[0, 0]) - # Puts up angle to the target from the POV of the camera - rotation = Rotation3d(0, pitchRad, yawRad) - self.objects.append(rotation) - self.draw_result(img_bgr, c, cX, cY) - # img_output = cv2.resize(img_bgr, (269, 162)) - camera.output_stream.putFrame(img_range) # type: ignore - - def draw_result(self, img: MatLike, cnt: MatLike, cX: int, cY: int) -> None: - # float_formatter: dict[str, Callable[[float], str]] = {"float_kind": lambda x: f"{x:4.1f}"} - cv2.drawContours(img, [cnt], -1, (0, 255, 0), 2) - cv2.circle(img, (cX, cY), 7, (0, 0, 0), -1) - # cv2.putText(img, f"t: {np.array2string(wpi_t.flatten(), formatter=float_formatter)}", (cX - 20, cY - 20), - # cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) - - def analyze(self, request: CompletedRequest, camera: CameraData) -> None: - img_yuv: Mat = cast(Mat, request.make_array("lores")) # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - self.find_object(img_yuv, camera) - - current_time = time.time() - total_et = current_time - camera.frame_time - camera.frame_time = current_time - - fps = 1 / total_et - - camera.fps = fps - camera.FPSPublisher.set(fps) - - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - camera.LatencyPublisher.set(time_delta_ms) - self.inst.flush() - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - print(str(Picamera2.global_camera_info())) # type: ignore - camList: list[CameraData] = [] - if len(Picamera2.global_camera_info()) == 0: # type: ignore - print("NO CAMERAS DETECTED, PLEASE TURN OFF PI AND CHECK CAMERA PORT(S)") - for cameraData in Picamera2.global_camera_info(): # type: ignore - camera = CameraData(cameraData["Num"]) # type: ignore - camList.append(camera) - serial: str = getserial() - print(serial) - output = GamePieceFinder(serial, camList) - try: - while True: - for camera in camList: - request: CompletedRequest = camera.camera.capture_request() # type: ignore - try: - output.analyze(request, camera) - finally: - request.release() - output.vision_nt_struct.set(output.objects) - output.objects = [] - finally: - for camera in camList: - camera.camera.stop() - - -main() diff --git a/comp/vision/old/sensor_modes.md b/comp/vision/old/sensor_modes.md deleted file mode 100644 index b24cae0..0000000 --- a/comp/vision/old/sensor_modes.md +++ /dev/null @@ -1,109 +0,0 @@ -# SENSOR MODES - -The Raspberry Pi cameras we use advertise a few sensor modes to choose from: - -## V2 Camera - -``` -[{'bit_depth': 10, - 'crop_limits': (1000, 752, 1280, 960), - 'exposure_limits': (37, None), - 'format': SRGGB10_CSI2P, - 'fps': 206.65, - 'size': (640, 480), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 10, - 'crop_limits': (0, 0, 3280, 2464), - 'exposure_limits': (75, 5883419, None), - 'format': SRGGB10_CSI2P, - 'fps': 41.85, - 'size': (1640, 1232), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 10, - 'crop_limits': (680, 692, 1920, 1080), - 'exposure_limits': (75, 11766829, None), - 'format': SRGGB10_CSI2P, - 'fps': 47.57, - 'size': (1920, 1080), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 10, - 'crop_limits': (0, 0, 3280, 2464), - 'exposure_limits': (75, 11766829, None), - 'format': SRGGB10_CSI2P, - 'fps': 21.19, - 'size': (3280, 2464), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 8, - 'crop_limits': (1000, 752, 1280, 960), - 'exposure_limits': (37, 5883414, None), - 'format': SRGGB8, - 'fps': 206.65, - 'size': (640, 480), - 'unpacked': 'SRGGB8'}, - - {'bit_depth': 8, - 'crop_limits': (0, 0, 3280, 2464), - 'exposure_limits': (37, 5883414, None), - 'format': SRGGB8, - 'fps': 83.7, - 'size': (1640, 1232), - 'unpacked': 'SRGGB8'}, - - {'bit_depth': 8, - 'crop_limits': (680, 692, 1920, 1080), - 'exposure_limits': (75, 5883419, None), - 'format': SRGGB8, - 'fps': 47.57, - 'size': (1920, 1080), - 'unpacked': 'SRGGB8'}, - - {'bit_depth': 8, - 'crop_limits': (0, 0, 3280, 2464), - 'exposure_limits': (75, 11766829, None), - 'format': SRGGB8, - 'fps': 21.19, - 'size': (3280, 2464), - 'unpacked': 'SRGGB8'}] -``` - -There are four uncropped modes here: one each of 8 bit or 10 bit, and one each of full or 2x2 binned. - -We'll take the 10 bit 2x2 binned one, and we add a bit to the width so that the image stride is a multiple of 16. - -## V3 Wide Camera - -``` -[{'bit_depth': 10, - 'crop_limits': (768, 432, 3072, 1728), - 'exposure_limits': (9, None), - 'format': SRGGB10_CSI2P, - 'fps': 120.13, - 'size': (1536, 864), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 10, - 'crop_limits': (0, 0, 4608, 2592), - 'exposure_limits': (13, 77208384, None), - 'format': SRGGB10_CSI2P, - 'fps': 56.03, - 'size': (2304, 1296), - 'unpacked': 'SRGGB10'}, - - {'bit_depth': 10, - 'crop_limits': (0, 0, 4608, 2592), - 'exposure_limits': (26, 112015443, None), - 'format': SRGGB10_CSI2P, - 'fps': 14.35, - 'size': (4608, 2592), - 'unpacked': 'SRGGB10'}] -``` - -The first mode is a very fast center crop: more frame rate than we can use, and narrower than we want. - -The third one is *all* the pixels, which is a lot. - -The middle one is a 2x2 bin of the full sensor, which is what we want. \ No newline at end of file diff --git a/comp/vision/old/struct_demo.py b/comp/vision/old/struct_demo.py deleted file mode 100644 index dcbfa11..0000000 --- a/comp/vision/old/struct_demo.py +++ /dev/null @@ -1,45 +0,0 @@ -import dataclasses - -import ntcore -from wpiutil import wpistruct -from wpimath.geometry import Pose2d,Rotation2d,Transform3d,Rotation3d -import time - -@wpistruct.make_wpistruct -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - -def main() -> None: - inst = ntcore.NetworkTableInstance.getDefault() - inst.startClient4("struct_demo") -# inst.setServer("10.1.0.2") - inst.setServer("192.168.3.18") # my desktop - - -# vision_nt_struct = inst.getStructArrayTopic("vision/foo", Pose2d).publish() - # the array by itself seems not to publish the schema. -# vision_nt_struct2 = inst.getStructTopic("vision/foo2", Pose2d).publish() - inst.getStructTopic("bugfix", Blip24).publish().set(Blip24(1, Transform3d())) - - vision_nt_struct4 = inst.getStructArrayTopic("vision/blips", Blip24).publish() - -# t = Pose2d(1,2) -# t2 = Pose2d(3,4) - # t3 = Blip24(3, Pose2d(1,2,Rotation2d())) - # t4 = Blip24(3, Pose2d(3,4,Rotation2d(1))) - t3 = Blip24(3, Transform3d(1,2,3,Rotation3d())) - t4 = Blip24(3, Pose2d(3,4,5,Rotation3d())) - - while True: - -# vision_nt_struct.set([t, t2]) -# vision_nt_struct2.set(t) - vision_nt_struct4.set([t3, t4]) - # empty? - # vision_nt_struct4.set([]) - - time.sleep(0.1) - -main() \ No newline at end of file diff --git a/comp/vision/old/tag_finder.py b/comp/vision/old/tag_finder.py deleted file mode 100644 index 9bce3b7..0000000 --- a/comp/vision/old/tag_finder.py +++ /dev/null @@ -1,413 +0,0 @@ -# pylint: disable=C0114,C0115,C0116,C0116,E1101,R0902 - -import os -import time -from enum import Enum -from typing import Any, Callable, Union - -import cv2 -import msgpack # type: ignore -import ntcore -import numpy as np -from cscore import CameraServer -from cv2.typing import MatLike -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from pupil_apriltags import Detection, Detector # type: ignore - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - FRONT = "1000000013c9c96c" # "2" - REAR = "100000004e0a1fb9" # "1" - LEFT = "10000000a7c673d9" # "4" - RIGHT = "10000000a7a892c0" # "3" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class TagFinder: - IMAGE_DIR = "images" - - def __init__(self, topic_name: str, width: int, height: int) -> None: - self.frame_time = time.time() - # each camera has its own topic - self.topic_name = topic_name - self.width = width - self.height = height - - # for the driver view - scale = 0.25 - self.view_width = int(width * scale) - self.view_height = int(height * scale) - - self.initialize_nt() - - # tag size was wrong before. full size is 0.2m but - # https://github.com/AprilRobotics/apriltag/wiki/AprilTag-User-Guide - # this points out that the apriltag library expects tag_size to be - # the boundary between the outer white boundary and the inner black - # boundary, which in this case is 0.15 m - self.tag_size = 0.15 - # self.circle_tag_size = 0.8 - self.at_detector = Detector(families="tag16h5") - # self.at_circle_detector = Detector(families="tagCircle21h7") - # self.output_stream = CameraServer.putVideo("Processed", width, height) - # vertical slice - # TODO: one slice for squares one for circles - # for now use the full frame - # self.output_stream = CameraServer.putVideo("Processed", width, int(height / 2)) - self.output_stream = CameraServer.putVideo("Processed", width, height) - self.camera_params = [ - 666, - 666, - width / 2, - height / 2, - ] - - # make a place to put example images - if not os.path.exists(TagFinder.IMAGE_DIR): - os.mkdir(TagFinder.IMAGE_DIR) - # to keep track of images to write - self.img_ts_sec = 0 - - def analyze(self, request: CompletedRequest) -> None: - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - # buffer = request.make_buffer("main") - # metadata = request.get_metadata() - # print(metadata) - # sensor timestamp is the boottime when the first byte was received from the sensor - # sensor_timestamp = metadata[ - # "SensorTimestamp" - # ] - # system_time_ns = time.clock_gettime_ns( - # time.CLOCK_BOOTTIME - # ) - # time_delta_ns = system_time_ns - sensor_timestamp - # print(sensor_timestamp, system_time_ns, time_delta_ns//1000000) # ms - - # start_time = time.time() - y_len = self.width * self.height - # truncate, ignore chrominance - # this makes a view, takes 300ns - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - # this also makes a view, takes 150ns - img = img.reshape((self.height, self.width)) - # slice out the middle, there's never a target near the top or the bottom - # TODO: one slice for squares one for circles - # this also makes a view, takes 150ns - # for now use the full frame - # img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - img = img[: self.height, : self.width] - # for debugging the size: - # img = np.frombuffer(buffer, dtype=np.uint8) - # img = img.reshape((int(height*3/2), -1)) - # img = img[: height, ] - # print(img.shape) # (self.width,self.height) = (616,832) - # print("MIN", np.amin(img), "MAX", np.amax(img)) - - # # not instant, ~300us - # led_on = np.amax(img) > 200 - # self.vision_nt_led.set(led_on) - - # TODO: add big tag detection? - result: list[Detection] = self.at_detector.detect( - img, - estimate_tag_pose=True, - camera_params=self.camera_params, # type: ignore - tag_size=self.tag_size, - ) - self.draw_result(img, result) - - tags: dict[str, Union[float, list[dict[str, Any]]]] = {} - tags["tags"] = [] - - for result_item in result: - if result_item.hamming > 0: - continue - - tags["tags"].append( - { - "id": result_item.tag_id, - "pose_t": result_item.pose_t.tolist(), # type: ignore - "pose_R": result_item.pose_R.tolist(), # type: ignore - } - ) - - current_time = time.time() - # analysis_et = current_time - start_time - total_et = current_time - self.frame_time - - tags["et"] = total_et - # print(tags) - - posebytes: bytes = msgpack.packb(tags) # type: ignore - - self.vision_nt_msgpack.set(posebytes) - - fps = 1 / total_et - self.frame_time = current_time - # self.draw_text(img, f"analysis ET(ms) {1000*analysis_et:.0f}", (5, 25)) - # self.draw_text(img, f"total ET(ms) {1000*total_et:.0f}", (5, 65)) - # self.draw_text(img, f"fps {fps:.1f}", (5, 105)) - self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - - # write the current timestamp on the image - # this timestamp is attached to the NT payloads, see getAtomic() - now_us = ntcore._now() # pylint:disable=W0212 - self.draw_text(img, f"time(us) {now_us}", (5, 105)) - - # shrink the driver view to avoid overloading the radio - # driver_img = cv2.resize(img, (self.view_width, self.view_height)) - # self.output_stream.putFrame(driver_img) - self.output_stream.putFrame(img) # type: ignore - - # Write some of the files for later analysis - # To retrieve these files, use: - # scp pi@10.1.0.11:images/* . - # These will accumulate forever so remember to clean it out: - # ssh pi@10.1.0.11 "rm images/img*" - # now_s = now_us // 1000000 # once per second - # if now_s > self.img_ts_sec: - # self.img_ts_sec = now_s - # filename = TagFinder.IMAGE_DIR + "/img" + str(now_s) + ".png" - # cv2.imwrite(filename, img) - - def draw_result(self, image: MatLike, result: list[Detection]) -> None: - for result_item in result: - if result_item.hamming > 0: - continue - (pt_a, pt_b, pt_c, pt_d) = result_item.corners - pt_a = (int(pt_a[0]), int(pt_a[1])) - pt_b = (int(pt_b[0]), int(pt_b[1])) - pt_c = (int(pt_c[0]), int(pt_c[1])) - pt_d = (int(pt_d[0]), int(pt_d[1])) - - cv2.line(image, pt_a, pt_b, (255, 255, 255), 2) - cv2.line(image, pt_b, pt_c, (255, 255, 255), 2) - cv2.line(image, pt_c, pt_d, (255, 255, 255), 2) - cv2.line(image, pt_d, pt_a, (255, 255, 255), 2) - - (c_x, c_y) = (int(result_item.center[0]), int(result_item.center[1])) - cv2.circle(image, (c_x, c_y), 10, (255, 255, 255), -1) - - tag_id = result_item.tag_id - self.draw_text(image, f"id {tag_id}", (c_x, c_y)) - # TODO: differentiate big (circle) and little tags? - # tag_family = result_item.tag_family.decode("utf-8") - # self.draw_text(image, f"id {tag_family}", (c_x, c_y + 40)) - - # put the pose translation in the image - # the use of 'item' here is to force a scalar to format - float_formatter: dict[str, Callable[[float], str]] = {"float_kind": lambda x: f"{x:4.1f}"} - if result_item.pose_t is not None: - # wpi_axes = np.array([[0, 0, 1], [-1, 0, 0], [0, -1, 0]]) - # wpi_t = np.matmul(wpi_axes, result_item.pose_t) - t = result_item.pose_t - wpi_t = np.array([[t[2][0]], [-t[0][0]], [-t[1][0]]]) - # R = result_item.pose_R - # wpi_R = np.matmul(wpi_axes, result_item.pose_R) - # wpi_R = np.array( - # [ - # # [R[0][0], R[0][1], R[0][2]], - # # [R[1][0], R[1][1], R[1][2]], - # # [R[2][0], R[2][1], R[2][2]] - # [R[2][2], -R[2][0], -R[2][1]], - # [-R[0][2], R[0][0], R[0][1]], - # [-R[1][2], R[1][0], R[1][1]], - # ] - # ) - - # this matrix is not necessarily exactly special orthogonal - # this is sort of a hack to fix it. - # removed this for now because it's not fast - # wpi_RV, _ = cv2.Rodrigues(wpi_R) - # wpi_R, _ = cv2.Rodrigues(wpi_RV) - - # self.draw_text( - # image, f"X {result_item.pose_t.item(0):.2f}m", (c_x, c_y + 80) - # ) - # self.draw_text( - # image, f"Y {result_item.pose_t.item(1):.2f}m", (c_x, c_y + 120) - # ) - # self.draw_text( - # image, f"Z {result_item.pose_t.item(2):.2f}m", (c_x, c_y + 160) - # ) - - # translation vector - self.draw_text( - image, - f"t: {np.array2string(wpi_t.flatten(), formatter=float_formatter)}", - (c_x - 50, c_y + 40), - ) - - # rotation matrix (we don't use this so omit it) - # self.draw_text( - # image, - # f"R: [{np.array2string(wpi_R[0], formatter=float_formatter)},", - # (c_x, c_y + 80), - # ) - # self.draw_text( - # image, - # f" {np.array2string(wpi_R[1], formatter=float_formatter)},", - # (c_x, c_y + 120), - # ) - # self.draw_text( - # image, - # f" {np.array2string(wpi_R[2], formatter=float_formatter)}]", - # (c_x, c_y + 160), - # ) - - # these are white with black outline - def draw_text(self, image: MatLike, msg: str, loc: tuple[int, int]) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - - def initialize_nt(self) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - inst = ntcore.NetworkTableInstance.getDefault() - inst.startClient4("tag-finder") - # this is always the RIO IP address; set a matching static IP on your - # laptop if you're using this in simulation. - inst.setServer("10.1.0.2") - # try faster flushing to minimize vision latency; update rate will be limited by frame rate. - # be careful that this doesn't flood the rio with too many updates. - # hmm... 6/22/23, seems like setUpdateRate doesn't exist. - # inst.setUpdateRate(0.01) - # Table for vision output information - self.vision_nt = inst.getTable("Vision") - self.vision_nt_msgpack = self.vision_nt.getRawTopic(self.topic_name).publish( - "msgpack" - ) - - # def reconnect_nt(self) -> None: - # """NT doesn't recover from network disruptions by itself, nor does it - # recognize them, so this blindly stops and starts the client. This is - # disruptive, causing flashing in Glass for example ... but better than - # zombie mode?""" - # inst = ntcore.NetworkTableInstance.getDefault() - # inst.stopClient() # without this, reconnecting doesn't work - # inst.startClient4("tag-finder") - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - - # full frame, 2x2, to set the detector mode - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # fast path, 200fps, narrow crop - # fullwidth = 640 - # fullheight = 480 - # medium crop - # fullwidth = 1920 - # fullheight = 1080 - - # lores for apriltag detector - # option 1: big, all the pixels yields 270ms delay, but seems even higher - # docs say 41 fps is possible - # width=1664 - # height=1232 - # option 2: medium, two circles, three squares, timer says ~80ms but seems more like 500ms - # remember to note this delay in the kalman filter input - # TODO: report the actual delay in network tables - width = 832 - height = 616 - # option 3: tiny, trade speed for detection distance; two circles, three squraes, ~40ms - # width=448 - # height=308 - # fast path - # width=640 - # height=480 - # medium crop - # width=1920 - # height=1080 - - camera = Picamera2() - # don't use video, it tries to process all the frames? - # camera_config = camera.create_video_configuration( - # no need for extra buffers, dropping frames is fine - # buffer_count=4, - # encode="lores", - # use single-frame - camera_config: dict[str, Any] = camera.create_still_configuration( # type: ignore - # one buffer to write, one to read, one in between so we don't have to wait - buffer_count=6, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # fast shutter means more gain - # "AnalogueGain": 8.0, - # the flashing LED makes the Auto-Exposure freak out, so turn it off: - # "ExposureTime": 5000, - # go as fast as possible but no slower than 30fps - "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - }, - ) - - topic_name: str = getserial() # was: topic_name = "tags" - identity = Camera(topic_name) - if identity == Camera.REAR or identity == Camera.FRONT: - # see libcamera/src/libcamera/transform.cpp - camera_config["transform"] = 3 - - print("REQUESTED") - print(camera_config) - camera.align_configuration(camera_config) # type: ignore - print("ALIGNED") - print(camera_config) - camera.configure(camera_config) # type: ignore - print(camera.camera_controls) # type: ignore - - # Roborio IP: 10.1.0.2 - # Pi IP: 10.1.0.21 - - output = TagFinder(topic_name, width, height) - # the callback blocks the camera thread, so don't do that. - # camera.pre_callback = output.pre_callback - camera.start() # type: ignore - # frame_counter = 0 - try: - while True: - # periodically reconnect to NT. - # without these attempts, network disruption results in - # permanent disconnection - # frame_counter += 1 - # disable reconnecting entirely to see if network works - # if frame_counter > 200: - # print("RECONNECTING") - # frame_counter = 0 - # output.reconnect_nt() - # the most recent frame, maybe from the past - request: CompletedRequest = camera.capture_request() # type: ignore - try: - output.analyze(request) - finally: - # the frame is owned by the camera so remember to release it - request.release() - # time.sleep(1) - finally: - # not in video mode - # camera.stop_recording() - camera.stop() - - -main() diff --git a/comp/vision/old/tag_finder24.py b/comp/vision/old/tag_finder24.py deleted file mode 100644 index 242dc5f..0000000 --- a/comp/vision/old/tag_finder24.py +++ /dev/null @@ -1,419 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,R0902,R0914,R0915,W0201 - -import dataclasses -import pprint -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore -import numpy as np -import robotpy_apriltag -from cscore import CameraServer -from cv2.typing import MatLike -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from robotpy_apriltag import AprilTagDetection -from wpimath.geometry import Transform3d -from wpiutil import wpistruct - -Mat = NDArray[np.uint8] - - -@wpistruct.make_wpistruct # type:ignore -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - A = "10000000caeaae82" # "BETA FRONT" - C = "10000000a7c673d9" # "GAMMA INTAKE" - - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class CameraData: - def __init__(self, camera_num: int) -> None: - self.camera = Picamera2(camera_num) - model: str = cast(str, self.camera.camera_properties["Model"]) # type: ignore - print("\nMODEL " + model) - self.id = camera_num - self.fps: float = 0 - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - self.width = 1152 - self.height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - self.width = 832 - self.height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - self.width = 1408 - self.height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - self.width = 100 - self.height = 100 - - camera_config: dict[str, Any] = ( - self.camera.create_still_configuration( # type:ignore - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=5, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (self.width, self.height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # 3/23/24, reduced to 2ms, even less blur. - "ExposureTime": 300, - "AnalogueGain": 8, - # "AeEnable": True, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "ScalerCrop":(0,0,width/2,height/2), - }, - ) - ) - print("SENSOR MODES AVAILABLE") - pprint.pprint(self.camera.sensor_modes) # type:ignore - # if identity == Camera.FRONT: - # see libcamera/src/libcamera/transform.cpp - # camera_config["transform"] = 3 - - print("\nREQUESTED CONFIG") - print(camera_config) - self.camera.align_configuration(camera_config) # type:ignore - print("\nALIGNED CONFIG") - print(camera_config) - self.camera.configure(camera_config) # type:ignore - print("\nCONTROLS") - print(self.camera.camera_controls) # type:ignore - fx: int - fy: int - cx: int - cy: int - k1: float - k2: float - if model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - tag_size = 0.1651 - p1 = 0 - p2 = 0 - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.output_stream = CameraServer.putVideo( - str(camera_num), self.width, self.height - ) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - self.camera.start() # type: ignore - self.frame_time = time.time() - - def setFPSPublisher(self, FPSPublisher: ntcore.DoublePublisher) -> None: - self.FPSPublisher = FPSPublisher - - def setLatencyPublisher(self, LatencyPublisher: ntcore.DoublePublisher) -> None: - self.LatencyPublisher = LatencyPublisher - - -class TagFinder: - def __init__(self, serial: str, camList: list[CameraData]) -> None: - # the cpu serial number - self.serial = serial - self.initialize_nt(camList) - self.blips: list[Blip24] = [] - self.at_detector = robotpy_apriltag.AprilTagDetector() - - config = self.at_detector.Config() - config.numThreads = 4 - self.at_detector.setConfig(config) - self.at_detector.addFamily("tag36h11") - - def analyze(self, request: CompletedRequest, camera: CameraData) -> None: - # potentialTags = self.estimatedTagPose.get() - # potentialArray = [] - # z = [] - # for Blip24s in potentialTags: - # translation = Blip24s.pose.translation() - # if translation.Z() < 0: - # continue - # rvec = np.zeros((3, 1), np.float32) - # tvec = np.zeros((3, 1), np.float32) - # object_points = np.array( - # [translation.X(), translation.Y(), translation.Z()], np.float32 - # ) - # (point2D, _) = cv2.projectPoints( - # object_points, rvec, tvec, camera.mtx, camera.dist - # ) - # if ( - # point2D[0][0][0] > 0 - # and point2D[0][0][0] < 1456 - # and point2D[0][0][1] > 0 - # and point2D[0][0][1] < 1088 - # ): - # print(Blip24s.id) - # print(object_points) - # print(point2D[0][0]) - # z.append(translation.Z()) - # potentialArray.append(point2D[0][0]) - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - y_len = camera.width * camera.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((camera.height, camera.width)) - # TODO: crop regions that never have targets - # this also makes a view, very fast (150 ns) - # img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - # for now use the full frame - # if len(potentialArray) == 1: - # offset = 100 / z[0] - # if ( - # potentialArray[0][1] - offset > 0 - # and potentialArray[0][0] - offset > 0 - # and potentialArray[0][0] + offset < camera.width - # and potentialArray[0][1] + offset < camera.height - # ): - # img = img[ - # int(potentialArray[0][1] - offset) : int( - # potentialArray[0][1] + offset - # ), - # int(potentialArray[0][0] - offset) : int( - # potentialArray[0][0] + offset - # ), - # ] - - img = cv2.undistort(img, camera.mtx, camera.dist) - - result = self.at_detector.detect(img) # type:ignore - - for result_item in result: - if result_item.getHamming() > 0: - continue - pose = camera.estimator.estimate(result_item) - self.blips.append(Blip24(result_item.getId(), pose)) - # TODO: turn this off for prod - self.draw_result(img, result_item, pose) - - # compute time since last frame - current_time = time.time() - total_et = current_time - camera.frame_time - camera.frame_time = current_time - - fps = 1 / total_et - - camera.fps = fps - camera.FPSPublisher.set(fps) - - # sensor timestamp is the boottime when the first byte was received from the sensor - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - camera.LatencyPublisher.set(time_delta_ms) - - # must flush! otherwise 100ms update rate. - self.inst.flush() - - # now do the drawing (after the NT payload is written) - # none of this is particularly fast or important for prod, - # TODO: consider disabling it after dev is done - self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - # self.draw_text(img, f"latency(ms) {time_delta_ms:.0f}", (5, 105)) - - # shrink the driver view to avoid overloading the radio - # TODO: turn this back on for prod!! - # driver_img = cv2.resize(img, (self.view_width, self.view_height)) - # self.output_stream.putFrame(driver_img) - - # for now put big images - # TODO: turn this off for prod!! - img_output = cv2.resize(img, (416, 308)) - camera.output_stream.putFrame(img_output) # type:ignore - - def draw_result( - self, image: MatLike, result_item: AprilTagDetection, pose: Transform3d - ) -> None: - color = (255, 255, 255) - - # Draw lines around the tag - for i in range(4): - j = (i + 1) % 4 - point1 = (int(result_item.getCorner(i).x), int(result_item.getCorner(i).y)) - point2 = (int(result_item.getCorner(j).x), int(result_item.getCorner(j).y)) - cv2.line(image, point1, point2, color, 2) - - (c_x, c_y) = (int(result_item.getCenter().x), int(result_item.getCenter().y)) - cv2.circle(image, (c_x, c_y), 10, (255, 255, 255), -1) - - tag_id = result_item.getId() - self.draw_text(image, f"id {tag_id}", (c_x, c_y)) - - # type the translation into the image, in WPI coords (x-forward) - t = pose.translation() - self.draw_text( - image, - f"t: {t.z:4.1f},{-t.x:4.1f},{-t.y:4.1f}", - (c_x - 50, c_y + 40), - ) - - # these are white with black outline - def draw_text(self, image: MatLike, msg: str, loc: tuple[int, int]) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - - # def accept(self, estimatedTagPose) -> None: - # print("ay" + str(estimatedTagPose.readQueue())) - - def initialize_nt(self, camList: list[CameraData]) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = ntcore.NetworkTableInstance.getDefault() - self.inst.startClient4("tag_finder24") - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "vision/" + self.serial - for camera in camList: - camera.setFPSPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/fps" - ).publish() - ) - camera.setLatencyPublisher( - self.inst.getDoubleTopic( - topic_name + "/" + str(camera.id) + "/latency" - ).publish() - ) - - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Blip24).publish().set( - Blip24(0, Transform3d()) - ) - # blip array topic - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/blips", Blip24 - ).publish() - - self.estimatedTagPose = self.inst.getStructArrayTopic( - topic_name + "/estimatedTagPose", Blip24 - ).subscribe([], ntcore.PubSubOptions()) - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - print("main") - print(str(Picamera2.global_camera_info())) # type: ignore - camList: list[CameraData] = [] - if len(Picamera2.global_camera_info()) == 0: # type: ignore - print("NO CAMERAS DETECTED, PLEASE TURN OFF PI AND CHECK CAMERA PORT(S)") - for cameraData in Picamera2.global_camera_info(): # type:ignore - camera = CameraData(cast(int, cameraData["Num"])) - camList.append(camera) - serial: str = getserial() - print(serial) - output = TagFinder(serial, camList) - # output.startListening() - try: - while True: - for camera in camList: - request: CompletedRequest = camera.camera.capture_request() # type: ignore - try: - output.analyze(request, camera) - finally: - request.release() - output.vision_nt_struct.set(output.blips) - output.blips = [] - finally: - for camera in camList: - camera.camera.stop() - - -main() diff --git a/comp/vision/old/tag_finder24_MBR.py b/comp/vision/old/tag_finder24_MBR.py deleted file mode 100644 index b2dfba6..0000000 --- a/comp/vision/old/tag_finder24_MBR.py +++ /dev/null @@ -1,403 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E1101,R0902,R0914,W0201 - -import dataclasses -import pprint -import sys -import time -from contextlib import AbstractContextManager -from enum import Enum -from mmap import mmap -from typing import Any, cast - -import cv2 -import ntcore -import numpy as np -import robotpy_apriltag -from cscore import CameraServer -from cv2.typing import MatLike -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from picamera2.request import _MappedBuffer # type: ignore -from robotpy_apriltag import AprilTagDetection -from wpimath.geometry import Transform3d -from wpiutil import wpistruct - -Mat = NDArray[np.uint8] - - -@wpistruct.make_wpistruct # type: ignore -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - A = "10000000caeaae82" # "BETA FRONT" - C = "10000000a7c673d9" # "GAMMA INTAKE" - - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class TagFinder: - def __init__(self, serial: str, width: int, height: int, model: str) -> None: - self.frame_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - # the cpu serial number - self.serial = serial - self.width = width - self.height = height - self.model = model - - # for the driver view - scale = 0.25 - self.view_width = int(width * scale) - self.view_height = int(height * scale) - - self.initialize_nt() - - self.at_detector = robotpy_apriltag.AprilTagDetector() - config = self.at_detector.Config() - config.numThreads = 4 - self.at_detector.setConfig(config) - self.at_detector.addFamily("tag36h11") - - # from testing on 3/22/24, k1 and k2 only - - if self.model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif self.model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - - tag_size = 0.1651 # tagsize 6.5 inches - p1 = 0 - p2 = 0 - - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - - self.output_stream = CameraServer.putVideo("Processed", width, height) - - def analyze(self, metadata: dict[str, Any], buffer: mmap) -> None: - # how old is the frame when we receive it? - received_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - - y_len = self.width * self.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((self.height, self.width)) - # TODO: crop regions that never have targets - # this also makes a view, very fast (150 ns) - # img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - # for now use the full frame - # TODO: probably remove this - serial: str = getserial() - identity = Camera(serial) - if identity == Camera.SHOOTER: - img = img[62:554, : self.width] - else: - img = img[: self.height, : self.width] - - undistort_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - - result = self.at_detector.detect(img.data) - - detect_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - - blips: list[Blip24] = [] - for result_item in result: - if result_item.getHamming() > 0: - continue - - # UNDISTORT EACH ITEM - # undistortPoints is at least 10X faster than undistort on the whole image. - corners = result_item.getCorners((0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)) - # undistortPoints wants [[x0,y0],[x1,y1],...] - pairs = np.reshape(corners, [4, 2]) - pairs = cv2.undistortImagePoints(pairs, self.mtx, self.dist) - # the estimator wants [x0, y0, x1, y1, ...] - corners = np.reshape(pairs, [8]) - - homography = result_item.getHomography() - pose = self.estimator.estimate(homography, corners) - - blips.append(Blip24(result_item.getId(), pose)) - # TODO: turn this off for prod - self.draw_result(img, result_item, pose) - - estimate_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - - # compute time since last frame - current_time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - total_time_ms = (current_time - self.frame_time) // 1000000 - # total_et = current_time - self.frame_time - self.frame_time = current_time - - sensor_timestamp = cast(int, metadata["SensorTimestamp"]) - image_age_ms = (received_time - sensor_timestamp) // 1000000 - undistort_time_ms = (undistort_time - received_time) // 1000000 - detect_time_ms = (detect_time - undistort_time) // 1000000 - estimate_time_ms = (estimate_time - detect_time) // 1000000 - # oldest_pixel_ms = (system_time_ns - (sensor_timestamp - 1000 * metadata["ExposureTime"])) // 1000000 - # sensor timestamp is the boottime when the first byte was received from the sensor - - self.vision_nt_struct.set(blips) - self.vision_total_time_ms.set(total_time_ms) - self.vision_image_age_ms.set(image_age_ms) - self.vision_detect_time_ms.set(detect_time_ms) - - # must flush! otherwise 100ms update rate. - self.inst.flush() - - # now do the drawing (after the NT payload is written) - # none of this is particularly fast or important for prod, - - # self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - self.draw_text(img, f"total (ms) {total_time_ms:.0f}", (5, 65)) - self.draw_text(img, f"age (ms) {image_age_ms:.0f}", (5, 105)) - self.draw_text(img, f"undistort (ms) {undistort_time_ms:.0f}", (5, 145)) - self.draw_text(img, f"detect (ms) {detect_time_ms:.0f}", (5, 185)) - self.draw_text(img, f"estimate (ms) {estimate_time_ms:.0f}", (5, 225)) - - # shrink the driver view to avoid overloading the radio - # TODO: turn this back on for prod!! - # driver_img = cv2.resize(img, (self.view_width, self.view_height)) - # self.output_stream.putFrame(driver_img) - - # for now put big images - # TODO: turn this off for prod!! - img_output = cv2.resize(img, (416, 308)) - self.output_stream.putFrame(img_output) # type: ignore - - def draw_result( - self, image: MatLike, result_item: AprilTagDetection, pose: Transform3d - ) -> None: - color = (255, 255, 255) - - # Draw lines around the tag - for i in range(4): - j = (i + 1) % 4 - point1 = (int(result_item.getCorner(i).x), int(result_item.getCorner(i).y)) - point2 = (int(result_item.getCorner(j).x), int(result_item.getCorner(j).y)) - cv2.line(image, point1, point2, color, 2) - - (c_x, c_y) = (int(result_item.getCenter().x), int(result_item.getCenter().y)) - cv2.circle(image, (c_x, c_y), 10, (255, 255, 255), -1) - - tag_id = result_item.getId() - self.draw_text(image, f"id {tag_id}", (c_x, c_y)) - - # type the translation into the image, in WPI coords (x-forward) - t = pose.translation() - self.draw_text( - image, - f"t: {t.z:4.1f},{-t.x:4.1f},{-t.y:4.1f}", - (c_x - 50, c_y + 40), - ) - - # these are white with black outline - def draw_text(self, image: MatLike, msg: str, loc: tuple[int, int]) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - - def log_capture_time(self, ms: float) -> None: - self.vision_capture_time_ms.set(ms) - - def initialize_nt(self) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = ntcore.NetworkTableInstance.getDefault() - self.inst.startClient4("tag_finder24") - - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "vision/" + self.serial - self.vision_capture_time_ms = self.inst.getDoubleTopic( - topic_name + "/capture_time_ms" - ).publish() - self.vision_image_age_ms = self.inst.getDoubleTopic( - topic_name + "/image_age_ms" - ).publish() - self.vision_total_time_ms = self.inst.getDoubleTopic( - topic_name + "/total_time_ms" - ).publish() - self.vision_detect_time_ms = self.inst.getDoubleTopic( - topic_name + "/detect_time_ms" - ).publish() - - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Blip24).publish().set( - Blip24(0, Transform3d()) - ) - - # blip array topic - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/blips", Blip24 - ).publish() - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - - camera = Picamera2() - - model: str = cast(str, camera.camera_properties["Model"]) # type: ignore - print("\nMODEL " + model) - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - width = 1152 - height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - width = 832 - height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1472 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - width = 1472 - height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - width = 100 - height = 100 - - camera_config: dict[str, Any] = camera.create_still_configuration( # type: ignore - # more buffers seem to make the pipeline a little smoother - buffer_count=5, - # hang on to one camera buffer (zero copy) and leave one - # other for the camera to fill. - queue=True, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # 3/23/24, reduced to 2ms, even less blur. - "ExposureTime": 3000, - "AnalogueGain": 8, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "ScalerCrop":(0,0,width/2,height/2), - }, - ) - print("SENSOR MODES AVAILABLE") - pprint.pprint(camera.sensor_modes) # type: ignore - serial: str = getserial() - # identity = Camera(serial) - # if identity == Camera.FRONT: - # see libcamera/src/libcamera/transform.cpp - # camera_config["transform"] = 3 - - print("\nREQUESTED CONFIG") - print(str(camera_config)) - camera.align_configuration(camera_config) # type: ignore - print("\nALIGNED CONFIG") - print(str(camera_config)) - camera.configure(camera_config) # type: ignore - print("\nCONTROLS") - print(str(camera.camera_controls)) # type: ignore - print(serial) - output = TagFinder(serial, width, height, model) - - camera.start() # type: ignore - try: - while True: - # the most recent completed frame, from the recent past - capture_start = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - request: CompletedRequest = camera.capture_request() # type: ignore - capture_end = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - # capture time is how long we wait for the camera - capture_time_ms = (capture_end - capture_start) // 1000000 - output.log_capture_time(capture_time_ms) - try: - metadata: dict[str, Any] = request.get_metadata() - # avoid copying the buffer - mapped_buffer: AbstractContextManager[mmap] = cast( - AbstractContextManager[mmap], _MappedBuffer(request, "lores") - ) - with mapped_buffer as buffer: - output.analyze(metadata, buffer) - finally: - # the frame is owned by the camera so remember to release it - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/old/tag_finder_one_camera24.py b/comp/vision/old/tag_finder_one_camera24.py deleted file mode 100644 index 6e84730..0000000 --- a/comp/vision/old/tag_finder_one_camera24.py +++ /dev/null @@ -1,380 +0,0 @@ -# pylint: disable=C0103,C0114,C0115,C0116,E1101,R0902,R0914 - -import dataclasses -import pprint -import sys -import time -from enum import Enum -from typing import Any, cast - -import cv2 -import ntcore -import numpy as np -import robotpy_apriltag -from cscore import CameraServer -from cv2.typing import MatLike -from numpy.typing import NDArray -from picamera2 import CompletedRequest, Picamera2 # type: ignore -from robotpy_apriltag import AprilTagDetection -from wpimath.geometry import Transform3d -from wpiutil import wpistruct - -Mat = NDArray[np.uint8] - - -@wpistruct.make_wpistruct # type: ignore -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - A = "10000000caeaae82" # "BETA FRONT" - C = "10000000a7c673d9" # "GAMMA INTAKE" - - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value: object) -> "Camera": - return Camera.UNKNOWN - - -class TagFinder: - def __init__(self, serial: str, width: int, height: int, model: str) -> None: - self.frame_time = time.time() - # the cpu serial number - self.serial = serial - self.width = width - self.height = height - self.model = model - - # for the driver view - scale = 0.25 - self.view_width = int(width * scale) - self.view_height = int(height * scale) - - self.initialize_nt() - - self.at_detector = robotpy_apriltag.AprilTagDetector() - self.at_detector.addFamily("tag36h11") - - # from testing on 3/22/24, k1 and k2 only - - if self.model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif self.model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif self.model == "imx296": - fx = 1680 - fy = 1680 - cx = int(1408 / 2) - cy = int(1088 / 2) - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - - tag_size = 0.1651 # tagsize 6.5 inches - p1 = 0 - p2 = 0 - - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]], np.float32) - self.dist = np.array([[k1, k2, p1, p2]], np.float32) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - - self.output_stream = CameraServer.putVideo("Processed", width, height) - - def analyze(self, request: CompletedRequest) -> None: - # potentialTags = self.estimatedTagPose.get() - # potentialArray = [] - # z = [] - # for Blip24s in potentialTags: - # translation = Blip24s.pose.translation() - # if (translation.Z() < 0): - # continue - # rvec = np.zeros((3, 1), np.float32) - # tvec = np.zeros((3, 1), np.float32) - # object_points = np.array([translation.X(), translation.Y(),translation.Z()],np.float32) - # (point2D, _) = cv2.projectPoints(object_points,rvec,tvec,self.mtx,self.dist) - # if (point2D[0][0][0] > 0 and point2D[0][0][0] < 1456 and point2D[0][0][1] > 0 and point2D[0][0][1] < 1088): - # print(Blip24s.id) - # print(object_points) - # print(point2D[0][0]) - # z.append(translation.Z()) - # potentialArray.append(point2D[0][0]) - buffer: NDArray[np.uint8] = request.make_buffer("lores") # type: ignore - metadata: dict[str, Any] = request.get_metadata() - - y_len = self.width * self.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((self.height, self.width)) - # TODO: crop regions that never have targets - # this also makes a view, very fast (150 ns) - # img = img[int(self.height / 4) : int(3 * self.height / 4), : self.width] - # for now use the full frame - # TODO: probably remove this - # if (len(potentialArray) == 1): - # offset = 100/z[0] - # if (potentialArray[0][1]-offset > 0 and potentialArray[0][0]-offset > 0 and potentialArray[0][0]+offset < self.width and potentialArray[0][1]+offset < self.height): - # img = img[int(potentialArray[0][1]-offset) : int(potentialArray[0][1]+offset), int(potentialArray[0][0]-offset):int(potentialArray[0][0]+offset)] - - img = cv2.undistort(img, self.mtx, self.dist) - - result: list[AprilTagDetection] = self.at_detector.detect(img) # type: ignore - - blips: list[Blip24] = [] - for result_item in result: - if result_item.getHamming() > 0: - continue - pose = self.estimator.estimate(result_item) - blips.append(Blip24(result_item.getId(), pose)) - # TODO: turn this off for prod - self.draw_result(img, result_item, pose) - - # compute time since last frame - current_time = time.time() - total_et = current_time - self.frame_time - self.frame_time = current_time - - fps = 1 / total_et - - self.vision_nt_struct.set(blips) - self.vision_fps.set(fps) - - # sensor timestamp is the boottime when the first byte was received from the sensor - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - self.vision_latency.set(time_delta_ms) - - # must flush! otherwise 100ms update rate. - self.inst.flush() - - # now do the drawing (after the NT payload is written) - # none of this is particularly fast or important for prod, - # TODO: consider disabling it after dev is done - self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - # self.draw_text(img, f"latency(ms) {time_delta_ms:.0f}", (5, 105)) - - # shrink the driver view to avoid overloading the radio - # TODO: turn this back on for prod!! - # driver_img = cv2.resize(img, (self.view_width, self.view_height)) - # self.output_stream.putFrame(driver_img) - - # for now put big images - # TODO: turn this off for prod!! - img_output = cv2.resize(img, (416, 308)) - self.output_stream.putFrame(img_output) # type: ignore - - def draw_result( - self, - image: MatLike, - result_item: AprilTagDetection, - pose: Transform3d, - ) -> None: - color = (255, 255, 255) - - # Draw lines around the tag - for i in range(4): - j = (i + 1) % 4 - point1 = (int(result_item.getCorner(i).x), int(result_item.getCorner(i).y)) - point2 = (int(result_item.getCorner(j).x), int(result_item.getCorner(j).y)) - cv2.line(image, point1, point2, color, 2) - - (c_x, c_y) = (int(result_item.getCenter().x), int(result_item.getCenter().y)) - cv2.circle(image, (c_x, c_y), 10, (255, 255, 255), -1) - - tag_id = result_item.getId() - self.draw_text(image, f"id {tag_id}", (c_x, c_y)) - - # type the translation into the image, in WPI coords (x-forward) - t = pose.translation() - self.draw_text( - image, - f"t: {t.z:4.1f},{-t.x:4.1f},{-t.y:4.1f}", - (c_x - 50, c_y + 40), - ) - - # these are white with black outline - def draw_text( - self, image: MatLike, msg: str, loc: tuple[int, int] - ) -> None: - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - - # def accept(self, estimatedTagPose) -> None: - # print("ay" + str(estimatedTagPose.readQueue())) - - def initialize_nt(self) -> None: - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = ntcore.NetworkTableInstance.getDefault() - self.inst.startClient4("tag_finder24") - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "vision/" + self.serial - self.vision_fps = self.inst.getDoubleTopic(topic_name + "/fps").publish() - self.vision_latency = self.inst.getDoubleTopic( - topic_name + "/latency" - ).publish() - - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Blip24).publish().set( - Blip24(0, Transform3d()) - ) - # blip array topic - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/blips", Blip24 - ).publish() - - self.estimatedTagPose = self.inst.getStructArrayTopic( - topic_name + "/estimatedTagPose", Blip24 - ).subscribe([], ntcore.PubSubOptions()) - - -def getserial() -> str: - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main() -> None: - - camera = Picamera2() - - model: str = cast(str, camera.camera_properties["Model"]) # type:ignore - print("\nMODEL " + model) - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - width = 1152 - height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - width = 832 - height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - width = 1408 - height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - width = 100 - height = 100 - - camera_config: dict[str, Any] = camera.create_still_configuration( # type: ignore - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (width, height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # 3/23/24, reduced to 2ms, even less blur. - "ExposureTime": 3000, - "AnalogueGain": 8, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": 0, # libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "ScalerCrop":(0,0,width/2,height/2), - }, - ) - print("SENSOR MODES AVAILABLE") - pprint.pprint(camera.sensor_modes) # type: ignore - serial: str = getserial() - # identity = Camera(serial) - # if identity == Camera.FRONT: - # see libcamera/src/libcamera/transform.cpp - # camera_config["transform"] = 3 - - print("\nREQUESTED CONFIG") - print(str(camera_config)) - camera.align_configuration(camera_config) # type: ignore - print("\nALIGNED CONFIG") - print(str(camera_config)) - camera.configure(camera_config) # type: ignore - print("\nCONTROLS") - print(str(camera.camera_controls)) # type: ignore - print(serial) - output = TagFinder(serial, width, height, model) - - camera.start() # type: ignore - # output.startListening() - try: - while True: - # the most recent completed frame, from the recent past - request: CompletedRequest = camera.capture_request() # type: ignore - try: - output.analyze(request) - finally: - # the frame is owned by the camera so remember to release it - request.release() - finally: - camera.stop() - - -main() diff --git a/comp/vision/old/test/reconnect_case.py b/comp/vision/old/test/reconnect_case.py deleted file mode 100644 index dcbf522..0000000 --- a/comp/vision/old/test/reconnect_case.py +++ /dev/null @@ -1,23 +0,0 @@ -# This is the test case that illustrates client zombie -# on network disruption. -# -# I logged a ticket for this case: -# https://github.com/wpilibsuite/allwpilib/issues/5146 - -import time -from ntcore import NetworkTableInstance - -inst = NetworkTableInstance.getDefault() -inst.startClient4("myclient") -inst.setServer("10.1.0.2") -pub = inst.getTable("mytable").getIntegerTopic("mytopic").publish() -counter = 0 -while True: - pub.set(counter) - counter += 1 - if counter > 10: - print("reconnecting...") - counter = 0 - inst.stopClient() - inst.startClient4("myclient") - time.sleep(0.5) diff --git a/comp/vision/old/test_blip_serializer.py b/comp/vision/old/test_blip_serializer.py deleted file mode 100644 index e094440..0000000 --- a/comp/vision/old/test_blip_serializer.py +++ /dev/null @@ -1,42 +0,0 @@ -# pylint: disable=missing-class-docstring,missing-function-docstring,missing-module-docstring,invalid-name -import unittest -import numpy as np -import old.blip_serializer as blip_serializer - - -# pylint: disable=R0903 - - -class FakeResult: - def __init__(self) -> None: - self.hamming = 0 - self.tag_id = 1 - self.pose_t = np.array([[1], [2], [3]], dtype=np.float32) - self.pose_R = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32) - - -class TestBlipSerializer(unittest.TestCase): - def test_serialize_empty(self) -> None: - result = [] - serialized_result = blip_serializer.serialize(result) # type: ignore - self.assertEqual("81a47461677390", serialized_result.hex()) - - def test_serialize_normal(self) -> None: - result = [] - result.append(FakeResult()) # type: ignore - serialized_result = blip_serializer.serialize(result) # type: ignore - # this is just copied from whatever the serializer produced. - self.assertEqual( - ( - "81a4746167739183a2696401a6706f73" - "655f749391cb3ff000000000000091cb" - "400000000000000091cb400800000000" - "0000a6706f73655f529393cb3ff00000" - "00000000cb4000000000000000cb4008" - "00000000000093cb4010000000000000" - "cb4014000000000000cb401800000000" - "000093cb401c000000000000cb402000" - "0000000000cb4022000000000000" - ), - serialized_result.hex(), - ) diff --git a/comp/vision/old/type_checking.md b/comp/vision/old/type_checking.md deleted file mode 100644 index 5749fcd..0000000 --- a/comp/vision/old/type_checking.md +++ /dev/null @@ -1,13 +0,0 @@ -# Type Checking - -I set up mypy on vscode, which highlights type issues in python. - -To get it to understand all the things, I needed to install a few libraries on my desktop: - -* python3 -m pip install --upgrade robotpy -* python3 -m pip install robotpy-cscore -* python3 -m pip install robotpy-apriltag -* sudo apt install python3-prctl -* python3 -m pip install picamera2 - -You can read about python type annotations [here.](https://docs.python.org/3/library/typing.html) \ No newline at end of file diff --git a/comp/vision/old/ubuntu.md b/comp/vision/old/ubuntu.md deleted file mode 100644 index 9496e04..0000000 --- a/comp/vision/old/ubuntu.md +++ /dev/null @@ -1,29 +0,0 @@ -# Install and Run on Ubuntu - -To install on Ubuntu: - -First install the pupil-apriltags python wrapper (which also installs apriltags itself): - -``` -python3 -m pip install pupil-apriltags -``` - -Then make a fork of github.com/Team100/main2023 into your own account, and then clone it somewhere on your workstation: - -``` -cd -git clone git@github.com:/main2023.git -cd main2023/apriltags_example -``` - -To see detections in a single image: - -``` -python3 pic.py -``` - -To see detections in your webcam's video stream: - -``` -python3 vid.py -``` diff --git a/comp/vision/old/view.html b/comp/vision/old/view.html deleted file mode 100644 index 0a53111..0000000 --- a/comp/vision/old/view.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - -
- - - - - -
- - - - -
- - \ No newline at end of file diff --git a/lib/.gitignore b/lib/.gitignore index 229bc8d..7fa0a52 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,6 +1,3 @@ -*.wpilog -*.json.bck - # This gitignore has been specially created by the WPILib team. # If you remove items from this file, intellisense might break. @@ -172,6 +169,16 @@ out/ .fleet # Simulation GUI and other tools window save file -# *-window.json +networktables.json +simgui.json +*-window.json + +# Simulation data log directory +logs/ + +# Folder that has CTRE Phoenix Sim device config storage +ctre_sim/ -ctre_sim/ \ No newline at end of file +# clangd +/.cache +compile_commands.json diff --git a/lib/.vscode/settings.json b/lib/.vscode/settings.json index 8be11f2..1be35dd 100644 --- a/lib/.vscode/settings.json +++ b/lib/.vscode/settings.json @@ -25,5 +25,39 @@ } }, ], - "java.test.defaultConfig": "WPIlibUnitTests" + "java.test.defaultConfig": "WPIlibUnitTests", + "java.import.gradle.annotationProcessing.enabled": false, + "java.completion.favoriteStaticMembers": [ + "org.junit.Assert.*", + "org.junit.Assume.*", + "org.junit.jupiter.api.Assertions.*", + "org.junit.jupiter.api.Assumptions.*", + "org.junit.jupiter.api.DynamicContainer.*", + "org.junit.jupiter.api.DynamicTest.*", + "org.mockito.Mockito.*", + "org.mockito.ArgumentMatchers.*", + "org.mockito.Answers.*", + "edu.wpi.first.units.Units.*" + ], + "java.completion.filteredTypes": [ + "java.awt.*", + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*", + "java.beans.*", + "java.util.Base64.*", + "java.util.Timer", + "java.sql.*", + "javax.swing.*", + "javax.management.*", + "javax.smartcardio.*", + "edu.wpi.first.math.proto.*", + "edu.wpi.first.math.**.proto.*", + "edu.wpi.first.math.**.struct.*", + ], + "workbench.colorTheme": "Default Light Modern", + "editor.minimap.enabled": false, + "editor.inlayHints.enabled": "off" } diff --git a/lib/.wpilib/wpilib_preferences.json b/lib/.wpilib/wpilib_preferences.json index 652e4a8..9831485 100644 --- a/lib/.wpilib/wpilib_preferences.json +++ b/lib/.wpilib/wpilib_preferences.json @@ -1,6 +1,6 @@ { "enableCppIntellisense": false, "currentLanguage": "java", - "projectYear": "2024beta", + "projectYear": "2025beta", "teamNumber": 100 -} +} \ No newline at end of file diff --git a/lib/WPILib-License.md b/lib/WPILib-License.md index 8434944..e7cd597 100644 --- a/lib/WPILib-License.md +++ b/lib/WPILib-License.md @@ -1,4 +1,4 @@ -Copyright (c) 2009-2023 FIRST and other WPILib contributors +Copyright (c) 2009-2024 FIRST and other WPILib contributors All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/lib/build.gradle b/lib/build.gradle index afce9a9..fabda96 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -1,16 +1,8 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.2" - id "jacoco" + id "edu.wpi.first.GradleRIO" version "2025.1.1-beta-3" } -// these four lines are for development builds -// https://github.com/wpilibsuite/allwpilib/blob/main/DevelopmentBuilds.md -// wpi.maven.useLocal = false -// wpi.maven.useDevelopment = true -// wpi.versions.wpilibVersion = '2025.+' -// wpi.versions.wpimathVersion = '2025.+' - java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 @@ -41,6 +33,8 @@ deploy { frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { files = project.fileTree('src/main/deploy') directory = '/home/lvuser/deploy' + deleteOldFiles = false // Change to true to delete files on roboRIO that no + // longer exist in deploy directory of this project } } } @@ -58,10 +52,9 @@ def includeDesktopSupport = true // Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. // Also defines JUnit 5. dependencies { - + annotationProcessor wpi.java.deps.wpilibAnnotations() implementation wpi.java.deps.wpilib() implementation wpi.java.vendor.java() - implementation 'org.json:json:20231013' roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) @@ -77,24 +70,13 @@ dependencies { nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) simulationRelease wpi.sim.enableRelease() - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' - - // for test visualizations - testImplementation "org.jfree:jfreechart:1.5.3" + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } test { useJUnitPlatform() systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' - finalizedBy jacocoTestReport -} -jacocoTestReport { - dependsOn test - reports { - csv.required = true - } } // Simulation configuration (e.g. environment variables). diff --git a/lib/gradle/wrapper/gradle-wrapper.jar b/lib/gradle/wrapper/gradle-wrapper.jar index 7f93135..a4b76b9 100644 Binary files a/lib/gradle/wrapper/gradle-wrapper.jar and b/lib/gradle/wrapper/gradle-wrapper.jar differ diff --git a/lib/gradle/wrapper/gradle-wrapper.properties b/lib/gradle/wrapper/gradle-wrapper.properties index c5c2706..8e975a5 100644 --- a/lib/gradle/wrapper/gradle-wrapper.properties +++ b/lib/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/lib/gradlew b/lib/gradlew index 1aa94a4..f5feea6 100755 --- a/lib/gradlew +++ b/lib/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/lib/gradlew.bat b/lib/gradlew.bat index 6689b85..9b42019 100644 --- a/lib/gradlew.bat +++ b/lib/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/lib/settings.gradle b/lib/settings.gradle index 3e30f84..7cab49b 100644 --- a/lib/settings.gradle +++ b/lib/settings.gradle @@ -4,7 +4,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2024' + String frcYear = '2025' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/lib/src/main/java/org/team100/lib/commands/drivetrain/CommandMaker.java b/lib/src/main/java/org/team100/lib/commands/drivetrain/CommandMaker.java deleted file mode 100644 index c353bfd..0000000 --- a/lib/src/main/java/org/team100/lib/commands/drivetrain/CommandMaker.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.team100.lib.commands.drivetrain; - -import org.team100.lib.motion.drivetrain.SwerveDriveSubsystem; -import org.team100.lib.visualization.TrajectoryVisualization; - -import com.choreo.lib.Choreo; -import com.choreo.lib.ChoreoTrajectory; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.WrapperCommand; - -/** - * Utility class to produce commands. - */ -public class CommandMaker { - /** - * Try the new Choreo library. - * - * see https://github.com/SleipnirGroup/Choreo/wiki/ChoreoLib-Java-Usage - */ - public static Command choreo( - ChoreoTrajectory trajectory, - SwerveDriveSubsystem drivetrain, - TrajectoryVisualization viz) { - return new WrapperCommand( - Choreo.choreoSwerveCommand( - trajectory, - () -> drivetrain.getPose(), - new PIDController(0.25, 0.0, 0.0), - new PIDController(0.25, 0.0, 0.0), - new PIDController(0.25, 0.0, 0.0), - drivetrain::setChassisSpeeds, - () -> false, - drivetrain)) { - - @Override - public void initialize() { - super.initialize(); - viz.setViz(trajectory); - } - - @Override - public void end(boolean interrupted) { - super.end(interrupted); - viz.clear(); - } - }; - } - - private CommandMaker() { - // - } -} diff --git a/lib/src/main/java/org/team100/lib/localization/Blip24Struct.java b/lib/src/main/java/org/team100/lib/localization/Blip24Struct.java index 03a4609..728c96c 100644 --- a/lib/src/main/java/org/team100/lib/localization/Blip24Struct.java +++ b/lib/src/main/java/org/team100/lib/localization/Blip24Struct.java @@ -12,10 +12,10 @@ public Class getTypeClass() { return Blip24.class; } - @Override - public String getTypeString() { - return "struct:Blip24"; - } + @Override + public String getTypeName() { + return "Blip24"; + } @Override public int getSize() { diff --git a/lib/src/main/java/org/team100/lib/logging/receiver/UdpConsumers.java b/lib/src/main/java/org/team100/lib/logging/receiver/UdpConsumers.java index ca557d8..755d6dd 100644 --- a/lib/src/main/java/org/team100/lib/logging/receiver/UdpConsumers.java +++ b/lib/src/main/java/org/team100/lib/logging/receiver/UdpConsumers.java @@ -21,7 +21,7 @@ import edu.wpi.first.networktables.PubSubOption; import edu.wpi.first.networktables.StringPublisher; import edu.wpi.first.util.datalog.BooleanLogEntry; -import edu.wpi.first.util.datalog.DataLog; +import edu.wpi.first.util.datalog.DataLogBackgroundWriter; import edu.wpi.first.util.datalog.DoubleArrayLogEntry; import edu.wpi.first.util.datalog.DoubleLogEntry; import edu.wpi.first.util.datalog.IntegerLogEntry; @@ -48,7 +48,7 @@ public class UdpConsumers implements UdpConsumersInterface { private final AtomicInteger counter = new AtomicInteger(0); NetworkTableInstance inst; - DataLog log_file; + DataLogBackgroundWriter log_file; volatile long m_timestamp; @@ -106,7 +106,7 @@ public boolean validateTimestamp(long timestamp) { // make a new log file? if (log_file != null) log_file.close(); - log_file = new DataLog("", "", 0.1); + log_file = new DataLogBackgroundWriter("", "", 0.1); System.out.println("impl " + log_file.getImpl()); Instant i = Instant.ofEpochSecond(timestamp); // TODO: sometimes this fails because the internal diff --git a/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModuleDeltaStruct.java b/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModuleDeltaStruct.java index 4f0f418..728a2a8 100644 --- a/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModuleDeltaStruct.java +++ b/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModuleDeltaStruct.java @@ -13,10 +13,10 @@ public Class getTypeClass() { return SwerveModuleDelta.class; } - @Override - public String getTypeString() { - return "struct:SwerveModuleDelta"; - } + @Override + public String getTypeName() { + return "SwerveModuleDelta"; + } @Override public int getSize() { diff --git a/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModulePosition100Struct.java b/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModulePosition100Struct.java index c87914e..1ea9121 100644 --- a/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModulePosition100Struct.java +++ b/lib/src/main/java/org/team100/lib/motion/drivetrain/kinodynamics/struct/SwerveModulePosition100Struct.java @@ -21,10 +21,10 @@ public Class getTypeClass() { return SwerveModulePosition100.class; } - @Override - public String getTypeString() { - return "struct:SwerveModulePosition100"; - } + @Override + public String getTypeName() { + return "SwerveModulePosition100"; + } @Override public int getSize() { diff --git a/lib/src/main/java/org/team100/lib/motor/CANSparkMotor.java b/lib/src/main/java/org/team100/lib/motor/CANSparkMotor.java index 842b851..f0cd3d5 100644 --- a/lib/src/main/java/org/team100/lib/motor/CANSparkMotor.java +++ b/lib/src/main/java/org/team100/lib/motor/CANSparkMotor.java @@ -10,20 +10,20 @@ import org.team100.lib.util.Memo; import org.team100.lib.util.Util; -import com.revrobotics.CANSparkBase; -import com.revrobotics.CANSparkBase.ControlType; -import com.revrobotics.CANSparkBase.IdleMode; +import com.revrobotics.spark.SparkBase; +import com.revrobotics.spark.SparkBase.ControlType; +import com.revrobotics.spark.SparkClosedLoopController; +import com.revrobotics.spark.SparkClosedLoopController.ArbFFUnits; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.RelativeEncoder; -import com.revrobotics.SparkPIDController; -import com.revrobotics.SparkPIDController.ArbFFUnits; import edu.wpi.first.wpilibj.RobotController; public abstract class CANSparkMotor implements BareMotor { protected final Feedforward100 m_ff; - protected final CANSparkBase m_motor; + protected final SparkBase m_motor; protected final RelativeEncoder m_encoder; - protected final SparkPIDController m_pidController; + protected final SparkClosedLoopController m_pidController; // CACHES private final DoubleSupplier m_encoder_position; private final DoubleSupplier m_encoder_velocity; @@ -50,7 +50,7 @@ public abstract class CANSparkMotor implements BareMotor { protected CANSparkMotor( LoggerFactory parent, - CANSparkBase motor, + SparkBase motor, MotorPhase motorPhase, int currentLimit, Feedforward100 ff, @@ -64,8 +64,8 @@ protected CANSparkMotor( Rev100.motorConfig(m_motor, IdleMode.kCoast, motorPhase, 20); Rev100.currentConfig(m_motor, currentLimit); m_encoder = m_motor.getEncoder(); - m_pidController = m_motor.getPIDController(); - Rev100.pidConfig(m_pidController, pid); + m_pidController = m_motor.getClosedLoopController(); + Rev100.pidConfig(m_motor, pid); // make everything after this asynchronous. // NOTE: this makes error-checking not work at all. Rev100.crash(() -> m_motor.setCANTimeout(0)); diff --git a/lib/src/main/java/org/team100/lib/motor/Neo550CANSparkMotor.java b/lib/src/main/java/org/team100/lib/motor/Neo550CANSparkMotor.java index 642187d..de248fb 100644 --- a/lib/src/main/java/org/team100/lib/motor/Neo550CANSparkMotor.java +++ b/lib/src/main/java/org/team100/lib/motor/Neo550CANSparkMotor.java @@ -4,8 +4,8 @@ import org.team100.lib.config.PIDConstants; import org.team100.lib.logging.LoggerFactory; -import com.revrobotics.CANSparkLowLevel.MotorType; -import com.revrobotics.CANSparkMax; +import com.revrobotics.spark.SparkLowLevel.MotorType; +import com.revrobotics.spark.SparkMax; /** * Neo550 motor. @@ -20,7 +20,7 @@ public Neo550CANSparkMotor( int currentLimit, Feedforward100 ff, PIDConstants pid) { - super(parent, new CANSparkMax(canId, MotorType.kBrushless), + super(parent, new SparkMax(canId, MotorType.kBrushless), motorPhase, currentLimit, ff, pid); } diff --git a/lib/src/main/java/org/team100/lib/motor/NeoCANSparkMotor.java b/lib/src/main/java/org/team100/lib/motor/NeoCANSparkMotor.java index aa56184..0d5a81c 100644 --- a/lib/src/main/java/org/team100/lib/motor/NeoCANSparkMotor.java +++ b/lib/src/main/java/org/team100/lib/motor/NeoCANSparkMotor.java @@ -4,8 +4,8 @@ import org.team100.lib.config.PIDConstants; import org.team100.lib.logging.LoggerFactory; -import com.revrobotics.CANSparkLowLevel.MotorType; -import com.revrobotics.CANSparkMax; +import com.revrobotics.spark.SparkLowLevel.MotorType; +import com.revrobotics.spark.SparkMax; /** * Neo motor. @@ -24,7 +24,7 @@ public NeoCANSparkMotor( int currentLimit, Feedforward100 ff, PIDConstants pid) { - super(parent, new CANSparkMax(canId, MotorType.kBrushless), + super(parent, new SparkMax(canId, MotorType.kBrushless), motorPhase, currentLimit, ff, pid); } diff --git a/lib/src/main/java/org/team100/lib/motor/NeoVortexCANSparkMotor.java b/lib/src/main/java/org/team100/lib/motor/NeoVortexCANSparkMotor.java index 8d83584..1d5f722 100644 --- a/lib/src/main/java/org/team100/lib/motor/NeoVortexCANSparkMotor.java +++ b/lib/src/main/java/org/team100/lib/motor/NeoVortexCANSparkMotor.java @@ -4,8 +4,8 @@ import org.team100.lib.config.PIDConstants; import org.team100.lib.logging.LoggerFactory; -import com.revrobotics.CANSparkFlex; -import com.revrobotics.CANSparkLowLevel.MotorType; +import com.revrobotics.spark.SparkFlex; +import com.revrobotics.spark.SparkLowLevel.MotorType; /** * Neo Vortex motor. @@ -20,7 +20,7 @@ public NeoVortexCANSparkMotor( int currentLimit, Feedforward100 ff, PIDConstants pid) { - super(parent, new CANSparkFlex(canId, MotorType.kBrushless), + super(parent, new SparkFlex(canId, MotorType.kBrushless), motorPhase, currentLimit, ff, pid); } diff --git a/lib/src/main/java/org/team100/lib/motor/Rev100.java b/lib/src/main/java/org/team100/lib/motor/Rev100.java index 75aafd7..2916313 100644 --- a/lib/src/main/java/org/team100/lib/motor/Rev100.java +++ b/lib/src/main/java/org/team100/lib/motor/Rev100.java @@ -5,11 +5,12 @@ import org.team100.lib.config.PIDConstants; import org.team100.lib.util.Util; -import com.revrobotics.CANSparkBase; -import com.revrobotics.CANSparkBase.IdleMode; +import com.revrobotics.spark.SparkBase; +import com.revrobotics.spark.SparkBase.PersistMode; +import com.revrobotics.spark.SparkBase.ResetMode; +import com.revrobotics.spark.config.SparkMaxConfig; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.REVLibError; -import com.revrobotics.SparkPIDController; -import com.revrobotics.CANSparkLowLevel.PeriodicFrame; public class Rev100 { @@ -27,27 +28,33 @@ public static void warn(Supplier s) { } } - public static void baseConfig(CANSparkBase motor) { - crash(motor::restoreFactoryDefaults); + public static void baseConfig(SparkBase motor) { + SparkMaxConfig conf = new SparkMaxConfig(); + crash(() -> motor.configure(conf, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters)); } - public static void motorConfig(CANSparkBase motor, IdleMode idleMode, MotorPhase phase, - int velocityMeasurementPeriod) { + public static void motorConfig(SparkBase motor, IdleMode idleMode, MotorPhase phase, + int periodMs) { setIdleMode(motor, idleMode); - motor.setInverted(phase == MotorPhase.REVERSE); - // velocity is in the Status1 frame - // position is in the Status2 frame. - // https://docs.revrobotics.com/sparkmax/operating-modes/control-interfaces - crash(() -> motor.setPeriodicFramePeriod(PeriodicFrame.kStatus1, velocityMeasurementPeriod)); - crash(() -> motor.setPeriodicFramePeriod(PeriodicFrame.kStatus2, velocityMeasurementPeriod)); + SparkMaxConfig conf = new SparkMaxConfig(); + conf.inverted(phase == MotorPhase.REVERSE); + conf.signals.primaryEncoderVelocityPeriodMs(periodMs); + conf.signals.primaryEncoderVelocityAlwaysOn(true); + conf.signals.primaryEncoderPositionPeriodMs(periodMs); + conf.signals.primaryEncoderPositionAlwaysOn(true); + crash(()->motor.configure(conf, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); } - public static void currentConfig(CANSparkBase motor, int currentLimit) { - crash(() -> motor.setSmartCurrentLimit(currentLimit)); + public static void currentConfig(SparkBase motor, int currentLimit) { + SparkMaxConfig conf = new SparkMaxConfig(); + conf.smartCurrentLimit(currentLimit); + crash(()->motor.configure(conf, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); } - public static void setIdleMode(CANSparkBase motor, IdleMode idleMode) { - crash(() -> motor.setIdleMode(idleMode)); + public static void setIdleMode(SparkBase motor, IdleMode idleMode) { + SparkMaxConfig conf = new SparkMaxConfig(); + conf.idleMode(idleMode); + crash(()->motor.configure(conf, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); } /** @@ -56,14 +63,16 @@ public static void setIdleMode(CANSparkBase motor, IdleMode idleMode) { * a desired control output would be a duty cycle of 0.1 or so, which implies a * value of P like 3e-4. */ - public static void pidConfig(SparkPIDController control, PIDConstants pid) { - crash(() -> control.setPositionPIDWrappingEnabled(false)); // don't use position control - crash(() -> control.setP(pid.getP())); - crash(() -> control.setI(pid.getI())); - crash(() -> control.setD(pid.getD())); - crash(() -> control.setIZone(pid.getIZone())); - crash(() -> control.setFF(0)); // use arbitrary FF instead - crash(() -> control.setOutputRange(-1, 1)); + public static void pidConfig(SparkBase motor, PIDConstants pid) { + SparkMaxConfig conf = new SparkMaxConfig(); + conf.closedLoop.positionWrappingEnabled(false); // don't use position control + conf.closedLoop.p(pid.getP()); + conf.closedLoop.i(pid.getI()); + conf.closedLoop.d(pid.getD()); + conf.closedLoop.iZone(pid.getIZone()); + conf.closedLoop.velocityFF(0); // use arbitrary FF instead + conf.closedLoop.outputRange(-1, 1); + crash(()->motor.configure(conf, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters)); } private Rev100() { diff --git a/lib/src/main/java/org/team100/lib/sensors/ReduxGyro.java b/lib/src/main/java/org/team100/lib/sensors/ReduxGyro.java index d04a564..2b06f8c 100644 --- a/lib/src/main/java/org/team100/lib/sensors/ReduxGyro.java +++ b/lib/src/main/java/org/team100/lib/sensors/ReduxGyro.java @@ -7,7 +7,7 @@ import org.team100.lib.util.Util; import com.reduxrobotics.sensors.canandgyro.Canandgyro; -import com.reduxrobotics.sensors.canandgyro.Canandgyro.Faults; +import com.reduxrobotics.sensors.canandgyro.CanandgyroFaults; import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.math.util.Units; @@ -71,7 +71,7 @@ public Rotation2d getRollNWU() { public void periodic() { if (m_gyro.isCalibrating()) Util.println("Redux Gyro Calibrating ......"); - Faults activeFaults = m_gyro.getActiveFaults(); + CanandgyroFaults activeFaults = m_gyro.getActiveFaults(); if (activeFaults.faultsValid()) Util.warn("Redux Gyro fault!"); diff --git a/lib/src/main/java/org/team100/lib/sensors/SingleNavXGyro.java b/lib/src/main/java/org/team100/lib/sensors/SingleNavXGyro.java deleted file mode 100644 index fe42585..0000000 --- a/lib/src/main/java/org/team100/lib/sensors/SingleNavXGyro.java +++ /dev/null @@ -1,277 +0,0 @@ -package org.team100.lib.sensors; - -import org.team100.lib.async.Async; -import org.team100.lib.config.Identity; -import org.team100.lib.framework.TimedRobot100; -import org.team100.lib.logging.Level; -import org.team100.lib.logging.LoggerFactory; -import org.team100.lib.logging.LoggerFactory.BooleanLogger; -import org.team100.lib.logging.LoggerFactory.DoubleLogger; -import org.team100.lib.util.Util; - -import com.kauailabs.navx.frc.AHRS; - -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.wpilibj.SPI; -import edu.wpi.first.wpilibj.SerialPort; -import edu.wpi.first.wpilibj.Timer; - -/** - * Single NavX over USB or SPI. - * - * to work around SPI issues, implement the SPI reset in AHRS as suggested? - * - * https://www.chiefdelphi.com/t/navx2-disconnecting-reconnecting-intermittently-not-browning-out/425487/39 - * - * try USB supplemental power for the NavX-MXP? - * - * @deprecated because the NavX just doesn't work very well (our most recent - * navx-mxp broke soon after we got it), support is nonexistent. - */ -@Deprecated -public class SingleNavXGyro implements Gyro { - - /** - * The java code in {@link edu.wpi.first.hal.SPIJNI.spiReadB} has to read and - * parse every update. 200 Hz seems to make it do a lot of work (7.5% - * self time according to VisualVM). - */ - // private static final byte kUpdateRateHz = (byte) 200; - - /** - * 60 Hz is the default, use that until we get a handle on the load issue. - * - * Note that the actual update rate is 66 - * - * https://www.chiefdelphi.com/t/navx2-disconnecting-reconnecting-intermittently-not-browning-out/425487/39 - */ - // private static final byte kUpdateRateHz = (byte) 66; - private static final byte kUpdateRateHz = (byte) 60; - - /** - * RoboRIO SPI can go up to 4 MHz: - * - * https://www.ni.com/docs/en-US/bundle/roborio-frc-specs/page/specs.html - * - * The NavX SPI can go up to 2 Mhz: - * - * https://pdocs.kauailabs.com/navx-mxp/advanced/register-protocol/ - * - * But each update is only something like 100 bytes, 1000 bits, 60 kHz, so - * choose a lower bit rate: - */ - private static final int kSPIBitRateHz = 500000; - - private final AHRS m_ahrs; - - /** - * The NavX scale factor seems to not be set correctly from the factory: - * - * https://www.chiefdelphi.com/t/navx-drift/467248/6 - * - * This should be measured for each NavX; it's configured here based on RoboRIO - * identity, so remember to update this if you move NavX from one RoboRIO to - * another. - */ - private final float m_yawScaleFactor; - private final float m_yawRateScaleFactor; - // LOGGERS - private final DoubleLogger m_log_heading; - private final DoubleLogger m_log_heading_rate; - private final DoubleLogger m_log_pitch; - private final DoubleLogger m_log_roll; - private final DoubleLogger m_log_yaw_deg; - private final DoubleLogger m_log_pitch_deg; - private final DoubleLogger m_log_roll_deg; - private final DoubleLogger m_log_yaw_rate_deg; - private final BooleanLogger m_log_connected; - - /** To work around NavX badness, for now. */ - private Rotation2d m_prevYawNWURad = null; - private double m_yawRateRad_S = 0; - - /** - * NOTE: the async is just for logging, maybe don't use a whole thread for it. - */ - public SingleNavXGyro(LoggerFactory parent, Async async) { - LoggerFactory child = parent.child(this); - - // maximum update rate == minimum latency (use most-recent updates). maybe too - // much CPU? - switch (Identity.instance) { - case COMP_BOT: - case SWERVE_ONE: - m_ahrs = new AHRS( - SerialPort.Port.kUSB, - AHRS.SerialDataType.kProcessedData, - kUpdateRateHz); - m_yawScaleFactor = 1.0f; - m_yawRateScaleFactor = 1.0f; - // remove this message when calibration is finished. - Util.warn("********** NAVX SCALE FACTOR IS UNCALIBRATED! CALIBRATE ME! **********"); - break; - default: - m_ahrs = new AHRS( - SPI.Port.kMXP, - kSPIBitRateHz, - kUpdateRateHz); - m_yawScaleFactor = 1.0f; - m_yawRateScaleFactor = 1.0f; - // remove this message when calibration is finished. - Util.warn("********** NAVX SCALE FACTOR IS UNCALIBRATED! CALIBRATE ME! **********"); - break; - - } - m_ahrs.enableBoardlevelYawReset(true); - - while (!m_ahrs.isConnected()) { - Util.println("waiting for navx connection..."); - Timer.delay(1); - } - - while ((m_ahrs.isConnected() && m_ahrs.isCalibrating())) { - Util.println("Waiting for navx startup calibration..."); - Timer.delay(1); - } - - m_ahrs.zeroYaw(); - async.addPeriodic(this::logStuff, 1, "SingleNavXGyro"); - m_log_heading = child.doubleLogger(Level.TRACE, "Heading NWU (rad)"); - m_log_heading_rate = child.doubleLogger(Level.TRACE, "Heading Rate NWU (rad_s)"); - m_log_pitch = child.doubleLogger(Level.TRACE, "Pitch NWU (rad)"); - m_log_roll = child.doubleLogger(Level.TRACE, "Roll NWU (rad)"); - m_log_yaw_deg = child.doubleLogger(Level.DEBUG, "Yaw NED (deg)"); - m_log_pitch_deg = child.doubleLogger(Level.TRACE, "Pitch (deg)"); - m_log_roll_deg = child.doubleLogger(Level.TRACE, "Roll (deg)"); - m_log_yaw_rate_deg = child.doubleLogger(Level.DEBUG, "Rate NED (deg_s)"); - m_log_connected = child.booleanLogger(Level.TRACE, "Connected"); - - } - - @Override - public Rotation2d getYawNWU() { - Rotation2d currentHeadingNWU = Rotation2d.fromDegrees(-1.0 * getYawNEDDeg()); - m_log_heading.log(currentHeadingNWU::getRadians); - return currentHeadingNWU; - } - - @Override - public void periodic() { - // This is to work around NavX badness, for now. - // TODO: use a real rate. - // TODO: replace this use of periodic with Memo.of(), if we're going to keep it more than a week. - Rotation2d yawNWURad = getYawNWU(); - if (m_prevYawNWURad == null) { - m_prevYawNWURad = yawNWURad; - m_yawRateRad_S = 0; - } - Rotation2d dYawRad = yawNWURad.minus(m_prevYawNWURad); - m_yawRateRad_S = dYawRad.getRadians() / TimedRobot100.LOOP_PERIOD_S; - } - - @Override - public double getYawRateNWU() { - m_log_heading_rate.log(() -> m_yawRateRad_S); - return m_yawRateRad_S; - // double currentHeadingRateNWU = Math.toRadians(getYawRateNEDDeg_s()); - // m_log_heading_rate.log(() -> currentHeadingRateNWU); - // return currentHeadingRateNWU; - } - - @Override - public Rotation2d getPitchNWU() { - Rotation2d pitchNWU = Rotation2d.fromDegrees(-1.0 * getPitchDeg()); - m_log_pitch.log(pitchNWU::getRadians); - return pitchNWU; - } - - @Override - public Rotation2d getRollNWU() { - Rotation2d rollNWU = Rotation2d.fromDegrees(-1.0 * getRollDeg()); - m_log_roll.log(rollNWU::getRadians); - return rollNWU; - } - - /////////////////////// - // - // below was previously in SingleNavXGyro. - // - - /** - * NOTE NOTE NOTE this is NED = clockwise positive = backwards - * - * @returns yaw in degrees [-180,180] - */ - private float getYawNEDDeg() { - float yawDeg = m_ahrs.getYaw() * m_yawScaleFactor; - m_log_yaw_deg.log(() -> yawDeg); - return yawDeg; - } - - /** - * @returns pitch in degrees [-180,180] - */ - private float getPitchDeg() { - float pitchDeg = m_ahrs.getPitch(); - m_log_pitch_deg.log(() -> pitchDeg); - return pitchDeg; - } - - /** - * @returns roll in degrees [-180,180] - */ - private float getRollDeg() { - float rollDeg = m_ahrs.getRoll(); - m_log_roll_deg.log(() -> rollDeg); - return rollDeg; - } - - /** - * NOTE NOTE NOTE this is NED = clockwise positive = backwards - * - * 6/12/24 - * WARNNINGGGGG DO NOT USE THIS WITHOUT AN MXP GYRO, IT WILL ALWAYS RETURN 0 - * - * @returns rate in degrees/sec - */ - private float getYawRateNEDDeg_s() { - final float rateDeg_S = getRateDeg_S() * m_yawRateScaleFactor; - m_log_yaw_rate_deg.log(() -> rateDeg_S); - return rateDeg_S; - } - - private float getRateDeg_S() { - // 2/27/24 the NavX getRate() method has been broken since at least 2018 - // - // https://github.com/kauailabs/navxmxp/issues/69 - // - // the recommended workaround is to use getRawGyroZ() instead. - // but note that the USB interface does not support both "raw" and "processed" - // inputs, you have to choose one or the other. And the MXP gyro seems - // like it worked for awhile, and then stopped working. - return m_ahrs.getRawGyroZ(); - // float rateDeg_S = m_ahrs.getRawGyroZ(); - - // NavX spec says the noise density of the gyro is 0.005 deg/s/sqrt(hz), and the - // bandwidth is 6600 hz, so the expected noise is about 0.007 rad/s. - // The zero offset is specified as 1 deg/s (0.02 rad/s). - // The deadband here is very slow: 0.05 rad/s is 2 min/revolution - // measurement here is degrees, 0.05 rad is about 2.9 deg - // - // use a filter here instead of a deadband. - // if (Math.abs(rateDeg_S) < 2.9) { - // rateDeg_S = 0; - // } - // return rateDeg_S; - } - - private void logStuff() { - if (m_ahrs.isConnected()) { - m_log_connected.log(() -> true); - } else { - m_log_connected.log(() -> false); - } - m_log_yaw_deg.log(m_ahrs::getYaw); - } - -} diff --git a/lib/src/main/java/org/team100/lib/util/struct/OptionalRotation2dStruct.java b/lib/src/main/java/org/team100/lib/util/struct/OptionalRotation2dStruct.java index fa37f5d..343ce4a 100644 --- a/lib/src/main/java/org/team100/lib/util/struct/OptionalRotation2dStruct.java +++ b/lib/src/main/java/org/team100/lib/util/struct/OptionalRotation2dStruct.java @@ -15,10 +15,10 @@ public Class getTypeClass() { return OptionalRotation2d.class; } - @Override - public String getTypeString() { - return "struct:OptionalRotation2d"; - } + @Override + public String getTypeName() { + return "OptionalRotation2d"; + } @Override public int getSize() { diff --git a/lib/src/main/java/org/team100/lib/visualization/TrajectoryVisualization.java b/lib/src/main/java/org/team100/lib/visualization/TrajectoryVisualization.java index 2f9e34c..1c4745a 100644 --- a/lib/src/main/java/org/team100/lib/visualization/TrajectoryVisualization.java +++ b/lib/src/main/java/org/team100/lib/visualization/TrajectoryVisualization.java @@ -8,8 +8,6 @@ import org.team100.lib.trajectory.Trajectory100; import org.team100.lib.trajectory.TrajectoryPoint; -import com.choreo.lib.ChoreoTrajectory; - import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.math.trajectory.Trajectory; import edu.wpi.first.math.trajectory.Trajectory.State; @@ -73,10 +71,6 @@ private static double[] fromPoses(List poses) { return arr; } - public void setViz(ChoreoTrajectory trajectory) { - setViz(List.of(trajectory.getPoses())); - } - public void clear() { m_log_trajectory.log( () -> new double[0]); } diff --git a/lib/src/test/java/org/team100/lib/config/FeedforwardTest.java b/lib/src/test/java/org/team100/lib/config/FeedforwardTest.java index 25c6f50..58e71f8 100644 --- a/lib/src/test/java/org/team100/lib/config/FeedforwardTest.java +++ b/lib/src/test/java/org/team100/lib/config/FeedforwardTest.java @@ -15,20 +15,23 @@ class FeedforwardTest { @Test void testWPI() { - SimpleMotorFeedforward smff = new SimpleMotorFeedforward(0, 1, 1); - // current v = 1, want a = 1. // naive model says u = 2. - assertEquals(2, smff.calculate(1, 1), kDelta); + assertEquals(2, + new SimpleMotorFeedforward(0, 1, 1).calculate(1, 1), + kDelta); // current v = 1, a = 1 for 1 sec => next v = 2. // discrete model knows that u = 2 applied for 1 sec won't yield // v = 2 because the back EMF will increase along the way. // if you want v = 2 after 1 sec, you need to push harder. - assertEquals(2.582, smff.calculate(1, 2, 1), kDelta); + assertEquals(2.582, + new SimpleMotorFeedforward(0, 1, 1, 1).calculateWithVelocities(1, 2), + kDelta); // for the usual time step this is a small correction. - assertEquals(2.010, smff.calculate(1, 1.02, 0.02), kDelta); + assertEquals(2.010, + new SimpleMotorFeedforward(0, 1, 1).calculateWithVelocities(1, 1.02), kDelta); } @Test diff --git a/lib/src/test/java/org/team100/lib/motion/arm/JointVisualizer.java b/lib/src/test/java/org/team100/lib/motion/arm/JointVisualizer.java deleted file mode 100644 index 046ecd0..0000000 --- a/lib/src/test/java/org/team100/lib/motion/arm/JointVisualizer.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.team100.lib.motion.arm; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; - -import javax.swing.JFrame; -import javax.swing.SwingUtilities; -import javax.swing.WindowConstants; - -import org.jfree.chart.ChartFactory; -import org.jfree.chart.ChartPanel; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.plot.XYPlot; -import org.jfree.data.xy.XYSeries; -import org.jfree.data.xy.XYSeriesCollection; - -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.math.trajectory.Trajectory; -import edu.wpi.first.math.trajectory.TrajectoryConfig; - -/** - * Visualize trajectories in joint space. Click "Run" below in vscode to see it. - */ -public class JointVisualizer { - - /** Return a dataset with one series with proximal in x and distal in y */ - private static XYSeriesCollection joints() { - ArmKinematics kinematics = new ArmKinematics(.93, .92); - XYSeriesCollection dataset = new XYSeriesCollection(); - TrajectoryConfig config = new TrajectoryConfig(1, 1); - ArmTrajectories trajectories = new ArmTrajectories(config); - Translation2d t0 = kinematics.forward(new ArmAngles(-0.639248, 1.838205)); // safe - Translation2d t1 = new Translation2d(.6, .6); - Translation2d t2 = new Translation2d(1, .6); - Translation2d t3 = new Translation2d(1, 1); - Translation2d t4 = new Translation2d(.6, 1); - Trajectory trajectorystart = trajectories.makeTrajectory(t0, t1); - Trajectory trajectory = trajectories.makeTrajectory(t1, t2); - Trajectory trajectory2 = trajectories.makeTrajectory(t2, t3); - Trajectory trajectory3 = trajectories.makeTrajectory(t3, t4); - Trajectory trajectory4 = trajectories.makeTrajectory(t4, t1); - XYSeries series1 = new XYSeries("Cartesian End"); - XYSeries elbow = new XYSeries("Cartesian Elbow"); - for (double t = 0; t < trajectorystart.getTotalTimeSeconds(); t += 0.05) { - Trajectory.State s = trajectorystart.sample(t); - double x1 = s.poseMeters.getX(); // proximal - double y1 = s.poseMeters.getY(); // distal - series1.add(x1, y1); - } - for (double t = 0; t < trajectory.getTotalTimeSeconds(); t += 0.05) { - Trajectory.State s = trajectory.sample(t); - double x1 = s.poseMeters.getX(); // proximal - double y1 = s.poseMeters.getY(); // distal - series1.add(x1, y1); - } - for (double t = 0; t < trajectory2.getTotalTimeSeconds(); t += 0.05) { - Trajectory.State s = trajectory2.sample(t); - double x1 = s.poseMeters.getX(); // proximal - double y1 = s.poseMeters.getY(); // distal - series1.add(x1, y1); - } - for (double t = 0; t < trajectory3.getTotalTimeSeconds(); t += 0.05) { - - Trajectory.State s = trajectory3.sample(t); - double x1 = s.poseMeters.getX(); // proximal - double y1 = s.poseMeters.getY(); // distal - series1.add(x1, y1); - } - for (double t = 0; t < trajectory4.getTotalTimeSeconds(); t += 0.05) { - Trajectory.State s = trajectory4.sample(t); - double x1 = s.poseMeters.getX(); // proximal - double y1 = s.poseMeters.getY(); // distal - series1.add(x1, y1); - } - dataset.addSeries(series1); - XYSeries joints = dataset.getSeries(0); - int ct = joints.getItemCount(); - for (int i = 0; i < ct; ++i) { - Number nx = joints.getX(i); // proximal - Number ny = joints.getY(i); // distal - double proximal = nx.doubleValue(); - double distal = ny.doubleValue(); - Translation2d a = new Translation2d(proximal, distal); - ArmAngles c = kinematics.inverse(a); - Translation2d el = kinematics.elbow(c); - elbow.add(el.getY(), el.getX()); - } - dataset.addSeries(elbow); - XYSeries base = new XYSeries("Base"); - base.add(0, 0); - dataset.addSeries(base); - return dataset; - } - - /** - * Add end and elbow series. - * - * X represents "z" i.e. height - * Y represents "x" i.e. forward - * - * @param data has proximal in x and distal in y - * - */ - private static XYSeriesCollection cartesianToJoint(XYSeriesCollection data) { - ArmKinematics k = new ArmKinematics(.93, .92); - XYSeries joints = data.getSeries(0); - XYSeries end = new XYSeries("Joints"); - int ct = joints.getItemCount(); - for (int i = 0; i < ct; ++i) { - Number nx = joints.getX(i); // proximal - Number ny = joints.getY(i); // distal - double proximal = nx.doubleValue(); - double distal = ny.doubleValue(); - Translation2d a = new Translation2d(proximal, distal); - ArmAngles c = k.inverse(a); - end.add(c.th1, c.th2); - } - XYSeriesCollection result = new XYSeriesCollection(); - result.addSeries(end); - return result; - - } - - /** Click "Run" below in vscode. */ - public static void main(String[] args) { - SwingUtilities.invokeLater(() -> { - - JFrame frame = new JFrame("Chart Collection"); - - XYSeriesCollection translation = joints(); - JFreeChart jointChart = ChartFactory.createScatterPlot( - "Trajectory in Cartesian Space", - "X (Left/Right)", - "Y (Up/Down)", - translation); - - XYPlot cartesianXY = (XYPlot) jointChart.getPlot(); - cartesianXY.setBackgroundPaint(Color.WHITE); - cartesianXY.getDomainAxis().setRange(-1, 1.5); // 2 - cartesianXY.getRangeAxis().setRange(0, 2.5); // 2 - - ChartPanel jointPanel = new ChartPanel(jointChart) { - @Override - public Dimension getPreferredSize() { - return new Dimension(400, 400); - } - }; - frame.add(jointPanel, BorderLayout.EAST); - - XYSeriesCollection cartesian = cartesianToJoint(translation); - JFreeChart cartesianChart = ChartFactory.createScatterPlot( - "Trajectory in Joint Space", - "Lower", - "Upper", - cartesian); - - XYPlot jointXY = (XYPlot) cartesianChart.getPlot(); - jointXY.setBackgroundPaint(Color.WHITE); - jointXY.getDomainAxis().setRange(-0.7, 0.5); // 2.5 - jointXY.getRangeAxis().setRange(0, 3.14); - - ChartPanel cartesianPanel = new ChartPanel(cartesianChart) { - @Override - public Dimension getPreferredSize() { - return new Dimension(400, 400); - } - }; - frame.add(cartesianPanel, BorderLayout.WEST); - frame.setLocationRelativeTo(null); - frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - frame.pack(); - frame.setVisible(true); - }); - } -} \ No newline at end of file diff --git a/lib/src/test/java/org/team100/lib/wpi_trajectory/TestMalformedSpline.java b/lib/src/test/java/org/team100/lib/wpi_trajectory/TestMalformedSpline.java index 9a20088..cdd33de 100644 --- a/lib/src/test/java/org/team100/lib/wpi_trajectory/TestMalformedSpline.java +++ b/lib/src/test/java/org/team100/lib/wpi_trajectory/TestMalformedSpline.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.List; +import java.util.NoSuchElementException; import org.junit.jupiter.api.Test; import org.team100.lib.geometry.GeometryUtil; @@ -11,12 +12,12 @@ import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.math.trajectory.TrajectoryConfig; import edu.wpi.first.math.trajectory.TrajectoryGenerator; -import edu.wpi.first.math.trajectory.TrajectoryParameterizer.TrajectoryGenerationException; class TestMalformedSpline { @Test void malformedSplineTest() throws IOException { - assertThrows(TrajectoryGenerationException.class, + // TODO: NoSuchElementException here probably indicates a bug + assertThrows(NoSuchElementException.class, () -> TrajectoryGenerator.generateTrajectory( new Pose2d(0, 0, GeometryUtil.kRotationZero), List.of(), diff --git a/lib/vendordeps/ChoreoLib.json b/lib/vendordeps/ChoreoLib.json deleted file mode 100644 index a5f886a..0000000 --- a/lib/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.2.3", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.2.3" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.2.3", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/lib/vendordeps/NavX.json b/lib/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/lib/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/lib/vendordeps/PathplannerLib.json b/lib/vendordeps/PathplannerLib.json deleted file mode 100644 index 6dc648d..0000000 --- a/lib/vendordeps/PathplannerLib.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "PathplannerLib.json", - "name": "PathplannerLib", - "version": "2024.2.8", - "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", - "frcYear": "2024", - "mavenUrls": [ - "https://3015rangerrobotics.github.io/pathplannerlib/repo" - ], - "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", - "javaDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-java", - "version": "2024.2.8" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-cpp", - "version": "2024.2.8", - "libName": "PathplannerLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/vendordeps/Phoenix5.json b/lib/vendordeps/Phoenix5-frc2025-beta-latest.json similarity index 73% rename from studies/NeoEncoderTest/vendordeps/Phoenix5.json rename to lib/vendordeps/Phoenix5-frc2025-beta-latest.json index ff7359e..e990f5b 100644 --- a/studies/NeoEncoderTest/vendordeps/Phoenix5.json +++ b/lib/vendordeps/Phoenix5-frc2025-beta-latest.json @@ -1,43 +1,56 @@ { - "fileName": "Phoenix5.json", + "fileName": "Phoenix5-frc2025-beta-latest.json", "name": "CTRE-Phoenix (v5)", - "version": "5.33.1", - "frcYear": 2024, + "version": "5.34.0-beta-4", + "frcYear": "2025", "uuid": "ab676553-b602-441f-a38d-f1296eff6537", "mavenUrls": [ "https://maven.ctr-electronics.com/release/" ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2025-beta-latest.json", "requires": [ { "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" + "offlineFileName": "Phoenix6-frc2025-beta-latest.json", + "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json" + } + ], + "conflictsWith": [ + { + "uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af", + "errorMessage": "Users must use the Phoenix 5 replay vendordep when using the Phoenix 6 replay vendordep.", + "offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json" + }, + { + "uuid": "fbc886a4-2cec-40c0-9835-71086a8cc3df", + "errorMessage": "Users cannot have both the replay and regular Phoenix 5 vendordeps in their robot program.", + "offlineFileName": "Phoenix5-replay-frc2025-beta-latest.json" } ], "javaDependencies": [ { "groupId": "com.ctre.phoenix", "artifactId": "api-java", - "version": "5.33.1" + "version": "5.34.0-beta-4" }, { "groupId": "com.ctre.phoenix", "artifactId": "wpiapi-java", - "version": "5.33.1" + "version": "5.34.0-beta-4" } ], "jniDependencies": [ { "groupId": "com.ctre.phoenix", "artifactId": "cci", - "version": "5.33.1", + "version": "5.34.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -45,12 +58,13 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "cci-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -60,7 +74,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "wpiapi-cpp", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix_WPI", "headerClassifier": "headers", "sharedLibrary": true, @@ -68,6 +82,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -75,7 +90,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "api-cpp", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix", "headerClassifier": "headers", "sharedLibrary": true, @@ -83,6 +98,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -90,7 +106,7 @@ { "groupId": "com.ctre.phoenix", "artifactId": "cci", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixCCI", "headerClassifier": "headers", "sharedLibrary": true, @@ -98,6 +114,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -105,7 +122,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "wpiapi-cpp-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_Phoenix_WPISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -113,6 +130,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -120,7 +138,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "api-cpp-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixSim", "headerClassifier": "headers", "sharedLibrary": true, @@ -128,6 +146,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -135,7 +154,7 @@ { "groupId": "com.ctre.phoenix.sim", "artifactId": "cci-sim", - "version": "5.33.1", + "version": "5.34.0-beta-4", "libName": "CTRE_PhoenixCCISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -143,6 +162,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" diff --git a/lib/vendordeps/Phoenix6.json b/lib/vendordeps/Phoenix6-frc2025-beta-latest.json similarity index 75% rename from lib/vendordeps/Phoenix6.json rename to lib/vendordeps/Phoenix6-frc2025-beta-latest.json index 0322385..0b786d1 100644 --- a/lib/vendordeps/Phoenix6.json +++ b/lib/vendordeps/Phoenix6-frc2025-beta-latest.json @@ -1,76 +1,94 @@ { - "fileName": "Phoenix6.json", + "fileName": "Phoenix6-frc2025-beta-latest.json", "name": "CTRE-Phoenix (v6)", - "version": "24.3.0", - "frcYear": 2024, + "version": "25.0.0-beta-4", + "frcYear": "2025", "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", "mavenUrls": [ "https://maven.ctr-electronics.com/release/" ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json", "conflictsWith": [ { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" + "uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af", + "errorMessage": "Users can not have both the replay and regular Phoenix 6 vendordeps in their robot program.", + "offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json" } ], "javaDependencies": [ { "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-java", - "version": "24.3.0" + "version": "25.0.0-beta-4" } ], "jniDependencies": [ + { + "groupId": "com.ctre.phoenix6", + "artifactId": "api-cpp", + "version": "25.0.0-beta-4", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", + "linuxathena" + ], + "simMode": "hwsim" + }, { "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", + "artifactId": "api-cpp-sim", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", + "artifactId": "tools-sim", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" }, { "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", + "artifactId": "simTalonSRX", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -78,12 +96,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -91,12 +110,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -104,12 +124,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -117,12 +138,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -130,12 +152,13 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "24.3.0", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -143,12 +166,27 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "24.3.0", + "version": "25.0.0-beta-4", + "isJar": false, + "skipInvalidPlatforms": true, + "validPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", + "osxuniversal" + ], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.0.0-beta-4", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -158,7 +196,7 @@ { "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-cpp", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_Phoenix6_WPI", "headerClassifier": "headers", "sharedLibrary": true, @@ -166,6 +204,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -173,7 +212,7 @@ { "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_PhoenixTools", "headerClassifier": "headers", "sharedLibrary": true, @@ -181,6 +220,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "linuxathena" ], "simMode": "hwsim" @@ -188,7 +228,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "wpiapi-cpp-sim", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_Phoenix6_WPISim", "headerClassifier": "headers", "sharedLibrary": true, @@ -196,6 +236,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -203,7 +244,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "tools-sim", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_PhoenixTools_Sim", "headerClassifier": "headers", "sharedLibrary": true, @@ -211,6 +252,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -218,7 +260,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonSRX", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimTalonSRX", "headerClassifier": "headers", "sharedLibrary": true, @@ -226,21 +268,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -248,7 +276,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimVictorSPX", "headerClassifier": "headers", "sharedLibrary": true, @@ -256,6 +284,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -263,7 +292,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimPigeonIMU", "headerClassifier": "headers", "sharedLibrary": true, @@ -271,6 +300,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -278,7 +308,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimCANCoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -286,6 +316,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -293,7 +324,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProTalonFX", "headerClassifier": "headers", "sharedLibrary": true, @@ -301,6 +332,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -308,7 +340,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProCANcoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -316,6 +348,7 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" @@ -323,7 +356,7 @@ { "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "24.3.0", + "version": "25.0.0-beta-4", "libName": "CTRE_SimProPigeon2", "headerClassifier": "headers", "sharedLibrary": true, @@ -331,6 +364,23 @@ "binaryPlatforms": [ "windowsx86-64", "linuxx86-64", + "linuxarm64", + "osxuniversal" + ], + "simMode": "swsim" + }, + { + "groupId": "com.ctre.phoenix6.sim", + "artifactId": "simProCANrange", + "version": "25.0.0-beta-4", + "libName": "CTRE_SimProCANrange", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "linuxarm64", "osxuniversal" ], "simMode": "swsim" diff --git a/lib/vendordeps/REVLib.json b/lib/vendordeps/REVLib.json index f85acd4..0f73581 100644 --- a/lib/vendordeps/REVLib.json +++ b/lib/vendordeps/REVLib.json @@ -1,25 +1,25 @@ { "fileName": "REVLib.json", "name": "REVLib", - "version": "2024.2.4", - "frcYear": "2024", + "version": "2025.0.0-beta-4", + "frcYear": "2025", "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", "mavenUrls": [ "https://maven.revrobotics.com/" ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", + "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2025.json", "javaDependencies": [ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-java", - "version": "2024.2.4" + "version": "2025.0.0-beta-4" } ], "jniDependencies": [ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -37,7 +37,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-cpp", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "libName": "REVLib", "headerClassifier": "headers", "sharedLibrary": false, @@ -55,7 +55,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2024.2.4", + "version": "2025.0.0-beta-4", "libName": "REVLibDriver", "headerClassifier": "headers", "sharedLibrary": false, diff --git a/studies/Turret/vendordeps/ReduxLib_2024.json b/lib/vendordeps/ReduxLib_2025.json similarity index 59% rename from studies/Turret/vendordeps/ReduxLib_2024.json rename to lib/vendordeps/ReduxLib_2025.json index f694966..6988e45 100644 --- a/studies/Turret/vendordeps/ReduxLib_2024.json +++ b/lib/vendordeps/ReduxLib_2025.json @@ -1,25 +1,25 @@ { - "fileName": "ReduxLib_2024.json", + "fileName": "ReduxLib_2025.json", "name": "ReduxLib", - "version": "2024.3.1", - "frcYear": 2024, + "version": "2025.0.0-beta2", + "frcYear": 2025, "uuid": "151ecca8-670b-4026-8160-cdd2679ef2bd", "mavenUrls": [ "https://maven.reduxrobotics.com/" ], - "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2024.json", + "jsonUrl": "https://frcsdk.reduxrobotics.com/ReduxLib_2025.json", "javaDependencies": [ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-java", - "version": "2024.3.1" + "version": "2025.0.0-beta2" } ], "jniDependencies": [ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-driver", - "version": "2024.3.1", + "version": "2025.0.0-beta2", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -36,8 +36,8 @@ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-cpp", - "version": "2024.3.1", - "libName": "ReduxLib-cpp", + "version": "2025.0.0-beta2", + "libName": "ReduxLib", "headerClassifier": "headers", "sourcesClassifier": "sources", "sharedLibrary": true, @@ -50,6 +50,23 @@ "osxuniversal", "windowsx86-64" ] + }, + { + "groupId": "com.reduxrobotics.frc", + "artifactId": "ReduxLib-driver", + "version": "2025.0.0-beta2", + "libName": "ReduxCore", + "headerClassifier": "headers", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "linuxathena", + "linuxx86-64", + "linuxarm32", + "linuxarm64", + "osxuniversal", + "windowsx86-64" + ] } ] } \ No newline at end of file diff --git a/lib/vendordeps/WPILibNewCommands.json b/lib/vendordeps/WPILibNewCommands.json index 67bf389..3718e0a 100644 --- a/lib/vendordeps/WPILibNewCommands.json +++ b/lib/vendordeps/WPILibNewCommands.json @@ -3,7 +3,7 @@ "name": "WPILib-New-Commands", "version": "1.0.0", "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", + "frcYear": "2025", "mavenUrls": [], "jsonUrl": "", "javaDependencies": [ diff --git a/studies/AHRS100/.vscode/launch.json b/studies/AHRS100/.vscode/launch.json deleted file mode 100644 index 5b804e8..0000000 --- a/studies/AHRS100/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/AHRS100/.vscode/settings.json b/studies/AHRS100/.vscode/settings.json deleted file mode 100644 index 8be11f2..0000000 --- a/studies/AHRS100/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/AHRS100/.wpilib/wpilib_preferences.json b/studies/AHRS100/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/AHRS100/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/AHRS100/README.md b/studies/AHRS100/README.md deleted file mode 100644 index 488601e..0000000 --- a/studies/AHRS100/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# AHRS100 - -This was an attempt to make the Kauai NavX work with the 2025 breaking WPI changes, before we decided to abandon the NavX altogether. diff --git a/studies/AHRS100/build.gradle b/studies/AHRS100/build.gradle deleted file mode 100644 index c3a7ccb..0000000 --- a/studies/AHRS100/build.gradle +++ /dev/null @@ -1,101 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.1" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/AHRS100/gradle/wrapper/gradle-wrapper.jar b/studies/AHRS100/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/AHRS100/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/AHRS100/gradle/wrapper/gradle-wrapper.properties b/studies/AHRS100/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 7015f6b..0000000 --- a/studies/AHRS100/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/AHRS100/gradlew b/studies/AHRS100/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/studies/AHRS100/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/AHRS100/gradlew.bat b/studies/AHRS100/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/studies/AHRS100/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/AHRS100/settings.gradle b/studies/AHRS100/settings.gradle deleted file mode 100644 index 3e30f84..0000000 --- a/studies/AHRS100/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/AHRS100/src/main/deploy/example.txt b/studies/AHRS100/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/AHRS100/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/AHRS100/src/main/java/frc/robot/Main.java b/studies/AHRS100/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/Robot.java b/studies/AHRS100/src/main/java/frc/robot/Robot.java deleted file mode 100644 index b68462c..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/AHRS100/src/main/java/frc/robot/RobotContainer.java b/studies/AHRS100/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/AHRS100.java b/studies/AHRS100/src/main/java/frc/robot/navx/AHRS100.java deleted file mode 100644 index d013597..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/AHRS100.java +++ /dev/null @@ -1,1945 +0,0 @@ -package org.team100.lib.sensors.navx; - -// package com.kauailabs.navx.frc; - -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.AHRSProtocol.AHRSPosUpdate; -import com.kauailabs.navx.AHRSProtocol.BoardID; -import com.kauailabs.navx.IMUProtocol.YPRUpdate; -import com.kauailabs.navx.frc.Tracer; - -import edu.wpi.first.wpilibj.I2C; -import edu.wpi.first.wpilibj.SPI; -import edu.wpi.first.wpilibj.SerialPort; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.math.geometry.Quaternion; -//import edu.wpi.first.wpilibj.interfaces.Gyro; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Rotation3d; -import edu.wpi.first.util.sendable.Sendable; -import edu.wpi.first.util.sendable.SendableBuilder; -import edu.wpi.first.util.sendable.SendableRegistry; -import edu.wpi.first.hal.FRCNetComm.tResourceType; -import edu.wpi.first.hal.HAL; -// import edu.wpi.first.util.RuntimeDetector; - -import edu.wpi.first.hal.SimDevice; - -/** - * Copy of AHRS.java, to work around the removal of RuntimeDetector. - * - * https://github.com/wpilibsuite/allwpilib/issues/6823 - * - * This also implements the fix for SPI hanging described here: - * - * https://www.chiefdelphi.com/t/navx2-disconnecting-reconnecting-intermittently-not-browning-out/425487 - * - * The AHRS class provides an interface to AHRS capabilities - * of the KauaiLabs navX Robotics Navigation Sensor via SPI, I2C and - * Serial (TTL UART and USB) communications interfaces on the RoboRIO. - * - * The AHRS class enables access to basic connectivity and state information, - * as well as key 6-axis and 9-axis orientation information (yaw, pitch, roll, - * compass heading, fused (9-axis) heading and magnetic disturbance detection. - * - * Additionally, the ARHS class also provides access to extended information - * including linear acceleration, motion detection, rotation detection and - * sensor - * temperature. - * - * If used with the navX Aero, the AHRS class also provides access to - * altitude, barometric pressure and pressure sensor temperature data - * - * @author Scott - */ - -public class AHRS100 implements Sendable { - - /** - * Identifies one of the three sensing axes on the navX sensor board. Note that - * these axes are - * board-relative ("Board Frame"), and are not necessarily the same as the - * logical axes of the - * chassis on which the sensor is mounted. - * - * For more information on sensor orientation, please see the navX sensor Orientation - * page. - */ - public enum BoardAxis { - kBoardAxisX(0), - kBoardAxisY(1), - kBoardAxisZ(2); - - private int value; - - private BoardAxis(int value) { - this.value = value; - } - - public int getValue() { - return this.value; - } - }; - - /** - * Indicates which sensor board axis is used as the "yaw" (gravity) axis. - * - * This selection may be modified via the Omnimount - * feature. - * - */ - static public class BoardYawAxis { - public BoardAxis board_axis; - public boolean up; - }; - - /** - * For use with serial communications, the SerialDataType specifies the - * type of data to be streamed from the sensor. Due to limitations in the - * streaming bandwidth on some serial interfaces, only a subset of all - * available data can be streamed. - *

- * Note that if communicating over I2C/SPI, all available data can be - * retrieved, so the SerialDataType need only be specified if using - * serial communications. - */ - public enum SerialDataType { - /** - * (default): 6 and 9-axis processed data - */ - kProcessedData(0), - /** - * unprocessed data from each individual sensor - */ - kRawData(1); - - private int value; - - private SerialDataType(int value) { - this.value = value; - } - - public int getValue() { - return this.value; - } - }; - - static final byte NAVX_DEFAULT_UPDATE_RATE_HZ = 60; - static final int YAW_HISTORY_LENGTH = 10; - static final short DEFAULT_ACCEL_FSR_G = 2; - static final short DEFAULT_GYRO_FSR_DPS = 2000; - static final float QUATERNION_HISTORY_SECONDS = 5.0f; - - /* Processed Data */ - - volatile float yaw; - volatile float pitch; - volatile float roll; - volatile float compass_heading; - volatile float world_linear_accel_x; - volatile float world_linear_accel_y; - volatile float world_linear_accel_z; - volatile float mpu_temp_c; - volatile float fused_heading; - volatile float altitude; - volatile float baro_pressure; - volatile boolean is_moving; - volatile boolean is_rotating; - volatile float baro_sensor_temp_c; - volatile boolean altitude_valid; - volatile boolean is_magnetometer_calibrated; - volatile boolean magnetic_disturbance; - volatile float quaternionW; - volatile float quaternionX; - volatile float quaternionY; - volatile float quaternionZ; - - /* Integrated Data */ - float velocity[] = new float[3]; - float displacement[] = new float[3]; - - /* Raw Data */ - volatile short raw_gyro_x; - volatile short raw_gyro_y; - volatile short raw_gyro_z; - volatile short raw_accel_x; - volatile short raw_accel_y; - volatile short raw_accel_z; - volatile short cal_mag_x; - volatile short cal_mag_y; - volatile short cal_mag_z; - - /* Configuration/Status */ - volatile byte update_rate_hz; - volatile short accel_fsr_g = DEFAULT_ACCEL_FSR_G; - volatile short gyro_fsr_dps = DEFAULT_GYRO_FSR_DPS; - volatile short capability_flags; - volatile byte op_status; - volatile short sensor_status; - volatile byte cal_status; - volatile byte selftest_status; - - /* Board ID */ - volatile byte board_type; - volatile byte hw_rev; - volatile byte fw_ver_major; - volatile byte fw_ver_minor; - - long last_sensor_timestamp; - double last_update_time; - - InertialDataIntegrator integrator; - ContinuousAngleTracker yaw_angle_tracker; - OffsetTracker yaw_offset_tracker; - IIOProvider io; - - BoardCapabilities board_capabilities; - IOCompleteNotification io_complete_sink; - IOThread io_thread; - - private ITimestampedDataSubscriber callbacks[]; - private Object callback_contexts[]; - private final int MAX_NUM_CALLBACKS = 3; - - private boolean enable_boardlevel_yawreset; - private double last_yawreset_request_timestamp; - private double last_yawreset_while_calibrating_request_timestamp; - private int successive_suppressed_yawreset_request_count; - private boolean disconnect_startupcalibration_recovery_pending; - private boolean logging_enabled; - - /* SimDevice Variables */ - private SimDevice m_simDevice; - - /***********************************************************/ - /* Public Interface Implementation */ - /***********************************************************/ - - /** - * Constructs the AHRS class using SPI communication, overriding the - * default update rate with a custom rate which may be from 4 to 200, - * representing the number of updates per second sent by the sensor. - *

- * This constructor should be used if communicating via SPI. - *

- * Note that increasing the update rate may increase the - * CPU utilization. - *

- * - * @param spi_port_id SPI Port to use - * @param update_rate_hz Custom Update Rate (Hz) - */ - public AHRS100(SPI.Port spi_port_id, byte update_rate_hz) { - commonInit(update_rate_hz); - if (m_simDevice != null) { - io = new SimIO(update_rate_hz, io_complete_sink, m_simDevice); - } else { - // if (RuntimeDetector.isLinux() && !RuntimeDetector.isAthena() && spi_port_id - // == SPI.Port.kMXP) { - // io = new RegisterIOMau(update_rate_hz, io_complete_sink, board_capabilities); - // } else { - io = new RegisterIO(new RegisterIO_SPI(new SPI(spi_port_id)), update_rate_hz, io_complete_sink, - board_capabilities); - // } - } - SendableRegistry.addLW(this, "navX-Sensor", spi_port_id.value); - io_thread.start(); - } - - /** - * The AHRS class provides an interface to AHRS capabilities - * of the KauaiLabs navX Robotics Navigation Sensor via SPI, I2C and - * Serial (TTL UART and USB) communications interfaces on the RoboRIO. - * - * The AHRS class enables access to basic connectivity and state information, - * as well as key 6-axis and 9-axis orientation information (yaw, pitch, roll, - * compass heading, fused (9-axis) heading and magnetic disturbance detection. - * - * Additionally, the ARHS class also provides access to extended information - * including linear acceleration, motion detection, rotation detection and - * sensor - * temperature. - * - * If used with the navX Aero, the AHRS class also provides access to - * altitude, barometric pressure and pressure sensor temperature data - * - * This constructor allows the specification of a custom SPI bitrate, in - * bits/second. - * - * @param spi_port_id SPI Port to use - * @param spi_bitrate SPI bitrate (Maximum: 2,000,000) - * @param update_rate_hz Custom Update Rate (Hz) - */ - - public AHRS100(SPI.Port spi_port_id, int spi_bitrate, byte update_rate_hz) { - Tracer.Trace("Instantiating navX-Sensor on SPI Port %s.\n", spi_port_id.toString()); - commonInit(update_rate_hz); - if (m_simDevice != null) { - io = new SimIO(update_rate_hz, io_complete_sink, m_simDevice); - } else { - // if (RuntimeDetector.isLinux() && !RuntimeDetector.isAthena() && spi_port_id - // == SPI.Port.kMXP) { - // io = new RegisterIOMau(update_rate_hz, io_complete_sink, board_capabilities); - // } else { - io = new RegisterIO(new RegisterIO_SPI(new SPI(spi_port_id), spi_bitrate), update_rate_hz, io_complete_sink, - board_capabilities); - // } - } - SendableRegistry.addLW(this, "navX-Sensor", spi_port_id.value); - io_thread.start(); - } - - /** - * Constructs the AHRS class using I2C communication, overriding the - * default update rate with a custom rate which may be from 4 to 200, - * representing the number of updates per second sent by the sensor. - *

- * This constructor should be used if communicating via I2C. - *

- * Note that increasing the update rate may increase the - * CPU utilization. - *

- * - * @param i2c_port_id I2C Port to use - * @param update_rate_hz Custom Update Rate (Hz) - */ - public AHRS100(I2C.Port i2c_port_id, byte update_rate_hz) { - Tracer.Trace("Instantiating navX-Sensor on I2C Port %s.\n", i2c_port_id.toString()); - commonInit(update_rate_hz); - if (m_simDevice != null) { - io = new SimIO(update_rate_hz, io_complete_sink, m_simDevice); - } else { - // if (RuntimeDetector.isLinux() && !RuntimeDetector.isAthena() && i2c_port_id - // == I2C.Port.kMXP) { - // io = new RegisterIOMau(update_rate_hz, io_complete_sink, board_capabilities); - // } else { - io = new RegisterIO(new RegisterIO_I2C(new I2C(i2c_port_id, 0x32)), update_rate_hz, io_complete_sink, - board_capabilities); - // } - } - SendableRegistry.addLW(this, "navX-Sensor", i2c_port_id.value); - io_thread.start(); - } - - /** - * Constructs the AHRS class using serial communication, overriding the - * default update rate with a custom rate which may be from 4 to 200, - * representing the number of updates per second sent by the sensor. - *

- * This constructor should be used if communicating via either - * TTL UART or USB Serial interface. - *

- * Note that the serial interfaces can communicate either - * processed data, or raw data, but not both simultaneously. - * If simultaneous processed and raw data are needed, use - * one of the register-based interfaces (SPI or I2C). - *

- * Note that increasing the update rate may increase the - * CPU utilization. - *

- * - * @param serial_port_id SerialPort to use - * @param data_type either kProcessedData or kRawData - * @param update_rate_hz Custom Update Rate (Hz) - */ - public AHRS100(SerialPort.Port serial_port_id, SerialDataType data_type, byte update_rate_hz) { - Tracer.Trace("Instantiating navX-Sensor on Serial Port %s.\n", serial_port_id.toString()); - commonInit(update_rate_hz); - if (m_simDevice != null) { - io = new SimIO(update_rate_hz, io_complete_sink, m_simDevice); - } else { - // if (RuntimeDetector.isLinux() && !RuntimeDetector.isAthena() && - // serial_port_id == SerialPort.Port.kMXP) { - // io = new RegisterIOMau(NAVX_DEFAULT_UPDATE_RATE_HZ, io_complete_sink, - // board_capabilities); - // } - // else { - boolean processed_data = (data_type == SerialDataType.kProcessedData); - io = new SerialIO(serial_port_id, update_rate_hz, processed_data, io_complete_sink, board_capabilities); - // } - } - SendableRegistry.addLW(this, "navX-Sensor", serial_port_id.value); - io_thread.start(); - } - - /** - * Constructs the AHRS class using SPI communication and the default update - * rate. - *

- * This constructor should be used if communicating via SPI. - */ - public AHRS100() { - this(SPI.Port.kMXP); - } - - /** - * Constructs the AHRS class using SPI communication and the default update - * rate. - *

- * This constructor should be used if communicating via SPI. - *

- * - * @param spi_port_id SPI port to use. - */ - public AHRS100(SPI.Port spi_port_id) { - this(spi_port_id, NAVX_DEFAULT_UPDATE_RATE_HZ); - } - - /** - * Constructs the AHRS class using I2C communication and the default update - * rate. - *

- * This constructor should be used if communicating via I2C. - *

- * - * @param i2c_port_id I2C port to use - */ - public AHRS100(I2C.Port i2c_port_id) { - this(i2c_port_id, NAVX_DEFAULT_UPDATE_RATE_HZ); - } - - /** - * Constructs the AHRS class using serial communication and the default update - * rate, - * and returning processed (rather than raw) data. - *

- * This constructor should be used if communicating via either - * TTL UART or USB Serial interface. - *

- * - * @param serial_port_id SerialPort to use - */ - public AHRS100(SerialPort.Port serial_port_id) { - this(serial_port_id, SerialDataType.kProcessedData, NAVX_DEFAULT_UPDATE_RATE_HZ); - } - - /** - * Returns the current pitch value (in degrees, from -180 to 180) - * reported by the sensor. Pitch is a measure of rotation around - * the X Axis. - * - * @return The current pitch value in degrees (-180 to 180). - */ - public float getPitch() { - return pitch; - } - - /** - * Returns the current roll value (in degrees, from -180 to 180) - * reported by the sensor. Roll is a measure of rotation around - * the X Axis. - * - * @return The current roll value in degrees (-180 to 180). - */ - public float getRoll() { - return roll; - } - - /** - * Returns the current yaw value (in degrees, from -180 to 180) - * reported by the sensor. Yaw is a measure of rotation around - * the Z Axis (which is perpendicular to the earth). - *

- * Note that the returned yaw value will be offset by a user-specified - * offset value; this user-specified offset value is set by - * invoking the zeroYaw() method. - * - * @return The current yaw value in degrees (-180 to 180). - */ - public float getYaw() { - if (enable_boardlevel_yawreset && board_capabilities.isBoardYawResetSupported()) { - return this.yaw; - } else { - return (float) yaw_offset_tracker.applyOffset(this.yaw); - } - } - - /** - * Return the heading of the robot as a - * {@link edu.wpi.first.math.geometry.Rotation2d}. - * - *

- * The angle is continuous, that is it will continue from 360 to 361 degrees. - * This allows - * algorithms that wouldn't want to see a discontinuity in the gyro output as it - * sweeps past from - * 360 to 0 on the second time around. - * - *

- * The angle is expected to increase as the gyro turns counterclockwise when - * looked at from the - * top. It needs to follow the NWU axis convention. - * - *

- * This heading is based on integration of the returned rate from the gyro. - * - * @return the current heading of the robot as a - * {@link edu.wpi.first.math.geometry.Rotation2d}. - */ - public Rotation2d getRotation2d() { - return Rotation2d.fromDegrees(-getAngle()); - } - - /** - * Constructs a Rotation3d from a quaternion. - */ - public Rotation3d getRotation3d() { - Quaternion q = new Quaternion(quaternionW, quaternionX, quaternionY, quaternionZ); - return new Rotation3d(q); - } - - /** - * Returns the current tilt-compensated compass heading - * value (in degrees, from 0 to 360) reported by the sensor. - *

- * Note that this value is sensed by a magnetometer, - * which can be affected by nearby magnetic fields (e.g., the - * magnetic fields generated by nearby motors). - *

- * Before using this value, ensure that (a) the magnetometer - * has been calibrated and (b) that a magnetic disturbance is - * not taking place at the instant when the compass heading - * was generated. - * - * @return The current tilt-compensated compass heading, in degrees (0-360). - */ - public float getCompassHeading() { - return compass_heading; - } - - static final int NUM_SUPPRESSED_SUCCESSIVE_YAWRESET_MESSAGES = 5; - static final double SUPPRESSED_SUCESSIVE_YAWRESET_PERIOD_SECONDS = 0.2; - - /** - * Sets the user-specified yaw offset to the current - * yaw value reported by the sensor. - *

- * This user-specified yaw offset is automatically - * subtracted from subsequent yaw values reported by - * the getYaw() method. - * - * NOTE: This method has no effect if the sensor is - * currently calibrating, since resetting the yaw will - * interfere with the calibration process. - */ - public void zeroYaw() { - double curr_timestamp = Timer.getFPGATimestamp(); - double delta_time_since_last_yawreset_request = curr_timestamp - last_yawreset_request_timestamp; - if (delta_time_since_last_yawreset_request < SUPPRESSED_SUCESSIVE_YAWRESET_PERIOD_SECONDS) { - successive_suppressed_yawreset_request_count++; - if ((successive_suppressed_yawreset_request_count % NUM_SUPPRESSED_SUCCESSIVE_YAWRESET_MESSAGES) == 1) { - if (logging_enabled) - Tracer.Trace("navX-Sensor rapidly-repeated Yaw Reset ignored%s\n", - ((successive_suppressed_yawreset_request_count < NUM_SUPPRESSED_SUCCESSIVE_YAWRESET_MESSAGES) - ? "." - : (" (repeated messages suppressed)."))); - } - return; - } - - if (isCalibrating()) { - double delta_time_since_last_yawreset_while_calibrating_request = curr_timestamp - - last_yawreset_while_calibrating_request_timestamp; - if ((delta_time_since_last_yawreset_while_calibrating_request > SUPPRESSED_SUCESSIVE_YAWRESET_PERIOD_SECONDS)) { - Tracer.Trace("navX-Sensor Yaw Reset request ignored - startup calibration is currently in progress.\n"); - } - last_yawreset_while_calibrating_request_timestamp = curr_timestamp; - return; - } - - successive_suppressed_yawreset_request_count = 0; - - last_yawreset_request_timestamp = curr_timestamp; - if (enable_boardlevel_yawreset && board_capabilities.isBoardYawResetSupported()) { - io.zeroYaw(); - Tracer.Trace("navX-Sensor Board-level Yaw Reset requested.\n"); - /* Note: Notification is deferred until action is complete. */ - } else { - yaw_offset_tracker.setOffset(); - /* Notification occurs immediately. */ - io_complete_sink.yawResetComplete(); - } - } - - /** - * Returns true if the sensor is currently performing automatic - * gyro/accelerometer calibration. Automatic calibration occurs - * when the sensor is initially powered on, during which time the - * sensor should be held still, with the Z-axis pointing up - * (perpendicular to the earth). - *

- * NOTE: During this automatic calibration, the yaw, pitch and roll - * values returned may not be accurate. - *

- * Once calibration is complete, the sensor will automatically remove - * an internal yaw offset value from all reported values. - *

- * - * @return Returns true if the sensor is currently automatically - * calibrating the gyro and accelerometer sensors. - */ - public boolean isCalibrating() { - return !((cal_status & - AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_STATE_MASK) == AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_COMPLETE); - } - - /** - * Indicates whether the sensor is currently connected - * to the host computer. A connection is considered established - * whenever communication with the sensor has occurred recently. - *

- * - * @return Returns true if a valid update has been recently received - * from the sensor. - */ - public boolean isConnected() { - return io.isConnected(); - } - - /** - * Returns the count in bytes of data received from the - * sensor. This could can be useful for diagnosing - * connectivity issues. - *

- * If the byte count is increasing, but the update count - * (see getUpdateCount()) is not, this indicates a software - * misconfiguration. - * - * @return The number of bytes received from the sensor. - */ - public double getByteCount() { - return io.getByteCount(); - } - - /** - * Returns the navX-Model device's currently configured update - * rate. Note that the update rate that can actually be realized - * is a value evenly divisible by the navX-Model device's internal - * motion processor sample clock (200Hz). Therefore, the rate that - * is returned may be lower than the requested sample rate. - * - * The actual sample rate is rounded down to the nearest integer - * that is divisible by the number of Digital Motion Processor clock - * ticks. For instance, a request for 58 Hertz will result in - * an actual rate of 66Hz (200 / (200 / 58), using integer - * math. - * - * @return Returns the current actual update rate in Hz - * (cycles per second). - */ - - public int getActualUpdateRate() { - byte actual_update_rate = getActualUpdateRateInternal((byte) getRequestedUpdateRate()); - return (int) (actual_update_rate & 0xFF); - } - - private byte getActualUpdateRateInternal(byte update_rate) { - final int NAVX_MOTION_PROCESSOR_UPDATE_RATE_HZ = 200; - int integer_update_rate = (int) (update_rate & 0xFF); - int realized_update_rate = NAVX_MOTION_PROCESSOR_UPDATE_RATE_HZ / - (NAVX_MOTION_PROCESSOR_UPDATE_RATE_HZ / integer_update_rate); - return (byte) realized_update_rate; - } - - /** - * Returns the currently requested update rate. - * rate. Note that not every update rate can actually be realized, - * since the actual update rate must be a value evenly divisible by - * the navX-Model device's internal motion processor sample clock (200Hz). - * - * To determine the actual update rate, use the - * {@link #getActualUpdateRate()} method. - * - * @return Returns the requested update rate in Hz - * (cycles per second). - */ - - public int getRequestedUpdateRate() { - return (int) (this.update_rate_hz & 0xFF); - } - - /** - * Returns the count of valid updates which have - * been received from the sensor. This count should increase - * at the same rate indicated by the configured update rate. - * - * @return The number of valid updates received from the sensor. - */ - public double getUpdateCount() { - return io.getUpdateCount(); - } - - /** - * Returns the sensor timestamp corresponding to the - * last sample retrieved from the sensor. Note that this - * sensor timestamp is only provided when the Register-based - * IO methods (SPI, I2C) are used; sensor timestamps are not - * provided when Serial-based IO methods (TTL UART, USB) - * are used. - * - * @return The sensor timestamp corresponding to the current AHRS sensor data. - */ - public long getLastSensorTimestamp() { - return this.last_sensor_timestamp; - } - - /** - * Returns the current linear acceleration in the X-axis (in G). - *

- * World linear acceleration refers to raw acceleration data, which - * has had the gravity component removed, and which has been rotated to - * the same reference frame as the current yaw value. The resulting - * value represents the current acceleration in the x-axis of the - * body (e.g., the robot) on which the sensor is mounted. - *

- * - * @return Current world linear acceleration in the X-axis (in G). - */ - public float getWorldLinearAccelX() { - return this.world_linear_accel_x; - } - - /** - * Returns the current linear acceleration in the Y-axis (in G). - *

- * World linear acceleration refers to raw acceleration data, which - * has had the gravity component removed, and which has been rotated to - * the same reference frame as the current yaw value. The resulting - * value represents the current acceleration in the Y-axis of the - * body (e.g., the robot) on which the sensor is mounted. - *

- * - * @return Current world linear acceleration in the Y-axis (in G). - */ - public float getWorldLinearAccelY() { - return this.world_linear_accel_y; - } - - /** - * Returns the current linear acceleration in the Z-axis (in G). - *

- * World linear acceleration refers to raw acceleration data, which - * has had the gravity component removed, and which has been rotated to - * the same reference frame as the current yaw value. The resulting - * value represents the current acceleration in the Z-axis of the - * body (e.g., the robot) on which the sensor is mounted. - *

- * - * @return Current world linear acceleration in the Z-axis (in G). - */ - public float getWorldLinearAccelZ() { - return this.world_linear_accel_z; - } - - /** - * Indicates if the sensor is currently detecting motion, - * based upon the X and Y-axis world linear acceleration values. - * If the sum of the absolute values of the X and Y axis exceed - * a "motion threshold", the motion state is indicated. - *

- * - * @return Returns true if the sensor is currently detecting motion. - */ - public boolean isMoving() { - return is_moving; - } - - /** - * Indicates if the sensor is currently detecting yaw rotation, - * based upon whether the change in yaw over the last second - * exceeds the "Rotation Threshold." - *

- * Yaw Rotation can occur either when the sensor is rotating, or - * when the sensor is not rotating AND the current gyro calibration - * is insufficiently calibrated to yield the standard yaw drift rate. - *

- * - * @return Returns true if the sensor is currently detecting motion. - */ - public boolean isRotating() { - return is_rotating; - } - - /** - * Returns the current barometric pressure, based upon calibrated readings - * from the onboard pressure sensor. This value is in units of millibar. - *

- * NOTE: This value is only valid for a navX Aero. To determine - * whether this value is valid, see isAltitudeValid(). - * - * @return Returns current barometric pressure (navX Aero only). - */ - public float getBarometricPressure() { - return baro_pressure; - } - - /** - * Returns the current altitude, based upon calibrated readings - * from a barometric pressure sensor, and the currently-configured - * sea-level barometric pressure [navX Aero only]. This value is in units of - * meters. - *

- * NOTE: This value is only valid sensors including a pressure - * sensor. To determine whether this value is valid, see - * isAltitudeValid(). - *

- * - * @return Returns current altitude in meters (as long as the sensor includes - * an installed on-board pressure sensor). - */ - public float getAltitude() { - return altitude; - } - - /** - * Indicates whether the current altitude (and barometric pressure) data is - * valid. This value will only be true for a sensor with an onboard - * pressure sensor installed. - *

- * If this value is false for a board with an installed pressure sensor, - * this indicates a malfunction of the onboard pressure sensor. - *

- * - * @return Returns true if a working pressure sensor is installed. - */ - public boolean isAltitudeValid() { - return this.altitude_valid; - } - - /** - * Returns the "fused" (9-axis) heading. - *

- * The 9-axis heading is the fusion of the yaw angle, the tilt-corrected - * compass heading, and magnetic disturbance detection. Note that the - * magnetometer calibration procedure is required in order to - * achieve valid 9-axis headings. - *

- * The 9-axis Heading represents the sensor's best estimate of current heading, - * based upon the last known valid Compass Angle, and updated by the change in - * the - * Yaw Angle since the last known valid Compass Angle. The last known valid - * Compass - * Angle is updated whenever a Calibrated Compass Angle is read and the sensor - * has recently rotated less than the Compass Noise Bandwidth (~2 degrees). - * - * @return Fused Heading in Degrees (range 0-360) - */ - public float getFusedHeading() { - return fused_heading; - } - - /** - * Indicates whether the current magnetic field strength diverges from the - * calibrated value for the earth's magnetic field by more than the currently- - * configured Magnetic Disturbance Ratio. - *

- * This function will always return false if the sensor's magnetometer has - * not yet been calibrated; see isMagnetometerCalibrated(). - * - * @return true if a magnetic disturbance is detected (or the magnetometer is - * uncalibrated). - */ - public boolean isMagneticDisturbance() { - return magnetic_disturbance; - } - - /** - * Indicates whether the magnetometer has been calibrated. - *

- * Magnetometer Calibration must be performed by the user. - *

- * Note that if this function does indicate the magnetometer is calibrated, - * this does not necessarily mean that the calibration quality is sufficient - * to yield valid compass headings. - *

- * - * @return Returns true if magnetometer calibration has been performed. - */ - public boolean isMagnetometerCalibrated() { - return is_magnetometer_calibrated; - } - - /* Unit Quaternions */ - - /** - * Returns the imaginary portion (W) of the Orientation Quaternion which - * fully describes the current sensor orientation with respect to the - * reference angle defined as the angle at which the yaw was last "zeroed". - *

- * Each quaternion value (W,X,Y,Z) is expressed as a value ranging from -1 - * to 1. This total range (2) can be associated with a unit circle, since - * each circle is comprised of 2 PI Radians. - *

- * For more information on Quaternions and their use, please see this definition. - * - * @return Returns the imaginary portion (W) of the quaternion. - */ - public float getQuaternionW() { - return quaternionW; - } - - /** - * Returns the real portion (X axis) of the Orientation Quaternion which - * fully describes the current sensor orientation with respect to the - * reference angle defined as the angle at which the yaw was last "zeroed". - *

- * Each quaternion value (W,X,Y,Z) is expressed as a value ranging from -1 - * to 1. This total range (2) can be associated with a unit circle, since - * each circle is comprised of 2 PI Radians. - *

- * For more information on Quaternions and their use, please see this description. - * - * @return Returns the real portion (X) of the quaternion. - */ - public float getQuaternionX() { - return quaternionX; - } - - /** - * Returns the real portion (Y axis) of the Orientation Quaternion which - * fully describes the current sensor orientation with respect to the - * reference angle defined as the angle at which the yaw was last "zeroed". - * - * Each quaternion value (W,X,Y,Z) is expressed as a value ranging from -1 - * to 1. This total range (2) can be associated with a unit circle, since - * each circle is comprised of 2 PI Radians. - * - * For more information on Quaternions and their use, please see: - * - * https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation - * - * @return Returns the real portion (Y) of the quaternion. - */ - public float getQuaternionY() { - return quaternionY; - } - - /** - * Returns the real portion (Z axis) of the Orientation Quaternion which - * fully describes the current sensor orientation with respect to the - * reference angle defined as the angle at which the yaw was last "zeroed". - * - * Each quaternion value (W,X,Y,Z) is expressed as a value ranging from -1 - * to 1. This total range (2) can be associated with a unit circle, since - * each circle is comprised of 2 PI Radians. - * - * For more information on Quaternions and their use, please see: - * - * https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation - * - * @return Returns the real portion (Z) of the quaternion. - */ - public float getQuaternionZ() { - return quaternionZ; - } - - /** - * Zeros the displacement integration variables. Invoke this at the moment when - * integration begins. - */ - public void resetDisplacement() { - if (board_capabilities.isDisplacementSupported()) { - io.zeroDisplacement(); - } else { - integrator.resetDisplacement(); - } - } - - /** - * Each time new linear acceleration samples are received, this function should - * be invoked. - * This function transforms acceleration in G to meters/sec^2, then converts - * this value to - * Velocity in meters/sec (based upon velocity in the previous sample). Finally, - * this value - * is converted to displacement in meters, and integrated. - * - * @return none. - */ - - private void updateDisplacement(float accel_x_g, float accel_y_g, - int update_rate_hz, boolean is_moving) { - integrator.updateDisplacement(accel_x_g, accel_y_g, update_rate_hz, is_moving); - } - - /** - * Returns the velocity (in meters/sec) of the X axis [Experimental]. - * - * NOTE: This feature is experimental. Velocity measures rely on integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting velocities are not known to be very accurate. - * - * @return Current Velocity (in meters/squared). - */ - public float getVelocityX() { - return (board_capabilities.isDisplacementSupported() ? velocity[0] : integrator.getVelocityX()); - } - - /** - * Returns the velocity (in meters/sec) of the Y axis [Experimental]. - * - * NOTE: This feature is experimental. Velocity measures rely on integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting velocities are not known to be very accurate. - * - * @return Current Velocity (in meters/squared). - */ - public float getVelocityY() { - return (board_capabilities.isDisplacementSupported() ? velocity[1] : integrator.getVelocityY()); - } - - /** - * Returns the velocity (in meters/sec) of the Z axis [Experimental]. - * - * NOTE: This feature is experimental. Velocity measures rely on integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting velocities are not known to be very accurate. - * - * @return Current Velocity (in meters/squared). - */ - public float getVelocityZ() { - return (board_capabilities.isDisplacementSupported() ? velocity[2] : 0.f); - } - - /** - * Returns the displacement (in meters) of the X axis since resetDisplacement() - * was last invoked [Experimental]. - * - * NOTE: This feature is experimental. Displacement measures rely on - * double-integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting displacement are not known to be very accurate, and the amount of - * error - * increases quickly as time progresses. - * - * @return Displacement since last reset (in meters). - */ - public float getDisplacementX() { - return (board_capabilities.isDisplacementSupported() ? displacement[0] : integrator.getDisplacementX()); - } - - /** - * Returns the displacement (in meters) of the Y axis since resetDisplacement() - * was last invoked [Experimental]. - * - * NOTE: This feature is experimental. Displacement measures rely on - * double-integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting displacement are not known to be very accurate, and the amount of - * error - * increases quickly as time progresses. - * - * @return Displacement since last reset (in meters). - */ - public float getDisplacementY() { - return (board_capabilities.isDisplacementSupported() ? displacement[1] : integrator.getDisplacementY()); - } - - /** - * Returns the displacement (in meters) of the Z axis since resetDisplacement() - * was last invoked [Experimental]. - * - * NOTE: This feature is experimental. Displacement measures rely on - * double-integration - * of acceleration values from MEMS accelerometers which yield "noisy" values. - * The - * resulting displacement are not known to be very accurate, and the amount of - * error - * increases quickly as time progresses. - * - * @return Displacement since last reset (in meters). - */ - public float getDisplacementZ() { - return (board_capabilities.isDisplacementSupported() ? displacement[2] : 0.f); - } - - /** - * Registers a callback interface. This interface - * will be called back when new data is available, - * based upon a change in the sensor timestamp. - *

- * Note that this callback will occur within the context of the - * device IO thread, which is not the same thread context the - * caller typically executes in. - * - * @param callback The callback object to be invoked when callbacks - * occur - * @param callback_context The callback context object to be passed as a - * parameter - * to the callback object. - * @return returns true if callback was successfully registered. - */ - public boolean registerCallback(ITimestampedDataSubscriber callback, Object callback_context) { - boolean registered = false; - for (int i = 0; i < this.callbacks.length; i++) { - if (this.callbacks[i] == null) { - this.callbacks[i] = callback; - this.callback_contexts[i] = callback_context; - registered = true; - break; - } - } - return registered; - } - - /** - * Deregisters a previously registered callback interface. - * - * Be sure to deregister any callback which have been - * previously registered, to ensure that the object - * implementing the callback interface does not continue - * to be accessed when no longer necessary. - * - * @param callback The previously-registered callback object to be deregistered. - * @return returns true if callback was successfully deregistered. - */ - public boolean deregisterCallback(ITimestampedDataSubscriber callback) { - boolean deregistered = false; - for (int i = 0; i < this.callbacks.length; i++) { - if (this.callbacks[i] == callback) { - this.callbacks[i] = null; - deregistered = true; - break; - } - } - return deregistered; - } - - /***********************************************************/ - /* Internal Implementation */ - /***********************************************************/ - - private void commonInit(byte update_rate_hz) { - Tracer.Trace("navX-Sensor Java library for FRC\n"); - HAL.report(tResourceType.kResourceType_NavX, 0); - this.board_capabilities = new BoardCapabilities(); - this.io_complete_sink = new IOCompleteNotification(); - this.io_thread = new IOThread(); - this.update_rate_hz = update_rate_hz; - integrator = new InertialDataIntegrator(); - yaw_offset_tracker = new OffsetTracker(YAW_HISTORY_LENGTH); - yaw_angle_tracker = new ContinuousAngleTracker(); - this.callbacks = new ITimestampedDataSubscriber[MAX_NUM_CALLBACKS]; - this.callback_contexts = new Object[MAX_NUM_CALLBACKS]; - this.enable_boardlevel_yawreset = false; - this.last_yawreset_request_timestamp = 0; - this.last_yawreset_while_calibrating_request_timestamp = 0; - this.successive_suppressed_yawreset_request_count = 0; - this.disconnect_startupcalibration_recovery_pending = false; - this.logging_enabled = false; - - // Construct SimDevice (only succeeds in simulation environments) - m_simDevice = SimDevice.create("navX-Sensor", 0); - } - - /** - * Returns the total accumulated yaw angle (Z Axis, in degrees) - * reported by the sensor. - *

- * NOTE: The angle is continuous, meaning it's range is beyond 360 degrees. - * This ensures that algorithms that wouldn't want to see a discontinuity - * in the gyro output as it sweeps past 0 on the second time around. - *

- * Note that the returned yaw value will be offset by a user-specified - * offset value; this user-specified offset value is set by - * invoking the zeroYaw() method. - *

- * - * @return The current total accumulated yaw angle (Z axis) of the robot - * in degrees. This heading is based on integration of the returned rate - * from the Z-axis (yaw) gyro. - */ - - public double getAngle() { - return yaw_angle_tracker.getAngle(); - } - - /** - * Return the rate of rotation of the yaw (Z-axis) gyro, in degrees per second. - *

- * The rate is based on the most recent reading of the yaw gyro angle. - *

- * - * @return The current rate of change in yaw angle (in degrees per second) - */ - - public double getRate() { - if (m_simDevice != null) { - SimIO simio = (SimIO) io; - if (simio != null) { - return simio.getRate(); - } else { - return 0; - } - } else { - return yaw_angle_tracker.getRate(); - } - } - - /** - * Sets an amount of angle to be automatically added before returning a - * angle from the getAngle() method. This allows users of the getAngle() method - * to logically rotate the sensor by a given amount of degrees. - *

- * NOTE 1: The adjustment angle is only applied to the value returned - * from getAngle() - it does not adjust the value returned from getYaw(), nor - * any of the quaternion values. - *

- * NOTE 2: The adjustment angle is notautomatically cleared whenever the - * sensor yaw angle is reset. - *

- * If not set, the default adjustment angle is 0 degrees (no adjustment). - * - * @param adjustment, in degrees (range: -360 to 360) - */ - public void setAngleAdjustment(double adjustment) { - yaw_angle_tracker.setAngleAdjustment(adjustment); - } - - /** - * Returns the currently configured adjustment angle. See - * setAngleAdjustment() for more details. - * - * If this method returns 0 degrees, no adjustment to the value returned - * via getAngle() will occur. - * - * @return adjustment, in degrees (range: -360 to 360) - */ - public double getAngleAdjustment() { - return yaw_angle_tracker.getAngleAdjustment(); - } - - /** - * Reset the Yaw gyro. - *

- * Resets the Gyro Z (Yaw) axis to a heading of zero. This can be used if - * there is significant drift in the gyro and it needs to be recalibrated - * after it has been running. - */ - public void reset() { - zeroYaw(); - } - - private final float DEV_UNITS_MAX = 32768.0f; - - /** - * Returns the current raw (unprocessed) X-axis gyro rotation rate (in - * degrees/sec). NOTE: this - * value is un-processed, and should only be accessed by advanced users. - * Typically, rotation about the X Axis is referred to as "Pitch". Calibrated - * and Integrated Pitch data is accessible via the {@link #getPitch()} method. - *

- * - * @return Returns the current rotation rate (in degrees/sec). - */ - public float getRawGyroX() { - return this.raw_gyro_x / (DEV_UNITS_MAX / (float) gyro_fsr_dps); - } - - /** - * Returns the current raw (unprocessed) Y-axis gyro rotation rate (in - * degrees/sec). NOTE: this - * value is un-processed, and should only be accessed by advanced users. - * Typically, rotation about the T Axis is referred to as "Roll". Calibrated - * and Integrated Pitch data is accessible via the {@link #getRoll()} method. - *

- * - * @return Returns the current rotation rate (in degrees/sec). - */ - public float getRawGyroY() { - return this.raw_gyro_y / (DEV_UNITS_MAX / (float) gyro_fsr_dps); - } - - /** - * Returns the current raw (unprocessed) Z-axis gyro rotation rate (in - * degrees/sec). NOTE: this - * value is un-processed, and should only be accessed by advanced users. - * Typically, rotation about the T Axis is referred to as "Yaw". Calibrated - * and Integrated Pitch data is accessible via the {@link #getYaw()} method. - *

- * - * @return Returns the current rotation rate (in degrees/sec). - */ - public float getRawGyroZ() { - return this.raw_gyro_z / (DEV_UNITS_MAX / (float) gyro_fsr_dps); - } - - /** - * Returns the current raw (unprocessed) X-axis acceleration rate (in G). NOTE: - * this - * value is unprocessed, and should only be accessed by advanced users. This raw - * value - * has not had acceleration due to gravity removed from it, and has not been - * rotated to - * the world reference frame. Gravity-corrected, world reference frame-corrected - * X axis acceleration data is accessible via the - * {@link #getWorldLinearAccelX()} method. - *

- * - * @return Returns the current acceleration rate (in G). - */ - public float getRawAccelX() { - return this.raw_accel_x / (DEV_UNITS_MAX / (float) accel_fsr_g); - } - - /** - * Returns the current raw (unprocessed) Y-axis acceleration rate (in G). NOTE: - * this - * value is unprocessed, and should only be accessed by advanced users. This raw - * value - * has not had acceleration due to gravity removed from it, and has not been - * rotated to - * the world reference frame. Gravity-corrected, world reference frame-corrected - * Y axis acceleration data is accessible via the - * {@link #getWorldLinearAccelY()} method. - *

- * - * @return Returns the current acceleration rate (in G). - */ - public float getRawAccelY() { - return this.raw_accel_y / (DEV_UNITS_MAX / (float) accel_fsr_g); - } - - /** - * Returns the current raw (unprocessed) Z-axis acceleration rate (in G). NOTE: - * this - * value is unprocessed, and should only be accessed by advanced users. This raw - * value - * has not had acceleration due to gravity removed from it, and has not been - * rotated to - * the world reference frame. Gravity-corrected, world reference frame-corrected - * Z axis acceleration data is accessible via the - * {@link #getWorldLinearAccelZ()} method. - *

- * - * @return Returns the current acceleration rate (in G). - */ - public float getRawAccelZ() { - return this.raw_accel_z / (DEV_UNITS_MAX / (float) accel_fsr_g); - } - - private final float UTESLA_PER_DEV_UNIT = 0.15f; - - /** - * Returns the current raw (unprocessed) X-axis magnetometer reading (in - * uTesla). NOTE: - * this value is unprocessed, and should only be accessed by advanced users. - * This raw value - * has not been tilt-corrected, and has not been combined with the other - * magnetometer axis - * data to yield a compass heading. Tilt-corrected compass heading data is - * accessible - * via the {@link #getCompassHeading()} method. - *

- * - * @return Returns the mag field strength (in uTesla). - */ - public float getRawMagX() { - return this.cal_mag_x / UTESLA_PER_DEV_UNIT; - } - - /** - * Returns the current raw (unprocessed) Y-axis magnetometer reading (in - * uTesla). NOTE: - * this value is unprocessed, and should only be accessed by advanced users. - * This raw value - * has not been tilt-corrected, and has not been combined with the other - * magnetometer axis - * data to yield a compass heading. Tilt-corrected compass heading data is - * accessible - * via the {@link #getCompassHeading()} method. - *

- * - * @return Returns the mag field strength (in uTesla). - */ - public float getRawMagY() { - return this.cal_mag_y / UTESLA_PER_DEV_UNIT; - } - - /** - * Returns the current raw (unprocessed) Z-axis magnetometer reading (in - * uTesla). NOTE: - * this value is unprocessed, and should only be accessed by advanced users. - * This raw value - * has not been tilt-corrected, and has not been combined with the other - * magnetometer axis - * data to yield a compass heading. Tilt-corrected compass heading data is - * accessible - * via the {@link #getCompassHeading()} method. - *

- * - * @return Returns the mag field strength (in uTesla). - */ - public float getRawMagZ() { - return this.cal_mag_z / UTESLA_PER_DEV_UNIT; - } - - /** - * Returns the current barometric pressure (in millibar) [navX Aero only]. - *

- * This value is valid only if a barometric pressure sensor is onboard. - * - * @return Returns the current barometric pressure (in millibar). - */ - public float getPressure() { - // TODO implement for navX-Aero. - return 0; - } - - /** - * Returns the current temperature (in degrees centigrade) reported by - * the sensor's gyro/accelerometer circuit. - *

- * This value may be useful in order to perform advanced temperature- - * correction of raw gyroscope and accelerometer values. - *

- * - * @return The current temperature (in degrees centigrade). - */ - public float getTempC() { - return this.mpu_temp_c; - } - - /** - * Returns information regarding which sensor board axis (X,Y or Z) and - * direction (up/down) is currently configured to report Yaw (Z) angle - * values. NOTE: If the board firmware supports Omnimount, the board yaw - * axis/direction are configurable. - *

- * For more information on Omnimount, please see: - *

- * http://navx-mxp.kauailabs.com/navx-mxp/installation/omnimount/ - *

- * - * @return The currently-configured board yaw axis/direction. - */ - public BoardYawAxis getBoardYawAxis() { - BoardYawAxis yaw_axis = new BoardYawAxis(); - short yaw_axis_info = (short) (capability_flags >> 3); - yaw_axis_info &= 7; - if (yaw_axis_info == AHRSProtocol.OMNIMOUNT_DEFAULT) { - yaw_axis.up = true; - yaw_axis.board_axis = BoardAxis.kBoardAxisZ; - } else { - yaw_axis.up = (((yaw_axis_info & 0x01) != 0) ? true : false); - yaw_axis_info >>= 1; - switch ((byte) yaw_axis_info) { - case 0: - yaw_axis.board_axis = BoardAxis.kBoardAxisX; - break; - case 1: - yaw_axis.board_axis = BoardAxis.kBoardAxisY; - break; - case 2: - default: - yaw_axis.board_axis = BoardAxis.kBoardAxisZ; - break; - } - } - return yaw_axis; - } - - /** - * Returns the version number of the firmware currently executing - * on the sensor. - *

- * To update the firmware to the latest version, please see: - *

- * http://navx-mxp.kauailabs.com/navx-mxp/support/updating-firmware/ - *

- * - * @return The firmware version in the format [MajorVersion].[MinorVersion] - */ - public String getFirmwareVersion() { - double version_number = (double) fw_ver_major; - version_number += ((double) fw_ver_minor / 10); - String fw_version = Double.toString(version_number); - return fw_version; - } - - /** - * Enables or disables logging (via Console I/O) of AHRS library internal - * behaviors, including events such as transient communication errors. - * - * @param enable true to enable logging; false to disable logging - */ - public void enableLogging(boolean enable) { - if (this.io != null) { - io.enableLogging(enable); - } - this.logging_enabled = enable; - } - - /** - * Enables or disables board-level yaw zero (reset) requests. Board-level - * yaw resets are processed by the sensor board and the resulting yaw - * angle may not be available to the client software until at least - * 2 update cycles have occurred. Board-level yaw resets however do - * maintain synchronization between the yaw angle and the sensor-generated - * Quaternion and Fused Heading values. - * - * Conversely, Software-based yaw resets occur instantaneously; however, - * Software- - * based yaw resets do not update the yaw angle component of the - * sensor-generated - * Quaternion values or the Fused Heading values. - * - * @param enable true to enable board-level yaw resets; false to enable - * software-based - * yaw resets. - */ - public void enableBoardlevelYawReset(boolean enable) { - enable_boardlevel_yawreset = enable; - } - - /** - * Returns true if Board-level yaw resets are enabled. Conversely, returns false - * if Software-based yaw resets are active. - * - * @return true if Board-level yaw resets are enabled; false if software-based - * yaw resets are active. - */ - public boolean isBoardlevelYawResetEnabled() { - return enable_boardlevel_yawreset; - } - - /** - * Returns the sensor full scale range (in degrees per second) - * of the X, Y and X-axis gyroscopes. - * - * @return gyroscope full scale range in degrees/second. - */ - public short getGyroFullScaleRangeDPS() { - return this.gyro_fsr_dps; - } - - /** - * Returns the sensor full scale range (in G) - * of the X, Y and X-axis accelerometers. - * - * @return accelerometer full scale range in G. - */ - public short getAccelFullScaleRangeG() { - return this.accel_fsr_g; - } - - /***********************************************************/ - /* Runnable Interface Implementation */ - /***********************************************************/ - - class IOThread implements Runnable { - - Thread m_thread; - boolean stop; - - public void start() { - m_thread = new Thread(null, this, "navXIOThread"); - m_thread.start(); - } - - public void run() { - io.run(); - } - - public void stop() { - } - } - - /***********************************************************/ - /* IBoardCapabilities Interface Implementation */ - /***********************************************************/ - - class BoardCapabilities implements IBoardCapabilities { - - @Override - public boolean isOmniMountSupported() { - return (((capability_flags & AHRSProtocol.NAVX_CAPABILITY_FLAG_OMNIMOUNT) != 0) ? true : false); - } - - @Override - public boolean isBoardYawResetSupported() { - return (((capability_flags & AHRSProtocol.NAVX_CAPABILITY_FLAG_YAW_RESET) != 0) ? true : false); - } - - @Override - public boolean isDisplacementSupported() { - return (((capability_flags & AHRSProtocol.NAVX_CAPABILITY_FLAG_VEL_AND_DISP) != 0) ? true : false); - } - - @Override - public boolean isAHRSPosTimestampSupported() { - return (((capability_flags & AHRSProtocol.NAVX_CAPABILITY_FLAG_AHRSPOS_TS) != 0) ? true : false); - } - } - - /***********************************************************/ - /* IIOCompleteNotification Interface Implementation */ - /***********************************************************/ - - class IOCompleteNotification implements IIOCompleteNotification { - - @Override - public void setYawPitchRoll(YPRUpdate ypr_update, long sensor_timestamp) { - AHRS100.this.yaw = ypr_update.yaw; - AHRS100.this.pitch = ypr_update.pitch; - AHRS100.this.roll = ypr_update.roll; - AHRS100.this.compass_heading = ypr_update.compass_heading; - AHRS100.this.last_sensor_timestamp = sensor_timestamp; - } - - @Override - public void setAHRSPosData(AHRSPosUpdate ahrs_update, long sensor_timestamp) { - - /* Update base IMU class variables */ - - AHRS100.this.yaw = ahrs_update.yaw; - AHRS100.this.pitch = ahrs_update.pitch; - AHRS100.this.roll = ahrs_update.roll; - AHRS100.this.compass_heading = ahrs_update.compass_heading; - yaw_offset_tracker.updateHistory(ahrs_update.yaw); - - /* Update AHRS class variables */ - - // 9-axis data - AHRS100.this.fused_heading = ahrs_update.fused_heading; - - // Gravity-corrected linear acceleration (world-frame) - AHRS100.this.world_linear_accel_x = ahrs_update.linear_accel_x; - AHRS100.this.world_linear_accel_y = ahrs_update.linear_accel_y; - AHRS100.this.world_linear_accel_z = ahrs_update.linear_accel_z; - - // Gyro/Accelerometer Die Temperature - AHRS100.this.mpu_temp_c = ahrs_update.mpu_temp; - - // Barometric Pressure/Altitude - AHRS100.this.altitude = ahrs_update.altitude; - AHRS100.this.baro_pressure = ahrs_update.barometric_pressure; - - // Status/Motion Detection - AHRS100.this.is_moving = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_MOVING) != 0) - ? true - : false); - AHRS100.this.is_rotating = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_YAW_STABLE) != 0) - ? false - : true); - AHRS100.this.altitude_valid = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_ALTITUDE_VALID) != 0) - ? true - : false); - AHRS100.this.is_magnetometer_calibrated = (((ahrs_update.cal_status & - AHRSProtocol.NAVX_CAL_STATUS_MAG_CAL_COMPLETE) != 0) - ? true - : false); - AHRS100.this.magnetic_disturbance = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_MAG_DISTURBANCE) != 0) - ? true - : false); - - AHRS100.this.quaternionW = ahrs_update.quat_w; - AHRS100.this.quaternionX = ahrs_update.quat_x; - AHRS100.this.quaternionY = ahrs_update.quat_y; - AHRS100.this.quaternionZ = ahrs_update.quat_z; - - AHRS100.this.last_sensor_timestamp = sensor_timestamp; - - velocity[0] = ahrs_update.vel_x; - velocity[1] = ahrs_update.vel_y; - velocity[2] = ahrs_update.vel_z; - displacement[0] = ahrs_update.disp_x; - displacement[1] = ahrs_update.disp_y; - displacement[2] = ahrs_update.disp_z; - - updateBoardStatus( - ahrs_update.op_status, - ahrs_update.sensor_status, - ahrs_update.cal_status, - ahrs_update.selftest_status); - - yaw_angle_tracker.nextAngle(getYaw()); - - /* Notify external data arrival subscribers, if any. */ - for (int i = 0; i < callbacks.length; i++) { - ITimestampedDataSubscriber callback = callbacks[i]; - if (callback != null) { - long system_timestamp = (long) (Timer.getFPGATimestamp() * 1000); - callback.timestampedDataReceived(system_timestamp, - sensor_timestamp, - ahrs_update, - callback_contexts[i]); - } - } - } - - @Override - public void setRawData(AHRSProtocol.GyroUpdate raw_data_update, long sensor_timestamp) { - AHRS100.this.raw_gyro_x = raw_data_update.gyro_x; - AHRS100.this.raw_gyro_y = raw_data_update.gyro_y; - AHRS100.this.raw_gyro_z = raw_data_update.gyro_z; - AHRS100.this.raw_accel_x = raw_data_update.accel_x; - AHRS100.this.raw_accel_y = raw_data_update.accel_y; - AHRS100.this.raw_accel_z = raw_data_update.accel_z; - AHRS100.this.cal_mag_x = raw_data_update.mag_x; - AHRS100.this.cal_mag_y = raw_data_update.mag_y; - AHRS100.this.cal_mag_z = raw_data_update.mag_z; - AHRS100.this.mpu_temp_c = raw_data_update.temp_c; - - AHRS100.this.last_sensor_timestamp = sensor_timestamp; - } - - @Override - public void setAHRSData(AHRSProtocol.AHRSUpdate ahrs_update, long sensor_timestamp) { - - /* Update base IMU class variables */ - - AHRS100.this.yaw = ahrs_update.yaw; - AHRS100.this.pitch = ahrs_update.pitch; - AHRS100.this.roll = ahrs_update.roll; - AHRS100.this.compass_heading = ahrs_update.compass_heading; - yaw_offset_tracker.updateHistory(ahrs_update.yaw); - - /* Update AHRS class variables */ - - // 9-axis data - AHRS100.this.fused_heading = ahrs_update.fused_heading; - - // Gravity-corrected linear acceleration (world-frame) - AHRS100.this.world_linear_accel_x = ahrs_update.linear_accel_x; - AHRS100.this.world_linear_accel_y = ahrs_update.linear_accel_y; - AHRS100.this.world_linear_accel_z = ahrs_update.linear_accel_z; - - // Gyro/Accelerometer Die Temperature - AHRS100.this.mpu_temp_c = ahrs_update.mpu_temp; - - // Barometric Pressure/Altitude - AHRS100.this.altitude = ahrs_update.altitude; - AHRS100.this.baro_pressure = ahrs_update.barometric_pressure; - - // Magnetometer Data - AHRS100.this.cal_mag_x = ahrs_update.cal_mag_x; - AHRS100.this.cal_mag_y = ahrs_update.cal_mag_y; - AHRS100.this.cal_mag_z = ahrs_update.cal_mag_z; - - // Status/Motion Detection - AHRS100.this.is_moving = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_MOVING) != 0) - ? true - : false); - AHRS100.this.is_rotating = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_YAW_STABLE) != 0) - ? false - : true); - AHRS100.this.altitude_valid = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_ALTITUDE_VALID) != 0) - ? true - : false); - AHRS100.this.is_magnetometer_calibrated = (((ahrs_update.cal_status & - AHRSProtocol.NAVX_CAL_STATUS_MAG_CAL_COMPLETE) != 0) - ? true - : false); - AHRS100.this.magnetic_disturbance = (((ahrs_update.sensor_status & - AHRSProtocol.NAVX_SENSOR_STATUS_MAG_DISTURBANCE) != 0) - ? true - : false); - - AHRS100.this.quaternionW = ahrs_update.quat_w; - AHRS100.this.quaternionX = ahrs_update.quat_x; - AHRS100.this.quaternionY = ahrs_update.quat_y; - AHRS100.this.quaternionZ = ahrs_update.quat_z; - - AHRS100.this.last_sensor_timestamp = sensor_timestamp; - - updateBoardStatus( - ahrs_update.op_status, - ahrs_update.sensor_status, - ahrs_update.cal_status, - ahrs_update.selftest_status); - - updateDisplacement(AHRS100.this.world_linear_accel_x, - AHRS100.this.world_linear_accel_y, - update_rate_hz, - AHRS100.this.is_moving); - - yaw_angle_tracker.nextAngle(getYaw()); - - /* Notify external data arrival subscribers, if any. */ - for (int i = 0; i < callbacks.length; i++) { - ITimestampedDataSubscriber callback = callbacks[i]; - if (callback != null) { - long system_timestamp = (long) (Timer.getFPGATimestamp() * 1000); - callback.timestampedDataReceived(system_timestamp, - sensor_timestamp, - ahrs_update, - callback_contexts[i]); - } - } - } - - @Override - public void setBoardID(BoardID board_id) { - board_type = board_id.type; - hw_rev = board_id.hw_rev; - fw_ver_major = board_id.fw_ver_major; - fw_ver_minor = board_id.fw_ver_minor; - String boardtype = "unknown"; - if (board_id.type == 50) { - boardtype = "navX-Sensor"; - } - if (board_id.hw_rev == 33) { - boardtype = "navX-MXP (Classic)"; - } else if (board_id.hw_rev == 34) { - boardtype = "navX2-MXP (Gen 2)"; - } else if (board_id.hw_rev == 40) { - boardtype = "navX-Micro (Classic)"; - } else if (board_id.hw_rev == 41) { - boardtype = "navX2-Micro (Gen 2)"; - } else if ((board_id.hw_rev >= 60) && (board_id.hw_rev <= 69)) { - boardtype = "VMX-pi"; - } - Tracer.Trace("navX-Sensor Board Type %d (%s)\n", board_id.type, boardtype); - Tracer.Trace("navX-Sensor firmware version %d.%d\n", board_id.fw_ver_major, board_id.fw_ver_minor); - } - - @Override - public void setBoardState(BoardState board_state, boolean update_board_status) { - update_rate_hz = board_state.update_rate_hz; - accel_fsr_g = board_state.accel_fsr_g; - gyro_fsr_dps = board_state.gyro_fsr_dps; - capability_flags = board_state.capability_flags; - if (update_board_status) { - updateBoardStatus(board_state.op_status, board_state.sensor_status, - board_state.cal_status, board_state.selftest_status); - } - } - - void updateBoardStatus(byte op_status, short sensor_status, byte cal_status, byte selftest_status) { - /* Detect/Report Board operational status transitions */ - boolean poweron_init_completed = false; - if (AHRS100.this.op_status == AHRSProtocol.NAVX_OP_STATUS_NORMAL) { - if (op_status != AHRSProtocol.NAVX_OP_STATUS_NORMAL) { - /* Board reset detected */ - Tracer.Trace("navX-Sensor Reset Detected.\n"); - } - } else { - if (op_status == AHRSProtocol.NAVX_OP_STATUS_NORMAL) { - poweron_init_completed = true; - if ((cal_status - & AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_STATE_MASK) != AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_COMPLETE) { - Tracer.Trace("navX-Sensor startup initialization underway; startup calibration in progress.\n"); - } else { - // Tracer.Trace("navX-Sensor startup initialization and startup calibration - // complete.\n"); - } - } - } - - /* - * Detect/report reset of yaw angle tracker upon transition to startup - * calibration complete state. - */ - if (((AHRS100.this.cal_status - & AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_STATE_MASK) != AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_COMPLETE) - && - ((cal_status - & AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_STATE_MASK) == AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_COMPLETE)) { - Tracer.Trace("navX-Sensor onboard startup calibration complete." + "\n"); - /* - * Carefully, only reset the software yaw reset offset if calibration completion - * upon - */ - /* initial poweron or after board reset occurs. */ - if (poweron_init_completed || AHRS100.this.disconnect_startupcalibration_recovery_pending) { - AHRS100.this.disconnect_startupcalibration_recovery_pending = false; - AHRS100.this.yaw_angle_tracker.init(); - Tracer.Trace("navX-Sensor Yaw angle auto-reset to 0.0 due to startup calibration.\n"); - } - } - - AHRS100.this.op_status = op_status; - AHRS100.this.sensor_status = sensor_status; - AHRS100.this.cal_status = cal_status; - AHRS100.this.selftest_status = selftest_status; - } - - @Override - public void yawResetComplete() { - AHRS100.this.yaw_angle_tracker.reset(); - if (AHRS100.this.enable_boardlevel_yawreset) { - Tracer.Trace("navX-Sensor Board-level Yaw Reset completed.\n"); - } else { - Tracer.Trace("navX-Sensor Software Yaw Reset completed.\n"); - } - } - - @Override - public void disconnectDetected() { - /* - * Board disconnect may be caused by intermittent communication loss, or by - * board reset. - */ - /* Default status to error */ - AHRS100.this.op_status = AHRSProtocol.NAVX_OP_STATUS_ERROR; - AHRS100.this.sensor_status = 0; /* Clear all sensor status flags */ - /* - * Flag the need to watch for a startup calibration completion event upon later - * reconnect. - */ - AHRS100.this.disconnect_startupcalibration_recovery_pending = true; - Tracer.Trace("navX-Sensor DISCONNECTED!!!.\n"); - } - - @Override - public void connectDetected() { - Tracer.Trace("navX-Sensor Connected.\n"); - } - - }; - - /***********************************************************/ - /* Sendable Interface Implementation */ - /***********************************************************/ - - /** - * Initializes smart dashboard communication. - * - * @param builder The SendableBuilder which will be registered with. - */ - @Override - public void initSendable(SendableBuilder builder) { - builder.setSmartDashboardType("Gyro"); - builder.addDoubleProperty("Value", this::getYaw, null); - } - - /***********************************************************/ - /* AutoCloseable Interface Implementation */ - /***********************************************************/ - // @Override - // public void close() { - // SendableRegistry.remove(this); - // if (io != null) { - // io.stop(); - // } - /* Note: Currently this method does not release the underlying port resource. */ - // if (m_simDevice != null) { - // m_simDevice.close(); - // m_simDevice = null; - // } - // } - - /************************************************************/ - /* Gyro interface Implementation */ - /************************************************************/ - // @Override - // public void calibrate() { - // } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/ContinuousAngleTracker.java b/studies/AHRS100/src/main/java/frc/robot/navx/ContinuousAngleTracker.java deleted file mode 100644 index 790f47d..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/ContinuousAngleTracker.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ -/* This code is based upon source code from Joe Ross, FRC Team 330 Beachbotics */ -/* Source: https://github.com/Beachbot330/Beachbot2016Java/blob/master/src/ - * org/usfirst/frc330/subsystems/Chassis.java#L310 - */ - - -class ContinuousAngleTracker { - - private boolean fFirstUse; - private double gyro_prevVal; - private int ctrRollOver; - float curr_yaw_angle; - float last_yaw_angle; - double angleAdjust; - - public ContinuousAngleTracker() { - init(); - angleAdjust = 0.0f; - } - - public void init() { - gyro_prevVal = 0.0; - ctrRollOver = 0; - fFirstUse = true; - last_yaw_angle = 0.0f; - curr_yaw_angle = 0.0f; - } - - public void nextAngle( float newAngle ) { - synchronized(this){ - last_yaw_angle = curr_yaw_angle; - curr_yaw_angle = newAngle; - } - } - - /* Invoked (internally) whenever yaw reset occurs. */ - public void reset() { - synchronized(this){ - init(); - } - } - - public double getAngle() { - // First case - // Old reading: +150 degrees - // New reading: +170 degrees - // Difference: (170 - 150) = +20 degrees - - // Second case - // Old reading: -20 degrees - // New reading: -50 degrees - // Difference : (-50 - -20) = -30 degrees - - // Third case - // Old reading: +179 degrees - // New reading: -179 degrees - // Difference: (-179 - 179) = -358 degrees - - // Fourth case - // Old reading: -179 degrees - // New reading: +179 degrees - // Difference: (+179 - -179) = +358 degrees - - double difference; - double gyroVal; - double yawVal; - - synchronized(this) { - yawVal = curr_yaw_angle; - - // Has gyro_prevVal been previously set? - // If not, return do not calculate, return current value - if( !fFirstUse ) - { - // Determine count for rollover counter - difference = yawVal - gyro_prevVal; - - /* Clockwise past +180 degrees - * If difference > 180*, increment rollover counter */ - if( difference < -180.0 ) { - ctrRollOver++; - - /* Counter-clockwise past -180 degrees: - * If difference > 180*, decrement rollover counter */ - } - else if ( difference > 180.0 ) { - ctrRollOver--; - } - } - - // Mark gyro_prevVal as being used - fFirstUse = false; - - // Calculate value to return back to calling function - // e.g. +720 degrees or -360 degrees - gyroVal = yawVal + (360.0 * ctrRollOver); - gyro_prevVal = yawVal; - - return gyroVal + angleAdjust; - } - } - - public void setAngleAdjustment(double adjustment) { - angleAdjust = adjustment; - } - - public double getAngleAdjustment() { - return angleAdjust; - } - - public double getRate() { - float difference; - synchronized(this) { - difference = curr_yaw_angle - last_yaw_angle; - } - if ( difference > 180.0f) { - /* Clockwise past +180 degrees */ - difference = 360.0f - difference; - } else if ( difference < -180.0f) { - /* Counter-clockwise past -180 degrees */ - difference = 360.0f + difference; - } - return difference; - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/IBoardCapabilities.java b/studies/AHRS100/src/main/java/frc/robot/navx/IBoardCapabilities.java deleted file mode 100644 index f7194b0..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/IBoardCapabilities.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - - -interface IBoardCapabilities { - public boolean isOmniMountSupported(); - public boolean isBoardYawResetSupported(); - public boolean isDisplacementSupported(); - public boolean isAHRSPosTimestampSupported(); -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/IIOCompleteNotification.java b/studies/AHRS100/src/main/java/frc/robot/navx/IIOCompleteNotification.java deleted file mode 100644 index 7440590..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/IIOCompleteNotification.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.IMUProtocol; - -interface IIOCompleteNotification { - class BoardState { - public byte op_status; - public short sensor_status; - public byte cal_status; - public byte selftest_status; - public short capability_flags; - public byte update_rate_hz; - public short accel_fsr_g; - public short gyro_fsr_dps; - } - void setYawPitchRoll(IMUProtocol.YPRUpdate yprupdate, long sensor_timestamp); - void setAHRSData(AHRSProtocol.AHRSUpdate ahrs_update, long sensor_timestamp); - void setAHRSPosData(AHRSProtocol.AHRSPosUpdate ahrs_update, long sensor_timestamp); - void setRawData(IMUProtocol.GyroUpdate raw_data_update, long sensor_timestamp); - void setBoardID(AHRSProtocol.BoardID board_id); - void setBoardState( BoardState board_state, boolean update_board_status); - void yawResetComplete(); - void disconnectDetected(); - void connectDetected(); -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/IIOProvider.java b/studies/AHRS100/src/main/java/frc/robot/navx/IIOProvider.java deleted file mode 100644 index 761cf51..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/IIOProvider.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -interface IIOProvider { - public boolean isConnected(); - public double getByteCount(); - public double getUpdateCount(); - public void setUpdateRateHz(byte update_rate); - public void zeroYaw(); - public void zeroDisplacement(); - public void run(); - public void stop(); - public void enableLogging(boolean enable); -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/IRegisterIO.java b/studies/AHRS100/src/main/java/frc/robot/navx/IRegisterIO.java deleted file mode 100644 index 867c664..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/IRegisterIO.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -interface IRegisterIO { - boolean init(); - boolean write(byte address, byte value ); - boolean read(byte first_address, byte[] buffer); - boolean shutdown(); - void enableLogging(boolean enable); -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/ITimestampedDataSubscriber.java b/studies/AHRS100/src/main/java/frc/robot/navx/ITimestampedDataSubscriber.java deleted file mode 100644 index 0bda432..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/ITimestampedDataSubscriber.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.team100.lib.sensors.navx; - - - - -import com.kauailabs.navx.AHRSProtocol.AHRSUpdateBase; - -/** - * The ITimestampedDataSubscriber interface provides a method for consumers - * of navX-Model device data to be rapidly notified whenever new data - * has arrived. - * - * - timestampedDataReceived(): reception of sensor-timestamped data - * - * A "sensor" timestamp is provided, generated by the navX-Model device, which is - * at millisecond resolution. A "system timestamp", also at millisecond resolution, - * is also provided, which represents as accurately as possible the time at which the - * data was acquired from the navX-Model device. Note that the "system timestamp" - * typically has more jitter since it is generated by the host of the navX-Model - * device. - * - * Thus, in general sensor timestamps are preferred, as they are generated - * by the navX-Model device motion processor and has a greater accuracy (+/- 1ms) than the - * system timestamp which is vulnerable to latencies introduced by the - * host operating system. - * - * The system timestamp is provided to allow performance monitoring of the - * navX-Model device host's data acquisition process. -**/ -public interface ITimestampedDataSubscriber { - public void timestampedDataReceived( long system_timestamp, long sensor_timestamp, AHRSUpdateBase sensor_data, Object context ); -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/InertialDataIntegrator.java b/studies/AHRS100/src/main/java/frc/robot/navx/InertialDataIntegrator.java deleted file mode 100644 index 03f71ef..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/InertialDataIntegrator.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - - -class InertialDataIntegrator { - - private float last_velocity[] = new float[2]; - private float displacement[] = new float[2]; - - public InertialDataIntegrator() { - resetDisplacement(); - } - - public void updateDisplacement( float accel_x_g, float accel_y_g, - int update_rate_hz, boolean is_moving ) { - if ( is_moving ) { - float accel_g[] = new float[2]; - float accel_m_s2[] = new float[2]; - float curr_velocity_m_s[] = new float[2]; - float sample_time = (1.0f / update_rate_hz); - accel_g[0] = accel_x_g; - accel_g[1] = accel_y_g; - for ( int i = 0; i < 2; i++ ) { - accel_m_s2[i] = accel_g[i] * 9.80665f; - curr_velocity_m_s[i] = last_velocity[i] + (accel_m_s2[i] * sample_time); - displacement[i] += last_velocity[i] + (0.5f * accel_m_s2[i] * sample_time * sample_time); - last_velocity[i] = curr_velocity_m_s[i]; - } - } else { - last_velocity[0] = 0.0f; - last_velocity[1] = 0.0f; - } - } - - public void resetDisplacement() { - for ( int i = 0; i < 2; i++ ) { - last_velocity[i] = 0.0f; - displacement[i] = 0.0f; - } - } - - public float getVelocityX() { - return last_velocity[0]; - } - - public float getVelocityY() { - return last_velocity[1]; - } - - public float getVelocityZ() { - return 0; - } - - public float getDisplacementX() { - return displacement[0]; - } - - public float getDisplacementY() { - return displacement[1]; - } - - public float getDisplacementZ() { - return 0; - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/OffsetTracker.java b/studies/AHRS100/src/main/java/frc/robot/navx/OffsetTracker.java deleted file mode 100644 index dbf0c07..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/OffsetTracker.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -import java.util.Arrays; - -class OffsetTracker { - float value_history[]; - int next_value_history_index; - int history_len; - double value_offset; - - public OffsetTracker(int history_length) { - history_len = history_length; - value_history = new float[history_len]; - Arrays.fill(value_history,0); - next_value_history_index = 0; - value_offset = 0; - } - - public void updateHistory(float curr_value) { - if (next_value_history_index >= history_len) { - next_value_history_index = 0; - } - value_history[next_value_history_index] = curr_value; - next_value_history_index++; - } - - public double getAverageFromHistory() { - double value_history_sum = 0.0; - for (int i = 0; i < history_len; i++) { - value_history_sum += value_history[i]; - } - double value_history_avg = value_history_sum / history_len; - return value_history_avg; - } - - public void setOffset() { - value_offset = getAverageFromHistory(); - } - - public double getOffset() { - return value_offset; - } - - public double applyOffset( double value ) { - float offseted_value = (float) (value - value_offset); - if (offseted_value < -180) { - offseted_value += 360; - } - if (offseted_value > 180) { - offseted_value -= 360; - } - return offseted_value; - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO.java b/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO.java deleted file mode 100644 index b3ac91b..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO.java +++ /dev/null @@ -1,266 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.IMUProtocol; -import com.kauailabs.navx.IMURegisters; - -import edu.wpi.first.wpilibj.Timer; - -class RegisterIO implements IIOProvider { - IRegisterIO io_provider; - byte update_rate_hz; - boolean stop; - IMUProtocol.GyroUpdate raw_data_update; - AHRSProtocol.AHRSUpdate ahrs_update; - AHRSProtocol.AHRSPosUpdate ahrspos_update; - IIOCompleteNotification notify_sink; - IIOCompleteNotification.BoardState board_state; - AHRSProtocol.BoardID board_id; - IBoardCapabilities board_capabilities; - double last_update_time; - int byte_count; - int update_count; - long last_sensor_timestamp; - boolean disconnect_reported; - boolean connect_reported; - - static final double DELAY_OVERHEAD_SECONDS = 0.004; - - public RegisterIO( IRegisterIO io_provider, byte update_rate_hz, IIOCompleteNotification notify_sink, IBoardCapabilities board_capabilities ) { - this.io_provider = io_provider; - this.update_rate_hz = update_rate_hz; - this.board_capabilities = board_capabilities; - this.notify_sink = notify_sink; - raw_data_update = new IMUProtocol.GyroUpdate(); - ahrs_update = new AHRSProtocol.AHRSUpdate(); - ahrspos_update = new AHRSProtocol.AHRSPosUpdate(); - board_state = new IIOCompleteNotification.BoardState(); - board_id = new AHRSProtocol.BoardID(); - last_sensor_timestamp = 0; - disconnect_reported = false; - connect_reported = false; - } - - private final double IO_TIMEOUT_SECONDS = 1.0; - - public void stop() { - stop = true; - } - - public void run() { - - io_provider.init(); - - /* Initial Device Configuration */ - setUpdateRateHz(this.update_rate_hz); - Timer.delay(0.05); - getConfiguration(); - - /* Calculate delay to match configured update rate */ - /* Note: some additional time is removed from the */ - /* 1/update_rate value to ensure samples are not */ - /* dropped, esp. at higher update rates. */ - double update_rate = 1.0/((double)((int)(this.update_rate_hz & 0xFF))); - if ( update_rate > DELAY_OVERHEAD_SECONDS) { - update_rate -= DELAY_OVERHEAD_SECONDS; - } - - /* IO Loop */ - while (!stop) { - if ( board_state.update_rate_hz != this.update_rate_hz ) { - setUpdateRateHz(this.update_rate_hz); - } - getCurrentData(); - Timer.delay(update_rate); - } - } - - private boolean getConfiguration() { - boolean success = false; - int retry_count = 0; - while ( retry_count < 3 && !success ) { - byte config[] = new byte[IMURegisters.NAVX_REG_SENSOR_STATUS_H+1]; - if ( io_provider.read(IMURegisters.NAVX_REG_WHOAMI,config) && - (config[IMURegisters.NAVX_REG_WHOAMI] == 0x32)) { - if (!connect_reported) { - notify_sink.connectDetected(); - connect_reported = true; - disconnect_reported = false; - } - board_id.hw_rev = config[IMURegisters.NAVX_REG_HW_REV]; - board_id.fw_ver_major = config[IMURegisters.NAVX_REG_FW_VER_MAJOR]; - board_id.fw_ver_minor = config[IMURegisters.NAVX_REG_FW_VER_MINOR]; - board_id.type = config[IMURegisters.NAVX_REG_WHOAMI]; - notify_sink.setBoardID(board_id); - - board_state.cal_status = config[IMURegisters.NAVX_REG_CAL_STATUS]; - board_state.op_status = config[IMURegisters.NAVX_REG_OP_STATUS]; - board_state.selftest_status = config[IMURegisters.NAVX_REG_SELFTEST_STATUS]; - board_state.sensor_status = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_SENSOR_STATUS_L); - board_state.gyro_fsr_dps = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_GYRO_FSR_DPS_L); - board_state.accel_fsr_g = (short)config[IMURegisters.NAVX_REG_ACCEL_FSR_G]; - board_state.update_rate_hz = config[IMURegisters.NAVX_REG_UPDATE_RATE_HZ]; - board_state.capability_flags = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_CAPABILITY_FLAGS_L); - boolean update_board_status = true; - notify_sink.setBoardState(board_state, update_board_status); - success = true; - } else { - success = false; - Timer.delay(0.05); - } - retry_count++; - } - return success; - } - - - private void getCurrentData() { - byte first_address = IMURegisters.NAVX_REG_UPDATE_RATE_HZ; - boolean displacement_registers = board_capabilities.isDisplacementSupported(); - byte curr_data[]; - /* If firmware supports displacement data, acquire it - otherwise implement */ - /* similar (but potentially less accurate) calculations on this processor. */ - if ( displacement_registers ) { - curr_data = new byte[IMURegisters.NAVX_REG_LAST + 1 - first_address]; - } else { - curr_data= new byte[IMURegisters.NAVX_REG_QUAT_OFFSET_Z_H + 1 - first_address]; - } - if ( io_provider.read(first_address,curr_data) ) { - long sensor_timestamp = AHRSProtocol.decodeBinaryUint32(curr_data, IMURegisters.NAVX_REG_TIMESTAMP_L_L-first_address); - if (!connect_reported) { - notify_sink.connectDetected(); - connect_reported = true; - disconnect_reported = false; - } - if ( sensor_timestamp == last_sensor_timestamp ) { - return; - } - last_sensor_timestamp = sensor_timestamp; - ahrspos_update.op_status = curr_data[IMURegisters.NAVX_REG_OP_STATUS - first_address]; - ahrspos_update.selftest_status = curr_data[IMURegisters.NAVX_REG_SELFTEST_STATUS - first_address]; - ahrspos_update.cal_status = curr_data[IMURegisters.NAVX_REG_CAL_STATUS - first_address]; - ahrspos_update.sensor_status = curr_data[IMURegisters.NAVX_REG_SENSOR_STATUS_L - first_address]; - ahrspos_update.yaw = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_YAW_L-first_address); - ahrspos_update.pitch = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_PITCH_L-first_address); - ahrspos_update.roll = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_ROLL_L-first_address); - ahrspos_update.compass_heading = AHRSProtocol.decodeProtocolUnsignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_HEADING_L-first_address); - ahrspos_update.mpu_temp = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_MPU_TEMP_C_L - first_address); - ahrspos_update.linear_accel_x = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_X_L-first_address); - ahrspos_update.linear_accel_y = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_Y_L-first_address); - ahrspos_update.linear_accel_z = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_Z_L-first_address); - ahrspos_update.altitude = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_ALTITUDE_D_L - first_address); - ahrspos_update.barometric_pressure = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_PRESSURE_DL - first_address); - ahrspos_update.fused_heading = AHRSProtocol.decodeProtocolUnsignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_FUSED_HEADING_L-first_address); - ahrspos_update.quat_w = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_W_L-first_address)) / 32768.0f; - ahrspos_update.quat_x = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_X_L-first_address)) / 32768.0f; - ahrspos_update.quat_y = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_Y_L-first_address)) / 32768.0f; - ahrspos_update.quat_z = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_Z_L-first_address)) / 32768.0f; - if ( displacement_registers ) { - ahrspos_update.vel_x = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_X_I_L-first_address); - ahrspos_update.vel_y = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_Y_I_L-first_address); - ahrspos_update.vel_z = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_Z_I_L-first_address); - ahrspos_update.disp_x = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_X_I_L-first_address); - ahrspos_update.disp_y = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_Y_I_L-first_address); - ahrspos_update.disp_z = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_Z_I_L-first_address); - notify_sink.setAHRSPosData(ahrspos_update, sensor_timestamp); - } else { - ahrs_update.op_status = ahrspos_update.op_status; - ahrs_update.selftest_status = ahrspos_update.selftest_status; - ahrs_update.cal_status = ahrspos_update.cal_status; - ahrs_update.sensor_status = ahrspos_update.sensor_status; - ahrs_update.yaw = ahrspos_update.yaw; - ahrs_update.pitch = ahrspos_update.pitch; - ahrs_update.roll = ahrspos_update.roll; - ahrs_update.compass_heading = ahrspos_update.compass_heading; - ahrs_update.mpu_temp = ahrspos_update.mpu_temp; - ahrs_update.linear_accel_x = ahrspos_update.linear_accel_x; - ahrs_update.linear_accel_y = ahrspos_update.linear_accel_y; - ahrs_update.linear_accel_z = ahrspos_update.linear_accel_z; - ahrs_update.altitude = ahrspos_update.altitude; - ahrs_update.barometric_pressure = ahrspos_update.barometric_pressure; - ahrs_update.fused_heading = ahrspos_update.fused_heading; - notify_sink.setAHRSData( ahrs_update, sensor_timestamp ); - } - - board_state.update_rate_hz = curr_data[IMURegisters.NAVX_REG_UPDATE_RATE_HZ-first_address]; - board_state.gyro_fsr_dps = AHRSProtocol.decodeBinaryUint16(curr_data,IMURegisters.NAVX_REG_GYRO_FSR_DPS_L-first_address); - board_state.accel_fsr_g = (short)curr_data[IMURegisters.NAVX_REG_ACCEL_FSR_G-first_address]; - board_state.capability_flags= AHRSProtocol.decodeBinaryUint16(curr_data,IMURegisters.NAVX_REG_CAPABILITY_FLAGS_L-first_address); - boolean update_board_status = false; - notify_sink.setBoardState(board_state, update_board_status); // Board status already updated previously above - - raw_data_update.gyro_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_X_L-first_address); - raw_data_update.gyro_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_Y_L-first_address); - raw_data_update.gyro_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_Z_L-first_address); - raw_data_update.accel_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_X_L-first_address); - raw_data_update.accel_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_Y_L-first_address); - raw_data_update.accel_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_Z_L-first_address); - raw_data_update.mag_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_X_L-first_address); - raw_data_update.mag_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_Y_L-first_address); - raw_data_update.mag_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_Z_L-first_address); - raw_data_update.temp_c = ahrspos_update.mpu_temp; - notify_sink.setRawData(raw_data_update, sensor_timestamp); - - this.last_update_time = Timer.getFPGATimestamp(); - byte_count += curr_data.length; - update_count++; - } - if (connect_reported && !disconnect_reported && !isConnected()) { - notify_sink.disconnectDetected(); - disconnect_reported = true; - connect_reported = false; - } - } - - @Override - public boolean isConnected() { - double time_since_last_update = Timer.getFPGATimestamp() - this.last_update_time; - return time_since_last_update <= IO_TIMEOUT_SECONDS; - } - - @Override - public double getByteCount() { - return byte_count; - } - - @Override - public double getUpdateCount() { - return update_count; - } - - @Override - public void setUpdateRateHz(byte update_rate_hz) { - io_provider.write(IMURegisters.NAVX_REG_UPDATE_RATE_HZ, update_rate_hz); - } - - @Override - public void zeroYaw() { - io_provider.write( IMURegisters.NAVX_REG_INTEGRATION_CTL, - AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_YAW ); - this.notify_sink.yawResetComplete(); - } - - @Override - public void zeroDisplacement() { - io_provider.write( IMURegisters.NAVX_REG_INTEGRATION_CTL, - (byte)(AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_X | - AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_Y | - AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_Z ) ); - } - - @Override - public void enableLogging(boolean enable) { - io_provider.enableLogging(enable); - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIOMau.java b/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIOMau.java deleted file mode 100644 index fe507c6..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIOMau.java +++ /dev/null @@ -1,263 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -import java.lang.UnsatisfiedLinkError; -import java.lang.SecurityException; - -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.IMUProtocol; -import com.kauailabs.navx.IMURegisters; - -import edu.wpi.first.wpilibj.Timer; - -class RegisterIOMau implements IIOProvider { - - boolean stop; - IMUProtocol.GyroUpdate raw_data_update; - AHRSProtocol.AHRSUpdate ahrs_update; - AHRSProtocol.AHRSPosUpdate ahrspos_update; - IIOCompleteNotification notify_sink; - IIOCompleteNotification.BoardState board_state; - AHRSProtocol.BoardID board_id; - IBoardCapabilities board_capabilities; - double last_update_time; - long last_sensor_timestamp; - byte update_rate_hz; - - public RegisterIOMau( byte update_rate_hz, IIOCompleteNotification notify_sink, IBoardCapabilities board_capabilities ) { - - // Attempt dynamic loading of JNI Library, if on VMX Platform - try { - System.loadLibrary("vmxHaljni"); - Tracer.Trace("Succesfully loaded vmxHaljni library."); - } catch (UnsatisfiedLinkError ex) { - ex.printStackTrace(); - System.exit(1); - } catch (SecurityException ex) { - ex.printStackTrace(); - System.exit(1); - } - - com.kauailabs.vmx.AHRSJNI.Init((byte)update_rate_hz); - this.board_capabilities = board_capabilities; - this.notify_sink = notify_sink; - this.update_rate_hz = update_rate_hz; - raw_data_update = new IMUProtocol.GyroUpdate(); - ahrs_update = new AHRSProtocol.AHRSUpdate(); - ahrspos_update = new AHRSProtocol.AHRSPosUpdate(); - board_state = new IIOCompleteNotification.BoardState(); - board_id = new AHRSProtocol.BoardID(); - last_sensor_timestamp = 0; - } - - private final int IO_TIMEOUT_MILLISECONDS = 1000; - private final double DELAY_OVERHEAD_SECONDS = 0.004; - - public void stop() { - stop = true; - } - - public void run() { - - getConfiguration(); - /* Calculate delay to match configured update rate */ - /* Note: some additional time is removed from the */ - /* 1/update_rate value to ensure samples are not */ - /* dropped, esp. at higher update rates. */ - double update_rate = 1.0/((double)((int)(this.update_rate_hz & 0xFF))); - if ( update_rate > DELAY_OVERHEAD_SECONDS) { - update_rate -= DELAY_OVERHEAD_SECONDS; - } - - /* IO Loop */ - while (!stop) { - if (!getCurrentData()) { - Timer.delay(update_rate); - } - } - } - - private boolean getConfiguration() { - boolean success = false; - int retry_count = 0; - while ( retry_count < 3 && !success ) { - byte config[] = new byte[IMURegisters.NAVX_REG_SENSOR_STATUS_H+1]; - if (com.kauailabs.vmx.AHRSJNI.ReadConfigurationData(IMURegisters.NAVX_REG_WHOAMI, config, (byte)config.length)) { - Tracer.Trace("Received AHRS Configuration Data: " + config.length + " bytes."); - - board_id.hw_rev = config[IMURegisters.NAVX_REG_HW_REV]; - board_id.fw_ver_major = config[IMURegisters.NAVX_REG_FW_VER_MAJOR]; - board_id.fw_ver_minor = config[IMURegisters.NAVX_REG_FW_VER_MINOR]; - board_id.type = config[IMURegisters.NAVX_REG_WHOAMI]; - notify_sink.setBoardID(board_id); - - board_state.cal_status = config[IMURegisters.NAVX_REG_CAL_STATUS]; - board_state.op_status = config[IMURegisters.NAVX_REG_OP_STATUS]; - board_state.selftest_status = config[IMURegisters.NAVX_REG_SELFTEST_STATUS]; - board_state.sensor_status = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_SENSOR_STATUS_L); - board_state.gyro_fsr_dps = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_GYRO_FSR_DPS_L); - board_state.accel_fsr_g = (short)config[IMURegisters.NAVX_REG_ACCEL_FSR_G]; - board_state.update_rate_hz = config[IMURegisters.NAVX_REG_UPDATE_RATE_HZ]; - board_state.capability_flags = AHRSProtocol.decodeBinaryUint16(config,IMURegisters.NAVX_REG_CAPABILITY_FLAGS_L); - boolean update_board_status = true; - notify_sink.setBoardState(board_state, update_board_status); - success = true; - } else { - Tracer.Trace("AHRSJNI.ReadConfigurationData return false."); - success = false; - Timer.delay(0.05); - } - retry_count++; - } - if (!success) { - Tracer.Trace("Completely failed to received AHRS Configuration Data."); - } - return success; - } - - - private boolean getCurrentData() { - byte first_address = IMURegisters.NAVX_REG_UPDATE_RATE_HZ; - boolean displacement_registers = board_capabilities.isDisplacementSupported(); - byte curr_data[]; - /* If firmware supports displacement data, acquire it - otherwise implement */ - /* similar (but potentially less accurate) calculations on this processor. */ - if ( displacement_registers ) { - curr_data = new byte[IMURegisters.NAVX_REG_LAST + 1 - first_address]; - } else { - curr_data= new byte[IMURegisters.NAVX_REG_QUAT_OFFSET_Z_H + 1 - first_address]; - } - - byte first_register_address[] = new byte[1]; - byte read_data_length[] = new byte[1]; - if (com.kauailabs.vmx.AHRSJNI.BlockOnNewCurrentRegisterData( - IO_TIMEOUT_MILLISECONDS, - first_register_address, - curr_data, - (byte)curr_data.length, - read_data_length)) { - long sensor_timestamp = AHRSProtocol.decodeBinaryUint32(curr_data, IMURegisters.NAVX_REG_TIMESTAMP_L_L-first_address); - if ( sensor_timestamp == last_sensor_timestamp ) { - return true; - } - last_sensor_timestamp = sensor_timestamp; - ahrspos_update.op_status = curr_data[IMURegisters.NAVX_REG_OP_STATUS - first_address]; - ahrspos_update.selftest_status = curr_data[IMURegisters.NAVX_REG_SELFTEST_STATUS - first_address]; - ahrspos_update.cal_status = curr_data[IMURegisters.NAVX_REG_CAL_STATUS - first_address]; - ahrspos_update.sensor_status = curr_data[IMURegisters.NAVX_REG_SENSOR_STATUS_L - first_address]; - ahrspos_update.yaw = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_YAW_L-first_address); - ahrspos_update.pitch = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_PITCH_L-first_address); - ahrspos_update.roll = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_ROLL_L-first_address); - ahrspos_update.compass_heading = AHRSProtocol.decodeProtocolUnsignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_HEADING_L-first_address); - ahrspos_update.mpu_temp = AHRSProtocol.decodeProtocolSignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_MPU_TEMP_C_L - first_address); - ahrspos_update.linear_accel_x = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_X_L-first_address); - ahrspos_update.linear_accel_y = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_Y_L-first_address); - ahrspos_update.linear_accel_z = AHRSProtocol.decodeProtocolSignedThousandthsFloat(curr_data, IMURegisters.NAVX_REG_LINEAR_ACC_Z_L-first_address); - ahrspos_update.altitude = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_ALTITUDE_D_L - first_address); - ahrspos_update.barometric_pressure = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_PRESSURE_DL - first_address); - ahrspos_update.fused_heading = AHRSProtocol.decodeProtocolUnsignedHundredthsFloat(curr_data, IMURegisters.NAVX_REG_FUSED_HEADING_L-first_address); - ahrspos_update.quat_w = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_W_L-first_address)) / 32768.0f; - ahrspos_update.quat_x = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_X_L-first_address)) / 32768.0f; - ahrspos_update.quat_y = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_Y_L-first_address)) / 32768.0f; - ahrspos_update.quat_z = ((float)AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_QUAT_Z_L-first_address)) / 32768.0f; - if ( displacement_registers ) { - ahrspos_update.vel_x = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_X_I_L-first_address); - ahrspos_update.vel_y = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_Y_I_L-first_address); - ahrspos_update.vel_z = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_VEL_Z_I_L-first_address); - ahrspos_update.disp_x = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_X_I_L-first_address); - ahrspos_update.disp_y = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_Y_I_L-first_address); - ahrspos_update.disp_z = AHRSProtocol.decodeProtocol1616Float(curr_data, IMURegisters.NAVX_REG_DISP_Z_I_L-first_address); - notify_sink.setAHRSPosData(ahrspos_update, sensor_timestamp); - } else { - ahrs_update.op_status = ahrspos_update.op_status; - ahrs_update.selftest_status = ahrspos_update.selftest_status; - ahrs_update.cal_status = ahrspos_update.cal_status; - ahrs_update.sensor_status = ahrspos_update.sensor_status; - ahrs_update.yaw = ahrspos_update.yaw; - ahrs_update.pitch = ahrspos_update.pitch; - ahrs_update.roll = ahrspos_update.roll; - ahrs_update.compass_heading = ahrspos_update.compass_heading; - ahrs_update.mpu_temp = ahrspos_update.mpu_temp; - ahrs_update.linear_accel_x = ahrspos_update.linear_accel_x; - ahrs_update.linear_accel_y = ahrspos_update.linear_accel_y; - ahrs_update.linear_accel_z = ahrspos_update.linear_accel_z; - ahrs_update.altitude = ahrspos_update.altitude; - ahrs_update.barometric_pressure = ahrspos_update.barometric_pressure; - ahrs_update.fused_heading = ahrspos_update.fused_heading; - notify_sink.setAHRSData( ahrs_update, sensor_timestamp ); - } - - board_state.cal_status = curr_data[IMURegisters.NAVX_REG_CAL_STATUS-first_address]; - board_state.op_status = curr_data[IMURegisters.NAVX_REG_OP_STATUS-first_address]; - board_state.selftest_status = curr_data[IMURegisters.NAVX_REG_SELFTEST_STATUS-first_address]; - board_state.sensor_status = AHRSProtocol.decodeBinaryUint16(curr_data,IMURegisters.NAVX_REG_SENSOR_STATUS_L-first_address); - board_state.update_rate_hz = curr_data[IMURegisters.NAVX_REG_UPDATE_RATE_HZ-first_address]; - board_state.gyro_fsr_dps = AHRSProtocol.decodeBinaryUint16(curr_data,IMURegisters.NAVX_REG_GYRO_FSR_DPS_L - first_address); - board_state.accel_fsr_g = (short)curr_data[IMURegisters.NAVX_REG_ACCEL_FSR_G - first_address]; - board_state.capability_flags= AHRSProtocol.decodeBinaryUint16(curr_data,IMURegisters.NAVX_REG_CAPABILITY_FLAGS_L-first_address); - boolean update_board_status = false; - notify_sink.setBoardState(board_state, update_board_status); - - raw_data_update.gyro_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_X_L-first_address); - raw_data_update.gyro_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_Y_L-first_address); - raw_data_update.gyro_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_GYRO_Z_L-first_address); - raw_data_update.accel_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_X_L-first_address); - raw_data_update.accel_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_Y_L-first_address); - raw_data_update.accel_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_ACC_Z_L-first_address); - raw_data_update.mag_x = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_X_L-first_address); - raw_data_update.mag_y = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_Y_L-first_address); - raw_data_update.mag_z = AHRSProtocol.decodeBinaryInt16(curr_data, IMURegisters.NAVX_REG_MAG_Z_L-first_address); - raw_data_update.temp_c = ahrspos_update.mpu_temp; - notify_sink.setRawData(raw_data_update, sensor_timestamp); - - this.last_update_time = Timer.getFPGATimestamp(); - return true; - } - return false; - } - - @Override - public boolean isConnected() { - return com.kauailabs.vmx.AHRSJNI.IsConnected(); - } - - @Override - public double getByteCount() { - return com.kauailabs.vmx.AHRSJNI.GetByteCount(); - } - - @Override - public double getUpdateCount() { - return com.kauailabs.vmx.AHRSJNI.GetUpdateCount(); - } - - @Override - public void setUpdateRateHz(byte update_rate_hz) { - // This takes no effect - } - - @Override - public void zeroYaw() { - com.kauailabs.vmx.AHRSJNI.ZeroYaw(); - notify_sink.yawResetComplete(); - } - - @Override - public void zeroDisplacement() { - com.kauailabs.vmx.AHRSJNI.ResetDisplacement(); - } - - @Override - public void enableLogging(boolean enable) { - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_I2C.java b/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_I2C.java deleted file mode 100644 index 9b9b3f2..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_I2C.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - - -import edu.wpi.first.wpilibj.I2C; - -class RegisterIO_I2C implements IRegisterIO{ - - I2C port; - boolean trace = false; - int successive_error_count; - - static final int NUM_IGNORED_SUCCESSIVE_ERRORS = 50; - - public RegisterIO_I2C( I2C i2c_port ) { - port = i2c_port; - successive_error_count = 0; - } - - @Override - public boolean init() { - return true; - } - - @Override - public void enableLogging(boolean enable) { - trace = enable; - } - - @Override - public boolean write(byte address, byte value ) { - boolean aborted; - synchronized(this){ - aborted = port.write(address | 0x80, value); - } - if ( aborted && trace ) Tracer.Trace("navX-MXP I2C Write Error"); - return !aborted; - } - - final static int MAX_WPILIB_I2C_READ_BYTES = 127; - - @Override - public boolean read(byte first_address, byte[] buffer) { - int len = buffer.length; - int buffer_offset = 0; - while ( len > 0 ) { - int read_len = (len > MAX_WPILIB_I2C_READ_BYTES) ? MAX_WPILIB_I2C_READ_BYTES : len; - byte[] read_buffer = new byte[read_len]; - boolean write_aborted; - boolean read_aborted = true; - synchronized(this){ - write_aborted = port.write(first_address + buffer_offset, read_len); - if ( !write_aborted ) { - read_aborted = port.readOnly(read_buffer, read_len); - } - } - if ( !write_aborted && !read_aborted ) { - successive_error_count = 0; - System.arraycopy(read_buffer, 0, buffer, buffer_offset, read_len); - buffer_offset += read_len; - len -= read_len; - } else { - successive_error_count++; - if (successive_error_count % NUM_IGNORED_SUCCESSIVE_ERRORS == 1) { - if (trace) { - Tracer.Trace("navX-MXP I2C Read error %s.\n", - ((successive_error_count < NUM_IGNORED_SUCCESSIVE_ERRORS) ? "" : " (Repeated errors omitted)")); - } - } - return false; - } - } - return (len == 0); - } - - @Override - public boolean shutdown() { - return true; - } - -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_SPI.java b/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_SPI.java deleted file mode 100644 index 6e43d5e..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/RegisterIO_SPI.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.team100.lib.sensors.navx; - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - -import com.kauailabs.navx.AHRSProtocol; - -import edu.wpi.first.hal.SPIJNI; -import edu.wpi.first.wpilibj.SPI; -import edu.wpi.first.wpilibj.Timer; - -/** Implements Reset_SPI to try to work around SPI read errors. */ -class RegisterIO_SPI implements IRegisterIO { - - SPI port; - int bitrate; - boolean trace = false; - int successive_error_count; - - static final int DEFAULT_SPI_BITRATE_HZ = 500000; - static final int NUM_IGNORED_SUCCESSIVE_ERRORS = 50; - - public RegisterIO_SPI(SPI spi_port) { - port = spi_port; - bitrate = DEFAULT_SPI_BITRATE_HZ; - successive_error_count = 0; - } - - public void enableLogging(boolean enable) { - trace = enable; - } - - public RegisterIO_SPI(SPI spi_port, int bitrate) { - port = spi_port; - this.bitrate = bitrate; - } - - @Override - public boolean init() { - port.setClockRate(bitrate); - port.setMode(SPI.Mode.kMode3); - port.setChipSelectActiveLow(); - if (trace) - Tracer.Trace("navX-MXP: Initialized SPI communication at bitrate " + bitrate + "\n"); - return true; - } - - @Override - public boolean write(byte address, byte value) { - byte[] cmd = new byte[3]; - cmd[0] = (byte) (address | (byte) 0x80); - cmd[1] = value; - cmd[2] = AHRSProtocol.getCRC(cmd, 2); - boolean write_ok; - synchronized (this) { - write_ok = (port.write(cmd, cmd.length) == cmd.length); - } - if (!write_ok) { - if (trace) - Tracer.Trace("navX-MXP SPI Read: Write error"); - return false; // WRITE ERROR - } - return true; - } - - @Override - public boolean read(byte first_address, byte[] buffer) { - byte[] cmd = new byte[3]; - cmd[0] = first_address; - cmd[1] = (byte) buffer.length; - cmd[2] = AHRSProtocol.getCRC(cmd, 2); - synchronized (this) { - if (port.write(cmd, cmd.length) != cmd.length) { - return false; // WRITE ERROR - } - // delay 200 us /* TODO: What is min. granularity of delay()? */ - Timer.delay(0.001); - byte[] received_data = new byte[buffer.length + 1]; - java.util.Arrays.fill(received_data, 0, buffer.length - 1, (byte) 0x95); - received_data[buffer.length] = (byte) 0x3E; - if (port.read(true, received_data, received_data.length) != received_data.length) { - successive_error_count++; - if (successive_error_count % NUM_IGNORED_SUCCESSIVE_ERRORS == 1) { - if (trace) { - System.out.printf("navX-MXP SPI Read: Read error %s\n", - ((successive_error_count < NUM_IGNORED_SUCCESSIVE_ERRORS) ? "" - : " (Repeated errors omitted)")); - } - } - return false; // READ ERROR - } - byte crc = AHRSProtocol.getCRC(received_data, received_data.length - 1); - if ((crc != received_data[received_data.length - 1]) || - ((received_data[0] == (byte) 0x00) && - (received_data[1] == (byte) 0x00) && - (received_data[2] == (byte) 0x00) && - (received_data[3] == (byte) 0x00))) { - successive_error_count++; - if (successive_error_count % NUM_IGNORED_SUCCESSIVE_ERRORS == 1) { - if (trace) { - System.out.printf("navX-MXP SPI Read: CRC error %s\n", - ((successive_error_count < NUM_IGNORED_SUCCESSIVE_ERRORS) ? "" - : " (Repeated errors omitted)")); - } - } - resetSPI(); - return false; // CRC ERROR - } - successive_error_count = 0; - System.arraycopy(received_data, 0, buffer, 0, received_data.length - 1); - } - return true; - } - - private void resetSPI() { - port.close(); - var portNumber = port.getPort(); - Timer.delay(0.001); - SPIJNI.spiInitialize(portNumber); - Timer.delay(0.010); - } - - @Override - public boolean shutdown() { - return true; - } - -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/SerialIO.java b/studies/AHRS100/src/main/java/frc/robot/navx/SerialIO.java deleted file mode 100644 index 59cffd2..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/SerialIO.java +++ /dev/null @@ -1,676 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - - -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.IMUProtocol; - -import edu.wpi.first.wpilibj.SerialPort; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -class SerialIO implements IIOProvider { - - SerialPort.Port serial_port_id; - SerialPort serial_port; - private byte next_integration_control_action; - private boolean signal_transmit_integration_control; - private boolean signal_retransmit_stream_config; - private boolean stop; - private byte update_type; //IMUProtocol.MSGID_XXX - private byte update_rate_hz; - int byte_count; - int update_count; - private IMUProtocol.YPRUpdate ypr_update_data; - private IMUProtocol.GyroUpdate gyro_update_data; - private AHRSProtocol.AHRSUpdate ahrs_update_data; - private AHRSProtocol.AHRSPosUpdate ahrspos_update_data; - private AHRSProtocol.AHRSPosTSUpdate ahrspos_ts_update_data; - private AHRSProtocol.BoardID board_id; - IIOCompleteNotification notify_sink; - IIOCompleteNotification.BoardState board_state; - IBoardCapabilities board_capabilities; - double last_valid_packet_time; - - boolean debug = false; /* Set to true to enable debug output (to smart dashboard) */ - boolean is_usb; - boolean connect_reported; - boolean disconnect_reported; - - public SerialIO( SerialPort.Port port_id, byte update_rate_hz, boolean processed_data, IIOCompleteNotification notify_sink, IBoardCapabilities board_capabilities ) { - this.serial_port_id = port_id; - is_usb = ((port_id == SerialPort.Port.kUSB) || - (port_id == SerialPort.Port.kUSB1)|| - (port_id == SerialPort.Port.kUSB2)); - ypr_update_data = new IMUProtocol.YPRUpdate(); - gyro_update_data = new IMUProtocol.GyroUpdate(); - ahrs_update_data = new AHRSProtocol.AHRSUpdate(); - ahrspos_update_data = new AHRSProtocol.AHRSPosUpdate(); - ahrspos_ts_update_data = new AHRSProtocol.AHRSPosTSUpdate(); - board_id = new AHRSProtocol.BoardID(); - board_state = new IIOCompleteNotification.BoardState(); - this.notify_sink = notify_sink; - this.board_capabilities = board_capabilities; - serial_port = getMaybeCreateSerialPort(); - this.update_rate_hz = update_rate_hz; - if ( processed_data ) { - update_type = AHRSProtocol.MSGID_AHRSPOS_TS_UPDATE; - } else { - update_type = IMUProtocol.MSGID_GYRO_UPDATE; - } - connect_reported = - disconnect_reported = false; - } - - protected SerialPort resetSerialPort() - { - if (serial_port != null) { - if (connect_reported && !disconnect_reported && !isConnected()) { - notify_sink.disconnectDetected(); - connect_reported = false; - disconnect_reported = true; - } - Tracer.Trace("Closing " + (is_usb ? "USB " : "TTL UART ") + " serial port to communicate with navX-Sensor.\n"); - try { - serial_port.close(); - } catch (Exception ex) { - // This has been seen to happen before.... - } - serial_port = null; - Timer.delay(1.0); - } - serial_port = getMaybeCreateSerialPort(); - return serial_port; - } - - protected SerialPort getMaybeCreateSerialPort() - { - if (serial_port == null) { - try { - Tracer.Trace("Opening " + (is_usb ? "USB " : "TTL UART ") + " serial port to communicate with navX-Sensor.\n"); - serial_port = new SerialPort(57600, serial_port_id); - serial_port.setReadBufferSize(256); - serial_port.setTimeout(1.0); - serial_port.enableTermination('\n'); - serial_port.reset(); - } catch (Exception ex) { - /* Error opening serial port. Perhaps it doesn't exist... */ - Tracer.Trace("Error opening " + (is_usb ? "USB " : "TTL UART ") + " serial port to communicate with navX-Sensor.\n"); - serial_port = null; - } - } - return serial_port; - } - - protected void enqueueIntegrationControlMessage(byte action) - { - next_integration_control_action = action; - signal_transmit_integration_control = true; - } - - protected void dispatchStreamResponse(IMUProtocol.StreamResponse response) { - board_state.cal_status = (byte) (response.flags & IMUProtocol.NAV6_FLAG_MASK_CALIBRATION_STATE); - board_state.capability_flags = (short) (response.flags & ~IMUProtocol.NAV6_FLAG_MASK_CALIBRATION_STATE); - - /* Derive reasonable operational/self-test status from the available stream response data. */ - if (board_state.cal_status == AHRSProtocol.NAVX_CAL_STATUS_IMU_CAL_COMPLETE) { - board_state.op_status = AHRSProtocol.NAVX_OP_STATUS_NORMAL; - } else { - board_state.op_status = AHRSProtocol.NAVX_OP_STATUS_IMU_AUTOCAL_IN_PROGRESS; - } - board_state.selftest_status = ( AHRSProtocol.NAVX_SELFTEST_STATUS_COMPLETE | - AHRSProtocol.NAVX_SELFTEST_RESULT_GYRO_PASSED | - AHRSProtocol.NAVX_SELFTEST_RESULT_ACCEL_PASSED | - AHRSProtocol.NAVX_SELFTEST_RESULT_BARO_PASSED ); - - board_state.accel_fsr_g = response.accel_fsr_g; - board_state.gyro_fsr_dps = response.gyro_fsr_dps; - board_state.update_rate_hz = (byte) response.update_rate_hz; - notify_sink.setBoardState(board_state, true); - /* If AHRSPOS_TS is update type is requested, but board doesn't support it, */ - /* retransmit the stream config, falling back to AHRSPos update mode, if */ - /* the board supports it, otherwise fall all the way back to AHRS Update mode. */ - if ( response.stream_type != this.update_type ) { - if ( this.update_type == AHRSProtocol.MSGID_AHRSPOS_TS_UPDATE ) { - if ( board_capabilities.isAHRSPosTimestampSupported() ) { - this.update_type = AHRSProtocol.MSGID_AHRSPOS_TS_UPDATE; - } - else if ( board_capabilities.isDisplacementSupported() ) { - this.update_type = AHRSProtocol.MSGID_AHRSPOS_UPDATE; - } - else { - this.update_type = AHRSProtocol.MSGID_AHRS_UPDATE; - } - signal_retransmit_stream_config = true; - } - } - } - - protected int decodePacketHandler(byte[] received_data, int offset, int bytes_remaining) { - - int packet_length; - int sensor_timestamp = 0; /* Note: Serial Protocols often don't provide sensor timestamps */ - - if ( (packet_length = IMUProtocol.decodeYPRUpdate(received_data, offset, bytes_remaining, ypr_update_data)) > 0) { - notify_sink.setYawPitchRoll(ypr_update_data, sensor_timestamp); - } else if ( ( packet_length = AHRSProtocol.decodeAHRSPosTSUpdate(received_data, offset, bytes_remaining, ahrspos_ts_update_data)) > 0) { - if (ahrspos_ts_update_data.op_status != 0) { - notify_sink.setAHRSPosData(ahrspos_ts_update_data, ahrspos_ts_update_data.timestamp); - } - } else if ( ( packet_length = AHRSProtocol.decodeAHRSPosUpdate(received_data, offset, bytes_remaining, ahrspos_update_data)) > 0) { - if (ahrspos_ts_update_data.op_status != 0) { - notify_sink.setAHRSPosData(ahrspos_update_data, sensor_timestamp); - } - } else if ( ( packet_length = AHRSProtocol.decodeAHRSUpdate(received_data, offset, bytes_remaining, ahrs_update_data)) > 0) { - if (ahrspos_ts_update_data.op_status != 0) { - notify_sink.setAHRSData(ahrs_update_data, sensor_timestamp); - } - } else if ( ( packet_length = IMUProtocol.decodeGyroUpdate(received_data, offset, bytes_remaining, gyro_update_data)) > 0) { - notify_sink.setRawData(gyro_update_data, sensor_timestamp); - } else if ( ( packet_length = AHRSProtocol.decodeBoardIDGetResponse(received_data, offset, bytes_remaining, board_id)) > 0) { - notify_sink.setBoardID(board_id); - } else { - packet_length = 0; - } - return packet_length; - } - - public void run() { - - stop = false; - boolean stream_response_received = false; - double last_stream_command_sent_timestamp = 0.0; - double last_data_received_timestamp = 0; - double last_second_start_time = 0; - - int partial_binary_packet_count = 0; - int stream_response_receive_count = 0; - int timeout_count = 0; - int discarded_bytes_count = 0; - int port_reset_count = 0; - int updates_in_last_second = 0; - int integration_response_receive_count = 0; - - byte[] stream_command = new byte[256]; - byte[] integration_control_command = new byte[256]; - IMUProtocol.StreamResponse response = new IMUProtocol.StreamResponse(); - AHRSProtocol.IntegrationControl integration_control = new AHRSProtocol.IntegrationControl(); - AHRSProtocol.IntegrationControl integration_control_response = new AHRSProtocol.IntegrationControl(); - - int cmd_packet_length = IMUProtocol.encodeStreamCommand( stream_command, update_type, update_rate_hz ); - boolean boardid_request_sent = false; - while(!boardid_request_sent) { - try { - serial_port.reset(); - serial_port.write( stream_command, cmd_packet_length ); - cmd_packet_length = AHRSProtocol.encodeDataGetRequest( stream_command, AHRSProtocol.AHRS_DATA_TYPE.BOARD_IDENTITY, (byte)0 ); - serial_port.write( stream_command, cmd_packet_length ); - serial_port.flush(); - port_reset_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Port Resets", (double)port_reset_count); - } - last_stream_command_sent_timestamp = Timer.getFPGATimestamp(); - boardid_request_sent = true; - last_valid_packet_time = Timer.getFPGATimestamp(); - Tracer.Trace("navX-Sensor Connected " + (is_usb ? "via USB.\n" : "via TTL UART.\n")); - } catch (RuntimeException ex) { - //ex.printStackTrace(); - if(serial_port == null) { - Tracer.Trace("Unable to open " + (is_usb ? "USB " : "TTL UART ") + " serial port to communicate with navX-Sensor.\n"); - } else { - Tracer.Trace("Error sending navX-Sensor configuration request over " + (is_usb ? "USB " : "TTL UART ") + " serial port.\n"); - ex.printStackTrace(); - } - Timer.delay(1.0); - resetSerialPort(); - } - } - - int remainder_bytes = 0; - byte[] remainder_data = null; - - while (!stop) { - try { - - if( serial_port == null) { - double update_rate = 1.0/((double)((int)(this.update_rate_hz & 0xFF))); - Timer.delay(update_rate); - if (debug) Tracer.Trace("Initiating reset of serial port, as serial_port reference is null.\n"); - resetSerialPort(); - continue; - } - // Wait, with delays to conserve CPU resources, until - // bytes have arrived. - - if ( signal_transmit_integration_control ) { - integration_control.action = next_integration_control_action; - signal_transmit_integration_control = false; - next_integration_control_action = 0; - cmd_packet_length = AHRSProtocol.encodeIntegrationControlCmd( integration_control_command, integration_control ); - try { - /* Ugly Hack. This is a workaround for ARTF5478: */ - /* (USB Serial Port Write hang if receive buffer not empty. */ - if (is_usb) { - try { - serial_port.reset(); - } catch (RuntimeException ex2) { - /* Sometimes an unclean status exception occurs during reset(). */ - ex2.printStackTrace(); - resetSerialPort(); - } - } - serial_port.write( integration_control_command, cmd_packet_length ); - } catch (RuntimeException ex2) { - ex2.printStackTrace(); - } - } - - if ( !stop && ( remainder_bytes == 0 ) && ( serial_port.getBytesReceived() < 1 ) ) { - double update_rate = 1.0/((double)((int)(this.update_rate_hz & 0xFF))); - Timer.delay(update_rate); - } - - int packets_received = 0; - byte[] received_data = serial_port.read(256); - int bytes_read = received_data.length; - byte_count += bytes_read; - - /* If a partial packet remains from last iteration, place that at */ - /* the start of the data buffer, and append any new data available */ - /* at the serial port. */ - - if ( remainder_bytes > 0 ) { - byte[] resized_array = new byte[remainder_bytes + bytes_read]; - System.arraycopy(remainder_data, 0, resized_array, 0, remainder_bytes); - System.arraycopy(received_data, 0, resized_array, remainder_bytes, bytes_read); - received_data = resized_array; - bytes_read += remainder_bytes; - remainder_bytes = 0; - remainder_data = null; - } - - if (bytes_read > 0) { - last_data_received_timestamp = Timer.getFPGATimestamp(); - int i = 0; - // Scan the buffer looking for valid packets - while (i < bytes_read) { - - // Attempt to decode a packet - - int bytes_remaining = bytes_read - i; - - if ( received_data[i] != IMUProtocol.PACKET_START_CHAR ) { - /* Skip over received bytes until a packet start is detected. */ - i++; - discarded_bytes_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Discarded Bytes", (double)discarded_bytes_count); - } - continue; - } else { - if ( ( bytes_remaining > 2 ) && - ( received_data[i+1] == AHRSProtocol.BINARY_PACKET_INDICATOR_CHAR ) ) { - /* Binary packet received; next byte is packet length-2 */ - byte total_expected_binary_data_bytes = received_data[i+2]; - total_expected_binary_data_bytes += 2; - while ( bytes_remaining < total_expected_binary_data_bytes ) { - - /* This binary packet contains an embedded */ - /* end-of-line character. Continue to receive */ - /* more data until entire packet is received. */ - byte[] additional_received_data = serial_port.read(256); - byte_count += additional_received_data.length; - bytes_remaining += additional_received_data.length; - - /* Resize array to hold existing and new data */ - byte[] c = new byte[received_data.length + additional_received_data.length]; - if ( c.length > 0 ) { - System.arraycopy(received_data, 0, c, 0, received_data.length); - System.arraycopy(additional_received_data, 0, c, received_data.length, additional_received_data.length); - received_data = c; - } else { - /* Timeout waiting for remainder of binary packet */ - i++; - bytes_remaining--; - partial_binary_packet_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Partial Binary Packets", (double)partial_binary_packet_count); - } - continue; - } - } - } - } - - byte[] received_data_copy = received_data.clone(); - int packet_length = decodePacketHandler(received_data,i,bytes_remaining); - if (packet_length > 0) { - packets_received++; - update_count++; - if (!connect_reported) { - notify_sink.connectDetected(); - connect_reported = true; - disconnect_reported = false; - } - last_valid_packet_time = Timer.getFPGATimestamp(); - updates_in_last_second++; - if ((last_valid_packet_time - last_second_start_time ) > 1.0 ) { - if ( debug ) { - SmartDashboard.putNumber("navX Updates Per Sec", (double)updates_in_last_second); - } - updates_in_last_second = 0; - last_second_start_time = last_valid_packet_time; - } - i += packet_length; - } - else - { - packet_length = IMUProtocol.decodeStreamResponse(received_data, i, bytes_remaining, response); - if (packet_length > 0) { - Tracer.Trace("navX-Sensor Configuration Response Received.\n"); - packets_received++; - if (!connect_reported) { - notify_sink.connectDetected(); - connect_reported = true; - disconnect_reported = false; - } - dispatchStreamResponse(response); - stream_response_received = true; - i += packet_length; - stream_response_receive_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Stream Responses", (double)stream_response_receive_count); - } - } - else { - packet_length = AHRSProtocol.decodeIntegrationControlResponse( received_data, i, bytes_remaining, - integration_control_response ); - if ( packet_length > 0 ) { - // Confirmation of integration control - integration_response_receive_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Integration Control Response Count", integration_response_receive_count); - } - i += packet_length; - if ((integration_control.action & AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_YAW)!=0) { - this.notify_sink.yawResetComplete(); - } - } else { - /* Even though a start-of-packet indicator was found, the */ - /* current index is not the start of a packet if interest. */ - /* Scan to the beginning of the next packet, */ - boolean next_packet_start_found = false; - int x; - for ( x = 0; x < bytes_remaining; x++ ) { - if ( received_data[i + x] != IMUProtocol.PACKET_START_CHAR) { - x++; - } else { - i += x; - bytes_remaining -= x; - if ( x != 0 ) { - next_packet_start_found = true; - } - break; - } - } - boolean discard_remainder = false; - if ( !next_packet_start_found && x == bytes_remaining ) { - /* Remaining bytes don't include a start-of-packet */ - discard_remainder = true; - } - boolean partial_packet = false; - if ( discard_remainder ) { - /* Discard the remainder */ - i = bytes_remaining; - } else { - if ( !next_packet_start_found ) { - /* This occurs when packets are received that are not decoded. */ - /* Bump over this packet and prepare for the next. */ - if ( ( bytes_remaining > 2 ) && - ( received_data[i+1] == AHRSProtocol.BINARY_PACKET_INDICATOR_CHAR ) ) { - /* Binary packet received; next byte is packet length-2 */ - int pkt_len = received_data[i+2]; - pkt_len += 2; - if ( bytes_remaining >= pkt_len ) { - bytes_remaining -= pkt_len; - i += pkt_len; - discarded_bytes_count += pkt_len; - if ( debug ) { - SmartDashboard.putNumber("navX Discarded Bytes", (double)discarded_bytes_count); - } - } else { - /* This is the initial portion of a partial binary packet. */ - /* Keep this data and attempt to acquire the remainder. */ - partial_packet = true; - } - } else { - /* Ascii packet received. */ - /* Scan up to and including next end-of-packet character */ - /* sequence, or the beginning of a new packet. */ - for ( x = 0; x < bytes_remaining; x++ ) { - if ( received_data[i+x] == (byte)'\r') { - i += x+1; - bytes_remaining -= (x+1); - discarded_bytes_count += x+1; - if ( ( bytes_remaining > 0 ) && received_data[i] == (byte)'\n') { - bytes_remaining--; - i++; - discarded_bytes_count++; - } - if ( debug ) { - SmartDashboard.putNumber("navX Discarded Bytes", (double)discarded_bytes_count); - } - break; - } - /* If a new start-of-packet is found, discard */ - /* the ascii packet bytes that precede it. */ - if ( received_data[i+x] == (byte)'!') { - if ( x > 0 ) { - i += x; - bytes_remaining -= x; - discarded_bytes_count += x; - break; - } else { - /* start of packet found, but no termination */ - /* Time to get some more data, unless the bytes */ - /* remaining are larger than a valid packet size */ - if ( bytes_remaining < IMUProtocol.IMU_PROTOCOL_MAX_MESSAGE_LENGTH ) { - /* Get more data */ - partial_packet = true; - } else { - i++; - bytes_remaining--; - } - break; - } - } - } - if ( x == bytes_remaining ) { - /* Partial ascii packet - keep the remainder */ - partial_packet = true; - } - } - } - } - if ( partial_packet ) { - remainder_data = new byte[bytes_remaining]; - System.arraycopy(received_data,i,remainder_data,0,bytes_remaining); - remainder_bytes = bytes_remaining; - i = bytes_read; - } - } - } - } - } - - if ( ( packets_received == 0 ) && ( bytes_read == 256 ) ) { - // Workaround for issue found in SerialPort implementation: - // No packets received and 256 bytes received; this - // condition occurs in the SerialPort. In this case, - // reset the serial port. - serial_port.flush(); - serial_port.reset(); - port_reset_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Port Resets", (double)port_reset_count); - } - } - - boolean retransmit_stream_config = false; - if ( signal_retransmit_stream_config ) { - retransmit_stream_config = true; - signal_retransmit_stream_config = false; - } - - // If a stream configuration response has not been received within three seconds - // of operation, (re)send a stream configuration request - if ( retransmit_stream_config || - (!stream_response_received && ((Timer.getFPGATimestamp() - last_stream_command_sent_timestamp ) > 3.0 ) ) ) { - cmd_packet_length = IMUProtocol.encodeStreamCommand( stream_command, update_type, update_rate_hz ); - try { - Tracer.Trace("Retransmitting stream configuration command to navX-Sensor.\n"); - /* Ugly Hack. This is a workaround for ARTF5478: */ - /* (USB Serial Port Write hang if receive buffer not empty. */ - if (is_usb) { - if (debug) Tracer.Trace("Resetting serial port via reset().\n"); - try { - serial_port.reset(); - } catch (RuntimeException ex2) { - /* Sometimes an unclean status exception occurs during reset(). */ - ex2.printStackTrace(); - resetSerialPort(); - } - } - serial_port.write( stream_command, cmd_packet_length ); - cmd_packet_length = AHRSProtocol.encodeDataGetRequest( stream_command, AHRSProtocol.AHRS_DATA_TYPE.BOARD_IDENTITY, (byte)0 ); - serial_port.write( stream_command, cmd_packet_length ); - serial_port.flush(); - last_stream_command_sent_timestamp = Timer.getFPGATimestamp(); - } catch (RuntimeException ex2) { - ex2.printStackTrace(); - } - } - else { - // If no bytes remain in the buffer, and not awaiting a response, sleep a bit - if ( stream_response_received && ( serial_port.getBytesReceived() == 0 ) ) { - double update_rate = 1.0/((double)((int)(this.update_rate_hz & 0xFF))); - Timer.delay(update_rate); - } - } - - /* If receiving data, but no valid packets have been received in the last second */ - /* the navX MXP may have been reset, but no exception has been detected. */ - /* In this case , trigger transmission of a new stream_command, to ensure the */ - /* streaming packet type is configured correctly. */ - - if ( ( Timer.getFPGATimestamp() - last_valid_packet_time ) > 1.0 ) { - last_stream_command_sent_timestamp = 0.0; - stream_response_received = false; - } - } else { - /* No data received this time around */ - if ( Timer.getFPGATimestamp() - last_data_received_timestamp > 1.0 ) { - if (debug) Tracer.Trace("Initiating Serial Port Reset since no data was received in the last second.\n"); - resetSerialPort(); - } - } - } catch (RuntimeException ex) { - // This exception typically indicates a Timeout, but can also be a buffer overrun error. - stream_response_received = false; - timeout_count++; - if ( debug ) { - SmartDashboard.putNumber("navX Serial Port Timeout / Buffer Overrun", (double)timeout_count); - SmartDashboard.putString("navX Last Exception", ex.getMessage() + "; " + ex.toString()); - } - ex.printStackTrace(); - if (debug) Tracer.Trace("Initiating Serial Port Reset due to exception during Run() loop.\n"); - resetSerialPort(); - } - } - /* Close the serial port. */ - if (serial_port != null) { - try { - serial_port.close(); - } catch (Exception ex) { - // This has been seen to happen before.... - ex.printStackTrace(); - } - serial_port = null; - } - } - - /** - * Indicates whether the navX MXP is currently connected - * to the host computer. A connection is considered established - * whenever a value update packet has been received from the - * navX MXP within the last second. - * @return Returns true if a valid update has been received within the last second. - */ - public boolean isConnected() { - double time_since_last_update = Timer.getFPGATimestamp() - this.last_valid_packet_time; - return time_since_last_update <= 1.0; - } - - /** - * Returns the count in bytes of data received from the - * navX MXP. This could can be useful for diagnosing - * connectivity issues. - * - * If the byte count is increasing, but the update count - * (see getUpdateCount()) is not, this indicates a software - * misconfiguration. - * @return The number of bytes received from the navX MXP. - */ - public double getByteCount() { - return byte_count; - } - - /** - * Returns the count of valid update packets which have - * been received from the navX MXP. This count should increase - * at the same rate indicated by the configured update rate. - * @return The number of valid updates received from the navX MXP. - */ - public double getUpdateCount() { - return update_count; - } - - @Override - public void setUpdateRateHz(byte update_rate) { - update_rate_hz = update_rate; - } - - @Override - public void zeroYaw() { - enqueueIntegrationControlMessage(AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_YAW); - } - - @Override - public void zeroDisplacement() { - enqueueIntegrationControlMessage( (byte)(AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_X | - AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_Y | - AHRSProtocol.NAVX_INTEGRATION_CTL_RESET_DISP_Z ) ); - } - - @Override - public void stop() { - stop = true; - } - - @Override - public void enableLogging(boolean enable) { - debug = enable; - } - -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/SimIO.java b/studies/AHRS100/src/main/java/frc/robot/navx/SimIO.java deleted file mode 100644 index 26db2ca..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/SimIO.java +++ /dev/null @@ -1,324 +0,0 @@ -package org.team100.lib.sensors.navx; - - -/*----------------------------------------------------------------------------*/ -/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */ -/* */ -/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */ -/* */ -/* Open Source Software - may be modified and shared by FRC teams. Any */ -/* modifications to this code must be accompanied by the \License.txt file */ -/* in the root directory of the project. */ -/*----------------------------------------------------------------------------*/ - - -import edu.wpi.first.wpilibj.Timer; -import com.kauailabs.navx.AHRSProtocol; -import com.kauailabs.navx.AHRSProtocol.AHRSPosUpdate; -import com.kauailabs.navx.IMUProtocol.GyroUpdate; -import com.kauailabs.navx.IMUProtocol; - -import edu.wpi.first.hal.SimBoolean; -import edu.wpi.first.hal.SimDevice; -import edu.wpi.first.hal.SimDouble; - -class SimIO implements IIOProvider { - - boolean stop = false; - boolean is_connected = false; - double start_seconds = 0; - IIOCompleteNotification notify_sink; - byte update_rate_hz; - - private SimDevice sim_device; - private SimBoolean simConnected; - private SimDouble simRate; - private SimDouble simYaw; - private SimDouble simPitch; - private SimDouble simRoll; - private SimDouble simCompassHeading; - private SimDouble simFusedHeading; - private SimDouble simLinearWorldAccelX; - private SimDouble simLinearWorldAccelY; - private SimDouble simLinearWorldAccelZ; - - float last_yaw; - float last_linear_world_accel_x; - float last_linear_world_accel_y; - - AHRSProtocol.BoardID board_id; - IIOCompleteNotification.BoardState board_state; - AHRSPosUpdate ahrs_update; - GyroUpdate raw_data_update; - - public SimIO(byte update_rate_hz, IIOCompleteNotification notify_sink, SimDevice sim_device) { - this.notify_sink = notify_sink; - this.update_rate_hz = update_rate_hz; - this.sim_device = sim_device; - if (sim_device != null) { - - // Booleans - - simConnected = sim_device.createBoolean("Connected", SimDevice.Direction.kInput, true); - - // Doubles - - simRate = sim_device.createDouble("Rate", SimDevice.Direction.kInput, 0.0f); - simYaw = sim_device.createDouble("Yaw", SimDevice.Direction.kInput, 0.0f); - simPitch = sim_device.createDouble("Pitch", SimDevice.Direction.kInput, 0.0f); - simRoll = sim_device.createDouble("Roll", SimDevice.Direction.kInput, 0.0f); - - simCompassHeading = sim_device.createDouble("CompassHeading", SimDevice.Direction.kInput, 0.0f); - simFusedHeading = sim_device.createDouble("FusedHeading", SimDevice.Direction.kInput, 0.0f); - - simLinearWorldAccelX = sim_device.createDouble("LinearWorldAccelX", SimDevice.Direction.kInput, 0.0f); - simLinearWorldAccelY = sim_device.createDouble("LinearWorldAccelY", SimDevice.Direction.kInput, 0.0f); - simLinearWorldAccelZ = sim_device.createDouble("LinearWorldAccelZ", SimDevice.Direction.kInput, 0.0f); - - Tracer.Trace("navX-Sensor SimDevice created."); - } - - ///////////////////////// - // BoardID initialization - ///////////////////////// - - board_id = new AHRSProtocol.BoardID(); - board_id.fw_ver_major = 3; - board_id.fw_ver_minor = 1; - board_id.fw_revision = 400; - board_id.type = 33; // navx-MXP type id - - ///////////////////////// - // BoardState initialization - ///////////////////////// - - board_state = new IIOCompleteNotification.BoardState(); - board_state.selftest_status = - AHRSProtocol.NAVX_SELFTEST_STATUS_COMPLETE | - AHRSProtocol.NAVX_SELFTEST_RESULT_GYRO_PASSED | - AHRSProtocol.NAVX_SELFTEST_RESULT_ACCEL_PASSED | - AHRSProtocol.NAVX_SELFTEST_RESULT_MAG_PASSED; // BARO Passed is NOT set - board_state.sensor_status = - //AHRSProtocol.NAVX_SENSOR_STATUS_MOVING | // NOTE: Updated by Sim Variable - AHRSProtocol.NAVX_SENSOR_STATUS_YAW_STABLE | - //AHRSProtocol.NAVX_SENSOR_STATUS_MAG_DISTURBANCE | // NOTE: Always false - //AHRSProtocol.NAVX_SENSOR_STATUS_ALTITUDE_VALID | // NOTE: Always false - //AHRSProtocol.NAVX_SENSOR_STATUS_SEALEVEL_PRESS_SET | // NOTE: Always false - AHRSProtocol.NAVX_SENSOR_STATUS_FUSED_HEADING_VALID; - board_state.op_status = - AHRSProtocol.NAVX_OP_STATUS_NORMAL; - board_state.cal_status = - IMUProtocol.NAV6_CALIBRATION_STATE_COMPLETE; - board_state.capability_flags = - // Note: Configure capabilities to NOT include VEL_AND_DISP, - // this forces the internal InertialDataIntegrator to be used. - //AHRSProtocol.NAVX_CAPABILITY_FLAG_VEL_AND_DISP | - AHRSProtocol.NAVX_CAPABILITY_FLAG_OMNIMOUNT | - AHRSProtocol.NAVX_CAPABILITY_FLAG_AHRSPOS_TS | - // Note: Configure capabilities to NOT include HW-based YAW RESET; - // This causes software-based yaw reset to be used - //AHRSProtocol.NAVX_CAPABILITY_FLAG_YAW_RESET | - AHRSProtocol.OMNIMOUNT_DEFAULT; - board_state.accel_fsr_g = 2; - board_state.gyro_fsr_dps = 2000; - board_state.update_rate_hz = this.update_rate_hz; - - ///////////////////////// - // AHRSUpdate initialization - ///////////////////////// - - ahrs_update = new AHRSPosUpdate(); - - ahrs_update.mpu_temp = 35.0f; - - // Set Quaternion values to default (identity) - ahrs_update.quat_w = 0.0f; - ahrs_update.quat_x = 0.0f; - ahrs_update.quat_y = 0.0f; - ahrs_update.quat_z = 1.0f; - - ahrs_update.vel_x = 0.0f; - ahrs_update.vel_y = 0.0f; - ahrs_update.vel_z = 0.0f; - - ahrs_update.disp_x = 0.0f; - ahrs_update.disp_y = 0.0f; - ahrs_update.disp_z = 0.0f; - - ahrs_update.altitude = 50.0f; // Average surface altitude, planet earth - ahrs_update.barometric_pressure = 1013.25f; // Nominal pressure at earth's surface - - // Synchronize AHRS Update and Board State values - - ahrs_update.cal_status = board_state.cal_status; - ahrs_update.op_status = board_state.op_status; - ahrs_update.selftest_status = board_state.selftest_status; - ahrs_update.sensor_status = (byte)board_state.sensor_status; - - // The following values are updated by Sim Variables later; set to reasonable defaults now - - ahrs_update.linear_accel_x = 0.0f; - ahrs_update.linear_accel_y = 0.0f; - ahrs_update.linear_accel_z = 0.0f; - ahrs_update.yaw = 0.0f; - ahrs_update.pitch = 0.0f; - ahrs_update.roll = 0.0f; - ahrs_update.compass_heading = 0.0f; - ahrs_update.fused_heading = 0.0f; - - // RawUpdate initialization - raw_data_update = new GyroUpdate(); - - raw_data_update.mag_x = 40; - raw_data_update.mag_y = 40; - raw_data_update.mag_z = 40; - - // Set simulated raw accel/gyro values to values representing noise - raw_data_update.accel_x = 50; - raw_data_update.accel_y = 50; - raw_data_update.accel_z = 50; - - raw_data_update.gyro_x = 50; - raw_data_update.gyro_y = 50; - raw_data_update.gyro_z = 50; - - // State history initialization - last_yaw = 0; - last_linear_world_accel_x = 0; - last_linear_world_accel_y = 0; - } - - private final int sim_bytes_per_second = 1000; - - public void stop() { - stop = true; - } - - public void run() { - /* IO Loop */ - // Simulate startup delay - Timer.delay(0.05); - - // Default to connected state - is_connected = true; - notify_sink.connectDetected(); - - long sensor_timestamp = 2000; // NOTE: Simulate a 2-second navX-sensor firmware startup delay - - // Update all static values - notify_sink.setBoardID(board_id); - notify_sink.setRawData(raw_data_update, sensor_timestamp); - - // Update AHRS data (portions of which are static; others are updated from sim variables) - notify_sink.setAHRSPosData(ahrs_update, sensor_timestamp); - - start_seconds = Timer.getFPGATimestamp(); - - while (!stop) { - Timer.delay(0.02f); - sensor_timestamp += 20; - UpdatePeriodicFromSimVariables(sensor_timestamp); - } - } - - private float CalculateNormal(float in1, float in2) { - return (float)Math.abs(Math.sqrt(Math.abs(in1*in1)+Math.abs(in2*in2))); - } - - private void UpdatePeriodicFromSimVariables(long sensor_timestamp) { - - if (sim_device == null) return; - - boolean curr_is_connected = simConnected.get(); - - // Update connection state - if (curr_is_connected != is_connected) { - is_connected = curr_is_connected; - if (curr_is_connected) { - notify_sink.connectDetected(); - } else { - notify_sink.disconnectDetected(); - } - } - - if (curr_is_connected) { - ahrs_update.yaw = (float)simYaw.get(); - ahrs_update.pitch = (float)simPitch.get(); - ahrs_update.roll = (float)simRoll.get(); - ahrs_update.compass_heading = (float)simCompassHeading.get(); - ahrs_update.fused_heading = (float)simFusedHeading.get(); - ahrs_update.linear_accel_x = (float)simLinearWorldAccelX.get(); - ahrs_update.linear_accel_y = (float)simLinearWorldAccelY.get(); - ahrs_update.linear_accel_z = (float)simLinearWorldAccelZ.get(); - - // Detect motion - float last_linear_accel_norm = CalculateNormal(last_linear_world_accel_x, last_linear_world_accel_y); - float curr_linear_accel_norm = CalculateNormal(ahrs_update.linear_accel_x, ahrs_update.linear_accel_y); - boolean curr_is_moving = (Math.abs(curr_linear_accel_norm - last_linear_accel_norm) >= 0.02); - if (curr_is_moving) { - board_state.sensor_status |= AHRSProtocol.NAVX_SENSOR_STATUS_MOVING; - } else { - board_state.sensor_status &= ~(AHRSProtocol.NAVX_SENSOR_STATUS_MOVING); - } - - // Detect rotation - boolean curr_is_rotating = Math.abs(last_yaw - ahrs_update.yaw) >= 0.05f; - if (!curr_is_rotating) { - board_state.sensor_status |= AHRSProtocol.NAVX_SENSOR_STATUS_YAW_STABLE; - } else { - board_state.sensor_status &= ~(AHRSProtocol.NAVX_SENSOR_STATUS_YAW_STABLE); - } - - ahrs_update.sensor_status = (byte)board_state.sensor_status; - - // Trigger simulated update to notification sink - notify_sink.setAHRSPosData(ahrs_update, sensor_timestamp); - - // Update cached state variables - last_yaw = ahrs_update.yaw; - last_linear_world_accel_x = ahrs_update.linear_accel_x; - last_linear_world_accel_y = ahrs_update.linear_accel_y; - } - } - - public double getRate() { - if (sim_device == null) return 0; - - return simRate.get(); - } - - @Override - public boolean isConnected() { - return is_connected; - } - - @Override - public double getByteCount() { - double num_secs_running = Timer.getFPGATimestamp() - start_seconds; - return num_secs_running * sim_bytes_per_second; - } - - @Override - public double getUpdateCount() { - double num_secs_running = Timer.getFPGATimestamp() - start_seconds; - return num_secs_running / update_rate_hz; - } - - @Override - public void setUpdateRateHz(byte update_rate_hz) { - this.update_rate_hz = update_rate_hz; - } - - @Override - public void zeroYaw() { - this.notify_sink.yawResetComplete(); - } - - @Override - public void zeroDisplacement() { - } - - @Override - public void enableLogging(boolean enable) { - } -} diff --git a/studies/AHRS100/src/main/java/frc/robot/navx/Tracer.java b/studies/AHRS100/src/main/java/frc/robot/navx/Tracer.java deleted file mode 100644 index ef3c7f0..0000000 --- a/studies/AHRS100/src/main/java/frc/robot/navx/Tracer.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.team100.lib.sensors.navx; - -import edu.wpi.first.wpilibj.Timer; - -public class Tracer -{ - static String lastMsg = new String(); - static double lastMsgTimestamp = 0.0; - - static final double minDelta = 0.5; - - public static void Trace(String format, Object... args) - { - double msgTimestamp = Timer.getFPGATimestamp(); - double delta = msgTimestamp - lastMsgTimestamp; - String msg = String.format(format, args); - if ((lastMsg.compareTo(msg) != 0) || - (delta >= minDelta)) { - System.out.printf(format, args); - lastMsg = msg; - lastMsgTimestamp = msgTimestamp; - } - } -}; diff --git a/studies/AHRS100/vendordeps/WPILibNewCommands.json b/studies/AHRS100/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/AHRS100/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Armproject2-Imported/.gitignore b/studies/Armproject2-Imported/.gitignore deleted file mode 100644 index 5528d4f..0000000 --- a/studies/Armproject2-Imported/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/Armproject2-Imported/.vscode/launch.json b/studies/Armproject2-Imported/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Armproject2-Imported/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Armproject2-Imported/.vscode/settings.json b/studies/Armproject2-Imported/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Armproject2-Imported/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Armproject2-Imported/.wpilib/wpilib_preferences.json b/studies/Armproject2-Imported/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/Armproject2-Imported/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/Armproject2-Imported/WPILib-License.md b/studies/Armproject2-Imported/WPILib-License.md deleted file mode 100644 index 645e542..0000000 --- a/studies/Armproject2-Imported/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2024 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Armproject2-Imported/build.gradle b/studies/Armproject2-Imported/build.gradle deleted file mode 100644 index b63c234..0000000 --- a/studies/Armproject2-Imported/build.gradle +++ /dev/null @@ -1,101 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.1" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.jar b/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.properties b/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5e82d67..0000000 --- a/studies/Armproject2-Imported/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Armproject2-Imported/gradlew b/studies/Armproject2-Imported/gradlew deleted file mode 100644 index 1aa94a4..0000000 --- a/studies/Armproject2-Imported/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Armproject2-Imported/src/main/deploy/example.txt b/studies/Armproject2-Imported/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Armproject2-Imported/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/ArmAngles.java b/studies/Armproject2-Imported/src/main/java/frc/robot/ArmAngles.java deleted file mode 100644 index 5c6214d..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/ArmAngles.java +++ /dev/null @@ -1,27 +0,0 @@ -package frc.robot; - -/** - * Represents a 2DOF serial arm. - */ -public class ArmAngles { - /** absolute proximal radians */ - public final double th1; - /** absolute distal radians */ - public final double th2; - - /** - * Absolute angles in radians, counting out from the grounded joint. - * - * @param th1 proximal - * @param th2 distal - */ - public ArmAngles(double th1, double th2) { - this.th1 = th1; - this.th2 = th2; - } - - @Override - public String toString() { - return "ArmAngles [th1=" + th1 + ", th2=" + th2 + "]"; - } -} \ No newline at end of file diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/ArmKinematics.java b/studies/Armproject2-Imported/src/main/java/frc/robot/ArmKinematics.java deleted file mode 100644 index 9a50bbd..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/ArmKinematics.java +++ /dev/null @@ -1,95 +0,0 @@ -package frc.robot; - -import edu.wpi.first.math.geometry.Translation2d; - -/** - * Kinematics for two-jointed planar arm. - */ -public class ArmKinematics { - private final double l1; - private final double l2; - - /** - * Lengths counting out from the grounded joint. Units here determine units - * below. - * - * @param l1 proximal - * @param l2 distal - */ - public ArmKinematics(double l1, double l2) { - this.l1 = l1; - this.l2 = l2; - } - - /** - * Calculates the position of the arm based on absolute joint angles, counting - * out from the grounded joint. - * - * @param a absolute angles - * @return end position - */ - public Translation2d forward(ArmAngles a) { - return new Translation2d( - l1 * Math.cos(a.th1) + l2 * Math.cos(a.th2), - l1 * Math.sin(a.th1) + l2 * Math.sin(a.th2)); - } - - /** - * Calculates the position of the elbow only, for visualization. - */ - public Translation2d elbow(ArmAngles a) { - return new Translation2d(l1 * Math.cos(a.th1), l1 * Math.sin(a.th1)); - } - - /** - * Calculate absolute joint angles given cartesian coords of the end. - * - * It's an application of the law of cosines. For diagram, see this doc: - * https://docs.google.com/document/d/135U309CXN29X3Oube1N1DaXPHlo6r-YdnPHMH8NBev8/edit - * - * @param t cartesian coordinate - * @return absolute joint angles, null if unreachable. - */ - public ArmAngles inverse(Translation2d t) { - double r = Math.sqrt(t.getX() * t.getX() + t.getY() * t.getY()); - double gamma = Math.atan2(t.getY(), t.getX()); - double beta = Math.acos((r * r + l1 * l1 - l2 * l2) / (2 * r * l1)); - double alpha = Math.acos((l1 * l1 + l2 * l2 - r * r) / (2 * l1 * l2)); - double th1 = gamma - beta; - double th2 = Math.PI + th1 - alpha; - if (Double.isNaN(th1) || Double.isNaN(th2)) - return null; - return new ArmAngles(th1, th2); - } - - /** - * Calculate joint velocities given arm state and cartesian velocity - * @param pos joint positions - * @param vel cartesian velocity - * @return joint velocities, rad/s - */ - public ArmAngles inverseVel(ArmAngles pos, Translation2d vel) { - if (pos == null) { - return new ArmAngles(0, 0); - } - double dx = vel.getX(); - double dy = vel.getY(); - if (Math.abs(dx) < 0.001 && Math.abs(dy) < 0.001) - return new ArmAngles(0, 0); - - if (Math.abs(pos.th1 - pos.th2) < 0.001) { - // when th1 and th2 are the same, the arm is straight. - // in that case, any movement along the arm requires infinite joint velocity - return new ArmAngles(0, 0); - } - - double dth1 = (dx * Math.cos(pos.th2) + dy * Math.sin(pos.th2)) - / (l1 * Math.sin(pos.th2 - pos.th1)); - - double dth2 = (dx * Math.cos(pos.th1) + dy * Math.sin(pos.th1)) - / (l2 * Math.sin(pos.th1 - pos.th2)); - - return new ArmAngles(dth1, dth2); - } - -} \ No newline at end of file diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/Constants.java b/studies/Armproject2-Imported/src/main/java/frc/robot/Constants.java deleted file mode 100644 index fd91c76..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/Constants.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -/** - * The Constants class provides a convenient place for teams to hold robot-wide numerical or boolean - * constants. This class should not be used for any other purpose. All constants should be declared - * globally (i.e. public static). Do not put anything functional in this class. - * - *

It is advised to statically import this class (or one of its inner classes) wherever the - * constants are needed, to reduce verbosity. - */ -public final class Constants { - public static class OperatorConstants { - public static final int kDriverControllerPort = 0; - public static final int nDriverControllerPort = 1; - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/Main.java b/studies/Armproject2-Imported/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/Robot.java b/studies/Armproject2-Imported/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 07df170..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -/** - * The VM is configured to automatically run this class, and to call the functions corresponding to - * each mode, as described in the TimedRobot documentation. If you change the name of this class or - * the package after creating this project, you must also update the build.gradle file in the - * project. - */ -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - /** - * This function is run when the robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - m_robotContainer = new RobotContainer(); - } - - /** - * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics - * that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before LiveWindow and - * SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() { - m_robotContainer.robotPeriodic(); - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** This function is called once each time the robot enters Disabled mode. */ - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() { - } - - /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - /** This function is called periodically during autonomous. */ - @Override - public void autonomousPeriodic() {} - - @Override - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - /** This function is called periodically during operator control. */ - @Override - public void teleopPeriodic() {} - - @Override - public void testInit() { - // Cancels all running commands at the start of test mode. - CommandScheduler.getInstance().cancelAll(); - } - - /** This function is called periodically during test mode. */ - @Override - public void testPeriodic() {} - - /** This function is called once when the robot is first started up. */ - @Override - public void simulationInit() {} - - /** This function is called periodically whilst in simulation. */ - @Override - public void simulationPeriodic() {} -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/RobotContainer.java b/studies/Armproject2-Imported/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index 6e5ad87..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import frc.robot.Constants.OperatorConstants; -import frc.robot.commands.Autos; -import frc.robot.commands.ExampleCommand; -import frc.robot.subsystems.ExampleSubsystem; -import frc.robot.subsystems.Servos; -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; -import edu.wpi.first.wpilibj2.command.button.Trigger; - -/** - * This class is where the bulk of the robot should be declared. Since Command-based is a - * "declarative" paradigm, very little robot logic should actually be handled in the {@link Robot} - * periodic methods (other than the scheduler calls). Instead, the structure of the robot (including - * subsystems, commands, and trigger mappings) should be declared here. - */ -public class RobotContainer { - // The robot's subsystems and commands are defined here... - private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem(); - - // Replace with CommandPS4Controller or CommandJoystick if needed - private final CommandXboxController m_driverController = - new CommandXboxController(OperatorConstants.kDriverControllerPort); - - /** The container for the robot. Contains subsystems, OI devices, and commands. */ - public RobotContainer() { - // Configure the trigger bindings - configureBindings(); - } - public void robotPeriodic() { - // System.out.println("Lower arm" + m_exampleSubsystem.getEncoder(Servos.LOWER_ARM)); - // System.out.println("Upper arm" + m_exampleSubsystem.getEncoder(Servos.UPPER_ARM)); - } - private final CommandXboxController m_operatorController = - new CommandXboxController(OperatorConstants.nDriverControllerPort); - /** - * Use this method to define your trigger->command mappings. Triggers can be created via the - * {@link Trigger#Trigger(java.util.function.BooleanSupplier)} constructor with an arbitrary - * predicate, or via the named factories in {@link - * edu.wpi.first.wpilibj2.command.button.CommandGenericHID}'s subclasses for {@link - * CommandXboxController Xbox}/{@link edu.wpi.first.wpilibj2.command.button.CommandPS4Controller - * PS4} controllers or {@link edu.wpi.first.wpilibj2.command.button.CommandJoystick Flight - * joysticks}. - */ - private void configureBindings() { - // Schedule `ExampleCommand` when `exampleCondition` changes to `true` - new Trigger(m_exampleSubsystem::exampleCondition) - .onTrue(new ExampleCommand(m_exampleSubsystem)); - - // Schedule `exampleMethodCommand` when the Xbox controller's B button is pressed, - // cancelling on release. - m_driverController.rightTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(0.01)); - m_driverController.leftTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(-0.01)); - m_driverController.a().whileTrue(m_exampleSubsystem.MyMethodCommand(-0.01)); - m_driverController.y().whileTrue(m_exampleSubsystem.YourMethodCommand(0.01)); - m_driverController.b().whileTrue(m_exampleSubsystem.YourMethodCommand(-0.01)); - m_driverController.rightBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(0.01)); - m_driverController.leftBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(-0.01)); - m_driverController.povRight().whileTrue(m_exampleSubsystem.HerMethodCommand(0.01)); - m_driverController.povLeft().whileTrue(m_exampleSubsystem.HerMethodCommand(-0.01)); - m_operatorController.a().whileTrue(m_exampleSubsystem.TheirMethodCommand(0.01)); - m_operatorController.b().whileTrue(m_exampleSubsystem.TheirMethodCommand(-0.01)); - m_operatorController.rightTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(0.01)); - m_operatorController.leftTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(-0.01)); - m_operatorController.back().whileTrue(m_exampleSubsystem.HerMethodCommand(0.01)); - m_operatorController.start().whileTrue(m_exampleSubsystem.HerMethodCommand(-0.01)); - m_operatorController.rightBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(0.01)); - m_operatorController.leftBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(-0.01)); - m_operatorController.povDown().whileTrue(m_exampleSubsystem.BestMethodCommand()); - m_driverController.x().whileTrue(m_exampleSubsystem.setCartesian(new Translation2d(-0.1,0.1))); - } - - /** - * Use this to pass the autonomous command to the main {@link Robot} class. - * - * @return the command to run in autonomous - */ - public Command getAutonomousCommand() { - // An example command will be run in autonomous - return Autos.exampleAuto(m_exampleSubsystem); - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/commands/Autos.java b/studies/Armproject2-Imported/src/main/java/frc/robot/commands/Autos.java deleted file mode 100644 index f74b35d..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/commands/Autos.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public final class Autos { - /** Example static factory for an autonomous command. */ - public static Command exampleAuto(ExampleSubsystem subsystem) { - return Commands.sequence(subsystem.exampleMethodCommand(0.25), new ExampleCommand(subsystem)); - } - - private Autos() { - throw new UnsupportedOperationException("This is a utility class!"); - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/commands/ExampleCommand.java b/studies/Armproject2-Imported/src/main/java/frc/robot/commands/ExampleCommand.java deleted file mode 100644 index 7481d3c..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/commands/ExampleCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.Command; - -/** An example command that uses an example subsystem. */ -public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) - private final ExampleSubsystem m_subsystem; - - /** - * Creates a new ExampleCommand. - * - * @param subsystem The subsystem used by this command. - */ - public ExampleCommand(ExampleSubsystem subsystem) { - m_subsystem = subsystem; - // Use addRequirements() here to declare subsystem dependencies. - addRequirements(subsystem); - } - - // Called when the command is initially scheduled. - @Override - public void initialize() {} - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() {} - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) {} - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/ExampleSubsystem.java b/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/ExampleSubsystem.java deleted file mode 100644 index 9014b70..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/ExampleSubsystem.java +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import edu.wpi.first.math.MathUtil; -import edu.wpi.first.math.geometry.Translation2d; -import edu.wpi.first.wpilibj.Servo; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; -import frc.robot.ArmAngles; -import frc.robot.ArmKinematics; - -public class ExampleSubsystem extends SubsystemBase { - private final Servo m_servo; - private final Servo m_upperArm; - private final Servo m_lowerArm; - private final Servo m_upper_wrist; - private final Servo m_claw; - private final Servo m_lower_wrist; - private final ArmKinematics m_kinematics; - /** Creates a new ExampleSubsystem. */ - public ExampleSubsystem() { - m_servo = new Servo(3); - m_upperArm = new Servo(5); - m_lowerArm = new Servo(2); - m_upper_wrist = new Servo(1); - m_claw = new Servo(0); - m_lower_wrist = new Servo(4); - m_kinematics = new ArmKinematics(0.18, 0.25); - } - - /** - * Example command factory method. - * - * @return a command - */ - public Command exampleMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_servo.set(m_servo.get()+value); - /* one-time action goes here */ - }); - } - public Command MyMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_upperArm.set(m_upperArm.get()+value); - /* one-time action goes here */ - }); - } - public Command YourMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_lowerArm.set(m_lowerArm.get()+value); - /* one-time action goes here */ - }); - } - public Command HisMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_upper_wrist.set(m_upper_wrist.get()+value); - /* one-time action goes here */ - }); - } - public Command HerMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_claw.set(m_claw.get()+value); - /* one-time action goes here */ - }); - } - public Command TheirMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_upperArm.set(m_upperArm.get()+value); - m_lowerArm.set(m_lowerArm.get()+value); - /* one-time action goes here */ - }); - } - public Command BestMethodCommand() { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_upperArm.set(0.7); - m_lowerArm.set(0.8); - /* one-time action goes here */ - }); - } - public double getEncoder(Servos servos) { - switch (servos) { - case TURRET: - return m_servo.get(); - - case LOWER_ARM: - return m_lowerArm.get(); - - case UPPER_ARM: - return m_upperArm.get(); - - case LOWER_WRIST: - return m_lower_wrist.get(); - - case UPPER_WRIST: - return m_upper_wrist.get(); - - case CLAW: - return m_claw.get(); - - default: - throw new UnsupportedOperationException("This servo does not exist"); - - } - } - /** - * An example method querying a boolean state of the subsystem (for example, a digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - public Command setCartesian(Translation2d point) { - ArmAngles angles = m_kinematics.inverse(point); - double angle1 = angles.th1; - double angle2 = angles.th2; - if (angles.th1 < (Math.PI / 4)) { - angle1 = Math.abs(angles.th1) + (Math.PI / 2); - } - if (angles.th2 < (Math.PI / 4)) { - angle2 = Math.abs(angles.th2) - (Math.PI / 2); - } - double theta2 = angle2 - angle1; - if (theta2 > 0) { - angle2 = Math.PI - angles.th2; - angle1 = Math.PI - angles.th1; - theta2 = angle2 - angle1; - } - double lowerServoTheta = (9*(angles.th1 + Math.PI/2) / (10*Math.PI)) + 0.05; - double upperServoTheta = (-1*newtheta / Math.PI) + 0.03; - return run( - () -> { - System.out.println(angles); - System.out.println(upperServoTheta); - // System.out.println("Theta 2: " + th2); - // System.out.println("Theta 1: " + th1); - System.out.println("New Theta: " + newtheta); - System.out.println("Angle 1: " + angles.th1); - System.out.println("Angle 2: " + angles.th2); - m_upperArm.set(upperServoTheta); - m_lowerArm.set(lowerServoTheta); - /* one-time action goes here */ - }); - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - m_servo.set(0.5); - x_servo.set(0.5); - y_servo.set(0.5); - wrist_servo.set(0.5); - claw_servo.set(0.5); - last_servo.set(0.5); - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/Servos.java b/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/Servos.java deleted file mode 100644 index ecc2c29..0000000 --- a/studies/Armproject2-Imported/src/main/java/frc/robot/subsystems/Servos.java +++ /dev/null @@ -1,5 +0,0 @@ -package frc.robot.subsystems; - -public enum Servos { - TURRET(), LOWER_ARM(), UPPER_ARM(), LOWER_WRIST(), UPPER_WRIST(), CLAW() -} diff --git a/studies/Armproject2-Imported/src/test/tests.java b/studies/Armproject2-Imported/src/test/tests.java deleted file mode 100644 index ce7de66..0000000 --- a/studies/Armproject2-Imported/src/test/tests.java +++ /dev/null @@ -1,3 +0,0 @@ -public class tests { - -} diff --git a/studies/Armproject2-Imported/vendordeps/WPILibNewCommands.json b/studies/Armproject2-Imported/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/Armproject2-Imported/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Armproject2/.gitignore b/studies/Armproject2/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/Armproject2/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/Armproject2/.vscode/launch.json b/studies/Armproject2/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Armproject2/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Armproject2/.vscode/settings.json b/studies/Armproject2/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Armproject2/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Armproject2/.wpilib/wpilib_preferences.json b/studies/Armproject2/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/Armproject2/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/Armproject2/WPILib-License.md b/studies/Armproject2/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/Armproject2/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Armproject2/build.gradle b/studies/Armproject2/build.gradle deleted file mode 100644 index b3109ac..0000000 --- a/studies/Armproject2/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/Armproject2/gradle/wrapper/gradle-wrapper.jar b/studies/Armproject2/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/Armproject2/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Armproject2/gradle/wrapper/gradle-wrapper.properties b/studies/Armproject2/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/Armproject2/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Armproject2/gradlew b/studies/Armproject2/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/Armproject2/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Armproject2/gradlew.bat b/studies/Armproject2/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/Armproject2/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/Armproject2/settings.gradle b/studies/Armproject2/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/Armproject2/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/Armproject2/src/main/deploy/example.txt b/studies/Armproject2/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Armproject2/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Armproject2/src/main/java/frc/robot/Constants.java b/studies/Armproject2/src/main/java/frc/robot/Constants.java deleted file mode 100644 index fd91c76..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/Constants.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -/** - * The Constants class provides a convenient place for teams to hold robot-wide numerical or boolean - * constants. This class should not be used for any other purpose. All constants should be declared - * globally (i.e. public static). Do not put anything functional in this class. - * - *

It is advised to statically import this class (or one of its inner classes) wherever the - * constants are needed, to reduce verbosity. - */ -public final class Constants { - public static class OperatorConstants { - public static final int kDriverControllerPort = 0; - public static final int nDriverControllerPort = 1; - } -} diff --git a/studies/Armproject2/src/main/java/frc/robot/Main.java b/studies/Armproject2/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Armproject2/src/main/java/frc/robot/Robot.java b/studies/Armproject2/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 687a0a0..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -/** - * The VM is configured to automatically run this class, and to call the functions corresponding to - * each mode, as described in the TimedRobot documentation. If you change the name of this class or - * the package after creating this project, you must also update the build.gradle file in the - * project. - */ -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - /** - * This function is run when the robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - m_robotContainer = new RobotContainer(); - } - - /** - * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics - * that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before LiveWindow and - * SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() { - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** This function is called once each time the robot enters Disabled mode. */ - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - /** This function is called periodically during autonomous. */ - @Override - public void autonomousPeriodic() {} - - @Override - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - /** This function is called periodically during operator control. */ - @Override - public void teleopPeriodic() {} - - @Override - public void testInit() { - // Cancels all running commands at the start of test mode. - CommandScheduler.getInstance().cancelAll(); - } - - /** This function is called periodically during test mode. */ - @Override - public void testPeriodic() {} - - /** This function is called once when the robot is first started up. */ - @Override - public void simulationInit() {} - - /** This function is called periodically whilst in simulation. */ - @Override - public void simulationPeriodic() {} -} diff --git a/studies/Armproject2/src/main/java/frc/robot/RobotContainer.java b/studies/Armproject2/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index bcb0b01..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import frc.robot.Constants.OperatorConstants; -import frc.robot.commands.Autos; -import frc.robot.commands.ExampleCommand; -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; -import edu.wpi.first.wpilibj2.command.button.Trigger; - -/** - * This class is where the bulk of the robot should be declared. Since Command-based is a - * "declarative" paradigm, very little robot logic should actually be handled in the {@link Robot} - * periodic methods (other than the scheduler calls). Instead, the structure of the robot (including - * subsystems, commands, and trigger mappings) should be declared here. - */ -public class RobotContainer { - // The robot's subsystems and commands are defined here... - private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem(); - - // Replace with CommandPS4Controller or CommandJoystick if needed - private final CommandXboxController m_driverController = - new CommandXboxController(OperatorConstants.kDriverControllerPort); - - /** The container for the robot. Contains subsystems, OI devices, and commands. */ - public RobotContainer() { - // Configure the trigger bindings - configureBindings(); - } - private final CommandXboxController n_driverController = - new CommandXboxController(OperatorConstants.nDriverControllerPort); - - /** - * Use this method to define your trigger->command mappings. Triggers can be created via the - * {@link Trigger#Trigger(java.util.function.BooleanSupplier)} constructor with an arbitrary - * predicate, or via the named factories in {@link - * edu.wpi.first.wpilibj2.command.button.CommandGenericHID}'s subclasses for {@link - * CommandXboxController Xbox}/{@link edu.wpi.first.wpilibj2.command.button.CommandPS4Controller - * PS4} controllers or {@link edu.wpi.first.wpilibj2.command.button.CommandJoystick Flight - * joysticks}. - */ - private void configureBindings() { - // Schedule `ExampleCommand` when `exampleCondition` changes to `true` - new Trigger(m_exampleSubsystem::exampleCondition) - .onTrue(new ExampleCommand(m_exampleSubsystem)); - - // Schedule `exampleMethodCommand` when the Xbox controller's B button is pressed, - // cancelling on release. - m_driverController.rightTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(0.01)); - m_driverController.leftTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(-0.01)); - m_driverController.x().whileTrue(m_exampleSubsystem.MyMethodCommand(0.01)); - m_driverController.a().whileTrue(m_exampleSubsystem.MyMethodCommand(-0.01)); - m_driverController.y().whileTrue(m_exampleSubsystem.YourMethodCommand(0.01)); - m_driverController.b().whileTrue(m_exampleSubsystem.YourMethodCommand(-0.01)); - m_driverController.rightBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(0.01)); - m_driverController.leftBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(-0.01)); - m_driverController.povRight().whileTrue(m_exampleSubsystem.HerMethodCommand(0.01)); - m_driverController.povLeft().whileTrue(m_exampleSubsystem.HerMethodCommand(-0.01)); - n_driverController.a().whileTrue(m_exampleSubsystem.TheirMethodCommand(0.01)); - n_driverController.b().whileTrue(m_exampleSubsystem.TheirMethodCommand(-0.01)); - n_driverController.rightTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(0.01)); - n_driverController.leftTrigger().whileTrue(m_exampleSubsystem.exampleMethodCommand(-0.01)); - n_driverController.back().whileTrue(m_exampleSubsystem.HerMethodCommand(0.01)); - n_driverController.start().whileTrue(m_exampleSubsystem.HerMethodCommand(-0.01)); - n_driverController.rightBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(0.01)); - n_driverController.leftBumper().whileTrue(m_exampleSubsystem.HisMethodCommand(-0.01)); - n_driverController.povDown().whileTrue(m_exampleSubsystem.BestMethodCommand()); - } - - /** - * Use this to pass the autonomous command to the main {@link Robot} class. - * - * @return the command to run in autonomous - */ - public Command getAutonomousCommand() { - // An example command will be run in autonomous - return Autos.exampleAuto(m_exampleSubsystem); - } -} diff --git a/studies/Armproject2/src/main/java/frc/robot/commands/Autos.java b/studies/Armproject2/src/main/java/frc/robot/commands/Autos.java deleted file mode 100644 index e337ab9..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/commands/Autos.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.CommandBase; -import edu.wpi.first.wpilibj2.command.Commands; - -public final class Autos { - /** Example static factory for an autonomous command. */ - public static CommandBase exampleAuto(ExampleSubsystem subsystem) { - return Commands.sequence(subsystem.exampleMethodCommand(0.25), new ExampleCommand(subsystem)); - } - - private Autos() { - throw new UnsupportedOperationException("This is a utility class!"); - } -} diff --git a/studies/Armproject2/src/main/java/frc/robot/commands/ExampleCommand.java b/studies/Armproject2/src/main/java/frc/robot/commands/ExampleCommand.java deleted file mode 100644 index abd6a0e..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/commands/ExampleCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.CommandBase; - -/** An example command that uses an example subsystem. */ -public class ExampleCommand extends CommandBase { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) - private final ExampleSubsystem m_subsystem; - - /** - * Creates a new ExampleCommand. - * - * @param subsystem The subsystem used by this command. - */ - public ExampleCommand(ExampleSubsystem subsystem) { - m_subsystem = subsystem; - // Use addRequirements() here to declare subsystem dependencies. - addRequirements(subsystem); - } - - // Called when the command is initially scheduled. - @Override - public void initialize() {} - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() {} - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) {} - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/studies/Armproject2/src/main/java/frc/robot/subsystems/ExampleSubsystem.java b/studies/Armproject2/src/main/java/frc/robot/subsystems/ExampleSubsystem.java deleted file mode 100644 index cc05cff..0000000 --- a/studies/Armproject2/src/main/java/frc/robot/subsystems/ExampleSubsystem.java +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import edu.wpi.first.wpilibj.Servo; -import edu.wpi.first.wpilibj2.command.CommandBase; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class ExampleSubsystem extends SubsystemBase { - private final Servo m_servo; - private final Servo x_servo; - private final Servo y_servo; - private final Servo wrist_servo; - private final Servo claw_servo; - /** Creates a new ExampleSubsystem. */ - public ExampleSubsystem() { - m_servo = new Servo(9); - x_servo = new Servo(8); - y_servo = new Servo(7); - wrist_servo = new Servo(5); - claw_servo = new Servo(6); - } - - /** - * Example command factory method. - * - * @return a command - */ - public CommandBase exampleMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - m_servo.set(m_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase MyMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - x_servo.set(x_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase YourMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - y_servo.set(y_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase HisMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - wrist_servo.set(wrist_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase HerMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - claw_servo.set(claw_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase TheirMethodCommand(double value) { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - x_servo.set(x_servo.get()+value); - y_servo.set(y_servo.get()+value); - /* one-time action goes here */ - }); - } - public CommandBase BestMethodCommand() { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return run( - () -> { - x_servo.set(0.7); - y_servo.set(0.8); - /* one-time action goes here */ - }); - } - - /** - * An example method querying a boolean state of the subsystem (for example, a digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/Armproject2/vendordeps/WPILibNewCommands.json b/studies/Armproject2/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/Armproject2/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Elevator2018/.Glass/glass.json b/studies/Elevator2018/.Glass/glass.json deleted file mode 100644 index 4c046ae..0000000 --- a/studies/Elevator2018/.Glass/glass.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "NetworkTables": { - "Retained Values": { - "open": false - }, - "transitory": { - "SmartDashboard": { - "open": true - } - }, - "types": { - "/FMSInfo": "FMSInfo" - } - }, - "NetworkTables Settings": { - "dsClient": false, - "mode": "Client (NT4)", - "serverTeam": "100", - "visible": false - }, - "NetworkTables View": { - "visible": false - }, - "Plots": { - "Plot <0>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 178, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Input" - } - ] - } - ] - }, - "Plot <1>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 441, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Measurment" - }, - { - "color": [ - 0.8666667342185974, - 0.5176470875740051, - 0.32156863808631897, - 1.0 - ], - "id": "NT:/SmartDashboard/Setpoint" - } - ] - } - ] - }, - "Plot <2>": { - "plots": [ - { - "height": 204, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Output" - } - ] - } - ] - }, - "Plot <3>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 214, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Setpoint" - } - ] - } - ], - "window": { - "visible": false - } - }, - "Plot <4>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 127, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Velocity" - } - ] - } - ], - "window": { - "visible": false - } - }, - "Plot <5>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 186, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/FeedForward" - } - ] - } - ] - }, - "Plot <6>": { - "plots": [ - { - "axis": [ - { - "autoFit": true - } - ], - "height": 185, - "series": [ - { - "color": [ - 0.2980392277240753, - 0.44705885648727417, - 0.6901960968971252, - 1.0 - ], - "id": "NT:/SmartDashboard/Current" - } - ] - } - ] - } - } -} diff --git a/studies/Elevator2018/.gitignore b/studies/Elevator2018/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/Elevator2018/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/Elevator2018/.vscode/launch.json b/studies/Elevator2018/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Elevator2018/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Elevator2018/.vscode/settings.json b/studies/Elevator2018/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Elevator2018/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Elevator2018/WPILib-License.md b/studies/Elevator2018/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/Elevator2018/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Elevator2018/build.gradle b/studies/Elevator2018/build.gradle deleted file mode 100644 index b3109ac..0000000 --- a/studies/Elevator2018/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/Elevator2018/gradle/wrapper/gradle-wrapper.jar b/studies/Elevator2018/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/Elevator2018/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Elevator2018/gradle/wrapper/gradle-wrapper.properties b/studies/Elevator2018/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/Elevator2018/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Elevator2018/gradlew b/studies/Elevator2018/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/Elevator2018/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Elevator2018/gradlew.bat b/studies/Elevator2018/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/Elevator2018/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/Elevator2018/settings.gradle b/studies/Elevator2018/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/Elevator2018/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/Elevator2018/src/main/deploy/example.txt b/studies/Elevator2018/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Elevator2018/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Elevator2018/src/main/java/frc/robot/Main.java b/studies/Elevator2018/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/Elevator2018/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Elevator2018/src/main/java/frc/robot/Robot.java b/studies/Elevator2018/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 8b6ff2f..0000000 --- a/studies/Elevator2018/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,23 +0,0 @@ -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - m_robotContainer.periodic(); - - } - -} diff --git a/studies/Elevator2018/src/main/java/frc/robot/RobotContainer.java b/studies/Elevator2018/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index d1b91a4..0000000 --- a/studies/Elevator2018/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,29 +0,0 @@ - -package frc.robot; - -import com.revrobotics.CANSparkMax; -import com.revrobotics.CANSparkMaxLowLevel.MotorType; - -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; -import frc.robot.commands.ExampleCommand; -import frc.robot.subsystems.ExampleSubsystem; - -public class RobotContainer { - private final CANSparkMax m_motor; - private final ExampleSubsystem m_exampleSubsystem; - private final CommandXboxController m_driverController; - - public RobotContainer() { - m_driverController = new CommandXboxController(0); - m_motor = new CANSparkMax(30, MotorType.kBrushless); - m_exampleSubsystem = new ExampleSubsystem(m_motor); - m_driverController.b().whileTrue(new ExampleCommand(-16, m_exampleSubsystem, m_driverController)); - m_driverController.x().whileTrue(new ExampleCommand(0, m_exampleSubsystem, m_driverController)); - m_driverController.leftBumper().onTrue(m_exampleSubsystem.runOnce(m_exampleSubsystem::reset)); - } - public void periodic() { - double leftX = m_driverController.getLeftX() * 10; - SmartDashboard.putNumber("Input", leftX); - } -} diff --git a/studies/Elevator2018/src/main/java/frc/robot/commands/ExampleCommand.java b/studies/Elevator2018/src/main/java/frc/robot/commands/ExampleCommand.java deleted file mode 100644 index a253b58..0000000 --- a/studies/Elevator2018/src/main/java/frc/robot/commands/ExampleCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.math.controller.ProfiledPIDController; -import edu.wpi.first.math.trajectory.TrapezoidProfile.Constraints; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.CommandBase; -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; - -public class ExampleCommand extends CommandBase { - private final ExampleSubsystem m_subsystem; - private final ProfiledPIDController m_controller; - private final Constraints m_constraints; - private final CommandXboxController m_driverController; - private final double m_goal; - private double m_prevvel; - - public ExampleCommand(double goal, ExampleSubsystem subsystem, CommandXboxController driverController) { - m_subsystem = subsystem; - addRequirements(subsystem); - m_constraints = new Constraints(32, 512); - m_controller = new ProfiledPIDController(0.1, 0, 0, m_constraints); - m_driverController = driverController; - m_goal = goal; - } - - @Override - public void initialize() { - //System.out.println("asdfasfa"); - m_controller.reset(m_subsystem.get()); - } - - @Override - public void execute() { - //double leftX = m_driverController.getLeftX() * 16; - double leftX = m_goal; - double output = m_controller.calculate(m_subsystem.get(), leftX); - double velocity = m_controller.getSetpoint().velocity; - double accel = (velocity - m_prevvel) / 0.02; - m_prevvel = velocity; - double feedforward = 0.05 * velocity + 0.001 * accel; - //System.out.printf("%5.3f %5.3f %5.3f\n", leftX, m_subsystem.get(), output); - m_subsystem.set(output + feedforward); - SmartDashboard.putNumber("Output", output); - SmartDashboard.putNumber("Setpoint", m_controller.getSetpoint().position); - SmartDashboard.putNumber("FeedForward", feedforward); - } - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) { - m_subsystem.set(0); - } - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/studies/Elevator2018/src/main/java/frc/robot/subsystems/ExampleSubsystem.java b/studies/Elevator2018/src/main/java/frc/robot/subsystems/ExampleSubsystem.java deleted file mode 100644 index 0531cc9..0000000 --- a/studies/Elevator2018/src/main/java/frc/robot/subsystems/ExampleSubsystem.java +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import com.revrobotics.CANSparkMax; -import com.revrobotics.CANSparkMax.IdleMode; - -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.CommandBase; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class ExampleSubsystem extends SubsystemBase { - - private final CANSparkMax m_motor; - - /** Creates a new ExampleSubsystem. */ - public ExampleSubsystem( - CANSparkMax motor) { - m_motor = motor; - m_motor.enableVoltageCompensation(12.0); - // m_motor.setSmartCurrentLimit(25); - m_motor.setSecondaryCurrentLimit(0); - m_motor.setIdleMode(IdleMode.kCoast); - } - - public void set(double value) { - m_motor.set(value); - } - - public void reset() { - m_motor.getEncoder().setPosition(0); - } - - public double get() { - return m_motor.getEncoder().getPosition(); - } - - /** - * Example command factory method. - * - * @return a command - */ - public CommandBase exampleMethodCommand() { - // Inline construction of command goes here. - // Subsystem::RunOnce implicitly requires `this` subsystem. - return runOnce( - () -> { - /* one-time action goes here */ - }); - } - - /** - * An example method querying a boolean state of the subsystem (for example, a - * digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - SmartDashboard.putNumber("Measurment", get()); - SmartDashboard.putNumber("Current", m_motor.getOutputCurrent()); - - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/Elevator2018/vendordeps/Phoenix.json b/studies/Elevator2018/vendordeps/Phoenix.json deleted file mode 100644 index 614dc3a..0000000 --- a/studies/Elevator2018/vendordeps/Phoenix.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "fileName": "Phoenix.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.31.0+23.2.2", - "frcYear": 2023, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2023-latest.json", - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.31.0" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.31.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.31.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.31.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "23.2.2", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.31.0", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.31.0", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.31.0", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "23.2.2", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.31.0", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.31.0", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.31.0", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "23.2.2", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "23.2.2", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "23.2.2", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "23.2.2", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "23.2.2", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "23.2.2", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "23.2.2", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "23.2.2", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "23.2.2", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/Elevator2018/vendordeps/REVLib.json b/studies/Elevator2018/vendordeps/REVLib.json deleted file mode 100644 index f2d0b7d..0000000 --- a/studies/Elevator2018/vendordeps/REVLib.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2023.1.3", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2023.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2023.1.3" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2023.1.3", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/.gitignore b/studies/NeoEncoderTest/.gitignore deleted file mode 100644 index 5528d4f..0000000 --- a/studies/NeoEncoderTest/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/NeoEncoderTest/.vscode/launch.json b/studies/NeoEncoderTest/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/NeoEncoderTest/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/NeoEncoderTest/.vscode/settings.json b/studies/NeoEncoderTest/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/NeoEncoderTest/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/NeoEncoderTest/.wpilib/wpilib_preferences.json b/studies/NeoEncoderTest/.wpilib/wpilib_preferences.json deleted file mode 100644 index 37f3c65..0000000 --- a/studies/NeoEncoderTest/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024beta", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/WPILib-License.md b/studies/NeoEncoderTest/WPILib-License.md deleted file mode 100644 index 43b62ec..0000000 --- a/studies/NeoEncoderTest/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2023 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/NeoEncoderTest/build.gradle b/studies/NeoEncoderTest/build.gradle deleted file mode 100644 index 95f0a7d..0000000 --- a/studies/NeoEncoderTest/build.gradle +++ /dev/null @@ -1,109 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-4" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -sourceSets { - main { - java { - srcDir "../../lib/src/main/java" - } - } -} -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.jar b/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.properties b/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5e82d67..0000000 --- a/studies/NeoEncoderTest/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/NeoEncoderTest/gradlew.bat b/studies/NeoEncoderTest/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/studies/NeoEncoderTest/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/NeoEncoderTest/settings.gradle b/studies/NeoEncoderTest/settings.gradle deleted file mode 100644 index d94f73c..0000000 --- a/studies/NeoEncoderTest/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/NeoEncoderTest/src/main/deploy/example.txt b/studies/NeoEncoderTest/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/NeoEncoderTest/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/Constants.java b/studies/NeoEncoderTest/src/main/java/frc/robot/Constants.java deleted file mode 100644 index c50ba05..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/Constants.java +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -/** - * The Constants class provides a convenient place for teams to hold robot-wide numerical or boolean - * constants. This class should not be used for any other purpose. All constants should be declared - * globally (i.e. public static). Do not put anything functional in this class. - * - *

It is advised to statically import this class (or one of its inner classes) wherever the - * constants are needed, to reduce verbosity. - */ -public final class Constants { - public static class OperatorConstants { - public static final int kDriverControllerPort = 0; - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/Main.java b/studies/NeoEncoderTest/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/Robot.java b/studies/NeoEncoderTest/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 687a0a0..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -/** - * The VM is configured to automatically run this class, and to call the functions corresponding to - * each mode, as described in the TimedRobot documentation. If you change the name of this class or - * the package after creating this project, you must also update the build.gradle file in the - * project. - */ -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - /** - * This function is run when the robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - m_robotContainer = new RobotContainer(); - } - - /** - * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics - * that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before LiveWindow and - * SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() { - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** This function is called once each time the robot enters Disabled mode. */ - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - /** This function is called periodically during autonomous. */ - @Override - public void autonomousPeriodic() {} - - @Override - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - /** This function is called periodically during operator control. */ - @Override - public void teleopPeriodic() {} - - @Override - public void testInit() { - // Cancels all running commands at the start of test mode. - CommandScheduler.getInstance().cancelAll(); - } - - /** This function is called periodically during test mode. */ - @Override - public void testPeriodic() {} - - /** This function is called once when the robot is first started up. */ - @Override - public void simulationInit() {} - - /** This function is called periodically whilst in simulation. */ - @Override - public void simulationPeriodic() {} -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/RobotContainer.java b/studies/NeoEncoderTest/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index 1cba33c..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import frc.robot.Constants.OperatorConstants; -import frc.robot.commands.Autos; -import frc.robot.commands.ExampleCommand; -import frc.robot.subsystems.TestMotor; -import frc.robot.subsystems.TestMotor2; -import frc.robot.subsystems.TestMotor3; -import frc.robot.subsystems.TestMotor4; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; -import edu.wpi.first.wpilibj2.command.button.Trigger; - -/** - * This class is where the bulk of the robot should be declared. Since Command-based is a - * "declarative" paradigm, very little robot logic should actually be handled in the {@link Robot} - * periodic methods (other than the scheduler calls). Instead, the structure of the robot (including - * subsystems, commands, and trigger mappings) should be declared here. - */ -public class RobotContainer { - // The robot's subsystems and commands are defined here... - private final TestMotor3 m_exampleSubsystem = new TestMotor3(); - - // Replace with CommandPS4Controller or CommandJoystick if needed - private final CommandXboxController m_driverController = - new CommandXboxController(OperatorConstants.kDriverControllerPort); - - /** The container for the robot. Contains subsystems, OI devices, and commands. */ - public RobotContainer() { - // Configure the trigger bindings - configureBindings(); - } - - /** - * Use this method to define your trigger->command mappings. Triggers can be created via the - * {@link Trigger#Trigger(java.util.function.BooleanSupplier)} constructor with an arbitrary - * predicate, or via the named factories in {@link - * edu.wpi.first.wpilibj2.command.button.CommandGenericHID}'s subclasses for {@link - * CommandXboxController Xbox}/{@link edu.wpi.first.wpilibj2.command.button.CommandPS4Controller - * PS4} controllers or {@link edu.wpi.first.wpilibj2.command.button.CommandJoystick Flight - * joysticks}. - */ - private void configureBindings() { - // Schedule `ExampleCommand` when `exampleCondition` changes to `true` - // new Trigger(m_exampleSubsystem::exampleCondition) - // .onTrue(new ExampleCommand(m_exampleSubsystem)); - - // Schedule `exampleMethodCommand` when the Xbox controller's B button is pressed, - // cancelling on release. - // m_driverController.b().whileTrue(m_exampleSubsystem.exampleMethodCommand()); - } - - /** - * Use this to pass the autonomous command to the main {@link Robot} class. - * - * @return the command to run in autonomous - */ - public Command getAutonomousCommand() { - // An example command will be run in autonomous - // return Autos.exampleAuto(m_exampleSubsystem); - return null; - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/commands/Autos.java b/studies/NeoEncoderTest/src/main/java/frc/robot/commands/Autos.java deleted file mode 100644 index fbf19af..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/commands/Autos.java +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.TestMotor; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public final class Autos { - /** Example static factory for an autonomous command. */ - public static Command exampleAuto(TestMotor subsystem) { - // return Commands.sequence(subsystem.exampleMethodCommand(), new ExampleCommand(subsystem)); - return null; - } - - private Autos() { - throw new UnsupportedOperationException("This is a utility class!"); - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/commands/ExampleCommand.java b/studies/NeoEncoderTest/src/main/java/frc/robot/commands/ExampleCommand.java deleted file mode 100644 index ed7ebb4..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/commands/ExampleCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.commands; - -import frc.robot.subsystems.TestMotor; -import edu.wpi.first.wpilibj2.command.Command; - -/** An example command that uses an example subsystem. */ -public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) - private final TestMotor m_subsystem; - - /** - * Creates a new ExampleCommand. - * - * @param subsystem The subsystem used by this command. - */ - public ExampleCommand(TestMotor subsystem) { - m_subsystem = subsystem; - // Use addRequirements() here to declare subsystem dependencies. - addRequirements(subsystem); - } - - // Called when the command is initially scheduled. - @Override - public void initialize() {} - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() {} - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) {} - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor.java b/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor.java deleted file mode 100644 index 9cbdc9a..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor.java +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import com.revrobotics.CANSparkFlex; -import com.revrobotics.SparkAbsoluteEncoder; -import com.revrobotics.CANSparkBase.ControlType; -import com.revrobotics.CANSparkLowLevel.MotorType; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class TestMotor extends SubsystemBase { - /** Creates a new ExampleSubsystem. */ - - CANSparkFlex sparkFlex = new CANSparkFlex(13, MotorType.kBrushless); - SparkAbsoluteEncoder absoluteEncoder = sparkFlex.getAbsoluteEncoder(); - - private double goal = 0.5; - - public TestMotor() { - sparkFlex.setInverted(false); - absoluteEncoder.setInverted(true); - sparkFlex.getPIDController().setP(2); - sparkFlex.getPIDController().setFeedbackDevice(absoluteEncoder); - // sparkFlex.getPIDController().setReference(0.5, ControlType.kPosition); - } - - /** - * Example command factory method. - * - * @return a command - */ - - - /** - * An example method querying a boolean state of the subsystem (for example, a digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - // System.out.println(absoluteEncoder.getPosition()); - - SmartDashboard.putNumber("goal", goal); - SmartDashboard.putNumber("measurment", absoluteEncoder.getPosition()); - // SmartDashboard.putNumber("goal fr", sparkFlex.getPIDController()); - SmartDashboard.putNumber("relative goal", sparkFlex.getEncoder().getPosition()); - - - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor2.java b/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor2.java deleted file mode 100644 index c7e60f6..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor2.java +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import com.revrobotics.CANSparkFlex; -import com.revrobotics.CANSparkMax; -import com.revrobotics.SparkAbsoluteEncoder; -import com.revrobotics.CANSparkBase.ControlType; -import com.revrobotics.CANSparkLowLevel.MotorType; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class TestMotor2 extends SubsystemBase { - /** Creates a new ExampleSubsystem. */ - - CANSparkMax sparkMax = new CANSparkMax(29, MotorType.kBrushless); - SparkAbsoluteEncoder absoluteEncoder = sparkMax.getAbsoluteEncoder(); - - private double goal = 0.5; - - public TestMotor2() { - sparkMax.setInverted(false); - absoluteEncoder.setInverted(true); - sparkMax.getPIDController().setP(1); - sparkMax.getPIDController().setFeedbackDevice(absoluteEncoder); - sparkMax.getPIDController().setReference(0.7, ControlType.kPosition); - } - - /** - * Example command factory method. - * - * @return a command - */ - - - /** - * An example method querying a boolean state of the subsystem (for example, a digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - // System.out.println(absoluteEncoder.getPosition()); - - // SmartDashboard.putNumber("goal", goal); - SmartDashboard.putNumber("measurment", absoluteEncoder.getPosition()); - // SmartDashboard.putNumber("relative goal", sparkMax.getEncoder().getPosition()); - - // sparkMax.set(0.1); - - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor3.java b/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor3.java deleted file mode 100644 index cbd5be3..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor3.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import com.revrobotics.CANSparkFlex; -import com.revrobotics.CANSparkMax; -import com.revrobotics.SparkAbsoluteEncoder; - -import org.team100.lib.config.Feedforward100; -import org.team100.lib.config.Identity; -import org.team100.lib.config.PIDConstants; -import org.team100.lib.encoder.turning.DutyCycleTurningEncoder; -import org.team100.lib.encoder.turning.EncoderDrive; -import org.team100.lib.motion.components.PositionServo; -import org.team100.lib.motion.drivetrain.kinodynamics.SwerveKinodynamics; -import org.team100.lib.motion.drivetrain.kinodynamics.SwerveKinodynamicsFactory; -import org.team100.lib.motion.drivetrain.module.WCPSwerveModule100; -import org.team100.lib.motor.MotorPhase; -import org.team100.lib.profile.Profile100; -import org.team100.lib.units.Angle100; - -import com.revrobotics.CANSparkBase.ControlType; -import com.revrobotics.CANSparkLowLevel.MotorType; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.wpilibj.DutyCycle; -import edu.wpi.first.wpilibj.DutyCycleEncoder; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class TestMotor3 extends SubsystemBase { - /** Creates a new ExampleSubsystem. */ - - PositionServo turningServo; - SwerveKinodynamics kinodynamics; - - private double goal = 0.5; - - public TestMotor3() { - - kinodynamics = SwerveKinodynamicsFactory.forTest(); - - Profile100 profile = kinodynamics.getSteeringProfile(); - PIDConstants turningPidConstants = new PIDConstants(0.5);// 5 - Feedforward100 turningFF = Feedforward100.makeTest(); - - turningServo = WCPSwerveModule100.turningServo( - "Test Motor", - DutyCycleTurningEncoder.class, - 22, - 0, - 1.0, - 1.0, - kinodynamics, - EncoderDrive.INVERSE, - MotorPhase.FORWARD, - turningPidConstants, - turningFF); - - } - - /** - * Example command factory method. - * - * @return a command - */ - - /** - * An example method querying a boolean state of the subsystem (for example, a - * digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - // System.out.println(absoluteEncoder.getPosition()); - - // SmartDashboardputNumber("goal", goal); - // SmartDashboard.putNumber("relative goal", - // sparkMax.getEncoder().getPosition()); - - // sparkMax.set(0.1); - double goal = 30; - SmartDashboard.putNumber("MY POSITION IS: ", turningServo.getPosition().getAsDouble()); - SmartDashboard.putNumber("GOAL ", goal); - - turningServo.setPosition(goal, 0); - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor4.java b/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor4.java deleted file mode 100644 index aaf72c5..0000000 --- a/studies/NeoEncoderTest/src/main/java/frc/robot/subsystems/TestMotor4.java +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - -import com.ctre.phoenix6.hardware.TalonFX; -import com.revrobotics.CANSparkFlex; -import com.revrobotics.CANSparkMax; -import com.revrobotics.SparkAbsoluteEncoder; - -import org.team100.lib.config.Feedforward100; -import org.team100.lib.config.Identity; -import org.team100.lib.config.PIDConstants; -import org.team100.lib.encoder.turning.DutyCycleTurningEncoder; -import org.team100.lib.encoder.turning.EncoderDrive; -import org.team100.lib.motion.components.PositionServo; -import org.team100.lib.motion.drivetrain.kinodynamics.SwerveKinodynamics; -import org.team100.lib.motion.drivetrain.kinodynamics.SwerveKinodynamicsFactory; -import org.team100.lib.motion.drivetrain.module.WCPSwerveModule100; -import org.team100.lib.motor.MotorPhase; -import org.team100.lib.motor.turning.Falcon6TurningMotor; -import org.team100.lib.profile.Profile100; -import org.team100.lib.units.Angle100; - -import com.revrobotics.CANSparkBase.ControlType; -import com.revrobotics.CANSparkLowLevel.MotorType; - -import edu.wpi.first.math.controller.PIDController; -import edu.wpi.first.wpilibj.DutyCycle; -import edu.wpi.first.wpilibj.DutyCycleEncoder; -import edu.wpi.first.wpilibj.motorcontrol.Talon; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class TestMotor4 extends SubsystemBase { - /** Creates a new ExampleSubsystem. */ - - Falcon6TurningMotor motor = new Falcon6TurningMotor( -"name", - 22, - MotorPhase.FORWARD, -1.0, - new PIDConstants(), - Feedforward100.makeAMSwerveDriveFalcon6() - ); - - private double goal = 0.5; - - public TestMotor4() { - - } - - - -/** - * An example method querying a boolean state of the subsystem (for example, a - * digital sensor). - * - * @return value of some boolean subsystem state, such as a digital sensor. - */ - public boolean exampleCondition() { - // Query some boolean state, such as a digital sensor. - return false; - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - // System.out.println(absoluteEncoder.getPosition()); - - // SmartDashboard.putNumber("goal", goal); - // SmartDashboard.putNumber("relative goal", - // sparkMax.getEncoder().getPosition()); - - // sparkMax.set(0.1); - // SmartDashboard.putNumber("MY POSITION IS: ", turningServo.getPosition().getAsDouble()); - - motor.setDutyCycle(0.1);; - } - - @Override - public void simulationPeriodic() { - // This method will be called once per scheduler run during simulation - } -} diff --git a/studies/NeoEncoderTest/vendordeps/ChoreoLib.json b/studies/NeoEncoderTest/vendordeps/ChoreoLib.json deleted file mode 100644 index a5f886a..0000000 --- a/studies/NeoEncoderTest/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.2.3", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.2.3" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.2.3", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/vendordeps/NavX.json b/studies/NeoEncoderTest/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/studies/NeoEncoderTest/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/vendordeps/PathplannerLib.json b/studies/NeoEncoderTest/vendordeps/PathplannerLib.json deleted file mode 100644 index 6dc648d..0000000 --- a/studies/NeoEncoderTest/vendordeps/PathplannerLib.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "PathplannerLib.json", - "name": "PathplannerLib", - "version": "2024.2.8", - "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", - "frcYear": "2024", - "mavenUrls": [ - "https://3015rangerrobotics.github.io/pathplannerlib/repo" - ], - "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", - "javaDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-java", - "version": "2024.2.8" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-cpp", - "version": "2024.2.8", - "libName": "PathplannerLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/vendordeps/Phoenix6.json b/studies/NeoEncoderTest/vendordeps/Phoenix6.json deleted file mode 100644 index 0322385..0000000 --- a/studies/NeoEncoderTest/vendordeps/Phoenix6.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "fileName": "Phoenix6.json", - "name": "CTRE-Phoenix (v6)", - "version": "24.3.0", - "frcYear": 2024, - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", - "conflictsWith": [ - { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-java", - "version": "24.3.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-cpp", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/NeoEncoderTest/vendordeps/WPILibNewCommands.json b/studies/NeoEncoderTest/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/NeoEncoderTest/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/PIDControlInTalonFX/.gitignore b/studies/PIDControlInTalonFX/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/PIDControlInTalonFX/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/PIDControlInTalonFX/.vscode/launch.json b/studies/PIDControlInTalonFX/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/PIDControlInTalonFX/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/PIDControlInTalonFX/.vscode/settings.json b/studies/PIDControlInTalonFX/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/PIDControlInTalonFX/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/PIDControlInTalonFX/.wpilib/wpilib_preferences.json b/studies/PIDControlInTalonFX/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/PIDControlInTalonFX/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/PIDControlInTalonFX/WPILib-License.md b/studies/PIDControlInTalonFX/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/PIDControlInTalonFX/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/PIDControlInTalonFX/build.gradle b/studies/PIDControlInTalonFX/build.gradle deleted file mode 100644 index b233ef1..0000000 --- a/studies/PIDControlInTalonFX/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.jar b/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.properties b/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/PIDControlInTalonFX/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/PIDControlInTalonFX/gradlew b/studies/PIDControlInTalonFX/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/PIDControlInTalonFX/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/PIDControlInTalonFX/gradlew.bat b/studies/PIDControlInTalonFX/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/PIDControlInTalonFX/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/PIDControlInTalonFX/networktables.json b/studies/PIDControlInTalonFX/networktables.json deleted file mode 100644 index fe51488..0000000 --- a/studies/PIDControlInTalonFX/networktables.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/studies/PIDControlInTalonFX/settings.gradle b/studies/PIDControlInTalonFX/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/PIDControlInTalonFX/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/PIDControlInTalonFX/src/main/deploy/example.txt b/studies/PIDControlInTalonFX/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/PIDControlInTalonFX/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/PIDControlInTalonFX/src/main/java/frc/robot/Main.java b/studies/PIDControlInTalonFX/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/PIDControlInTalonFX/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/PIDControlInTalonFX/src/main/java/frc/robot/Robot.java b/studies/PIDControlInTalonFX/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 9678b1b..0000000 --- a/studies/PIDControlInTalonFX/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,113 +0,0 @@ - - -package frc.robot; - -import com.ctre.phoenix.motorcontrol.ControlMode; -import com.ctre.phoenix.motorcontrol.DemandType; -import com.ctre.phoenix.motorcontrol.FeedbackDevice; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - private final double ticksPerRevolution = 28; - private final double m_gearRatio = 355/6; - //The can ID of the motor controller - private final int canID = 13; - //I used a TalonFX for this test change if you have a different motor controller use that instead - private final WPI_TalonSRX m_motor = new WPI_TalonSRX(canID); - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - m_motor.configFactoryDefault(); - m_motor.configSelectedFeedbackSensor(FeedbackDevice.QuadEncoder); - m_motor.configNominalOutputForward(0); - m_motor.configNominalOutputReverse(0); - m_motor.configPeakOutputForward(1); - m_motor.configPeakOutputReverse(-1); - m_motor.configAllowableClosedloopError(0, 0, 30); - //F is feedforward, none used for this test - m_motor.config_kF(0, 0); - // The P value you have for position control changes, but 0.25 was good for me. I also found having a D value helped. - // The P value for velocity seems to affect how fast the motor will spin, so if the P value is smaller, the motor will go slower by a multiplier of how much lower the P value is. My P value I used was 0.0001. The lower P value allows the motor to not go crazy, this allows for much more control. - m_motor.config_kP(0, 0.5); // P 0.25 - m_motor.config_kI(0, 0); // P 0 - m_motor.config_kD(0, 0); // P 20 - m_motor.setSensorPhase(true); - m_motor.setInverted(false); - } - - @Override - public void - robotPeriodic() { - System.out.println(m_motor.getSelectedSensorPosition()); - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() { - double revolutionsPerSec = -1; - double revsPer100ms = revolutionsPerSec / 10; - double ticksPer100ms = revsPer100ms * ticksPerRevolution; - DemandType type = DemandType.ArbitraryFeedForward; - double Kn = 0.112; - double Ks = 0.007576; - double VSat = 11; - double kFF = (Kn*revolutionsPerSec + Ks*Math.signum(revolutionsPerSec))*m_gearRatio/VSat; - m_motor.set(ControlMode.Velocity, ticksPer100ms*m_gearRatio, type, kFF); - SmartDashboard.putNumber("Encoder Value", m_motor.getSelectedSensorPosition()/(m_gearRatio*ticksPerRevolution)); - SmartDashboard.putNumber("Velocity Value", m_motor.getSelectedSensorVelocity()/(ticksPerRevolution*m_gearRatio)*10); - } - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() { - } - - @Override - public void testExit() {} -} diff --git a/studies/PIDControlInTalonFX/src/main/java/frc/robot/RobotContainer.java b/studies/PIDControlInTalonFX/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/PIDControlInTalonFX/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/PIDControlInTalonFX/vendordeps/Phoenix.json b/studies/PIDControlInTalonFX/vendordeps/Phoenix.json deleted file mode 100644 index 4f74b5a..0000000 --- a/studies/PIDControlInTalonFX/vendordeps/Phoenix.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "fileName": "Phoenix.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.30.3+23.0.4", - "frcYear": 2023, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2023-latest.json", - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.30.3" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.30.3" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.30.3", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.30.3", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro", - "artifactId": "tools", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "tools-sim", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simTalonSRX", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simTalonFX", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simVictorSPX", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simPigeonIMU", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simCANCoder", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProTalonFX", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProCANcoder", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProPigeon2", - "version": "23.0.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.30.3", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.30.3", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.30.3", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenixpro", - "artifactId": "tools", - "version": "23.0.4", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.30.3", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.30.3", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.30.3", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "tools-sim", - "version": "23.0.4", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simTalonSRX", - "version": "23.0.4", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simTalonFX", - "version": "23.0.4", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simVictorSPX", - "version": "23.0.4", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simPigeonIMU", - "version": "23.0.4", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simCANCoder", - "version": "23.0.4", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProTalonFX", - "version": "23.0.4", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProCANcoder", - "version": "23.0.4", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro.sim", - "artifactId": "simProPigeon2", - "version": "23.0.4", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/PIDControlInTalonFX/vendordeps/WPILibNewCommands.json b/studies/PIDControlInTalonFX/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/PIDControlInTalonFX/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/PidControlInSparkMax/.gitignore b/studies/PidControlInSparkMax/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/PidControlInSparkMax/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/PidControlInSparkMax/.vscode/launch.json b/studies/PidControlInSparkMax/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/PidControlInSparkMax/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/PidControlInSparkMax/.vscode/settings.json b/studies/PidControlInSparkMax/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/PidControlInSparkMax/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/PidControlInSparkMax/.wpilib/wpilib_preferences.json b/studies/PidControlInSparkMax/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/PidControlInSparkMax/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/PidControlInSparkMax/WPILib-License.md b/studies/PidControlInSparkMax/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/PidControlInSparkMax/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/PidControlInSparkMax/build.gradle b/studies/PidControlInSparkMax/build.gradle deleted file mode 100644 index b233ef1..0000000 --- a/studies/PidControlInSparkMax/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.jar b/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.properties b/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/PidControlInSparkMax/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/PidControlInSparkMax/gradlew b/studies/PidControlInSparkMax/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/PidControlInSparkMax/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/PidControlInSparkMax/gradlew.bat b/studies/PidControlInSparkMax/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/PidControlInSparkMax/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/PidControlInSparkMax/settings.gradle b/studies/PidControlInSparkMax/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/PidControlInSparkMax/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/PidControlInSparkMax/src/main/deploy/example.txt b/studies/PidControlInSparkMax/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/PidControlInSparkMax/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/PidControlInSparkMax/src/main/java/frc/robot/Main.java b/studies/PidControlInSparkMax/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/PidControlInSparkMax/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/PidControlInSparkMax/src/main/java/frc/robot/Robot.java b/studies/PidControlInSparkMax/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 903f7e3..0000000 --- a/studies/PidControlInSparkMax/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -import com.revrobotics.CANSparkMax; -import com.revrobotics.RelativeEncoder; -import com.revrobotics.SparkMaxPIDController; -import com.revrobotics.CANSparkMax.ControlType; -import com.revrobotics.CANSparkMaxLowLevel.MotorType; -import com.revrobotics.SparkMaxPIDController.ArbFFUnits; - -import edu.wpi.first.math.controller.ArmFeedforward; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - //This value of the goal for the controller. The units are rotations, so -1 to 1. You can feed something to this value over time to change the goal of the PID controller - private double goal = 30; - - //The ratio of the motor gearing. If the motor spins more than the output of the motor this value should be greater than 1 this case I had a 45:1 motor gearing - //TODO For now I am just multiplying this by the goal, but there may be a way to give this value to the motor controller, but I could not seem to find a way - private final int motorGearing = 1; - - //The type of control you want the Spark Max PID controller to do. In this case it is position - private final ControlType controlType = CANSparkMax.ControlType.kVelocity; - - private Command m_autonomousCommand; - private CANSparkMax m_motor; - private SparkMaxPIDController lowerPidController; - private RelativeEncoder m_encoder; - public double kP, kI, kD, kIz, kFF, kMaxOutput, kMinOutput; - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - //The can ID of the motor - final int CanID = 2; - m_motor = new CANSparkMax(CanID, MotorType.kBrushless); - //The restoreFactoryDefaults method can be used to reset the configuration parameters in the SPARK MAX to their factory default state. If no argument is passed, these parameters will not persist between power cycles - m_motor.restoreFactoryDefaults(); - lowerPidController = m_motor.getPIDController(); - m_encoder = m_motor.getEncoder(); - //The PID values these are just the default values from the example code, they are not tuned to any motor gearing. - kP = 0.1; - kI = 0; - kD = 1; - kIz = 0; - kFF = 0; - kMaxOutput = 1; - kMinOutput = -1; - - //Turn on wrapping - lowerPidController.setPositionPIDWrappingEnabled(true); - - // set PID coefficients - lowerPidController.setP(kP); - lowerPidController.setI(kI); - lowerPidController.setD(kD); - lowerPidController.setIZone(kIz); - lowerPidController.setFF(kFF); - lowerPidController.setOutputRange(kMinOutput, kMaxOutput); - - // display PID coefficients on SmartDashboard - SmartDashboard.putNumber("P Gain", kP); - SmartDashboard.putNumber("I Gain", kI); - SmartDashboard.putNumber("D Gain", kD); - SmartDashboard.putNumber("I Zone", kIz); - SmartDashboard.putNumber("Feed Forward", kFF); - SmartDashboard.putNumber("Max Output", kMaxOutput); - SmartDashboard.putNumber("Min Output", kMinOutput); - SmartDashboard.putNumber("Set Rotations", 0); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() { - double p = SmartDashboard.getNumber("P Gain", 0); - double i = SmartDashboard.getNumber("I Gain", 0); - double d = SmartDashboard.getNumber("D Gain", 0); - double iz = SmartDashboard.getNumber("I Zone", 0); - double ff = SmartDashboard.getNumber("Feed Forward", 0); - double max = SmartDashboard.getNumber("Max Output", 0); - double min = SmartDashboard.getNumber("Min Output", 0); - double rotations = SmartDashboard.getNumber("Set Rotations", 0); - - // if PID coefficients on SmartDashboard have changed, write new values to controller - if((p != kP)) { lowerPidController.setP(p); kP = p; } - if((i != kI)) { lowerPidController.setI(i); kI = i; } - if((d != kD)) { lowerPidController.setD(d); kD = d; } - if((iz != kIz)) { lowerPidController.setIZone(iz); kIz = iz; } - if((ff != kFF)) { lowerPidController.setFF(ff); kFF = ff; } - if((max != kMaxOutput) || (min != kMinOutput)) { - lowerPidController.setOutputRange(min, max); - kMinOutput = min; kMaxOutput = max; } - //Give motor goal and controlType - lowerPidController.setReference(0, controlType, 0, .1, ArbFFUnits.kVoltage); - - SmartDashboard.putNumber("SetPoint", rotations); - SmartDashboard.putNumber("ProcessVariable", m_encoder.getPosition()); - } - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/PidControlInSparkMax/src/main/java/frc/robot/RobotContainer.java b/studies/PidControlInSparkMax/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/PidControlInSparkMax/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/PidControlInSparkMax/vendordeps/REVLib.json b/studies/PidControlInSparkMax/vendordeps/REVLib.json deleted file mode 100644 index f2d0b7d..0000000 --- a/studies/PidControlInSparkMax/vendordeps/REVLib.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2023.1.3", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2023.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2023.1.3" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2023.1.3", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/PidControlInSparkMax/vendordeps/WPILibNewCommands.json b/studies/PidControlInSparkMax/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/PidControlInSparkMax/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Shooter/.gitignore b/studies/Shooter/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/Shooter/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/Shooter/.vscode/launch.json b/studies/Shooter/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Shooter/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Shooter/.vscode/settings.json b/studies/Shooter/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Shooter/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Shooter/.wpilib/wpilib_preferences.json b/studies/Shooter/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/Shooter/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/Shooter/WPILib-License.md b/studies/Shooter/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/Shooter/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Shooter/build.gradle b/studies/Shooter/build.gradle deleted file mode 100644 index b3109ac..0000000 --- a/studies/Shooter/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/Shooter/gradle/wrapper/gradle-wrapper.jar b/studies/Shooter/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/Shooter/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Shooter/gradle/wrapper/gradle-wrapper.properties b/studies/Shooter/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/Shooter/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Shooter/gradlew b/studies/Shooter/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/Shooter/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Shooter/gradlew.bat b/studies/Shooter/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/Shooter/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/Shooter/settings.gradle b/studies/Shooter/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/Shooter/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/Shooter/src/main/deploy/example.txt b/studies/Shooter/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Shooter/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Shooter/src/main/java/frc/robot/Main.java b/studies/Shooter/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/Shooter/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Shooter/src/main/java/frc/robot/Robot.java b/studies/Shooter/src/main/java/frc/robot/Robot.java deleted file mode 100644 index ca98d6f..0000000 --- a/studies/Shooter/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,34 +0,0 @@ - - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - - -public class Robot extends TimedRobot { - - private RobotContainer m_robotContainer; - - /** - * This function is run when the robot is first started up and should be used for any - * initialization code. - */ - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void teleopInit() { - } - - @Override - public void teleopPeriodic() {} -} diff --git a/studies/Shooter/src/main/java/frc/robot/RobotContainer.java b/studies/Shooter/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index a0d0d68..0000000 --- a/studies/Shooter/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,16 +0,0 @@ -package frc.robot; - -import edu.wpi.first.wpilibj2.command.button.CommandXboxController; -import frc.robot.commands.ExampleCommand; -import frc.robot.subsystems.ExampleSubsystem; - -public class RobotContainer { - private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem(); - - private final CommandXboxController m_driverController = - new CommandXboxController(0); - - public RobotContainer() { - m_driverController.b().whileTrue(new ExampleCommand(m_exampleSubsystem)); - } -} diff --git a/studies/Shooter/src/main/java/frc/robot/commands/ExampleCommand.java b/studies/Shooter/src/main/java/frc/robot/commands/ExampleCommand.java deleted file mode 100644 index cfca65e..0000000 --- a/studies/Shooter/src/main/java/frc/robot/commands/ExampleCommand.java +++ /dev/null @@ -1,39 +0,0 @@ - -package frc.robot.commands; - -import frc.robot.subsystems.ExampleSubsystem; -import edu.wpi.first.wpilibj2.command.CommandBase; - -public class ExampleCommand extends CommandBase { - private final ExampleSubsystem m_subsystem; - - - public ExampleCommand(ExampleSubsystem subsystem) { - m_subsystem = subsystem; - addRequirements(subsystem); - } - - // Called when the command is initially scheduled. - @Override - public void initialize() { - - } - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() { - m_subsystem.set(0.5); - } - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) { - m_subsystem.set(0.0); - } - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/studies/Shooter/src/main/java/frc/robot/subsystems/ExampleSubsystem.java b/studies/Shooter/src/main/java/frc/robot/subsystems/ExampleSubsystem.java deleted file mode 100644 index 9e8f272..0000000 --- a/studies/Shooter/src/main/java/frc/robot/subsystems/ExampleSubsystem.java +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot.subsystems; - - -import edu.wpi.first.wpilibj.motorcontrol.VictorSP; -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class ExampleSubsystem extends SubsystemBase { - private final VictorSP motor1; - private final VictorSP motor2; - - public ExampleSubsystem() { - motor1 = new VictorSP(0); - motor2 = new VictorSP(1); - } - - public void set(double value) { - motor1.set(-value); - motor2.set(value); - System.out.println("running"); - } - - @Override - public void periodic() { - // This method will be called once per scheduler run - } -} diff --git a/studies/Shooter/vendordeps/REVLib.json b/studies/Shooter/vendordeps/REVLib.json deleted file mode 100644 index f2d0b7d..0000000 --- a/studies/Shooter/vendordeps/REVLib.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2023.1.3", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2023.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2023.1.3" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2023.1.3", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2023.1.3", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Shooter/vendordeps/WPILibNewCommands.json b/studies/Shooter/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/Shooter/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Turn Motor/.gitignore b/studies/Turn Motor/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/Turn Motor/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/Turn Motor/.vscode/launch.json b/studies/Turn Motor/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Turn Motor/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Turn Motor/.vscode/settings.json b/studies/Turn Motor/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Turn Motor/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Turn Motor/.wpilib/wpilib_preferences.json b/studies/Turn Motor/.wpilib/wpilib_preferences.json deleted file mode 100644 index 37f3c65..0000000 --- a/studies/Turn Motor/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024beta", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/Turn Motor/WPILib-License.md b/studies/Turn Motor/WPILib-License.md deleted file mode 100644 index 43b62ec..0000000 --- a/studies/Turn Motor/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2023 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Turn Motor/build.gradle b/studies/Turn Motor/build.gradle deleted file mode 100644 index 7b9d182..0000000 --- a/studies/Turn Motor/build.gradle +++ /dev/null @@ -1,102 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-4" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/Turn Motor/gradle/wrapper/gradle-wrapper.jar b/studies/Turn Motor/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135..0000000 Binary files a/studies/Turn Motor/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Turn Motor/gradle/wrapper/gradle-wrapper.properties b/studies/Turn Motor/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 1058752..0000000 --- a/studies/Turn Motor/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Turn Motor/gradlew b/studies/Turn Motor/gradlew deleted file mode 100644 index 1aa94a4..0000000 --- a/studies/Turn Motor/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Turn Motor/gradlew.bat b/studies/Turn Motor/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/studies/Turn Motor/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/Turn Motor/settings.gradle b/studies/Turn Motor/settings.gradle deleted file mode 100644 index d94f73c..0000000 --- a/studies/Turn Motor/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/Turn Motor/src/main/deploy/example.txt b/studies/Turn Motor/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Turn Motor/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Turn Motor/src/main/java/frc/robot/Main.java b/studies/Turn Motor/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/Turn Motor/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Turn Motor/src/main/java/frc/robot/Robot.java b/studies/Turn Motor/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 4425317..0000000 --- a/studies/Turn Motor/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import com.revrobotics.CANSparkMax; -import com.revrobotics.RelativeEncoder; -import com.revrobotics.CANSparkLowLevel.MotorType; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - private CANSparkMax m_motor1; - private CANSparkMax m_motor2; - private RelativeEncoder m_encoderLeft; - private RelativeEncoder m_encoderRight; - - - - @Override - public void robotInit() { - // m_robotContainer = new RobotContainer(); - m_motor1 = new CANSparkMax(3, MotorType.kBrushless); - m_motor2 = new CANSparkMax(6, MotorType.kBrushless); - m_encoderLeft = m_motor1.getEncoder(); - m_encoderRight = m_motor2.getEncoder(); - // m_pidController1 = m_motor1.getPIDController(); - // m_pidController2 = m_motor2.getPIDController(); - - // m_pidController1.setP(.001); - // m_pidController2.setP(.001); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - m_motor1.set(1); - m_motor2.set(-1); - - - // if(m_encoderLeft.getVelocity() > 6000 && m_encoderRight.getVelocity() > 6000){ - // System.out.println("AHHH"); - // } - - System.out.println(m_encoderLeft.getVelocity()); - System.out.println(m_encoderRight.getVelocity()); - - - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/Turn Motor/src/main/java/frc/robot/RobotContainer.java b/studies/Turn Motor/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/Turn Motor/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/Turn Motor/vendordeps/ChoreoLib.json b/studies/Turn Motor/vendordeps/ChoreoLib.json deleted file mode 100644 index bf5ee6a..0000000 --- a/studies/Turn Motor/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.1.2", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.1.2" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.1.2", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turn Motor/vendordeps/NavX.json b/studies/Turn Motor/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/studies/Turn Motor/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turn Motor/vendordeps/Phoenix5.json b/studies/Turn Motor/vendordeps/Phoenix5.json deleted file mode 100644 index 88a68dd..0000000 --- a/studies/Turn Motor/vendordeps/Phoenix5.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "fileName": "Phoenix5.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.33.0", - "frcYear": 2024, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", - "requires": [ - { - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.33.0" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.33.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.33.0", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.33.0", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.0", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.33.0", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.33.0", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.0", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/Turn Motor/vendordeps/REVLib.json b/studies/Turn Motor/vendordeps/REVLib.json deleted file mode 100644 index 0f3520e..0000000 --- a/studies/Turn Motor/vendordeps/REVLib.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2024.2.0", - "frcYear": "2024", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2024.2.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.0", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2024.2.0", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.0", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turn Motor/vendordeps/WPILibNewCommands.json b/studies/Turn Motor/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 802493d..0000000 --- a/studies/Turn Motor/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/Turret/.gitignore b/studies/Turret/.gitignore deleted file mode 100644 index 5528d4f..0000000 --- a/studies/Turret/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/Turret/.vscode/launch.json b/studies/Turret/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/Turret/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/Turret/.vscode/settings.json b/studies/Turret/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/Turret/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/Turret/.wpilib/wpilib_preferences.json b/studies/Turret/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/Turret/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/Turret/Turret.code-workspace b/studies/Turret/Turret.code-workspace deleted file mode 100644 index f9b5d73..0000000 --- a/studies/Turret/Turret.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - { - "path": "../../lib" - } - ], - "settings": { - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard" - } -} \ No newline at end of file diff --git a/studies/Turret/WPILib-License.md b/studies/Turret/WPILib-License.md deleted file mode 100644 index 645e542..0000000 --- a/studies/Turret/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2024 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/Turret/gradle/wrapper/gradle-wrapper.jar b/studies/Turret/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/Turret/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/Turret/gradle/wrapper/gradle-wrapper.properties b/studies/Turret/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5e82d67..0000000 --- a/studies/Turret/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/Turret/gradlew b/studies/Turret/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/studies/Turret/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/Turret/gradlew.bat b/studies/Turret/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/studies/Turret/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/Turret/settings.gradle b/studies/Turret/settings.gradle deleted file mode 100644 index d94f73c..0000000 --- a/studies/Turret/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/Turret/src/main/deploy/example.txt b/studies/Turret/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/Turret/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/Turret/src/main/java/org/team100/frc2024/Main.java b/studies/Turret/src/main/java/org/team100/frc2024/Main.java deleted file mode 100644 index 6a13457..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/Main.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.team100.frc2024; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/Turret/src/main/java/org/team100/frc2024/Robot.java b/studies/Turret/src/main/java/org/team100/frc2024/Robot.java deleted file mode 100644 index d82f159..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/Robot.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.team100.frc2024; - -import java.io.IOException; - -import org.team100.lib.config.Identity; -import org.team100.lib.experiments.Experiment; -import org.team100.lib.experiments.Experiments; -import org.team100.lib.framework.TimedRobot100; -import org.team100.lib.logging.JvmLogger; -import org.team100.lib.logging.Level; -import org.team100.lib.logging.Logging; -import org.team100.lib.logging.LoggerFactory; -import org.team100.lib.logging.LoggerFactory.BooleanLogger; -import org.team100.lib.logging.LoggerFactory.DoubleLogger; -import org.team100.lib.logging.LoggerFactory.IntLogger; -import org.team100.lib.logging.LoggerFactory.StringLogger; -import org.team100.lib.util.Memo; -import org.team100.lib.util.Util; - -import edu.wpi.first.networktables.NetworkTableInstance; -import edu.wpi.first.wpilibj.DriverStation; -import edu.wpi.first.wpilibj.RobotController; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import edu.wpi.first.wpilibj.util.WPILibVersion; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot100 { - private static final String kOrange = "\033[38:5:214m"; - private static final String kReset = "\033[0m"; - - private final DoubleLogger m_log_ds_MatchTime; - private final BooleanLogger m_log_ds_AutonomousEnabled; - private final BooleanLogger m_log_ds_TeleopEnabled; - private final BooleanLogger m_log_ds_FMSAttached; - private final StringLogger m_log_mode; - private final IntLogger m_log_key_list_size; - private final DoubleLogger m_log_voltage; - private final JvmLogger m_jvmLogger; - - private RobotContainer m_robotContainer; - - public Robot() { - LoggerFactory dsLog = m_robotLogger.child("DriverStation"); - m_log_ds_MatchTime = dsLog.doubleLogger(Level.TRACE, "MatchTime"); - m_log_ds_AutonomousEnabled = dsLog.booleanLogger(Level.TRACE, "AutonomousEnabled"); - m_log_ds_TeleopEnabled = dsLog.booleanLogger(Level.TRACE, "TeleopEnabled"); - m_log_ds_FMSAttached = dsLog.booleanLogger(Level.TRACE, "FMSAttached"); - m_log_mode = m_robotLogger.stringLogger(Level.TRACE, "mode"); - m_log_key_list_size = m_robotLogger.intLogger(Level.TRACE, "key list size"); - m_log_voltage = m_robotLogger.doubleLogger(Level.TRACE, "voltage"); - m_jvmLogger = new JvmLogger(m_robotLogger); - } - - @Override - public void robotInit() { - Util.printf("WPILib Version: %s\n", WPILibVersion.Version); // 2023.2.1 - Util.printf("RoboRIO serial number: %s\n", RobotController.getSerialNumber()); - Util.printf("Identity: %s\n", Identity.instance.name()); - RobotController.setBrownoutVoltage(5.5); - banner(); - - // By default, LiveWindow turns off the CommandScheduler in test mode, - // but we don't want that. - enableLiveWindowInTest(false); - - // log what the scheduler is doing - SmartDashboard.putData(CommandScheduler.getInstance()); - - try { - m_robotContainer = new RobotContainer(this); - } catch (IOException e) { - throw new IllegalStateException("Robot Container Instantiation Failed", e); - } - - m_robotContainer.onInit(); - - NetworkTableInstance.getDefault().startServer(); - - // DataLogManager.start(); - - Util.printf("Total Logger Keys: %d\n", Logging.instance().keyCount()); - - // This reduces the allocated heap size, not just the used heap size, which - // means more-frequent and smaller subsequent GC's. - System.gc(); - } - - /** - * robotPeriodic is called in the IterativeRobotBase.loopFunc, which is what the - * TimedRobot runs in the main loop. - */ - @Override - public void robotPeriodic() { - // Cache instances hold measurements that we want to keep consistent - // for an entire cycle, but that we want to forget between cycles, so we - // reset them all here. - Memo.resetAll(); - CommandScheduler.getInstance().run(); - - m_log_ds_MatchTime.log(DriverStation::getMatchTime); - m_log_ds_AutonomousEnabled.log(DriverStation::isAutonomousEnabled); - m_log_ds_TeleopEnabled.log(DriverStation::isTeleopEnabled); - m_log_ds_FMSAttached.log(DriverStation::isFMSAttached); - - m_jvmLogger.logGarbageCollectors(); - m_jvmLogger.logMemoryPools(); - m_jvmLogger.logMemoryUsage(); - - Logging.instance().periodic(); - - if (Experiments.instance.enabled(Experiment.FlushOften)) { - Util.warn("FLUSHING EVERY LOOP, DO NOT USE IN COMP"); - NetworkTableInstance.getDefault().flush(); - } - } - - @Override - public void disabledPeriodic() { - m_log_mode.log(() -> "disabled"); - int keyListSize = NetworkTableInstance.getDefault().getTable("Vision").getKeys().size(); - m_log_key_list_size.log(() -> keyListSize); - // this forces the static initializer to run, so that the widget appears. - } - - @Override - public void autonomousInit() { - } - - @Override - public void teleopInit() { - // this cancels all the default commands, resulting in them being rescheduled - // immediately, which seems like maybe not great? - CommandScheduler.getInstance().cancelAll(); - - } - - @Override - public void testInit() { - clearCommands(); - } - - @Override - public void testExit() { - clearCommands(); - } - - private void clearCommands() { - CommandScheduler.getInstance().cancelAll(); - CommandScheduler.getInstance().clearComposedCommands(); - } - - @Override - public void close() { - super.close(); - } - - @Override - public void autonomousPeriodic() { - m_log_mode.log(() -> "autonomous"); - } - - @Override - public void simulationPeriodic() { - // - } - - @Override - public void teleopPeriodic() { - m_log_mode.log(() -> "teleop"); - m_log_voltage.log(RobotController::getBatteryVoltage); - } - - @Override - public void testPeriodic() { - m_log_mode.log(() -> "test"); - } - - @Override - public void simulationInit() { - DriverStation.silenceJoystickConnectionWarning(true); - } - - private void banner() { - StringBuilder b = new StringBuilder(); - b.append(kOrange); - b.append("\n"); - b.append("######## ######## ### ## ## ## ##### ##### \n"); - b.append(" ## ## ## ## ### ### #### ## ## ## ## \n"); - b.append(" ## ## ## ## #### #### ## ## ## ## ##\n"); - b.append(" ## ###### ## ## ## ### ## ## ## ## ## ##\n"); - b.append(" ## ## ######### ## ## ## ## ## ## ##\n"); - b.append(" ## ## ## ## ## ## ## ## ## ## ## \n"); - b.append(" ## ######## ## ## ## ## ###### ##### ##### \n"); - b.append("\n"); - b.append(kReset); - Util.println(b.toString()); - - } -} \ No newline at end of file diff --git a/studies/Turret/src/main/java/org/team100/frc2024/RobotContainer.java b/studies/Turret/src/main/java/org/team100/frc2024/RobotContainer.java deleted file mode 100644 index 24fdf2c..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/RobotContainer.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.team100.frc2024; - -import java.io.IOException; -import java.util.function.BooleanSupplier; - -import org.team100.frc2024.commands.TurretDefault; -import org.team100.frc2024.turret.Turret; -import org.team100.frc2024.turret.TurretCollection; -import org.team100.lib.async.Async; -import org.team100.lib.async.AsyncFactory; -import org.team100.lib.framework.TimedRobot100; -import org.team100.lib.hid.DriverControl; -import org.team100.lib.hid.DriverControlProxy; -import org.team100.lib.logging.Level; -import org.team100.lib.logging.LevelPoller; -import org.team100.lib.logging.LoggerFactory; -import org.team100.lib.logging.Logging; -import org.team100.lib.util.Util; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; -import edu.wpi.first.wpilibj2.command.button.Trigger; - -public class RobotContainer { - private final Turret m_turret; - - public RobotContainer(TimedRobot100 robot) throws IOException { - final AsyncFactory asyncFactory = new AsyncFactory(robot); - final Async async = asyncFactory.get(); - final Logging logging = Logging.instance(); - final LevelPoller poller = new LevelPoller(async, logging::setLevel, Level.COMP); - Util.printf("Using log level %s\n", poller.getLevel().name()); - Util.println("Do not use TRACE in comp, with NT logging, it will overrun"); - final LoggerFactory logger = logging.rootLogger; - - final LoggerFactory sysLog = logger.child("Subsystems"); - - final DriverControl driverControl = new DriverControlProxy(logger, async); - - TurretCollection turretCollection = TurretCollection.get(sysLog); - m_turret = new Turret(sysLog,turretCollection); - m_turret.setDefaultCommand(new TurretDefault(driverControl::velocity, m_turret)); - whileTrue(driverControl::fullCycle, m_turret.run(() -> m_turret.setAngle(Math.PI/2))); - whileTrue(driverControl::driveToNote, m_turret.run(() -> m_turret.setAngle(0))); - whileTrue(driverControl::ampLock, m_turret.run(() -> m_turret.setAngle(Math.PI))); - whileTrue(driverControl::shooterLock, m_turret.run(() -> m_turret.setAngle(Math.PI*1.5))); - } - - - public void onInit() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } - private void whileTrue(BooleanSupplier condition, Command command) { - new Trigger(condition).whileTrue(command); - } -} diff --git a/studies/Turret/src/main/java/org/team100/frc2024/commands/TurretDefault.java b/studies/Turret/src/main/java/org/team100/frc2024/commands/TurretDefault.java deleted file mode 100644 index 071eb92..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/commands/TurretDefault.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.team100.frc2024.commands; - -import java.util.function.Supplier; - -import org.team100.frc2024.turret.Turret; -import org.team100.lib.hid.DriverControl; -import org.team100.lib.hid.DriverControl.Velocity; - -import edu.wpi.first.wpilibj2.command.Command; - -public class TurretDefault extends Command { - private final Turret m_turret; - private final Supplier m_supplier; - - public TurretDefault( - Supplier twistSupplier, - Turret turret) { - m_turret = turret; - m_supplier = twistSupplier; - addRequirements(m_turret); - } - - @Override - public void initialize() {} - - @Override - public void execute() { - Velocity velocity = m_supplier.get(); - if (Math.abs(velocity.y()) > 0.25 || Math.abs(velocity.x()) > 0.25) { - m_turret.setAngle(Math.atan2(velocity.y(), -1.0 * velocity.x())); - } - } - - @Override - public void end(boolean interrupted) { - m_turret.stop(); - } -} diff --git a/studies/Turret/src/main/java/org/team100/frc2024/turret/Turret.java b/studies/Turret/src/main/java/org/team100/frc2024/turret/Turret.java deleted file mode 100644 index cfb38d8..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/turret/Turret.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.team100.frc2024.turret; - -import org.team100.lib.dashboard.Glassy; -import org.team100.lib.logging.Level; -import org.team100.lib.logging.LoggerFactory; -import org.team100.lib.logging.LoggerFactory.DoubleLogger; -import org.team100.lib.motion.servo.OutboardAngularPositionServo; - -import edu.wpi.first.wpilibj2.command.SubsystemBase; - -public class Turret extends SubsystemBase implements Glassy { - private final OutboardAngularPositionServo m_motor; - private final DoubleLogger m_goalPosition; - private final DoubleLogger m_goalVelocity; - public Turret(LoggerFactory parent, TurretCollection turretCollection) { - LoggerFactory logger = parent.child(this); - m_goalPosition = logger.doubleLogger(Level.TRACE, "Goal Position (rad)"); - m_goalVelocity = logger.doubleLogger(Level.TRACE, "Goal Velocity (rad_s)"); - m_motor = turretCollection.getTurret(); - } - - public void setAngle(double angle) { - m_motor.setPosition(angle, 0); - m_goalPosition.log(() -> angle); - } - - public void setAngleWithVelocity(double angle, double angle_2) { - m_motor.setPositionWithVelocity(angle, angle_2, 0); - m_goalPosition.log(() -> angle); - m_goalVelocity.log(() -> angle_2); - } - - public void stop() { - m_motor.stop(); - } -} diff --git a/studies/Turret/src/main/java/org/team100/frc2024/turret/TurretCollection.java b/studies/Turret/src/main/java/org/team100/frc2024/turret/TurretCollection.java deleted file mode 100644 index f44bd89..0000000 --- a/studies/Turret/src/main/java/org/team100/frc2024/turret/TurretCollection.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.team100.frc2024.turret; - -import org.team100.lib.config.Feedforward100; -import org.team100.lib.config.Identity; -import org.team100.lib.config.PIDConstants; -import org.team100.lib.encoder.CombinedEncoder; -import org.team100.lib.encoder.ProxyRotaryPositionSensor; -import org.team100.lib.encoder.Talon6Encoder; -import org.team100.lib.logging.LoggerFactory; -import org.team100.lib.motion.mechanism.RotaryMechanism; -import org.team100.lib.motion.mechanism.SimpleRotaryMechanism; -import org.team100.lib.motion.mechanism.TurretMechanism; -import org.team100.lib.motion.servo.OutboardAngularPositionServo; -import org.team100.lib.motor.Kraken6Motor; -import org.team100.lib.motor.MotorPhase; -import org.team100.lib.profile.Profile100; -import org.team100.lib.profile.TrapezoidProfile100; -import org.team100.lib.util.Neo550Factory; - -public class TurretCollection { - private static final String kTurret = "Turret"; - - private final OutboardAngularPositionServo m_turret; - - private TurretCollection(OutboardAngularPositionServo turret) { - m_turret = turret; - } - - public static TurretCollection get( - LoggerFactory parent) { - LoggerFactory collectionLogger = parent.child(kTurret); - switch (Identity.instance) { - case SWERVE_TWO: - // TODO get maxVel, and maxAccel - OutboardAngularPositionServo angularPositionServo = createAngularPositionServo( - kTurret, collectionLogger, 40, 40, 1, 14, MotorPhase.REVERSE, - new TrapezoidProfile100(120, 100, 0.01)); - return new TurretCollection(angularPositionServo); - case BLANK: - default: - OutboardAngularPositionServo simServo = getSimServo( - collectionLogger, - new TrapezoidProfile100(1, 1, 0.01)); - return new TurretCollection(simServo); - } - } - - private static OutboardAngularPositionServo getSimServo( - LoggerFactory parent, - Profile100 profile) { - RotaryMechanism rotaryMechanism = Neo550Factory.simulatedRotaryMechanism(parent); - return new OutboardAngularPositionServo( - parent, - rotaryMechanism, - new CombinedEncoder(parent, new ProxyRotaryPositionSensor(rotaryMechanism), rotaryMechanism), - profile); - } - - private static OutboardAngularPositionServo createAngularPositionServo( - String name, - LoggerFactory parent, - int supplyLimit, - int statorLimit, - int canID, - double gearRatio, - MotorPhase motorPhase, - Profile100 profile) { - LoggerFactory moduleLogger = parent.child(name); - // TODO tune PID and feedforward - Kraken6Motor kraken6Motor = new Kraken6Motor(moduleLogger, canID, motorPhase, supplyLimit, statorLimit, - new PIDConstants(1), Feedforward100.makeKrakenTurret()); - RotaryMechanism rotaryMechanism = new TurretMechanism(new SimpleRotaryMechanism(moduleLogger, kraken6Motor, - new Talon6Encoder(moduleLogger, kraken6Motor), gearRatio), -1.0 * Math.PI, Math.PI); - return new OutboardAngularPositionServo( - moduleLogger, - rotaryMechanism, - new CombinedEncoder(moduleLogger, new ProxyRotaryPositionSensor(rotaryMechanism), rotaryMechanism), - profile); - } - - public OutboardAngularPositionServo getTurret() { - return m_turret; - } -} diff --git a/studies/Turret/vendordeps/ChoreoLib.json b/studies/Turret/vendordeps/ChoreoLib.json deleted file mode 100644 index a5f886a..0000000 --- a/studies/Turret/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.2.3", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.2.3" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.2.3", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/NavX.json b/studies/Turret/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/studies/Turret/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/PathplannerLib.json b/studies/Turret/vendordeps/PathplannerLib.json deleted file mode 100644 index 6dc648d..0000000 --- a/studies/Turret/vendordeps/PathplannerLib.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "PathplannerLib.json", - "name": "PathplannerLib", - "version": "2024.2.8", - "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", - "frcYear": "2024", - "mavenUrls": [ - "https://3015rangerrobotics.github.io/pathplannerlib/repo" - ], - "jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json", - "javaDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-java", - "version": "2024.2.8" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.pathplanner.lib", - "artifactId": "PathplannerLib-cpp", - "version": "2024.2.8", - "libName": "PathplannerLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/Phoenix5.json b/studies/Turret/vendordeps/Phoenix5.json deleted file mode 100644 index ff7359e..0000000 --- a/studies/Turret/vendordeps/Phoenix5.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "fileName": "Phoenix5.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.33.1", - "frcYear": 2024, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", - "requires": [ - { - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.33.1" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.33.1" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.1", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.1", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.33.1", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.33.1", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.1", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.33.1", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.33.1", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.1", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/Phoenix6.json b/studies/Turret/vendordeps/Phoenix6.json deleted file mode 100644 index 0322385..0000000 --- a/studies/Turret/vendordeps/Phoenix6.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "fileName": "Phoenix6.json", - "name": "CTRE-Phoenix (v6)", - "version": "24.3.0", - "frcYear": 2024, - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", - "conflictsWith": [ - { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-java", - "version": "24.3.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-cpp", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "24.3.0", - "libName": "CTRE_Phoenix6_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.3.0", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.3.0", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.3.0", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.3.0", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.3.0", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.3.0", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.3.0", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.3.0", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/REVLib.json b/studies/Turret/vendordeps/REVLib.json deleted file mode 100644 index f85acd4..0000000 --- a/studies/Turret/vendordeps/REVLib.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2024.2.4", - "frcYear": "2024", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2024.2.4" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.4", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2024.2.4", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.4", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/Turret/vendordeps/WPILibNewCommands.json b/studies/Turret/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/Turret/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/ads1015/.gitignore b/studies/ads1015/.gitignore deleted file mode 100644 index 3325f5c..0000000 --- a/studies/ads1015/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/ads1015/.vscode/launch.json b/studies/ads1015/.vscode/launch.json deleted file mode 100644 index 5b804e8..0000000 --- a/studies/ads1015/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/ads1015/.vscode/settings.json b/studies/ads1015/.vscode/settings.json deleted file mode 100644 index 8be11f2..0000000 --- a/studies/ads1015/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/ads1015/.wpilib/wpilib_preferences.json b/studies/ads1015/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/ads1015/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/ads1015/README.md b/studies/ads1015/README.md deleted file mode 100644 index f84ec46..0000000 --- a/studies/ads1015/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ADS1015 - -Sample java code for reading values from the ADS1015 I2C ADC. \ No newline at end of file diff --git a/studies/ads1015/WPILib-License.md b/studies/ads1015/WPILib-License.md deleted file mode 100644 index ba35a02..0000000 --- a/studies/ads1015/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/ads1015/build.gradle b/studies/ads1015/build.gradle deleted file mode 100644 index baa242a..0000000 --- a/studies/ads1015/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/ads1015/gradle/wrapper/gradle-wrapper.jar b/studies/ads1015/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/ads1015/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/ads1015/gradle/wrapper/gradle-wrapper.properties b/studies/ads1015/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 7414769..0000000 --- a/studies/ads1015/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/ads1015/gradlew b/studies/ads1015/gradlew deleted file mode 100755 index a69d9cb..0000000 --- a/studies/ads1015/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/ads1015/gradlew.bat b/studies/ads1015/gradlew.bat deleted file mode 100644 index 53a6b23..0000000 --- a/studies/ads1015/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/ads1015/networktables.json b/studies/ads1015/networktables.json deleted file mode 100644 index fe51488..0000000 --- a/studies/ads1015/networktables.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/studies/ads1015/settings.gradle b/studies/ads1015/settings.gradle deleted file mode 100644 index ae1af1c..0000000 --- a/studies/ads1015/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/ads1015/simgui-ds.json b/studies/ads1015/simgui-ds.json deleted file mode 100644 index 73cc713..0000000 --- a/studies/ads1015/simgui-ds.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "keyboardJoysticks": [ - { - "axisConfig": [ - { - "decKey": 65, - "incKey": 68 - }, - { - "decKey": 87, - "incKey": 83 - }, - { - "decKey": 69, - "decayRate": 0.0, - "incKey": 82, - "keyRate": 0.009999999776482582 - } - ], - "axisCount": 3, - "buttonCount": 4, - "buttonKeys": [ - 90, - 88, - 67, - 86 - ], - "povConfig": [ - { - "key0": 328, - "key135": 323, - "key180": 322, - "key225": 321, - "key270": 324, - "key315": 327, - "key45": 329, - "key90": 326 - } - ], - "povCount": 1 - }, - { - "axisConfig": [ - { - "decKey": 74, - "incKey": 76 - }, - { - "decKey": 73, - "incKey": 75 - } - ], - "axisCount": 2, - "buttonCount": 4, - "buttonKeys": [ - 77, - 44, - 46, - 47 - ], - "povCount": 0 - }, - { - "axisConfig": [ - { - "decKey": 263, - "incKey": 262 - }, - { - "decKey": 265, - "incKey": 264 - } - ], - "axisCount": 2, - "buttonCount": 6, - "buttonKeys": [ - 260, - 268, - 266, - 261, - 269, - 267 - ], - "povCount": 0 - }, - { - "axisCount": 0, - "buttonCount": 0, - "povCount": 0 - } - ] -} diff --git a/studies/ads1015/simgui.json b/studies/ads1015/simgui.json deleted file mode 100644 index 596b247..0000000 --- a/studies/ads1015/simgui.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "NTProvider": { - "types": { - "/FMSInfo": "FMSInfo" - } - }, - "NetworkTables": { - "transitory": { - "LiveWindow": { - "open": true - }, - "Shuffleboard": { - "open": true - } - } - } -} diff --git a/studies/ads1015/src/main/deploy/example.txt b/studies/ads1015/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/ads1015/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/ads1015/src/main/java/frc/robot/Main.java b/studies/ads1015/src/main/java/frc/robot/Main.java deleted file mode 100644 index 8776e5d..0000000 --- a/studies/ads1015/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -/** - * Do NOT add any static variables to this class, or any initialization at all. Unless you know what - * you are doing, do not modify this file except to change the parameter class to the startRobot - * call. - */ -public final class Main { - private Main() {} - - /** - * Main initialization function. Do not perform any initialization here. - * - *

If you change your main robot class, change the parameter type. - */ - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/ads1015/src/main/java/frc/robot/Robot.java b/studies/ads1015/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 9d9c454..0000000 --- a/studies/ads1015/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.hal.DriverStationJNI; -import edu.wpi.first.util.WPIUtilJNI; -import edu.wpi.first.wpilibj.DriverStation; -import edu.wpi.first.wpilibj.RobotBase; -import edu.wpi.first.wpilibj.internal.DriverStationModeThread; - -/** - * The VM is configured to automatically run this class. If you change the name of this class or the - * package after creating this project, you must also update the build.gradle file in the project. - */ -public class Robot extends RobotBase { - public void robotInit() {} - - public void disabled() {} - - public void autonomous() {} - - public void teleop() {} - - public void test() {} - - private volatile boolean m_exit; - - @Override - public void startCompetition() { - robotInit(); - - DriverStationModeThread modeThread = new DriverStationModeThread(); - - int event = WPIUtilJNI.createEvent(false, false); - - DriverStation.provideRefreshedDataEventHandle(event); - - // Tell the DS that the robot is ready to be enabled - DriverStationJNI.observeUserProgramStarting(); - - while (!Thread.currentThread().isInterrupted() && !m_exit) { - if (isDisabled()) { - modeThread.inDisabled(true); - disabled(); - modeThread.inDisabled(false); - while (isDisabled()) { - try { - WPIUtilJNI.waitForObject(event); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } else if (isAutonomous()) { - modeThread.inAutonomous(true); - autonomous(); - modeThread.inAutonomous(false); - while (isAutonomousEnabled()) { - try { - WPIUtilJNI.waitForObject(event); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } else if (isTest()) { - modeThread.inTest(true); - test(); - modeThread.inTest(false); - while (isTest() && isEnabled()) { - try { - WPIUtilJNI.waitForObject(event); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } else { - modeThread.inTeleop(true); - teleop(); - modeThread.inTeleop(false); - while (isTeleopEnabled()) { - try { - WPIUtilJNI.waitForObject(event); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } - } - - DriverStation.removeRefreshedDataEventHandle(event); - modeThread.close(); - } - - @Override - public void endCompetition() { - m_exit = true; - } -} diff --git a/studies/ads1015/src/main/java/org/team100/lib/sensors/ADS1015.java b/studies/ads1015/src/main/java/org/team100/lib/sensors/ADS1015.java deleted file mode 100644 index e59999e..0000000 --- a/studies/ads1015/src/main/java/org/team100/lib/sensors/ADS1015.java +++ /dev/null @@ -1,293 +0,0 @@ -package org.team100.lib.sensors; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -import edu.wpi.first.wpilibj.I2C; - -/** - * The TI ADS1015 is a 12-bit 4-channel ADC with I2C interface. - * - * This is mostly cribbed from SparkFun and Adafruit: - * - * https://github.com/sparkfun/SparkFun_ADS1015_Arduino_Library - * https://github.com/adafruit/Adafruit_ADS1X15 - * - * Sections and Tables referenced below are from the datasheet: - * - * https://www.ti.com/lit/ds/symlink/ads1015.pdf - * - * Notable from the datasheet: ADS1015 is incapable of clock stretching (section - * 9.1.1), so maybe it will work fine on the MXP I2C port? - * - * The ADS1015 contains a single ADC and a 4-way mux, so reading involves - * configuring the mux, starting the measurement, waiting for completion, and - * then reading the result. - */ -public class ADS1015 { - /** - * Operational status. - * - * See Section 8.6.3, Table 6, bit 15, when writing. - */ - public enum OS_W { - NOP(0b0000_0000_0000_0000), - START(0b1000_0000_0000_0000); - - private final short value; - - private OS_W(int value) { - this.value = (short) value; - } - } - - /** - * Start a single conversion. - * - * See Section 8.6.3, Table 6, bit 15, when reading. - */ - public enum OS_R { - BUSY(0b0000_0000_0000_0000), - NOT_BUSY(0b1000_0000_0000_0000); - - private final short value; - private static final short mask = (short) 0b1000_0000_0000_0000; - - private OS_R(int value) { - this.value = (short) value; - } - } - - /** - * Input multiplexer configuration. - * - * See Section 8.6.3, Table 6, bits 14:12. - */ - public enum MUX { - SINGLE_0(0b0100_0000_0000_0000), - SINGLE_1(0b0101_0000_0000_0000), - SINGLE_2(0b0110_0000_0000_0000), - SINGLE_3(0b0111_0000_0000_0000); - - private static final MUX[] values = new MUX[] { - SINGLE_0, - SINGLE_1, - SINGLE_2, - SINGLE_3 - }; - private final short value; - - private MUX(int value) { - this.value = (short) value; - } - - public static MUX get(int channel) { - return values[channel]; - } - } - - /** - * Programmable gain amplifier configuration. - * - * See Section 8.6.3, Table 6, bits 11:9. - */ - public enum PGA { - FSR_6_144V(0b0000_0000_0000_0000, 3), - FSR_4_096V(0b0000_0010_0000_0000, 2), - FSR_2_048V(0b0000_0100_0000_0000, 1), - FSR_1_024V(0b0000_0110_0000_0000, 0.5), - FSR_0_512V(0b0000_1000_0000_0000, 0.25), - FSR_0_256V(0b0000_1010_0000_0000, 0.125); - - private final short value; - /** - * Millivolts per bit. See Section 8.3.3, Table 1. - */ - private final double mV; - - private PGA(int value, double mV) { - this.value = (short) value; - this.mV = mV; - } - } - - /** - * Device operating mode. - * - * See Section 8.6.3, Table 6, bit 8. - */ - public enum MODE { - CONTINUOUS(0b0000_0000_0000_0000), - SINGLE(0b0000_0001_0000_0000); - - private final short value; - - private MODE(int value) { - this.value = (short) value; - } - } - - /** - * Data rate. - * - * See Section 8.6.3, Table 6, bits 7:5 - */ - public enum DR { - SPS_128(0b0000_0000_0000_0000, 128), - SPS_250(0b0000_0000_0010_0000, 250), - SPS_490(0b0000_0000_0100_0000, 490), - SPS_920(0b0000_0000_0110_0000, 920), - SPS_1600(0b0000_0000_1000_0000, 1600), - SPS_2400(0b0000_0000_1010_0000, 2400), - SPS_3300(0b0000_0000_1100_0000, 3300); - - private final short value; - private final int sps; - - private DR(int value, int sps) { - this.value = (short) value; - this.sps = sps; - } - } - - /** - * I2C address. - * - * 7-bit addr is 0x48, 8-bit addr is 0x91 - */ - private static final byte ADDR = (byte) 0x91; - - /** - * Conversion register. - * - * Contains the 12-bit conversion result, left justified in 16 bits. - * - * See Section 8.6.2. - */ - private static final byte CONV_REG = (byte) 0x00; - - /** - * Config register. - * - * Use the enums above to set bits in this register. - * - * Bits 4:0 are unused, they pertain to the comparator function which sets - * physical pins. - * - * See Section 8.6.3. - */ - private static final byte CFG_REG = (byte) 0x01; - - private final I2C m_i2c; - private final PGA m_pga; - private final DR m_dr; - - /** - * Appropriate for measuring 3.3v signals as slowly and accurately as possible. - */ - public ADS1015() { - this(ADDR, PGA.FSR_4_096V, DR.SPS_128); - } - - private ADS1015(byte i2cAddress, PGA pga, DR dr) { - m_i2c = new I2C(I2C.Port.kMXP, i2cAddress >>> 1); - m_pga = pga; - m_dr = dr; - } - - /** - * Read the voltage on the specified channel. - * - * The full-scale is double-ended (plus and minus) so the single-ended - * GND-referenced reading will use half of the 12-bit range. - * - * Returns zero if something goes wrong (e.g. device not connected or takes - * too long). - * - * See Section 9.1.2 and Section 8.3.3. - */ - public double readVolts(int channel) { - return readRaw(channel) * m_pga.mV / 1000; - } - - /** - * Read the raw 12-bit ADC value for the specified channel. - * - * Returns zero if something goes wrong (e.g. device not connected or takes too - * long). - */ - public short readRaw(int channel) { - if (channel < 0 || channel > 3) - throw new IllegalArgumentException(String.format("Illegal channel: %d", channel)); - startADCReading(MUX.get(channel)); - // Wait for the ADC to finish reading. - // Try a few times (e.g. to recover from i2c bus collisions). - int maxBusy = 5; - do { - try { - // Single-shot power-up takes 25us. See Section 8.4.2.1. - Thread.sleep(0, 25000); - // Conversion time is the inverse of the data rate. See Section 8.3.6. - Thread.sleep(1000 / m_dr.sps, 1000000000 / m_dr.sps % 1000000); - } catch (InterruptedException e) { - // keep trying - } - maxBusy -= 1; - if (maxBusy < 0) { - return 0; - } - } while (busy()); - - return getLastConversionResult(); - } - - /** - * Start a single-shot measurement and return immediately. - */ - private void startADCReading(MUX mux) { - short config = 0; - config |= OS_W.START.value; - config |= mux.value; - config |= m_pga.value; - config |= MODE.SINGLE.value; - config |= m_dr.value; - writeRegister(CFG_REG, config); - } - - /** - * True if the device is currently doing a measurement. - */ - private boolean busy() { - return (readRegister(CFG_REG) & OS_R.mask) == OS_R.BUSY.value; - } - - /** - * Read the result. - * - * The ADS1015 reads 12 bits into 16 left justified, so this shifts right by 4. - */ - private short getLastConversionResult() { - return (short) (readRegister(CONV_REG) >>> 4); - } - - /** - * Read two bytes from the specified register. - */ - private short readRegister(byte register) { - ByteBuffer buf = ByteBuffer.allocate(2); - buf.order(ByteOrder.LITTLE_ENDIAN); - m_i2c.read(register, 2, buf); - return buf.getShort(); - } - - /** - * Write two bytes to the specified register - */ - private void writeRegister(byte register, short value) { - ByteBuffer buf = ByteBuffer.allocate(3); - buf.order(ByteOrder.LITTLE_ENDIAN); - buf.put(register); - buf.putShort(value); - m_i2c.writeBulk(buf, 3); - } -} diff --git a/studies/ads1015/src/test/java/org/team100/lib/sensors/ADS1015Test.java b/studies/ads1015/src/test/java/org/team100/lib/sensors/ADS1015Test.java deleted file mode 100644 index 1b4cde9..0000000 --- a/studies/ads1015/src/test/java/org/team100/lib/sensors/ADS1015Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.team100.lib.sensors; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -public class ADS1015Test { - @Test - void testADS1015() { - ADS1015 ads1015 = new ADS1015(); - assertEquals(0, ads1015.readVolts(0), 0.001); - } - -} diff --git a/studies/ads1015/vendordeps/WPILibNewCommands.json b/studies/ads1015/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/ads1015/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/arm_example/.gitignore b/studies/arm_example/.gitignore deleted file mode 100644 index 5528d4f..0000000 --- a/studies/arm_example/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/arm_example/.vscode/launch.json b/studies/arm_example/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/arm_example/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/arm_example/.vscode/settings.json b/studies/arm_example/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/arm_example/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/arm_example/.wpilib/wpilib_preferences.json b/studies/arm_example/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/arm_example/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/arm_example/README.md b/studies/arm_example/README.md deleted file mode 100644 index 2569f62..0000000 --- a/studies/arm_example/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Arm Example - -Demonstrates how to use the arm code. \ No newline at end of file diff --git a/studies/arm_example/WPILib-License.md b/studies/arm_example/WPILib-License.md deleted file mode 100644 index 43b62ec..0000000 --- a/studies/arm_example/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2023 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/arm_example/arm_example.code-workspace b/studies/arm_example/arm_example.code-workspace deleted file mode 100644 index c126ca6..0000000 --- a/studies/arm_example/arm_example.code-workspace +++ /dev/null @@ -1,15 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - { - "path": "../../lib" - } - ], - "settings": { - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "workbench.colorTheme": "Default Light Modern" - } -} \ No newline at end of file diff --git a/studies/arm_example/build.gradle b/studies/arm_example/build.gradle deleted file mode 100644 index be879ea..0000000 --- a/studies/arm_example/build.gradle +++ /dev/null @@ -1,112 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.1.1" -} - -sourceSets { - main { - java { - srcDir "../../lib/src/main/java" - } - } -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - - implementation 'org.msgpack:jackson-dataformat-msgpack:0.9.3' - - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - // testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/arm_example/gradle/wrapper/gradle-wrapper.jar b/studies/arm_example/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/arm_example/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/arm_example/gradle/wrapper/gradle-wrapper.properties b/studies/arm_example/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5e82d67..0000000 --- a/studies/arm_example/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/arm_example/gradlew b/studies/arm_example/gradlew deleted file mode 100644 index 1aa94a4..0000000 --- a/studies/arm_example/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/arm_example/gradlew.bat b/studies/arm_example/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/studies/arm_example/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/arm_example/settings.gradle b/studies/arm_example/settings.gradle deleted file mode 100644 index d94f73c..0000000 --- a/studies/arm_example/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/arm_example/src/main/deploy/example.txt b/studies/arm_example/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/arm_example/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/arm_example/src/main/java/frc/robot/Main.java b/studies/arm_example/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/arm_example/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/arm_example/src/main/java/frc/robot/Robot.java b/studies/arm_example/src/main/java/frc/robot/Robot.java deleted file mode 100644 index ff923f4..0000000 --- a/studies/arm_example/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,38 +0,0 @@ - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} -} diff --git a/studies/arm_example/src/main/java/frc/robot/RobotContainer.java b/studies/arm_example/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index 62e1f63..0000000 --- a/studies/arm_example/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,71 +0,0 @@ -package frc.robot; - -import org.team100.lib.commands.arm.CartesianManualArm; -import org.team100.lib.commands.arm.CartesianManualPositionalArm; -import org.team100.lib.commands.arm.ManualArm; -import org.team100.lib.commands.arm.Sequence; -import org.team100.lib.commands.simple.SimpleManual; -import org.team100.lib.commands.simple.SimpleManualMode; -import org.team100.lib.hid.ControlFactory; -import org.team100.lib.hid.OperatorControl; -import org.team100.lib.motion.arm.ArmFactory; -import org.team100.lib.motion.arm.ArmKinematics; -import org.team100.lib.motion.arm.ArmSubsystem; -import org.team100.lib.motion.simple.SimpleSubsystem; -import org.team100.lib.motion.simple.SimpleSubsystemFactory; - -import edu.wpi.first.wpilibj2.command.Command; - -public class RobotContainer { - private final Command m_auton; - private final ArmSubsystem m_armSubsystem; - private final ArmKinematics m_armKinematicsM; - private final SimpleSubsystem m_elevator; - - public RobotContainer() { - ControlFactory controlFactory = new ControlFactory(); - OperatorControl operatorControl = controlFactory.getOperatorControl(); - - /////////////////////// - // - // ARM - // - - m_armSubsystem = ArmFactory.get(); - m_armKinematicsM = new ArmKinematics(0.93, 0.92); - - operatorControl.doSomething().whileTrue(new Sequence(m_armSubsystem, m_armKinematicsM)); - - operatorControl.never().whileTrue( - new ManualArm( - m_armSubsystem, - operatorControl::lower, - operatorControl::upper)); - - operatorControl.never().whileTrue( - new CartesianManualArm( - m_armSubsystem, - m_armKinematicsM, - operatorControl::lower, - operatorControl::upper)); - - m_armSubsystem.setDefaultCommand( - new CartesianManualPositionalArm( - m_armSubsystem, - m_armKinematicsM, - operatorControl::lower, - operatorControl::upper)); - - /////////////////////////// - // - // ELEVATOR - // - m_elevator = new SimpleSubsystemFactory().get(); - SimpleManualMode simpleMode = new SimpleManualMode(); - m_elevator.setDefaultCommand(new SimpleManual(simpleMode, m_elevator, operatorControl::elevator)); - - m_auton = new Sequence(m_armSubsystem, m_armKinematicsM); - - } - -} diff --git a/studies/arm_example/vendordeps/ChoreoLib.json b/studies/arm_example/vendordeps/ChoreoLib.json deleted file mode 100644 index e08fc12..0000000 --- a/studies/arm_example/vendordeps/ChoreoLib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "fileName": "ChoreoLib.json", - "name": "ChoreoLib", - "version": "2024.1.0", - "uuid": "287cff6e-1b60-4412-8059-f6834fb30e30", - "frcYear": "2024", - "mavenUrls": [ - "https://SleipnirGroup.github.io/ChoreoLib/dep" - ], - "jsonUrl": "https://SleipnirGroup.github.io/ChoreoLib/dep/ChoreoLib.json", - "javaDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-java", - "version": "2024.1.0" - }, - { - "groupId": "com.google.code.gson", - "artifactId": "gson", - "version": "2.10.1" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.choreo.lib", - "artifactId": "ChoreoLib-cpp", - "version": "2024.1.0", - "libName": "ChoreoLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal", - "linuxathena", - "linuxarm32", - "linuxarm64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/arm_example/vendordeps/NavX.json b/studies/arm_example/vendordeps/NavX.json deleted file mode 100644 index e978a5f..0000000 --- a/studies/arm_example/vendordeps/NavX.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fileName": "NavX.json", - "name": "NavX", - "version": "2024.1.0", - "uuid": "cb311d09-36e9-4143-a032-55bb2b94443b", - "frcYear": "2024", - "mavenUrls": [ - "https://dev.studica.com/maven/release/2024/" - ], - "jsonUrl": "https://dev.studica.com/releases/2024/NavX.json", - "javaDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-java", - "version": "2024.1.0" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "com.kauailabs.navx.frc", - "artifactId": "navx-frc-cpp", - "version": "2024.1.0", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": false, - "libName": "navx_frc", - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxraspbian", - "linuxarm32", - "linuxarm64", - "linuxx86-64", - "osxuniversal", - "windowsx86-64" - ] - } - ] -} \ No newline at end of file diff --git a/studies/arm_example/vendordeps/Phoenix5.json b/studies/arm_example/vendordeps/Phoenix5.json deleted file mode 100644 index 88a68dd..0000000 --- a/studies/arm_example/vendordeps/Phoenix5.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "fileName": "Phoenix5.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.33.0", - "frcYear": 2024, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json", - "requires": [ - { - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.", - "offlineFileName": "Phoenix6.json", - "onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.33.0" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-java", - "version": "5.33.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix", - "artifactId": "wpiapi-cpp", - "version": "5.33.0", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.33.0", - "libName": "CTRE_Phoenix", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.33.0", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "5.33.0", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.33.0", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.33.0", - "libName": "CTRE_PhoenixCCISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/arm_example/vendordeps/Phoenix6.json b/studies/arm_example/vendordeps/Phoenix6.json deleted file mode 100644 index 69a4079..0000000 --- a/studies/arm_example/vendordeps/Phoenix6.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "fileName": "Phoenix6.json", - "name": "CTRE-Phoenix (v6)", - "version": "24.1.0", - "frcYear": 2024, - "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", - "mavenUrls": [ - "https://maven.ctr-electronics.com/release/" - ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json", - "conflictsWith": [ - { - "uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a", - "errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.", - "offlineFileName": "Phoenix6And5.json" - } - ], - "javaDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-java", - "version": "24.1.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.1.0", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ], - "cppDependencies": [ - { - "groupId": "com.ctre.phoenix6", - "artifactId": "wpiapi-cpp", - "version": "24.1.0", - "libName": "CTRE_Phoenix6_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6", - "artifactId": "tools", - "version": "24.1.0", - "libName": "CTRE_PhoenixTools", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "wpiapi-cpp-sim", - "version": "24.1.0", - "libName": "CTRE_Phoenix6_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "tools-sim", - "version": "24.1.0", - "libName": "CTRE_PhoenixTools_Sim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonSRX", - "version": "24.1.0", - "libName": "CTRE_SimTalonSRX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simTalonFX", - "version": "24.1.0", - "libName": "CTRE_SimTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simVictorSPX", - "version": "24.1.0", - "libName": "CTRE_SimVictorSPX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simPigeonIMU", - "version": "24.1.0", - "libName": "CTRE_SimPigeonIMU", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simCANCoder", - "version": "24.1.0", - "libName": "CTRE_SimCANCoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProTalonFX", - "version": "24.1.0", - "libName": "CTRE_SimProTalonFX", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProCANcoder", - "version": "24.1.0", - "libName": "CTRE_SimProCANcoder", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix6.sim", - "artifactId": "simProPigeon2", - "version": "24.1.0", - "libName": "CTRE_SimProPigeon2", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - } - ] -} \ No newline at end of file diff --git a/studies/arm_example/vendordeps/REVLib.json b/studies/arm_example/vendordeps/REVLib.json deleted file mode 100644 index 0f3520e..0000000 --- a/studies/arm_example/vendordeps/REVLib.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "fileName": "REVLib.json", - "name": "REVLib", - "version": "2024.2.0", - "frcYear": "2024", - "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", - "mavenUrls": [ - "https://maven.revrobotics.com/" - ], - "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2024.json", - "javaDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-java", - "version": "2024.2.0" - } - ], - "jniDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.0", - "skipInvalidPlatforms": true, - "isJar": false, - "validPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ], - "cppDependencies": [ - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-cpp", - "version": "2024.2.0", - "libName": "REVLib", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - }, - { - "groupId": "com.revrobotics.frc", - "artifactId": "REVLib-driver", - "version": "2024.2.0", - "libName": "REVLibDriver", - "headerClassifier": "headers", - "sharedLibrary": false, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "windowsx86", - "linuxarm64", - "linuxx86-64", - "linuxathena", - "linuxarm32", - "osxuniversal" - ] - } - ] -} \ No newline at end of file diff --git a/studies/arm_example/vendordeps/WPILibNewCommands.json b/studies/arm_example/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/arm_example/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/barcode/.gitignore b/studies/barcode/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/barcode/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/barcode/.vscode/launch.json b/studies/barcode/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/barcode/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/barcode/.vscode/settings.json b/studies/barcode/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/barcode/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/barcode/.wpilib/wpilib_preferences.json b/studies/barcode/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/barcode/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/barcode/README.md b/studies/barcode/README.md deleted file mode 100644 index 729db72..0000000 --- a/studies/barcode/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Punchcard - -experimenting with the battery-minder code reader. - -The specific sensor used, the Omron EE-SY1201, focuses at 3mm. - -Background on the Omron line of reflective sensors that are probably used here: - -https://components.omron.com/eu-en/sites/components.omron.com.eu/files/ds_related_pdf/E464-E1.pdf - -Datasheet of the specific sensor that is probably used: - -https://components.omron.com/eu-en/sites/components.omron.com.eu/files/datasheet_pdf/E602-E1.pdf - -Omron product page: - -https://components.omron.com/eu-en/products/sensors/ee-sy1201 - -Pololu doesn't actually disclose the components they use, I imagine because of copycats, so these are guesses. \ No newline at end of file diff --git a/studies/barcode/WPILib-License.md b/studies/barcode/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/barcode/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/barcode/barcode.svg b/studies/barcode/barcode.svg deleted file mode 100644 index 535b2d2..0000000 --- a/studies/barcode/barcode.svg +++ /dev/null @@ -1,610 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/studies/barcode/barcode_labels.svg b/studies/barcode/barcode_labels.svg deleted file mode 100644 index 9e9304d..0000000 --- a/studies/barcode/barcode_labels.svg +++ /dev/null @@ -1,2211 +0,0 @@ - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - 1 - - - - - - - - - - - 2 - - - - - - - - - - - 3 - - - - - - - - - - - 4 - - - - - - - - - - - 5 - - - - - - - - - - - 6 - - - - - - - - - - - 7 - - - - - - - - - - - 8 - - - - - - - - - - - 9 - - - - - - - - - - - 0 - 1 - - - - - - - - - - - 1 - 1 - - - - - - - - - - - 3 - 1 - - - - - - - - - - - 2 - 1 - - - - - - - - - - - 6 - 1 - - - 5 - - - - - - - - - - 1 - - - - - - - - - - - - 4 - 1 - - - - - - - - - - - 7 - 1 - - - - - - - - - - - 8 - 1 - - - - - - - - - - - 9 - 1 - - - - - - - - - - - 0 - 2 - - - - - - - - - - - 1 - 2 - - - - - - - - - - - 2 - 2 - - - 3 - - - - - - - - - - 2 - - - - - - - - - - - - 4 - 2 - - - - - - - - - - - 5 - 2 - - - - - - - - - - - 6 - 2 - - - - - - - - - - - 7 - 2 - - - - - - - - - - - 8 - 2 - - - - - - - - - - - 9 - 2 - - - - - - - - - - - 0 - 3 - - - 1 - - - - - - - - - - 3 - - - Team 100 battery barcodes - - diff --git a/studies/barcode/build.gradle b/studies/barcode/build.gradle deleted file mode 100644 index 12d40f6..0000000 --- a/studies/barcode/build.gradle +++ /dev/null @@ -1,99 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "org.team100.frc2024.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/barcode/gradle/wrapper/gradle-wrapper.jar b/studies/barcode/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/barcode/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/barcode/gradle/wrapper/gradle-wrapper.properties b/studies/barcode/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/barcode/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/barcode/gradlew b/studies/barcode/gradlew deleted file mode 100755 index a69d9cb..0000000 --- a/studies/barcode/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/barcode/gradlew.bat b/studies/barcode/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/barcode/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/barcode/settings.gradle b/studies/barcode/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/barcode/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/barcode/src/main/java/org/team100/frc2024/Main.java b/studies/barcode/src/main/java/org/team100/frc2024/Main.java deleted file mode 100644 index 3e4b70b..0000000 --- a/studies/barcode/src/main/java/org/team100/frc2024/Main.java +++ /dev/null @@ -1,13 +0,0 @@ - -package org.team100.frc2024; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() { - } - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/barcode/src/main/java/org/team100/frc2024/Robot.java b/studies/barcode/src/main/java/org/team100/frc2024/Robot.java deleted file mode 100644 index 240b89e..0000000 --- a/studies/barcode/src/main/java/org/team100/frc2024/Robot.java +++ /dev/null @@ -1,36 +0,0 @@ - -package org.team100.frc2024; - -import org.team100.lib.barcode.Barcode; - -import edu.wpi.first.wpilibj.TimedRobot; - -public class Robot extends TimedRobot { - - private final Barcode barcode; - - public Robot() { - barcode = new Barcode(); - } - - @Override - public void robotInit() { - barcode.robotInit(); - } - - @Override - public void teleopPeriodic() { - barcode.teleopPeriodic(); - } - - @Override - public void testPeriodic() { - barcode.testPeriodic(); - } - - @Override - public void close() { - super.close(); - barcode.close(); - } -} diff --git a/studies/barcode/src/main/java/org/team100/lib/barcode/Barcode.java b/studies/barcode/src/main/java/org/team100/lib/barcode/Barcode.java deleted file mode 100644 index 22e08bf..0000000 --- a/studies/barcode/src/main/java/org/team100/lib/barcode/Barcode.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.team100.lib.barcode; - -import java.util.function.IntSupplier; - -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.DigitalOutput; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** Encapsulates the code reader. */ -public class Barcode implements IntSupplier { - private final DigitalOutput[] m_outputs; - private final Mux mux; - private final AnalogInput m_input; - private final DigitalOutput m_odd; - private final DigitalOutput m_even; - private final Sensor m_array; - - private int id; - - public Barcode() { - m_outputs = new DigitalOutput[] { - new DigitalOutput(0), - new DigitalOutput(1), - new DigitalOutput(2), - new DigitalOutput(3) - }; - mux = new Mux(m_outputs); - m_input = new AnalogInput(0); - m_odd = new DigitalOutput(5); - m_even = new DigitalOutput(4); - - // TODO: tune the thresholds - double[] thresholds = new double[] { 2.5, 3, 3, 2.4, 2.5 }; - m_array = new Sensor( - m_input, - thresholds, - mux, - m_odd, - m_even); - } - - public void robotInit() { - // TODO: represent failure in a better way than -1. - id = m_array.readValue().orElse(-1); - } - - public void teleopPeriodic() { - System.out.printf("%d %5.3f\n", - m_array.readValue().getAsInt(), - m_input.getAverageVoltage()); - } - - public void testPeriodic() { - mux.set(1); - try { - Thread.sleep(5, 0); - } catch (InterruptedException e) { - e.printStackTrace(); - } // led driver startup time - SmartDashboard.putNumber("Real 1", m_input.getAverageVoltage()); - - mux.set(0); - try { - Thread.sleep(5, 0); - } catch (InterruptedException e) { - e.printStackTrace(); - } - SmartDashboard.putNumber("Real 0", m_input.getAverageVoltage()); - } - - public void close() { - for (int i = 0; i < m_outputs.length; ++i) { - m_outputs[i].close(); - } - m_input.close(); - m_odd.close(); - m_even.close(); - } - - @Override - public int getAsInt() { - return id; - } - -} diff --git a/studies/barcode/src/main/java/org/team100/lib/barcode/Mux.java b/studies/barcode/src/main/java/org/team100/lib/barcode/Mux.java deleted file mode 100644 index 6c58250..0000000 --- a/studies/barcode/src/main/java/org/team100/lib/barcode/Mux.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.team100.lib.barcode; - -import edu.wpi.first.wpilibj.DigitalOutput; - -/** - * Wraps the Sparkfun 16-channel analog Multiplexer based on the Texas - * Instruments CD74HC4067. - * - * https://www.sparkfun.com/products/9056 - * - * TODO: add partitioning, when we have anything to partition. - */ -public class Mux { - private static final int kSelectors = 4; - private final DigitalOutput[] m_outputs; - - /** - * @param outputs the digital IO pins corresponding to each selector pin. - */ - public Mux(DigitalOutput[] outputs) { - if (outputs.length != 4) - throw new IllegalArgumentException("must supply four channels. you supplied " + outputs.length); - - m_outputs = outputs; - } - - public void set(int channel) { - boolean[] truth = truth(channel); - for (int i = 0; i < kSelectors; ++i) { - m_outputs[i].set(truth[i]); - } - } - - /////////////////////////////////////////////////// - - /** - * The truth table as described on the datasheet page two: - * https://www.sparkfun.com/datasheets/IC/cd74hc4067.pdf - */ - static boolean[] truth(int channel) { - return toArray(channel, kSelectors); - } - - /** @return binary representation of channel */ - static boolean[] toArray(int channel, int maxChannels) { - boolean[] result = new boolean[maxChannels]; - for (int i = 0; i < maxChannels; ++i) { - result[i] = (channel & (1 << i)) != 0; - } - return result; - } -} diff --git a/studies/barcode/src/main/java/org/team100/lib/barcode/Sensor.java b/studies/barcode/src/main/java/org/team100/lib/barcode/Sensor.java deleted file mode 100644 index f39e370..0000000 --- a/studies/barcode/src/main/java/org/team100/lib/barcode/Sensor.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.team100.lib.barcode; - -import java.util.OptionalInt; - -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.DigitalOutput; - -/** - * Represents the id sensor assembly, which consists of two parts: - * - * * Pololu QTRX-HD-05A, a 5-channel reflective infrared photosensor - * * Sparkfun 16-channel multiplexer - * - * The sensor provides 5 outputs, which are multiplexed to one RoboRIO analog - * input. - * - * The multiplexer is controlled with 4 inputs, which are driven by RoboRIO - * digital outputs. The same multiplexer (and analog input) may be used for - * other inputs, e.g. a second photosensor, dip switches, etc. - * - * The sensor emitters leak light to their neighbors, so there are two control - * pins which activate the "odd" and "even" emitters. These are connected to DIO - * outputs, and can be left "off" if the value isn't being read. - * - * Note that the array uses *one based* numbering for the sensors and for the - * meaning of "odd" and "even," but the sensor pins themselves are wired in a - * zero-based way. - * - * The LED controller appears to be an On Semi FAN5622 series, which responds - * to the CTRL signal in about 85 us to turn on, and 600us to turn off, - * which is fast but not that fast; we should read all the odds, flip the - * emitters, - * and then read all the evens. - * - * https://www.onsemi.com/pdf/datasheet/fan5626-d.pdf - * - * The photosensor on/off threshold also varies by position to account for light - * leakage. - * - * The sensor used seems to be the Omron EE-SY1201 Reflective Photomicrosensor. - * - * The output is a resistor pulling up and a photocell pulling down, so the - * output is inversely proportional to measures incident light: 0v is a lot, - * 5v is dark. so ambient light can drive it low and if the surface is too - * close, then the illuminator is shaded from the sensor, so a "light" surface - * can seem "dark" so you need the surface to be a few mm away -- actually the - * focal length is 3mm, so that's where the surface should be too. - * - * Note that the response time of the sensor depends on the pull-up resistor - * value, and the Pololu board uses quite a large resistor, 47k ohms, which - * means that - * the rise and fall times are about 300 us. - * - * Datasheet: - * - * https://components.omron.com/us-en/datasheet_pdf/E602-E1.pdf - * - * - * Pololu product page: - * - * https://www.pololu.com/product/4405/resources - */ -public class Sensor { - private final double[] m_thresholds; - private final AnalogInput m_input; - private final Mux m_mux; - private final DigitalOutput m_odd; - private final DigitalOutput m_even; - - /** - * @param input all the sensors are multiplexed to one analog input. - * @param thresholds for each sensor, N of them. - * @param mux the array uses N pins starting at zero. - * @param odd turn on the odd emitters when high - * @param even turn on the even emitters when high - */ - public Sensor( - AnalogInput input, - double[] thresholds, - Mux mux, - DigitalOutput odd, - DigitalOutput even) { - m_input = input; - m_thresholds = thresholds; - m_mux = mux; - m_odd = odd; - m_even = even; - // the default state for the outputs should be off - m_odd.set(false); - m_even.set(false); - } - - /** @return the number represented by the barcode. */ - public OptionalInt readValue() { - boolean[] read = read(); - if (read.length == 0) - return OptionalInt.empty(); - return OptionalInt.of(toChannel(read)); - } - - ///////////////////////////////////////////////// - - /** - * @return array representing the state of the sensors, 1 means dark - */ - boolean[] read() { - try { - boolean[] result = new boolean[m_thresholds.length]; - // to read all the bits, we have to scan with the mux. - // first turn on the odd emitters, which actually means 0,2,4. - m_odd.set(true); - Thread.sleep(0, 85);// led driver startup time - Thread.sleep(0, 200);// sensor startup time minus the mux time below - for (int i = 0; i < m_thresholds.length; i += 2) { - m_mux.set(i); - Thread.sleep(5, 0);// 100ns of settling time - result[i] = readInput(m_thresholds[i], i); - } - // switch the emitters to 1,3 (note the confusing naming here) - m_odd.set(false); - m_even.set(true); - Thread.sleep(0, 85);// led driver startup time - Thread.sleep(0, 200);// sensor startup time minus the mux time below - for (int i = 1; i < m_thresholds.length; i += 2) { - m_mux.set(i); - Thread.sleep(5, 0);// 100ns of settling time - result[i] = readInput(m_thresholds[i], i); - } - m_even.set(false); - return result; - } catch (InterruptedException e) { - e.printStackTrace(); - return new boolean[0]; // empty means failure - } finally { - // make sure the emitters are off - m_odd.set(false); - m_even.set(false); - } - } - - /** - * @param threshold above the threshold means dark, 1, below means light, is 0 - * @return true = dark = "1" in the bar code. - */ - boolean readInput(double threshold, int i) { - return m_input.getAverageVoltage() > threshold; - // Sensors go from looking at face left to right 0-4 in order - } - - /** @return int representation of array */ - static int toChannel(boolean[] array) { - int result = 0; - for (int i = 0; i < array.length; ++i) { - result = result | ((array[i] ? 1 : 0) << i); - } - return result; - } -} diff --git a/studies/barcode/src/main/java/org/team100/lib/config/Battery.java b/studies/barcode/src/main/java/org/team100/lib/config/Battery.java deleted file mode 100644 index 025cd10..0000000 --- a/studies/barcode/src/main/java/org/team100/lib/config/Battery.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.team100.lib.config; - -/** - * Represents the identity of the battery as perceived by the barcode reader. - * - * This is an enum in order to keep metadata here, as fields. - * - * Downstream analysis uses the id numbers; they should not be reused. - */ -public enum Battery { - ONE(1, Use.COMP), - TWO(2, Use.COMP), - THREE(3, Use.PRACTICE), - UNKNOWN(0, Use.PROTOTYPE); - - /** To enforce usage rules. */ - public enum Use { - COMP, - PRACTICE, - PROTOTYPE - } - - public final int id; - public final Use use; - - private Battery(int id, Use use) { - this.id = id; - this.use = use; - } -} diff --git a/studies/barcode/src/main/java/org/team100/lib/config/BatteryFactory.java b/studies/barcode/src/main/java/org/team100/lib/config/BatteryFactory.java deleted file mode 100644 index 2a7cf14..0000000 --- a/studies/barcode/src/main/java/org/team100/lib/config/BatteryFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.team100.lib.config; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.IntSupplier; - -public class BatteryFactory { - private final Map batteries = new HashMap<>(); - - private final IntSupplier m_id; - - public BatteryFactory(IntSupplier id) { - m_id = id; - for (Battery b : Battery.values()) { - batteries.put(b.id, b); - } - } - - public Battery get() { - int id = m_id.getAsInt(); - if (batteries.containsKey(id)) - return batteries.get(id); - return Battery.UNKNOWN; - } -} diff --git a/studies/barcode/src/test/java/org/team100/lib/barcode/BarcodeTest.java b/studies/barcode/src/test/java/org/team100/lib/barcode/BarcodeTest.java deleted file mode 100644 index b7a0b73..0000000 --- a/studies/barcode/src/test/java/org/team100/lib/barcode/BarcodeTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.team100.lib.barcode; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -public class BarcodeTest { - @Test - void testSimple() { - Barcode barcode = new Barcode(); - barcode.robotInit(); - assertEquals(0, barcode.getAsInt()); - barcode.teleopPeriodic(); - barcode.testPeriodic(); - barcode.close(); - } - -} diff --git a/studies/barcode/src/test/java/org/team100/lib/barcode/MuxTest.java b/studies/barcode/src/test/java/org/team100/lib/barcode/MuxTest.java deleted file mode 100644 index a0bb4be..0000000 --- a/studies/barcode/src/test/java/org/team100/lib/barcode/MuxTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.team100.lib.barcode; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -import org.junit.jupiter.api.Test; - -public class MuxTest { - - @Test - void testToArray() { - assertArrayEquals(new boolean[] { false, false, false, false }, Mux.toArray(0, 4)); - assertArrayEquals(new boolean[] { true, false, false, false }, Mux.toArray(1, 4)); - assertArrayEquals(new boolean[] { false, true, false, false }, Mux.toArray(2, 4)); - assertArrayEquals(new boolean[] { true, true, false, false }, Mux.toArray(3, 4)); - assertArrayEquals(new boolean[] { false, false, true, false }, Mux.toArray(4, 4)); - assertArrayEquals(new boolean[] { true, false, true, false }, Mux.toArray(5, 4)); - assertArrayEquals(new boolean[] { false, true, true, false }, Mux.toArray(6, 4)); - assertArrayEquals(new boolean[] { true, true, true, false }, Mux.toArray(7, 4)); - assertArrayEquals(new boolean[] { false, false, false, true }, Mux.toArray(8, 4)); - assertArrayEquals(new boolean[] { true, false, false, true }, Mux.toArray(9, 4)); - assertArrayEquals(new boolean[] { false, true, false, true }, Mux.toArray(10, 4)); - assertArrayEquals(new boolean[] { true, true, false, true }, Mux.toArray(11, 4)); - assertArrayEquals(new boolean[] { false, false, true, true }, Mux.toArray(12, 4)); - assertArrayEquals(new boolean[] { true, false, true, true }, Mux.toArray(13, 4)); - assertArrayEquals(new boolean[] { false, true, true, true }, Mux.toArray(14, 4)); - assertArrayEquals(new boolean[] { true, true, true, true }, Mux.toArray(15, 4)); - } -} diff --git a/studies/barcode/src/test/java/org/team100/lib/barcode/SensorTest.java b/studies/barcode/src/test/java/org/team100/lib/barcode/SensorTest.java deleted file mode 100644 index 4006018..0000000 --- a/studies/barcode/src/test/java/org/team100/lib/barcode/SensorTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.team100.lib.barcode; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -public class SensorTest { - - @Test - void testToChannel() { - assertEquals(0, Sensor.toChannel(new boolean[] { false, false, false, false })); - assertEquals(1, Sensor.toChannel(new boolean[] { true, false, false, false })); - assertEquals(2, Sensor.toChannel(new boolean[] { false, true, false, false })); - assertEquals(3, Sensor.toChannel(new boolean[] { true, true, false, false })); - assertEquals(4, Sensor.toChannel(new boolean[] { false, false, true, false })); - assertEquals(5, Sensor.toChannel(new boolean[] { true, false, true, false })); - assertEquals(6, Sensor.toChannel(new boolean[] { false, true, true, false })); - assertEquals(7, Sensor.toChannel(new boolean[] { true, true, true, false })); - assertEquals(8, Sensor.toChannel(new boolean[] { false, false, false, true })); - assertEquals(9, Sensor.toChannel(new boolean[] { true, false, false, true })); - assertEquals(10, Sensor.toChannel(new boolean[] { false, true, false, true })); - assertEquals(11, Sensor.toChannel(new boolean[] { true, true, false, true })); - assertEquals(12, Sensor.toChannel(new boolean[] { false, false, true, true })); - assertEquals(13, Sensor.toChannel(new boolean[] { true, false, true, true })); - assertEquals(14, Sensor.toChannel(new boolean[] { false, true, true, true })); - assertEquals(15, Sensor.toChannel(new boolean[] { true, true, true, true })); - } -} diff --git a/studies/barcode/src/test/java/org/team100/lib/config/BatteryTest.java b/studies/barcode/src/test/java/org/team100/lib/config/BatteryTest.java deleted file mode 100644 index 1dac522..0000000 --- a/studies/barcode/src/test/java/org/team100/lib/config/BatteryTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.team100.lib.config; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class BatteryTest { - @Test - void testSimple() { - BatteryFactory factory = new BatteryFactory(()->1); - Battery battery = factory.get(); - assertEquals(Battery.Use.COMP, battery.use); - } - -} diff --git a/studies/barcode/vendordeps/WPILibNewCommands.json b/studies/barcode/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/barcode/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/beam_break/.gitignore b/studies/beam_break/.gitignore deleted file mode 100644 index 5528d4f..0000000 --- a/studies/beam_break/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/beam_break/.vscode/launch.json b/studies/beam_break/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/beam_break/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/beam_break/.vscode/settings.json b/studies/beam_break/.vscode/settings.json deleted file mode 100644 index 4ed293b..0000000 --- a/studies/beam_break/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/beam_break/.wpilib/wpilib_preferences.json b/studies/beam_break/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/beam_break/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/beam_break/WPILib-License.md b/studies/beam_break/WPILib-License.md deleted file mode 100644 index 645e542..0000000 --- a/studies/beam_break/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2024 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/beam_break/build.gradle b/studies/beam_break/build.gradle deleted file mode 100644 index 2348bae..0000000 --- a/studies/beam_break/build.gradle +++ /dev/null @@ -1,101 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.2.1" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/beam_break/gradle/wrapper/gradle-wrapper.jar b/studies/beam_break/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/beam_break/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/beam_break/gradle/wrapper/gradle-wrapper.properties b/studies/beam_break/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 5e82d67..0000000 --- a/studies/beam_break/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/beam_break/gradlew b/studies/beam_break/gradlew deleted file mode 100644 index 1aa94a4..0000000 --- a/studies/beam_break/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/beam_break/gradlew.bat b/studies/beam_break/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/studies/beam_break/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/beam_break/settings.gradle b/studies/beam_break/settings.gradle deleted file mode 100644 index d94f73c..0000000 --- a/studies/beam_break/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/beam_break/src/main/deploy/example.txt b/studies/beam_break/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/beam_break/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/beam_break/src/main/java/frc/robot/Main.java b/studies/beam_break/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/beam_break/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/beam_break/src/main/java/frc/robot/Robot.java b/studies/beam_break/src/main/java/frc/robot/Robot.java deleted file mode 100644 index 146711d..0000000 --- a/studies/beam_break/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.DigitalInput; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - private DigitalInput m_sensor = new DigitalInput(0); - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - System.out.println(m_sensor.get()); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/beam_break/src/main/java/frc/robot/RobotContainer.java b/studies/beam_break/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index 4aefe99..0000000 --- a/studies/beam_break/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - - public RobotContainer() { - } - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} \ No newline at end of file diff --git a/studies/beam_break/vendordeps/WPILibNewCommands.json b/studies/beam_break/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/beam_break/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/camera_zoom/.gitignore b/studies/camera_zoom/.gitignore deleted file mode 100644 index cdbfbfa..0000000 --- a/studies/camera_zoom/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/camera_zoom/.vscode/launch.json b/studies/camera_zoom/.vscode/launch.json deleted file mode 100644 index 5b804e8..0000000 --- a/studies/camera_zoom/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/camera_zoom/.vscode/settings.json b/studies/camera_zoom/.vscode/settings.json deleted file mode 100644 index 8be11f2..0000000 --- a/studies/camera_zoom/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/camera_zoom/.wpilib/wpilib_preferences.json b/studies/camera_zoom/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/camera_zoom/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/camera_zoom/README.md b/studies/camera_zoom/README.md deleted file mode 100644 index 2466240..0000000 --- a/studies/camera_zoom/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Camera Zoom - -This is Vasili's project to implement forensic zooming in the camera subsystems. - -The general idea is that the robot would know where the targets "should" appear, and the cameras would crop and zoom to those areas. - -It was never really finished, so it's now in this study. - -The CameraUpdater appeared in RobotContainer: - -```java -// - private final CameraUpdater m_cameraUpdater; - -... - - m_cameraUpdater = new CameraUpdater( - () -> m_drive.getState().pose(), - m_layout); - -... - - public void periodic() { - if (Experiments.instance.enabled(Experiment.UseCameraUpdater)) - m_cameraUpdater.update(); - } -``` - -Experiment.java - -```java -// - /** - * Periodically publish all tag poses to all cameras - */ - UseCameraUpdater, -``` diff --git a/studies/camera_zoom/WPILib-License.md b/studies/camera_zoom/WPILib-License.md deleted file mode 100644 index e7cd597..0000000 --- a/studies/camera_zoom/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2024 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/camera_zoom/build.gradle b/studies/camera_zoom/build.gradle deleted file mode 100644 index c3a7ccb..0000000 --- a/studies/camera_zoom/build.gradle +++ /dev/null @@ -1,101 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.1" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/camera_zoom/gradle/wrapper/gradle-wrapper.jar b/studies/camera_zoom/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/camera_zoom/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/camera_zoom/gradle/wrapper/gradle-wrapper.properties b/studies/camera_zoom/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 7015f6b..0000000 --- a/studies/camera_zoom/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/camera_zoom/gradlew b/studies/camera_zoom/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/studies/camera_zoom/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/camera_zoom/gradlew.bat b/studies/camera_zoom/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/studies/camera_zoom/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/camera_zoom/python/camera_view.py b/studies/camera_zoom/python/camera_view.py deleted file mode 100644 index 0be1709..0000000 --- a/studies/camera_zoom/python/camera_view.py +++ /dev/null @@ -1,282 +0,0 @@ -import dataclasses -import time -import pprint - -from enum import Enum - -import sys -import cv2 -import libcamera -import numpy as np -import ntcore -import robotpy_apriltag - -from cscore import CameraServer -from picamera2 import Picamera2 -from wpimath.geometry import Transform3d -from wpiutil import wpistruct - - -@wpistruct.make_wpistruct -@dataclasses.dataclass -class Blip24: - id: int - pose: Transform3d - - -class Camera(Enum): - """Keep this synchronized with java team100.config.Camera.""" - - # TODO get correct serial numbers for Delta - A = "10000000caeaae82" # "BETA FRONT" - # B = "1000000013c9c96c" # "BETA BACK" - C = "10000000a7c673d9" # "GAMMA INTAKE" - - SHOOTER = "10000000a7a892c0" # "DELTA SHOOTER" - RIGHTAMP = "10000000caeaae82" # "DELTA AMP-PLACER" - LEFTAMP = "100000004e0a1fb9" # "DELTA AMP-PLACER" - GAME_PIECE = "1000000013c9c96c" # "DELTA INTAKE" - - G = "10000000a7a892c0" # "" - UNKNOWN = None - - @classmethod - def _missing_(cls, value): - return Camera.UNKNOWN - - -class CameraData: - def __init__(self, id): - self.camera = Picamera2(id) - model = self.camera.camera_properties["Model"] - print("\nMODEL " + model) - self.id = id - - if model == "imx708_wide": - print("V3 Wide Camera") - # full frame is 4608x2592; this is 2x2 - fullwidth = 2304 - fullheight = 1296 - # medium detection resolution, compromise speed vs range - self.width = 1152 - self.height = 648 - elif model == "imx219": - print("V2 Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1664 # slightly larger than the detector, to match stride - fullheight = 1232 - # medium detection resolution, compromise speed vs range - self.width = 832 - self.height = 616 - elif model == "imx296": - print("GS Camera") - # full frame, 2x2, to set the detector mode to widest angle possible - fullwidth = 1408 # slightly larger than the detector, to match stride - fullheight = 1088 - # medium detection resolution, compromise speed vs range - self.width = 1408 - self.height = 1088 - else: - print("UNKNOWN CAMERA: " + model) - fullwidth = 100 - fullheight = 100 - self.width = 100 - self.height = 100 - - camera_config = self.camera.create_still_configuration( - # 2 buffers => low latency (32-48 ms), low fps (15-20) - # 5 buffers => mid latency (40-55 ms), high fps (22-28) - # 3 buffers => high latency (50-70 ms), mid fps (20-23) - # robot goes at 50 fps, so roughly a frame every other loop - # fps doesn't matter much, so minimize latency - buffer_count=2, - main={ - "format": "YUV420", - "size": (fullwidth, fullheight), - }, - lores={"format": "YUV420", "size": (self.width, self.height)}, - controls={ - # these manual controls are useful sometimes but turn them off for now - # because auto mode seems fine - # fast shutter means more gain - # "AnalogueGain": 8.0, - # try faster shutter to reduce blur. with 3ms, 3 rad/s seems ok. - # 3/23/24, reduced to 2ms, even less blur. - "ExposureTime": 3000, - "AnalogueGain": 8, - # "AeEnable": True, - # limit auto: go as fast as possible but no slower than 30fps - # without a duration limit, we slow down in the dark, which is fine - # "FrameDurationLimits": (5000, 33333), # 41 fps - # noise reduction takes time, don't need it. - "NoiseReductionMode": libcamera.controls.draft.NoiseReductionModeEnum.Off, - # "ScalerCrop":(0,0,width/2,height/2), - }, - ) - print("SENSOR MODES AVAILABLE") - pprint.pprint(self.camera.sensor_modes) - print("\nREQUESTED CONFIG") - print(camera_config) - self.camera.align_configuration(camera_config) - print("\nALIGNED CONFIG") - print(camera_config) - self.camera.configure(camera_config) - print("\nCONTROLS") - print(self.camera.camera_controls) - if model == "imx708_wide": - print("V3 WIDE CAMERA") - fx = 498 - fy = 498 - cx = 584 - cy = 316 - k1 = 0.01 - k2 = -0.0365 - elif model == "imx219": - print("V2 CAMERA (NOT WIDE ANGLE)") - fx = 660 - fy = 660 - cx = 426 - cy = 303 - k1 = -0.003 - k2 = 0.04 - # TODO get these real distortion values - elif model == "imx296": - fx = 1680 - fy = 1680 - cx = 728 - cy = 544 - k1 = 0 - k2 = 0 - else: - print("UNKNOWN CAMERA MODEL") - sys.exit() - tag_size = 0.1651 - p1 = 0 - p2 = 0 - self.mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) - self.dist = np.array([[k1, k2, p1, p2]]) - self.output_stream = CameraServer.putVideo(str(id), self.width, self.height) - self.estimator = robotpy_apriltag.AprilTagPoseEstimator( - robotpy_apriltag.AprilTagPoseEstimator.Config( - tag_size, - fx, - fy, - cx, - cy, - ) - ) - self.camera.start() - self.frame_time = time.time() - - def setFPSPublisher(self, FPSPublisher): - self.FPSPublisher = FPSPublisher - - def setLatencyPublisher(self, LatencyPublisher): - self.LatencyPublisher = LatencyPublisher - -class Test: - def __init__(self, serial, camList): - # the cpu serial number - self.serial = serial - self.initialize_nt(camList) - - def initialize_nt(self, camList): - """Start NetworkTables with Rio as server, set up publisher.""" - self.inst = ntcore.NetworkTableInstance.getDefault() - self.inst.startClient4("tag_finder24") - # roboRio address. windows machines can impersonate this for simulation. - self.inst.setServer("10.1.0.2") - - topic_name = "vision/" + self.serial - for camera in camList: - camera.setFPSPublisher( - self.inst.getDoubleTopic(topic_name + "/" + str(camera.id) + "/fps").publish() - ) - camera.setLatencyPublisher( - self.inst.getDoubleTopic(topic_name + "/" + str(camera.id) + "/latency").publish() - ) - - # work around https://github.com/robotpy/mostrobotpy/issues/60 - self.inst.getStructTopic("bugfix", Blip24).publish().set( - Blip24(0, Transform3d()) - ) - # blip array topic - self.vision_nt_struct = self.inst.getStructArrayTopic( - topic_name + "/blips", Blip24 - ).publish() - - self.estimatedTagPose = self.inst.getStructArrayTopic( - topic_name + "/estimatedTagPose", Blip24 - ).subscribe([], ntcore.PubSubOptions()) - - def analyze(self, request, camera): - buffer = request.make_buffer("lores") - metadata = request.get_metadata() - - y_len = camera.width * camera.height - - # truncate, ignore chrominance. this makes a view, very fast (300 ns) - img = np.frombuffer(buffer, dtype=np.uint8, count=y_len) - - # this makes a view, very fast (150 ns) - img = img.reshape((camera.height, camera.width)) - # img = cv2.undistort(img, camera.mtx, camera.dist) - - # compute time since last frame - current_time = time.time() - total_et = current_time - camera.frame_time - camera.frame_time = current_time - - fps = 1 / total_et - - camera.fps = fps - camera.FPSPublisher.set(fps) - - # sensor timestamp is the boottime when the first byte was received from the sensor - sensor_timestamp = metadata["SensorTimestamp"] - # include all the work above in the latency - system_time_ns = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - time_delta_ms = (system_time_ns - sensor_timestamp) // 1000000 - camera.LatencyPublisher.set(time_delta_ms) - self.inst.flush() - self.draw_text(img, f"fps {fps:.1f}", (5, 65)) - img_output = cv2.resize(img, (416, 308)) - camera.output_stream.putFrame(img_output) - - # these are white with black outline - def draw_text(self, image, msg, loc): - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 0), 6) - cv2.putText(image, msg, loc, cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 255), 2) - -def getserial(): - with open("/proc/cpuinfo", "r", encoding="ascii") as cpuinfo: - for line in cpuinfo: - if line[0:6] == "Serial": - return line[10:26] - return "" - - -def main(): - print("main") - print(Picamera2.global_camera_info()) - camList = [] - if len(Picamera2.global_camera_info()) == 0: - print("NO CAMERAS DETECTED, PLEASE TURN OFF PI AND CHECK CAMERA PORT(S)") - for cameraData in Picamera2.global_camera_info(): - camera = CameraData(cameraData["Num"]) - camList.append(camera) - serial = getserial() - print(serial) - output = Test(serial, camList) - try: - while True: - for camera in camList: - request = camera.camera.capture_request() - try: - output.analyze(request, camera) - finally: - request.release() - finally: - for camera in camList: - camera.camera.stop() -main() diff --git a/studies/camera_zoom/settings.gradle b/studies/camera_zoom/settings.gradle deleted file mode 100644 index 3e30f84..0000000 --- a/studies/camera_zoom/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/camera_zoom/src/main/deploy/example.txt b/studies/camera_zoom/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/camera_zoom/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/camera_zoom/src/main/java/frc/robot/Main.java b/studies/camera_zoom/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/camera_zoom/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/camera_zoom/src/main/java/frc/robot/Robot.java b/studies/camera_zoom/src/main/java/frc/robot/Robot.java deleted file mode 100644 index b68462c..0000000 --- a/studies/camera_zoom/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/camera_zoom/src/main/java/frc/robot/RobotContainer.java b/studies/camera_zoom/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/camera_zoom/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/camera_zoom/src/main/java/org/team100/lib/localization/CameraUpdater.java b/studies/camera_zoom/src/main/java/org/team100/lib/localization/CameraUpdater.java deleted file mode 100644 index 413b863..0000000 --- a/studies/camera_zoom/src/main/java/org/team100/lib/localization/CameraUpdater.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.team100.lib.localization; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; -import java.util.function.Supplier; - -import org.team100.lib.config.Camera; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Pose3d; -import edu.wpi.first.math.geometry.Transform3d; -import edu.wpi.first.networktables.NetworkTableInstance; -import edu.wpi.first.networktables.StructArrayPublisher; -import edu.wpi.first.wpilibj.DriverStation; -import edu.wpi.first.wpilibj.DriverStation.Alliance; - -/** - * Publishes camera-relative tag poses to all cameras; this is for pan-and-zoom - * in the camera. - * - * TODO: move or filter this calculation? - * The use of Transform3d (and inside, Quaternion) creates quite a bit of memory - * pressure, so it might be better to do the transforms in the cameras, or to filter - * just the tags that are in view. - */ -public class CameraUpdater { - private final AprilTagFieldLayoutWithCorrectOrientation m_layout; - private final Supplier m_robotPose; - private final List blips = new ArrayList<>(); - private HashMap> blipsPublishers = new HashMap<>(); - - public CameraUpdater(Supplier robotPose, AprilTagFieldLayoutWithCorrectOrientation layout) - throws IOException { - m_layout = layout; - m_robotPose = robotPose; - var inst = NetworkTableInstance.getDefault(); - // inst.startServer(); - Blip24Struct struct = new Blip24Struct(); - for (Camera camera : Camera.values()) { - if (camera == Camera.UNKNOWN || camera == Camera.TEST1 || camera == Camera.TEST2 || camera == Camera.TEST3 - || camera == Camera.TEST4) - continue; - blipsPublishers.put(camera, inst - .getStructArrayTopic("vision/" + camera.getSerial() + "/estimatedTagPose", struct).publish()); - } - for (int i = 0; i < m_layout.getTags(Alliance.Red).size(); i++) { - blips.add(new Blip24(i + 1, new Transform3d())); - } - } - - public void update() { - Optional alliance = DriverStation.getAlliance(); - if (!alliance.isPresent()) { - return; - } - for (Camera camera : Camera.values()) { - if (camera == Camera.UNKNOWN || camera == Camera.TEST1 || camera == Camera.TEST2 || camera == Camera.TEST3 - || camera == Camera.TEST4) - return; - for (int i = 1; i <= m_layout.getTags(alliance.get()).size(); i++) { - Optional tagInFieldCoordsOptional = m_layout.getTagPose(alliance.get(), i); - if (!tagInFieldCoordsOptional.isPresent()) - return; - Transform3d aprilTagTransform = PoseEstimationHelper.getTransformFromRobotPose(camera.getOffset(), - m_robotPose.get(), tagInFieldCoordsOptional.get()); - Blip24 blip = new Blip24(i, aprilTagTransform); - blips.set(i - 1, blip); - // System.out.println("Camera: " + camera); - // System.out.println("ID: " + blip.getId()); - // System.out.println("Translation: " - // + blip.getPose().getTranslation().toString()); - // System.out.println("X: " + blip.getPose().getRotation().getX() + " Y: " + - // blip.getPose().getRotation().getY() - // + " Z: " + blip.getPose().getRotation().getZ()); - } - Blip24[] arrayList = new Blip24[m_layout.getTags(alliance.get()).size()]; - blips.toArray(arrayList); - blipsPublishers.get(camera).set(arrayList); - } - } -} diff --git a/studies/camera_zoom/vendordeps/WPILibNewCommands.json b/studies/camera_zoom/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/camera_zoom/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/chronos/.gitignore b/studies/chronos/.gitignore deleted file mode 100644 index cdbfbfa..0000000 --- a/studies/chronos/.gitignore +++ /dev/null @@ -1,178 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json - -# Simulation data log directory -logs/ - -# Folder that has CTRE Phoenix Sim device config storage -ctre_sim/ diff --git a/studies/chronos/.vscode/launch.json b/studies/chronos/.vscode/launch.json deleted file mode 100644 index 5b804e8..0000000 --- a/studies/chronos/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/chronos/.vscode/settings.json b/studies/chronos/.vscode/settings.json deleted file mode 100644 index 8be11f2..0000000 --- a/studies/chronos/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], - "java.test.defaultConfig": "WPIlibUnitTests" -} diff --git a/studies/chronos/.wpilib/wpilib_preferences.json b/studies/chronos/.wpilib/wpilib_preferences.json deleted file mode 100644 index b627da9..0000000 --- a/studies/chronos/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2024", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/chronos/README.md b/studies/chronos/README.md deleted file mode 100644 index 06539c9..0000000 --- a/studies/chronos/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Chronos - -an idea for fine-grained selective profiling that we might want to get back to at some point - -make it a member of TimedRobot100: - -```java -private final Chronos chronos; -``` - -wire it up in TimedRobot100's constructor: - -```java -chronos = new Chronos(m_logger); -addPeriodic(chronos::dump, period, "chronos output"); -``` diff --git a/studies/chronos/WPILib-License.md b/studies/chronos/WPILib-License.md deleted file mode 100644 index e7cd597..0000000 --- a/studies/chronos/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2024 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/chronos/build.gradle b/studies/chronos/build.gradle deleted file mode 100644 index c3a7ccb..0000000 --- a/studies/chronos/build.gradle +++ /dev/null @@ -1,101 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2024.3.1" -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} - -def ROBOT_MAIN_CLASS = "frc.robot.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - from sourceSets.main.allSource - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/chronos/gradle/wrapper/gradle-wrapper.jar b/studies/chronos/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d64cd49..0000000 Binary files a/studies/chronos/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/chronos/gradle/wrapper/gradle-wrapper.properties b/studies/chronos/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 7015f6b..0000000 --- a/studies/chronos/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/chronos/gradlew b/studies/chronos/gradlew deleted file mode 100755 index 1aa94a4..0000000 --- a/studies/chronos/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/chronos/gradlew.bat b/studies/chronos/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/studies/chronos/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/chronos/settings.gradle b/studies/chronos/settings.gradle deleted file mode 100644 index 3e30f84..0000000 --- a/studies/chronos/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2024' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} - -Properties props = System.getProperties(); -props.setProperty("org.gradle.internal.native.headers.unresolved.dependencies.ignore", "true"); diff --git a/studies/chronos/src/main/deploy/example.txt b/studies/chronos/src/main/deploy/example.txt deleted file mode 100644 index bb82515..0000000 --- a/studies/chronos/src/main/deploy/example.txt +++ /dev/null @@ -1,3 +0,0 @@ -Files placed in this directory will be deployed to the RoboRIO into the -'deploy' directory in the home folder. Use the 'Filesystem.getDeployDirectory' wpilib function -to get a proper path relative to the deploy directory. \ No newline at end of file diff --git a/studies/chronos/src/main/java/frc/robot/Chronos.java b/studies/chronos/src/main/java/frc/robot/Chronos.java deleted file mode 100644 index f9019c6..0000000 --- a/studies/chronos/src/main/java/frc/robot/Chronos.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.team100.lib.telemetry; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.team100.lib.logging.SupplierLogger2; -import org.team100.lib.logging.SupplierLogger2.DoubleSupplierLogger2; -import org.team100.lib.telemetry.Telemetry.Level; - -import edu.wpi.first.wpilibj.Timer; - -/** - * Keeps track of how long things take. - * The general idea is to reset all the timers periodically, to let them - * accumulate time, and then to spit out the time spent in each one. - */ -public class Chronos { - /** - * Use this as follows: - * - *

-     * Sample s = Chronos.get().sample("foo");
-     * try {
-     *     ... code under test ...
-     * } finally {
-     *     s.end();
-     * }
-     * 
- */ - public class Sample { - private final String m_name; - private final double m_startS; - - public Sample(String name) { - m_name = name; - m_startS = Timer.getFPGATimestamp(); - } - - public void end() { - double durationS = Timer.getFPGATimestamp() - m_startS; - m_durationsS.merge(m_name, durationS, Double::sum); - } - } - - private final Map m_durationsS = new ConcurrentHashMap<>(); - - private final SupplierLogger2 m_logger; - private final DoubleSupplierLogger2 m_log_elapsed; - - private double m_time; - - public Chronos(SupplierLogger2 logger) { - m_logger = logger; - m_log_elapsed = m_logger.doubleLogger(Level.COMP, "elapsed (s)"); - - m_time = Timer.getFPGATimestamp(); - } - - /** Call end() on this sample when done. */ - public Sample sample(String name) { - return new Sample(name); - } - - public double elapsed() { - return Timer.getFPGATimestamp() - m_time; - } - - public void reset() { - m_time = Timer.getFPGATimestamp(); - for (String key : m_durationsS.keySet()) { - m_durationsS.put(key, 0.0); - } - } - - public void dump() { - final double elapsed = elapsed(); - m_log_elapsed.log(() -> elapsed); - for (Map.Entry durations : m_durationsS.entrySet()) { - Double duration = durations.getValue(); - String name = durations.getKey(); - m_logger.doubleLogger(Level.COMP, "duration (s)/" + name).log(() -> duration); - double fraction = duration / elapsed; - m_logger.doubleLogger(Level.COMP, "fraction (pct)/" + name).log(() -> 100.0 * fraction); - } - reset(); - - } - -} diff --git a/studies/chronos/src/main/java/frc/robot/Main.java b/studies/chronos/src/main/java/frc/robot/Main.java deleted file mode 100644 index fe215d7..0000000 --- a/studies/chronos/src/main/java/frc/robot/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - private Main() {} - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/chronos/src/main/java/frc/robot/Robot.java b/studies/chronos/src/main/java/frc/robot/Robot.java deleted file mode 100644 index b68462c..0000000 --- a/studies/chronos/src/main/java/frc/robot/Robot.java +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/chronos/src/main/java/frc/robot/RobotContainer.java b/studies/chronos/src/main/java/frc/robot/RobotContainer.java deleted file mode 100644 index de2c9d0..0000000 --- a/studies/chronos/src/main/java/frc/robot/RobotContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package frc.robot; - -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} diff --git a/studies/chronos/vendordeps/WPILibNewCommands.json b/studies/chronos/vendordeps/WPILibNewCommands.json deleted file mode 100644 index 67bf389..0000000 --- a/studies/chronos/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "frcYear": "2024", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/circleLQR/.gitignore b/studies/circleLQR/.gitignore deleted file mode 100644 index a8d1911..0000000 --- a/studies/circleLQR/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/circleLQR/.vscode/launch.json b/studies/circleLQR/.vscode/launch.json deleted file mode 100644 index c9c9713..0000000 --- a/studies/circleLQR/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/circleLQR/.vscode/settings.json b/studies/circleLQR/.vscode/settings.json deleted file mode 100644 index 8d54ea8..0000000 --- a/studies/circleLQR/.vscode/settings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], -"java.test.defaultConfig": "WPIlibUnitTests", -"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable" -} diff --git a/studies/circleLQR/.wpilib/wpilib_preferences.json b/studies/circleLQR/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/circleLQR/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/circleLQR/README.md b/studies/circleLQR/README.md deleted file mode 100644 index 7e3159e..0000000 --- a/studies/circleLQR/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# LQR with Angles - -This has turned into a rewrite of controls. - -Note the build.gradle changes to make roadrunner profiles work. - -``` -repositories { - maven { - url = 'https://maven.brott.dev/' - } -} -dependencies { - ... - implementation 'com.acmerobotics.roadrunner:core:0.5.6' -} -``` \ No newline at end of file diff --git a/studies/circleLQR/WPILib-License.md b/studies/circleLQR/WPILib-License.md deleted file mode 100644 index 3d5a824..0000000 --- a/studies/circleLQR/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/circleLQR/build.gradle b/studies/circleLQR/build.gradle deleted file mode 100644 index 453b74c..0000000 --- a/studies/circleLQR/build.gradle +++ /dev/null @@ -1,106 +0,0 @@ -plugins { - id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.3" -} - -// these four lines are for development builds -// https://github.com/wpilibsuite/allwpilib/blob/main/DevelopmentBuilds.md -wpi.maven.useLocal = false -wpi.maven.useDevelopment = true -wpi.versions.wpilibVersion = '2023.+' -wpi.versions.wpimathVersion = '2023.+' - -sourceCompatibility = JavaVersion.VERSION_11 -targetCompatibility = JavaVersion.VERSION_11 - -def ROBOT_MAIN_CLASS = "team100.frc2023.Main" - -// Define my targets (RoboRIO) and artifacts (deployable files) -// This is added by GradleRIO's backing project DeployUtils. -deploy { - targets { - roborio(getTargetTypeClass('RoboRIO')) { - // Team number is loaded either from the .wpilib/wpilib_preferences.json - // or from command line. If not found an exception will be thrown. - // You can use getTeamOrDefault(team) instead of getTeamNumber if you - // want to store a team number in this file. - team = project.frc.getTeamNumber() - debug = project.frc.getDebugOrDefault(false) - - artifacts { - // First part is artifact name, 2nd is artifact type - // getTargetTypeClass is a shortcut to get the class type using a string - - frcJava(getArtifactTypeClass('FRCJavaArtifact')) { - } - - // Static files artifact - frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { - files = project.fileTree('src/main/deploy') - directory = '/home/lvuser/deploy' - } - } - } - } -} - -def deployArtifact = deploy.targets.roborio.artifacts.frcJava - -// Set to true to use debug for JNI. -wpi.java.debugJni = false - -// Set this to true to enable desktop support. -def includeDesktopSupport = true - -// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. -// Also defines JUnit 5. -dependencies { - implementation wpi.java.deps.wpilib() - implementation wpi.java.vendor.java() - - roborioDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.roborio) - roborioDebug wpi.java.vendor.jniDebug(wpi.platforms.roborio) - - roborioRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.roborio) - roborioRelease wpi.java.vendor.jniRelease(wpi.platforms.roborio) - - nativeDebug wpi.java.deps.wpilibJniDebug(wpi.platforms.desktop) - nativeDebug wpi.java.vendor.jniDebug(wpi.platforms.desktop) - simulationDebug wpi.sim.enableDebug() - - nativeRelease wpi.java.deps.wpilibJniRelease(wpi.platforms.desktop) - nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop) - simulationRelease wpi.sim.enableRelease() - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' -} - -test { - useJUnitPlatform() - systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' -} - -// Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true -wpi.sim.addDriverstation() - -// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') -// in order to make them all available at runtime. Also adding the manifest so WPILib -// knows where to look for our Robot Class. -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) - duplicatesStrategy = DuplicatesStrategy.INCLUDE -} - -// Configure jar and deploy tasks -deployArtifact.jarTask = jar -wpi.java.configureExecutableTasks(jar) -wpi.java.configureTestTasks(test) - -// Configure string concat to always inline compile -tasks.withType(JavaCompile) { - options.compilerArgs.add '-XDstringConcat=inline' -} diff --git a/studies/circleLQR/gradle/wrapper/gradle-wrapper.jar b/studies/circleLQR/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e583..0000000 Binary files a/studies/circleLQR/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/studies/circleLQR/gradle/wrapper/gradle-wrapper.properties b/studies/circleLQR/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c23a1b3..0000000 --- a/studies/circleLQR/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=permwrapper/dists diff --git a/studies/circleLQR/gradlew b/studies/circleLQR/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/studies/circleLQR/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/studies/circleLQR/gradlew.bat b/studies/circleLQR/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/studies/circleLQR/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/studies/circleLQR/python/README.md b/studies/circleLQR/python/README.md deleted file mode 100644 index 319ed53..0000000 --- a/studies/circleLQR/python/README.md +++ /dev/null @@ -1,8 +0,0 @@ -exploring covariance singularity - -to run it: - -``` -python3 -m pip install scipy -python3 covar.py -``` diff --git a/studies/circleLQR/python/covar.py b/studies/circleLQR/python/covar.py deleted file mode 100644 index 62b3124..0000000 --- a/studies/circleLQR/python/covar.py +++ /dev/null @@ -1,53 +0,0 @@ -# Importing the necessary modules -import numpy as np -import matplotlib.pyplot as plt -from scipy.stats import multivariate_normal - - -plt.style.use("seaborn-dark") -plt.rcParams["figure.figsize"] = 14, 6 - -# Initializing the random seed -random_seed = 1000 - -# List containing the variance -# covariance values -cov_val = [-0.8, 0, 0.8, 0.99] - -# Setting mean of the distributino to -# be at (0,0) -mean = np.array([3, 3]) - -# Iterating over different covariance -# values -for idx, val in enumerate(cov_val): - plt.subplot(1, 4, idx + 1) - - # Initializing the covariance matrix - cov = np.array([[1, val], [val, 1]]) - - # Generating a Gaussian bivariate distribution - # with given mean and covariance matrix - distr = multivariate_normal(cov=cov, mean=mean, seed=random_seed) - - # Generating 5000 samples out of the - # distribution - data = distr.rvs(size=5000) - - # Plotting the generated samples - plt.plot( - data[:, 0], - data[:, 1], - "o", - c="lime", - markeredgewidth=0.5, - markeredgecolor="black", - ) - plt.title(f"Covariance between x1 and x2 = {val}") - plt.xlabel("x1") - plt.ylabel("x2") - plt.axis("equal") - plt.axhline() - plt.axvline() - -plt.show() diff --git a/studies/circleLQR/python/covar2.py b/studies/circleLQR/python/covar2.py deleted file mode 100644 index 312c94f..0000000 --- a/studies/circleLQR/python/covar2.py +++ /dev/null @@ -1,170 +0,0 @@ -# illustrates covariance of mixtures - -# useful for visualizing behavior of VarianceWeightedLinearPooling - -import numpy as np -import matplotlib.pyplot as plt -from scipy import stats - -random_seed = 1000 -plt.figure(figsize=(15,15)) - -# -# input "a" -# -ax = plt.subplot(2, 2, 1) -mean = np.array([0, 0]) -cov = np.array([[1, 0.5], [0.5, 2]]) -distr = stats.multivariate_normal(cov=cov, mean=mean, seed=random_seed) -data1 = distr.rvs(size=5000) -mean1 = np.mean(data1,axis=0) -print("mean1 ", mean1) -cov1 = np.cov(data1,rowvar=False) -plt.plot( - data1[:, 0], - data1[:, 1], - "o", - c="lime", - markeredgewidth=0.5, - markeredgecolor="black", -) -plt.title(f"Input A\nMean {mean1}\nCovariance {cov1}") -ax.set_xlim(-10,10) -ax.set_ylim(-10,10) -plt.axhline() -plt.axvline() - -# -# input "b" -# -ax = plt.subplot(2, 2, 2) -mean = np.array([1, 1]) -cov = np.array([[2, 0.5], [0.5, 1]]) -distr = stats.multivariate_normal(cov=cov, mean=mean, seed=random_seed) -data2 = distr.rvs(size=5000) -mean2 = np.mean(data2,axis=0) -print("mean2 ", mean2) -cov2 = np.cov(data2,rowvar=False) -plt.plot( - data2[:, 0], - data2[:, 1], - "o", - c="lime", - markeredgewidth=0.5, - markeredgecolor="black", -) -plt.title(f"Input B\nMean {mean2}\nCovariance {cov2}") -ax.set_xlim(-10,10) -ax.set_ylim(-10,10) -plt.axhline() -plt.axvline() - - -api = np.linalg.inv(cov1) -bpi = np.linalg.inv(cov2) -print("api" , api) -print("bpi" , bpi) -pisum = api+bpi -pisumi = np.linalg.inv(pisum) -pa = np.matmul(api , pisumi) -pb = np.matmul(bpi , pisumi) - -print("pa" , pa) -print("pb" , pb) - -# check the sum -pc = pa + pb -print("pc" , pc) - -# -# the mixture of "a" and "b" -# -ax = plt.subplot(2, 2, 3) -data3 = np.concatenate((data1, data2)) -mean3 = np.mean(data3,axis=0) -cov3 = np.cov(data3,rowvar=False) -print("mean3", mean3) -print("cov3", cov3) - -# favor the tighter distribution -cx = np.matmul(pa,mean1) + np.matmul(pb,mean2) - -# democratic averaging makes the picture look better -# but it ignores the tightness in the distribution -# which is a signal about accuracy -#cx = mean1 * 0.5 + mean2 * 0.5 -print("calculated mean cx ", cx) - -cpa = np.matmul(pa, cov1) -cpb = np.matmul(pb, cov2) -print("cpa" , cpa) -print("cpb" , cpb) - -# putting the dispersion on the diagonal does the right thing -# for the diagonal elements of the covariance -# but it does nothing for the off-diagonal elements :-) -d = np.diag(mean1 - mean2) -# this yields a larger influence but only positive covariance. -#d = np.ones((2,1)) * (mean1-mean2) -print("d" , d) - -# elementwise yields negative off-diagonal -#d2 = np.multiply(d,d.transpose()) -# hm, just try reducing it, there's no justification for this -#d2 = np.multiply(d2, 0.25) -# matmul yields only positive -d2 = np.matmul(d,d.transpose()) -print("d2" , d2) - -papb = np.matmul(pa, pb) -print("papb" , papb) -# the weights here make this term too small when the variances are -# really unequal -dp = np.matmul(papb, d2) -#dp = d2 -print("dp" , dp) - -cp = cpa + cpb + dp -print("calculated covariance cp" , cp) - - -plt.plot( - data3[:, 0], - data3[:, 1], - "o", - c="lime", - markeredgewidth=0.5, - markeredgecolor="black", -) -plt.title(f"Mixture\nMean {mean3}\nCovariance {cov3}") -ax.set_xlim(-10,10) -ax.set_ylim(-10,10) -plt.axhline() -plt.axvline() - - -# -# a new dist with the calculated mean/cov for comparison -# -ax = plt.subplot(2, 2, 4) -# use calculated instead -#distr = stats.multivariate_normal(cov=cov3, mean=mean3, seed=random_seed) -distr = stats.multivariate_normal(cov=cp, mean=cx, seed=random_seed) -data4 = distr.rvs(size=5000) -mean4 = np.mean(data4,axis=0) -cov4 = np.cov(data4,rowvar=False) -plt.plot( - data4[:, 0], - data4[:, 1], - "o", - c="lime", - markeredgewidth=0.5, - markeredgecolor="black", -) -plt.title(f"Fit\nMean {mean4}\nCovariance {cov4}") -ax.set_xlim(-10,10) -ax.set_ylim(-10,10) -plt.axhline() -plt.axvline() - -plt.show() diff --git a/studies/circleLQR/python/covar3d.py b/studies/circleLQR/python/covar3d.py deleted file mode 100644 index f884d58..0000000 --- a/studies/circleLQR/python/covar3d.py +++ /dev/null @@ -1,72 +0,0 @@ -# Importing the necessary modules -import numpy as np -import matplotlib.pyplot as plt -from scipy.stats import multivariate_normal - - -plt.style.use("seaborn-dark") -plt.rcParams["figure.figsize"] = 14, 6 -fig = plt.figure() - -# Initializing the random seed -random_seed = 1000 - -# List containing the variance -# covariance values -cov_val = [-0.8, 0, 0.8] - -# Setting mean of the distributino -# to be at (0,0) -mean = np.array([0, 0]) - -# Storing density function values for -# further analysis -pdf_list = [] - -# Iterating over different covariance values -for idx, val in enumerate(cov_val): - # Initializing the covariance matrix - cov = np.array([[1, val], [val, 1]]) - - # Generating a Gaussian bivariate distribution - # with given mean and covariance matrix - distr = multivariate_normal(cov=cov, mean=mean, seed=random_seed) - - # Generating a meshgrid complacent with - # the 3-sigma boundary - mean_1, mean_2 = mean[0], mean[1] - sigma_1, sigma_2 = cov[0, 0], cov[1, 1] - - x = np.linspace(-3 * sigma_1, 3 * sigma_1, num=100) - y = np.linspace(-3 * sigma_2, 3 * sigma_2, num=100) - X, Y = np.meshgrid(x, y) - - # Generating the density function - # for each point in the meshgrid - pdf = np.zeros(X.shape) - for i in range(X.shape[0]): - for j in range(X.shape[1]): - pdf[i, j] = distr.pdf([X[i, j], Y[i, j]]) - - # Plotting the density function values - key = 131 + idx - ax = fig.add_subplot(key, projection="3d") - ax.plot_surface(X, Y, pdf, cmap="viridis") - plt.xlabel("x1") - plt.ylabel("x2") - plt.title(f"Covariance between x1 and x2 = {val}") - pdf_list.append(pdf) - ax.axes.zaxis.set_ticks([]) - -plt.tight_layout() -plt.show() - -# Plotting contour plots -for idx, val in enumerate(pdf_list): - plt.subplot(1, 3, idx + 1) - plt.contourf(X, Y, val, cmap="viridis") - plt.xlabel("x1") - plt.ylabel("x2") - plt.title(f"Covariance between x1 and x2 = {cov_val[idx]}") -plt.tight_layout() -plt.show() diff --git a/studies/circleLQR/settings.gradle b/studies/circleLQR/settings.gradle deleted file mode 100644 index 48c039e..0000000 --- a/studies/circleLQR/settings.gradle +++ /dev/null @@ -1,27 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - String frcYear = '2023' - File frcHome - if (OperatingSystem.current().isWindows()) { - String publicFolder = System.getenv('PUBLIC') - if (publicFolder == null) { - publicFolder = "C:\\Users\\Public" - } - def homeRoot = new File(publicFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } else { - def userFolder = System.getProperty("user.home") - def homeRoot = new File(userFolder, "wpilib") - frcHome = new File(homeRoot, frcYear) - } - def frcHomeMaven = new File(frcHome, 'maven') - maven { - name 'frcHome' - url frcHomeMaven - } - } -} diff --git a/studies/circleLQR/src/main/java/org/team100/frc2023/LQRManager.java b/studies/circleLQR/src/main/java/org/team100/frc2023/LQRManager.java deleted file mode 100644 index 3a18dfd..0000000 --- a/studies/circleLQR/src/main/java/org/team100/frc2023/LQRManager.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.team100.frc2023; - -import edu.wpi.first.math.Matrix; -import edu.wpi.first.math.Nat; -import edu.wpi.first.math.VecBuilder; -import edu.wpi.first.math.controller.LinearPlantInversionFeedforward; -import edu.wpi.first.math.controller.LinearQuadraticRegulator; -import edu.wpi.first.math.estimator.KalmanFilter; -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N2; -import edu.wpi.first.math.system.LinearSystem; -import edu.wpi.first.math.system.LinearSystemLoop; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.system.plant.LinearSystemId; -import edu.wpi.first.math.trajectory.TrapezoidProfile; - -public class LQRManager { - private final double m_maxVolts; - private final double m_seconds; - private LinearSystem m_plant; - private KalmanFilter m_observer; - private LinearQuadraticRegulator m_controller; - public LinearSystemLoop m_loop; - public TrapezoidProfile.Constraints m_constraints; - private TrapezoidProfile m_trapezoidProfile; - public TrapezoidProfile.State m_lastProfiledReference = new TrapezoidProfile.State(); - - Matrix matrixA = new Matrix<>(Nat.N2(), Nat.N2()); - - Matrix matrixB = new Matrix<>(Nat.N2(), Nat.N1()); - - public LinearPlantInversionFeedforward feedforward; - - // public LQRManager(double maxV, double maxA, LinearSystem plant, double eX, double eV, double mX, double Q1, double Q2, double R) { - // this(maxV, maxA, plant, eX, eV, mX, Q1, Q2, R, 12, .02); - // } - - // public LQRManager(double maxV, double maxA, LinearSystem plant, double eX, double eV, double mX, double Q1, double Q2, double R, double maxVolts) { - // this(maxV, maxA, plant, eX, eV, mX, Q1, Q2, R, maxVolts, .02); - // } - - public LQRManager(double maxV, double maxA, double eX, double eV, double mX, double Q1, double Q2, double R, double maxVolts, double seconds) { - m_seconds = seconds; - m_maxVolts = maxVolts; - m_constraints = new TrapezoidProfile.Constraints( - maxV, - maxA); - m_plant = LinearSystemId - .createSingleJointedArmSystem( - DCMotor.getNEO(1), 0.43, 1); - m_observer = new KalmanFilter<>( - Nat.N2(), - Nat.N1(), - m_plant, - VecBuilder.fill(eX, eV), // How accurate we - // think our model is, in radians and radians/sec - VecBuilder.fill(mX), // How accurate we think our encoder position - // data is. In this case we very highly trust our encoder position reading. - m_seconds); - m_controller = new LinearQuadraticRegulator<>( - m_plant, - VecBuilder.fill(Q1, Q2), // qelms. - VecBuilder.fill(R), // relms. Control effort (voltage) tolerance. Decrease this to more - m_seconds); // Nominal time between loops. 0.020 for TimedRobot, but can be - m_loop = new LinearSystemLoop<>(m_plant, m_controller, m_observer, m_maxVolts, m_seconds); - m_trapezoidProfile = new TrapezoidProfile(m_constraints); - } - - public void setAMatrix(double tr, double br) { - matrixA.set(0, 1, tr); - matrixA.set(1, 1, br); - } - - public void set(double maxV, double maxA, LinearSystem plant, double eX, double eV, double mX, double Q1, double Q2, double R) { - m_constraints = new TrapezoidProfile.Constraints( - maxV, - maxA); - m_plant = plant; - m_observer = new KalmanFilter<>( - Nat.N2(), - Nat.N1(), - m_plant, - VecBuilder.fill(eX, eV), // How accurate we - // think our model is, in radians and radians/sec - VecBuilder.fill(mX), // How accurate we think our encoder position - // data is. In this case we very highly trust our encoder position reading. - m_seconds); - m_controller = new LinearQuadraticRegulator<>( - m_plant, - VecBuilder.fill(Q1, Q2), // qelms. - VecBuilder.fill(R), // relms. Control effort (voltage) tolerance. Decrease this to more - m_seconds); // Nominal time between loops. 0.020 for TimedRobot, but can be - m_loop = new LinearSystemLoop<>(m_plant, m_controller, m_observer, m_maxVolts, m_seconds); - m_trapezoidProfile = new TrapezoidProfile(m_constraints); - } - - public void setBMatrix(double t, double b) { - matrixB.set(0, 0, t); - matrixB.set(1, 0, b); - - } - - public void createFeedforward() { - feedforward = new LinearPlantInversionFeedforward<>(matrixA, matrixB, m_seconds); - } - - public double calculate(double angle, double goalPosition, double goalVelocity) { - TrapezoidProfile.State trapezoidGoal; - trapezoidGoal = new TrapezoidProfile.State(goalPosition, goalVelocity); - m_lastProfiledReference = m_trapezoidProfile.calculate(m_seconds, trapezoidGoal, m_lastProfiledReference); - m_loop.setNextR(m_lastProfiledReference.position, m_lastProfiledReference.velocity); - m_loop.correct(VecBuilder.fill(angle)); - m_loop.predict(0.020); - double nextVoltage = m_loop.getU(0); - return nextVoltage; - } -} \ No newline at end of file diff --git a/studies/circleLQR/src/main/java/org/team100/frc2023/Main.java b/studies/circleLQR/src/main/java/org/team100/frc2023/Main.java deleted file mode 100644 index c60436b..0000000 --- a/studies/circleLQR/src/main/java/org/team100/frc2023/Main.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.team100.frc2023; - -import edu.wpi.first.wpilibj.RobotBase; - -public final class Main { - - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } -} diff --git a/studies/circleLQR/src/main/java/org/team100/frc2023/Robot.java b/studies/circleLQR/src/main/java/org/team100/frc2023/Robot.java deleted file mode 100644 index ca31493..0000000 --- a/studies/circleLQR/src/main/java/org/team100/frc2023/Robot.java +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package org.team100.frc2023; - -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N2; -import edu.wpi.first.math.system.LinearSystem; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.system.plant.LinearSystemId; -import edu.wpi.first.wpilibj.TimedRobot; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.CommandScheduler; - -public class Robot extends TimedRobot { - private Command m_autonomousCommand; - final LinearSystem m_armPlant = LinearSystemId.createSingleJointedArmSystem(DCMotor.getNEO(1), 0.43, 1);//TODO add arm moment of inertia -// private final LQRManager LQRController = new LQRManager(8*Math.PI,4*Math.PI, .015,.17, 2*Math.PI/(42*45), Units.degreesToRadians(0.01),Units.degreesToRadians(1),12); - private RobotContainer m_robotContainer; - - @Override - public void robotInit() { - m_robotContainer = new RobotContainer(); - } - - @Override - public void robotPeriodic() { - CommandScheduler.getInstance().run(); - } - - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - @Override - public void disabledExit() {} - - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - if (m_autonomousCommand != null) { - m_autonomousCommand.schedule(); - } - } - - @Override - public void autonomousPeriodic() {} - - @Override - public void autonomousExit() {} - - @Override - public void teleopInit() { - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); - } - } - - @Override - public void teleopPeriodic() {} - - @Override - public void teleopExit() {} - - @Override - public void testInit() { - CommandScheduler.getInstance().cancelAll(); - } - - @Override - public void testPeriodic() {} - - @Override - public void testExit() {} -} diff --git a/studies/circleLQR/src/main/java/org/team100/frc2023/RobotContainer.java b/studies/circleLQR/src/main/java/org/team100/frc2023/RobotContainer.java deleted file mode 100644 index 42874e6..0000000 --- a/studies/circleLQR/src/main/java/org/team100/frc2023/RobotContainer.java +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package org.team100.frc2023; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.Commands; - -public class RobotContainer { - public RobotContainer() { - configureBindings(); - } - - private void configureBindings() {} - - public Command getAutonomousCommand() { - return Commands.print("No autonomous command configured"); - } -} \ No newline at end of file diff --git a/studies/circleLQR/src/test/java/org/team100/test.java b/studies/circleLQR/src/test/java/org/team100/test.java deleted file mode 100644 index 8cc9c93..0000000 --- a/studies/circleLQR/src/test/java/org/team100/test.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.team100; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -import edu.wpi.first.math.Nat; -import edu.wpi.first.math.VecBuilder; -import edu.wpi.first.math.controller.LinearQuadraticRegulator; -import edu.wpi.first.math.estimator.KalmanFilter; -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N2; -import edu.wpi.first.math.system.LinearSystem; -import edu.wpi.first.math.system.LinearSystemLoop; -import edu.wpi.first.math.system.plant.DCMotor; -import edu.wpi.first.math.system.plant.LinearSystemId; -import edu.wpi.first.math.trajectory.TrapezoidProfile; -import edu.wpi.first.math.util.Units; - -public class test { - private double m_maxVolts; - private double m_seconds; - private LinearSystem m_plant; - private KalmanFilter m_observer; - private LinearQuadraticRegulator m_controller; - public LinearSystemLoop m_loop; - public TrapezoidProfile.Constraints m_constraints; - private TrapezoidProfile m_trapezoidProfile; - public TrapezoidProfile.State m_lastProfiledReference = new TrapezoidProfile.State(); - - // Matrix matrixA = new Matrix<>(Nat.N2(), Nat.N2()); - - // Matrix matrixB = new Matrix<>(Nat.N2(), Nat.N1()); - - // public LinearPlantInversionFeedforward feedforward; - @Test - public void testSimple() { - m_seconds = .02; - m_maxVolts = 12; - m_constraints = new TrapezoidProfile.Constraints( - 3, - 3); - m_plant = LinearSystemId - .createSingleJointedArmSystem( - DCMotor.getNEO(1), .001, 10); - m_observer = new KalmanFilter<>( - Nat.N2(), - Nat.N1(), - m_plant, - VecBuilder.fill(.015, .17), // How accurate we - // think our model is, in radians and radians/sec - VecBuilder.fill(2*Math.PI/(42*45)), // How accurate we think our encoder position - // data is. In this case we very highly trust our encoder position reading. - m_seconds); - m_controller = new LinearQuadraticRegulator<>( - m_plant, - VecBuilder.fill( Units.degreesToRadians(0.01), Units.degreesToRadians(1)), // qelms. - VecBuilder.fill(12), // relms. Control effort (voltage) tolerance. Decrease this to more - m_seconds); // Nominal time between loops. 0.020 for TimedRobot, but can be - m_loop = new LinearSystemLoop<>(m_plant, m_controller, m_observer, m_maxVolts, m_seconds); - m_trapezoidProfile = new TrapezoidProfile(m_constraints); - TrapezoidProfile.State trapezoidGoal; - trapezoidGoal = new TrapezoidProfile.State(0, 0); - m_lastProfiledReference = m_trapezoidProfile.calculate(m_seconds, trapezoidGoal, m_lastProfiledReference); - m_loop.setNextR(m_lastProfiledReference.position, m_lastProfiledReference.velocity); - m_loop.correct(VecBuilder.fill(0)); - m_loop.predict(0.020); - double nextVoltage = m_loop.getU(0); - // LQRManager LQRController = new LQRManager(8*Math.PI,4*Math.PI, .015,.17, 2*Math.PI/(42*45), Units.degreesToRadians(0.01),Units.degreesToRadians(1),12,12,.02); - assertEquals(0,nextVoltage); - } -} diff --git a/studies/circleLQR/vendordeps/WPILibNewCommands.json b/studies/circleLQR/vendordeps/WPILibNewCommands.json deleted file mode 100644 index bd535bf..0000000 --- a/studies/circleLQR/vendordeps/WPILibNewCommands.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fileName": "WPILibNewCommands.json", - "name": "WPILib-New-Commands", - "version": "1.0.0", - "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266", - "mavenUrls": [], - "jsonUrl": "", - "javaDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-java", - "version": "wpilib" - } - ], - "jniDependencies": [], - "cppDependencies": [ - { - "groupId": "edu.wpi.first.wpilibNewCommands", - "artifactId": "wpilibNewCommands-cpp", - "version": "wpilib", - "libName": "wpilibNewCommands", - "headerClassifier": "headers", - "sourcesClassifier": "sources", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "linuxathena", - "linuxarm32", - "linuxarm64", - "windowsx86-64", - "windowsx86", - "linuxx86-64", - "osxuniversal" - ] - } - ] -} diff --git a/studies/console/.gitignore b/studies/console/.gitignore deleted file mode 100644 index 3325f5c..0000000 --- a/studies/console/.gitignore +++ /dev/null @@ -1,172 +0,0 @@ -# This gitignore has been specially created by the WPILib team. -# If you remove items from this file, intellisense might break. - -### C++ ### -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -# # VS Code Specific Java Settings -# DO NOT REMOVE .classpath and .project -.classpath -.project -.settings/ -bin/ - -# IntelliJ -*.iml -*.ipr -*.iws -.idea/ -out/ - -# Fleet -.fleet - -# Simulation GUI and other tools window save file -*-window.json diff --git a/studies/console/.vscode/launch.json b/studies/console/.vscode/launch.json deleted file mode 100644 index 5b804e8..0000000 --- a/studies/console/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "wpilib", - "name": "WPILib Desktop Debug", - "request": "launch", - "desktop": true, - }, - { - "type": "wpilib", - "name": "WPILib roboRIO Debug", - "request": "launch", - "desktop": false, - } - ] -} diff --git a/studies/console/.vscode/settings.json b/studies/console/.vscode/settings.json deleted file mode 100644 index c0e4823..0000000 --- a/studies/console/.vscode/settings.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "automatic", - "java.server.launchMode": "Standard", - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "bin/": true, - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true, - "**/*~": true - }, - "java.test.config": [ - { - "name": "WPIlibUnitTests", - "workingDirectory": "${workspaceFolder}/build/jni/release", - "vmargs": [ "-Djava.library.path=${workspaceFolder}/build/jni/release" ], - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" , - "DYLD_LIBRARY_PATH": "${workspaceFolder}/build/jni/release" - } - }, - ], -"java.test.defaultConfig": "WPIlibUnitTests", -"cmake.configureOnOpen": false, -"files.associations": { - "typeinfo": "cpp" -} -} diff --git a/studies/console/.wpilib/wpilib_preferences.json b/studies/console/.wpilib/wpilib_preferences.json deleted file mode 100644 index a8060e4..0000000 --- a/studies/console/.wpilib/wpilib_preferences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enableCppIntellisense": false, - "currentLanguage": "java", - "projectYear": "2023", - "teamNumber": 100 -} \ No newline at end of file diff --git a/studies/console/LICENSE b/studies/console/LICENSE deleted file mode 100644 index b20be45..0000000 --- a/studies/console/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 truher - -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. diff --git a/studies/console/README.md b/studies/console/README.md deleted file mode 100644 index 6addc4f..0000000 --- a/studies/console/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Console - -Java and Arduino code for FRC operator console. - -The Arduino code emulates a USB Joystick device, with up to -32 buttons, 8 motion axes, and 16 LED outputs. - -To build the Arduino part, you use the [Arduino IDE](https://www.arduino.cc/en/software). -Open one of the console files, e.g. knobs.ino. -Choose "preferences" and set the "sketchbook location" (the first line in the preferences dialog box) -to all24/studies/console/arduino, to pick up the required libraries. - -To program the Sparkfun Pro Micro, you have to push the little button, so make it easy to access. - -There's an example Fusion 360 assembly for laser-cut panels [here.](https://a360.co/3Fu8oDa) -If anybody knows how to share the entire Fusion 360 project, please let me know. - -Absolute encoder and joystick for swerve pilot, also trims: - - - -Many buttons for everything else: - - - -Audio output for target-lock feedback, also buttons: - - diff --git a/studies/console/WPILib-License.md b/studies/console/WPILib-License.md deleted file mode 100644 index ba35a02..0000000 --- a/studies/console/WPILib-License.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2009-2021 FIRST and other WPILib contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of FIRST, WPILib, nor the names of other WPILib - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FIRST AND OTHER WPILIB CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/console/arduino/.vscode/settings.json b/studies/console/arduino/.vscode/settings.json deleted file mode 100644 index e124cb7..0000000 --- a/studies/console/arduino/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "workbench.colorTheme": "Default Light Modern" -} \ No newline at end of file diff --git a/studies/console/arduino/README.md b/studies/console/arduino/README.md deleted file mode 100644 index 4fbd0bd..0000000 --- a/studies/console/arduino/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Arduino - -This supports a modular operator console, where each subconsole has its own arduino controller. - -Each subconsole is its own Arduino "sketch," and there's a "library" for USB communication and -to manage names and ID's. - -To use the Arduino IDE with this project you need to set the "sketchbook" to this directory. -You'll also need to edit the "library" code with a separate Arduino IDE from the "sketch" code, -because the Arduino folk don't want sketch editors unwittingly changing library code. diff --git a/studies/console/arduino/arm/Indicator.h b/studies/console/arduino/arm/Indicator.h deleted file mode 100644 index 107650e..0000000 --- a/studies/console/arduino/arm/Indicator.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef INDICATOR_H -#define INDICATOR_H -#include "Data.h" -#include - -// TODO: these are really neopixels -#define AT_GOAL_LED 11 -#define STOP_LED 12 -#define SLOW_LED 13 -#define MED_LED 14 -#define FAST_LED 15 - - -/** - * Expresses physical state: lights, sounds, etc. - */ -class Indicator { -public: - /** - * Interpretation of the RoboRIO outputs for this console. - */ - typedef struct { - bool atGoal : 1; - uint8_t speed : 3; - // extra bits below - uint16_t extra: 12; - // bool i5 : 1; - // bool i6 : 1; - // bool i7 : 1; - // bool i8 : 1; - // bool i9 : 1; - // bool i10 : 1; - // bool i11 : 1; - // bool i12 : 1; - // bool i13 : 1; - // bool i14 : 1; - // bool i15 : 1; - // bool i16 : 1; - } ArmOutputs; - - typedef union { - Data::ReportRx report; - ArmOutputs outputs; - } ReportOutput; - - //Data& data_; - ArmOutputs& armOutputs_; - // ArmOutputs previousArmOutputs_ = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - ArmOutputs previousArmOutputs_ = { 0, 0 }; - Indicator(Data::ReportRx& reportRx) - // : data_(data) { - : armOutputs_(((ReportOutput&)reportRx).outputs) { - pinMode(AT_GOAL_LED, OUTPUT); - pinMode(STOP_LED, OUTPUT); - pinMode(SLOW_LED, OUTPUT); - pinMode(MED_LED, OUTPUT); - pinMode(FAST_LED, OUTPUT); - } - - /** - * Send newly changed outputs to the output devices. - * TODO: actually do the I2C way. - */ - void indicate() { - if (armOutputs_.atGoal != previousArmOutputs_.atGoal) { - previousArmOutputs_.atGoal = armOutputs_.atGoal; - digitalWrite(AT_GOAL_LED, armOutputs_.atGoal); - } - if (armOutputs_.speed != previousArmOutputs_.speed) { - previousArmOutputs_.speed = armOutputs_.speed; - switch (armOutputs_.speed) { - case 0: - digitalWrite(STOP_LED, LOW); - digitalWrite(SLOW_LED, LOW); - digitalWrite(MED_LED, LOW); - digitalWrite(FAST_LED, LOW); - break; - case 1: - digitalWrite(STOP_LED, HIGH); - digitalWrite(SLOW_LED, LOW); - digitalWrite(MED_LED, LOW); - digitalWrite(FAST_LED, LOW); - break; - case 2: - digitalWrite(STOP_LED, LOW); - digitalWrite(SLOW_LED, HIGH); - digitalWrite(MED_LED, LOW); - digitalWrite(FAST_LED, LOW); - break; - case 3: - digitalWrite(STOP_LED, LOW); - digitalWrite(SLOW_LED, LOW); - digitalWrite(MED_LED, HIGH); - digitalWrite(FAST_LED, LOW); - break; - case 4: - digitalWrite(STOP_LED, LOW); - digitalWrite(SLOW_LED, LOW); - digitalWrite(MED_LED, LOW); - digitalWrite(FAST_LED, HIGH); - break; - default: - digitalWrite(STOP_LED, LOW); - digitalWrite(SLOW_LED, LOW); - digitalWrite(MED_LED, LOW); - digitalWrite(FAST_LED, LOW); - break; - } - } - } -}; - -#endif // INDICATOR_H \ No newline at end of file diff --git a/studies/console/arduino/arm/README.md b/studies/console/arduino/arm/README.md deleted file mode 100644 index 63bd100..0000000 --- a/studies/console/arduino/arm/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Arm - -Sketch for the arm subconsole. diff --git a/studies/console/arduino/arm/Sensor.h b/studies/console/arduino/arm/Sensor.h deleted file mode 100644 index c2d9dad..0000000 --- a/studies/console/arduino/arm/Sensor.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H -#include "Data.h" -#include -#include - -#define BUTTON_1 0 -#define BUTTON_2 1 - -/** - * Reads physical state: buttons, joysticks, etc. - * TODO: more channels - */ -class Sensor { -public: - Data& data_; - Sensor(Data& data) - : data_(data) { - pinMode(BUTTON_1, INPUT_PULLUP); - pinMode(BUTTON_2, INPUT_PULLUP); - } - /** - * Updates state with inputs, return true if anything changed. - */ - bool sense() { - bool updated = false; - - bool readValue = !(bool)digitalRead(BUTTON_1); - if (readValue != data_.reportTx_.b1) { - data_.reportTx_.b1 = readValue; - // fake an axis - data_.reportTx_.x = -25000; - data_.reportTx_.y = -20000; - data_.reportTx_.z = -15000; - data_.reportTx_.rx = -10000; - data_.reportTx_.ry = -5000; - data_.reportTx_.rz = 5000; - data_.reportTx_.slider = 10000; - data_.reportTx_.dial = 15000; - updated = true; - } - - readValue = !(bool)digitalRead(BUTTON_2); - if (readValue != data_.reportTx_.b2) { - data_.reportTx_.b2 = readValue; - data_.reportTx_.x = 0; - data_.reportTx_.y = 0; - data_.reportTx_.z = 0; - data_.reportTx_.rx = 0; - data_.reportTx_.ry = 0; - data_.reportTx_.rz = 0; - data_.reportTx_.slider = 0; - data_.reportTx_.dial = 0; - updated = true; - } - return updated; - } -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/arm/arm.ino b/studies/console/arduino/arm/arm.ino deleted file mode 100644 index 1ffba92..0000000 --- a/studies/console/arduino/arm/arm.ino +++ /dev/null @@ -1,17 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" -#include "Indicator.h" - -Data data_; -Transceiver transceiver_(Transceiver::SubConsole::ARM, data_); -Sensor sensor_(data_); -Indicator indicator_(data_.reportRx_); - -void setup() { -} - -void loop() { - if (sensor_.sense()) transceiver_.send(); - if (transceiver_.recv()) indicator_.indicate(); -} \ No newline at end of file diff --git a/studies/console/arduino/autopilot/README.md b/studies/console/arduino/autopilot/README.md deleted file mode 100644 index 040757b..0000000 --- a/studies/console/arduino/autopilot/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Autopilot - -Sketch for the autopilot subconsole. diff --git a/studies/console/arduino/autopilot/Sensor.h b/studies/console/arduino/autopilot/Sensor.h deleted file mode 100644 index ecafb50..0000000 --- a/studies/console/arduino/autopilot/Sensor.h +++ /dev/null @@ -1,156 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H -#include "Data.h" -#include -#include -#include "Adafruit_NeoKey_1x4.h" -// see https://github.com/sparkfun/SparkFun_TPA2016D2_Arduino_Library -#include - -class Sensor { -public: - void initialize() { - pinMode(RXLED, OUTPUT); - pinMode(SOUNDPIN, OUTPUT); - Wire.begin(); - delay(100); - while (!neokey0.begin()) { - delay(1000); - Serial.println("neokey begin failed"); - } - while (!amp.begin()) { - delay(1000); - Serial.println("amp begin failed"); - } - amp.disableShutdown(); - amp.enableSpeakers(); - amp.disableLimiter(); - amp.disableNoiseGate(); - amp.writeAttack(0); - amp.writeHold(0); - amp.writeRelease(0); - amp.writeFixedGain(0); - amp.writeMaxGain(0); - stop(); - } - - /** - * Unpacks the uint32_t from digitalReadBulk without bit twiddling. :-) - */ - struct Keys { - uint8_t : 4; - bool a : 1; - bool b : 1; - bool c : 1; - bool d : 1; - uint32_t : 24; - }; - - void sense(ReportTx& reportTx) { - uint32_t buttons0 = ~neokey0.digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - Keys k0 = *(Keys*)&buttons0; - reportTx.b1 = k0.a; - reportTx.b2 = k0.b; - reportTx.b3 = k0.c; - reportTx.b4 = k0.d; - } - - void indicate(ReportRx rpt) { - if (rpt == prev) { // speed up the common case - return; - } - lite(neokey0, 0, 0x00ffff, rpt.i1, prev.i1); - lite(neokey0, 1, 0x00ffff, rpt.i2, prev.i2); - lite(neokey0, 2, 0x00ffff, rpt.i3, prev.i3); - lite(neokey0, 3, 0x00ffff, rpt.i4, prev.i4); - neokey0.pixels.show(); - - // These pitches are from AIM-9, see https://youtu.be/QV4GStRN5UU - if (rpt.i1) { // looking for the target but can't see it - stop(); - beep(500, 100); - } else if (rpt.i2) { // sees the target but not ok to shoot - stop(); - steady(750); - } else if (rpt.i3) { // shoot now - stop(); - steady(1500); - } else { // silence - stop(); - } - prev = rpt; - } - - void splash() { - for (int i = 0; i < 4; i++) { - neokey0.pixels.setPixelColor(i, 0xffffff); - neokey0.pixels.show(); - delay(25); - } - delay(750); - for (int i = 0; i < 4; i++) { - neokey0.pixels.setPixelColor(i, 0x000000); - } - neokey0.pixels.show(); - } - - // needs to be called periodically to maintain the beeping - void loop() { - if (beep_duration_ms > 0) { - uint32_t now_ms = millis(); - if (now_ms > beep_timeout_ms) { // flip state - if (beeping) { - digitalWrite(RXLED, LOW); - noTone(SOUNDPIN); - } else { - digitalWrite(RXLED, HIGH); - tone(SOUNDPIN, beep_frequency_hz); - } - beep_timeout_ms = now_ms + beep_duration_ms; - beeping ^= 1; - } - } - } - -private: - static const uint8_t RXLED = 17; - static const uint8_t SOUNDPIN = 9; - TPA2016D2 amp; - Adafruit_NeoKey_1x4 neokey0; - uint32_t beep_timeout_ms; - bool beeping; - ReportRx prev; - uint16_t beep_duration_ms; - uint16_t beep_frequency_hz; - - void beep(uint16_t frequency_hz, uint16_t duration_ms) { - Serial.println("beep"); - beep_duration_ms = duration_ms; - beep_frequency_hz = frequency_hz; - } - - void steady(uint16_t frequency_hz) { - beep_timeout_ms = 0; - beeping = false; - tone(SOUNDPIN, frequency_hz); - } - - void stop() { - beep_duration_ms = 0; - digitalWrite(RXLED, HIGH); - noTone(SOUNDPIN); - beep_timeout_ms = 0; - beeping = false; - } - - /** - * Changes the state of one key, if the new state is different. - */ - void lite(Adafruit_NeoKey_1x4& key, int i, uint32_t color, bool state, bool previousState) { - if (state == previousState) { - return; - } - key.pixels.setPixelColor(i, state ? color : 0x000000); - } -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/autopilot/autopilot.ino b/studies/console/arduino/autopilot/autopilot.ino deleted file mode 100644 index e67de14..0000000 --- a/studies/console/arduino/autopilot/autopilot.ino +++ /dev/null @@ -1,31 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" - -ReportRx reportRx; // transceiver writes received data here, indicator displays it. -ReportTx reportTx; // sensor writes data here, transceiver sends it. -Transceiver transceiver(Transceiver::SubConsole::AUTOPILOT, reportRx); -Sensor sensor; - -void setup() { - Serial.begin(115200); - delay(1000); - Serial.println("autopilot setup"); - sensor.initialize(); - sensor.splash(); -} - -void loop() { - sensor.sense(reportTx); - transceiver.send(reportTx); - /////////////////////// - // for this demo we loop back. - // TODO: take this out, do it in the RIO. - /////////////////////// - reportRx = *(ReportRx*)((char*)(&reportTx) + 16); - /////////////////////// - // TODO: remove the above line - /////////////////////// - sensor.indicate(reportRx); - sensor.loop(); -} \ No newline at end of file diff --git a/studies/console/arduino/basic/basic.ino b/studies/console/arduino/basic/basic.ino deleted file mode 100644 index 1925cec..0000000 --- a/studies/console/arduino/basic/basic.ino +++ /dev/null @@ -1,53 +0,0 @@ -#include "Adafruit_NeoKey_1x4.h" -#include "seesaw_neopixel.h" - -Adafruit_NeoKey_1x4 neokey; - -void setup() { - if (! neokey.begin(0x30)) { // begin with I2C address, default is 0x30 - while(1) delay(10); - } - - // Pulse all the LEDs on to show we're working - for (uint16_t i=0; i -#include - -#include "Adafruit_NeoKey_1x4.h" -#include "seesaw_neopixel.h" - -/** - * Reads physical state: buttons, joysticks, etc. - * - * See https://www.adafruit.com/product/4980 - * See https://learn.adafruit.com/neokey-1x4-qt-i2c - * See https://github.com/adafruit/Adafruit_Seesaw - */ -class Sensor { -public: - /** - * Start all the neokeys. - * - * TODO: do something in the case where this fails. - */ - void initialize() { - if (!neokey0.begin(0x30)) { - return; - } - if (!neokey1.begin(0x31)) { - return; - } - if (!neokey2.begin(0x32)) { - return; - } - initialized = true; - } - - /** - * Lights the keys as specified in ReportRx. - * - * The key mapping here matches the one in sense(), as a demo. - * In general, these outputs might be more useful if they represented - * more than just a keypress. - */ - void indicate(ReportRx rpt) { - if (rpt == prev) { // speed up the common case - return; - } - lite(neokey0, 0, 0x00ffff, rpt.i12, prev.i12); // climb low - lite(neokey0, 1, 0x00ffff, rpt.i15, prev.i15); // down - lite(neokey0, 2, 0x00ffff, rpt.i16, prev.i16); // next - lite(neokey0, 3, 0x00ffff, rpt.i1, prev.i1); // lock - - lite(neokey1, 0, 0x0000ff, rpt.i11, prev.i11); // empty - lite(neokey1, 1, 0x00ff00, rpt.i13, prev.i13); // shoot low - lite(neokey1, 2, 0x00ff00, rpt.i14, prev.i14); // high - lite(neokey1, 3, 0x00ff00, rpt.i5, prev.i5); // eject - - lite(neokey2, 0, 0x0000ff, rpt.i10, prev.i10); // empty - lite(neokey2, 1, 0x0000ff, rpt.i9, prev.i9); // empty - lite(neokey2, 2, 0x00ff00, rpt.i2, prev.i2); // index - lite(neokey2, 3, 0xff0000, rpt.i4, prev.i4); // stop - - neokey0.pixels.show(); - neokey1.pixels.show(); - neokey2.pixels.show(); - prev = rpt; - } - - /** - * Unpacks the uint32_t from digitalReadBulk without bit twiddling. :-) - */ - struct Keys { - uint8_t : 4; - bool a : 1; - bool b : 1; - bool c : 1; - bool d : 1; - uint32_t : 24; - }; - - /** - * Reads all the keys and writes the values into reportTx. - * - * The mapping here matches the legacy "Button Board". - */ - void sense(ReportTx& reportTx) { - uint32_t buttons0 = ~neokey0.digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - uint32_t buttons1 = ~neokey1.digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - uint32_t buttons2 = ~neokey2.digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - - Keys k0 = *(Keys*)&buttons0; - Keys k1 = *(Keys*)&buttons1; - Keys k2 = *(Keys*)&buttons2; - - reportTx.b12 = k0.a; // climb low - reportTx.b15 = k0.b; // down - reportTx.b16 = k0.c; // next - reportTx.b1 = k0.d; // lock - - reportTx.b11 = k1.a; // empty - reportTx.b13 = k1.b; // shoot low - reportTx.b14 = k1.c; // high - reportTx.b5 = k1.d; // eject - - reportTx.b10 = k2.a; // empty - reportTx.b9 = k2.b; // empty - reportTx.b2 = k2.c; // index - reportTx.b4 = k2.d; // stop - } - - /** - * A little light show to show it's working. - */ - void splash() { - for (int i = 0; i < 4; i++) { - neokey0.pixels.setPixelColor(i, 0xffffff); - neokey0.pixels.show(); - delay(25); - } - for (int i = 0; i < 4; i++) { - neokey1.pixels.setPixelColor(i, 0xffffff); - neokey1.pixels.show(); - delay(25); - } - for (int i = 0; i < 4; i++) { - neokey2.pixels.setPixelColor(i, 0xffffff); - neokey2.pixels.show(); - delay(25); - } - for (int i = 0; i < 4; i++) { - neokey0.pixels.setPixelColor(i, 0x000000); - neokey0.pixels.show(); - delay(25); - } - for (int i = 0; i < 4; i++) { - neokey1.pixels.setPixelColor(i, 0x000000); - neokey1.pixels.show(); - delay(25); - } - for (int i = 0; i < 4; i++) { - neokey2.pixels.setPixelColor(i, 0x000000); - neokey2.pixels.show(); - delay(25); - } - for (int i = 0; i < 256; i += 16) { - for (int k = 0; k < 4; ++k) { - neokey0.pixels.setPixelColor(k, i, 0, 0); - neokey1.pixels.setPixelColor(k, i, 0, 0); - neokey2.pixels.setPixelColor(k, i, 0, 0); - } - neokey0.pixels.show(); - neokey1.pixels.show(); - neokey2.pixels.show(); - delay(25); - } - delay(750); - for (int i = 0; i < 4; i++) { - neokey0.pixels.setPixelColor(i, 0x000000); - neokey1.pixels.setPixelColor(i, 0x000000); - neokey2.pixels.setPixelColor(i, 0x000000); - } - neokey0.pixels.show(); - neokey1.pixels.show(); - neokey2.pixels.show(); - } - -private: - Adafruit_NeoKey_1x4 neokey0; - Adafruit_NeoKey_1x4 neokey1; - Adafruit_NeoKey_1x4 neokey2; - ReportRx prev; - // TODO: do something with initialized (e.g. report an error if it's false) - bool initialized{}; - - /** - * Changes the state of one key, if the new state is different. - */ - void lite(Adafruit_NeoKey_1x4& key, int i, uint32_t color, bool state, bool previousState) { - if (state == previousState) { - return; - } - key.pixels.setPixelColor(i, state ? color : 0x000000); - } -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/buttons/buttons.ino b/studies/console/arduino/buttons/buttons.ino deleted file mode 100644 index 8174961..0000000 --- a/studies/console/arduino/buttons/buttons.ino +++ /dev/null @@ -1,27 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" - -ReportRx reportRx_; // transceiver writes received data here, indicator displays it. -ReportTx reportTx_; // sensor writes data here, transceiver sends it. -Sensor sensor_; -Transceiver transceiver_(Transceiver::SubConsole::BUTTONS, reportRx_); - -void setup() { - sensor_.initialize(); - sensor_.splash(); -} - -void loop() { - sensor_.sense(reportTx_); - transceiver_.send(reportTx_); - /////////////////////// - // for this demo we loop back. - // TODO: take this out, do it in the RIO. - /////////////////////// - reportRx_ = *(ReportRx*)((char*)(&reportTx_) + 16); - /////////////////////// - // TODO: remove the above line - /////////////////////// - sensor_.indicate(reportRx_); -} \ No newline at end of file diff --git a/studies/console/arduino/climb/Indicator.h b/studies/console/arduino/climb/Indicator.h deleted file mode 100644 index 11accec..0000000 --- a/studies/console/arduino/climb/Indicator.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef INDICATOR_H -#define INDICATOR_H -#include "Data.h" -#include - -#define LED_1 13 -#define LED_2 12 -#define LED_3 11 - -/** - * Expresses physical state: lights, sounds, etc. - * TODO: more outputs - */ -class Indicator { -public: - Data& data_; - Indicator(Data& data) - : data_(data) { - pinMode(LED_1, OUTPUT); - pinMode(LED_2, OUTPUT); - pinMode(LED_3, OUTPUT); - } - - /** - * Indicating reasserts everything. - * TODO: only some of them - */ - void indicate() { - digitalWrite(LED_1, data_.reportRx_.i1); - digitalWrite(LED_2, data_.reportRx_.i2); - digitalWrite(LED_3, data_.reportRx_.i3); - } -}; - -#endif // INDICATOR_H \ No newline at end of file diff --git a/studies/console/arduino/climb/README.md b/studies/console/arduino/climb/README.md deleted file mode 100644 index 35ede6a..0000000 --- a/studies/console/arduino/climb/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Climb - -Sketch for the climb subconsole. diff --git a/studies/console/arduino/climb/Sensor.h b/studies/console/arduino/climb/Sensor.h deleted file mode 100644 index c2d9dad..0000000 --- a/studies/console/arduino/climb/Sensor.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H -#include "Data.h" -#include -#include - -#define BUTTON_1 0 -#define BUTTON_2 1 - -/** - * Reads physical state: buttons, joysticks, etc. - * TODO: more channels - */ -class Sensor { -public: - Data& data_; - Sensor(Data& data) - : data_(data) { - pinMode(BUTTON_1, INPUT_PULLUP); - pinMode(BUTTON_2, INPUT_PULLUP); - } - /** - * Updates state with inputs, return true if anything changed. - */ - bool sense() { - bool updated = false; - - bool readValue = !(bool)digitalRead(BUTTON_1); - if (readValue != data_.reportTx_.b1) { - data_.reportTx_.b1 = readValue; - // fake an axis - data_.reportTx_.x = -25000; - data_.reportTx_.y = -20000; - data_.reportTx_.z = -15000; - data_.reportTx_.rx = -10000; - data_.reportTx_.ry = -5000; - data_.reportTx_.rz = 5000; - data_.reportTx_.slider = 10000; - data_.reportTx_.dial = 15000; - updated = true; - } - - readValue = !(bool)digitalRead(BUTTON_2); - if (readValue != data_.reportTx_.b2) { - data_.reportTx_.b2 = readValue; - data_.reportTx_.x = 0; - data_.reportTx_.y = 0; - data_.reportTx_.z = 0; - data_.reportTx_.rx = 0; - data_.reportTx_.ry = 0; - data_.reportTx_.rz = 0; - data_.reportTx_.slider = 0; - data_.reportTx_.dial = 0; - updated = true; - } - return updated; - } -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/climb/climb.ino b/studies/console/arduino/climb/climb.ino deleted file mode 100644 index cfe2fe2..0000000 --- a/studies/console/arduino/climb/climb.ino +++ /dev/null @@ -1,17 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" -#include "Indicator.h" - -Data data_; -Transceiver transceiver_(Transceiver::SubConsole::CLIMB, data_); -Sensor sensor_(data_); -Indicator indicator_(data_); - -void setup() { -} - -void loop() { - if (sensor_.sense()) transceiver_.send(); - if (transceiver_.recv()) indicator_.indicate(); -} \ No newline at end of file diff --git a/studies/console/arduino/debug/README.md b/studies/console/arduino/debug/README.md deleted file mode 100644 index c84436a..0000000 --- a/studies/console/arduino/debug/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Debug - -Sketch for debugging. \ No newline at end of file diff --git a/studies/console/arduino/debug/Sensor.h b/studies/console/arduino/debug/Sensor.h deleted file mode 100644 index 474055b..0000000 --- a/studies/console/arduino/debug/Sensor.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H -#include "Data.h" -#include -//#include -#include "Adafruit_seesaw.h" - -#define SS_SWITCH 24 - -class Sensor { -public: - void initialize() { - if (!initOne(encoder0, 0x36)) { - return; - } - if (!initOne(encoder1, 0x37)) { - return; - } - initialized = true; - } - - bool initOne(Adafruit_seesaw& encoder, uint8_t addr) { - if (!encoder.begin(addr)) { - return false; - } - encoder.pinMode(SS_SWITCH, INPUT_PULLUP); - encoder.setGPIOInterrupts((uint32_t)1 << SS_SWITCH, 1); - encoder.enableEncoderInterrupt(); - return true; - } - - void sense(ReportTx& reportTx) { - reportTx.b5 = not encoder0.digitalRead(SS_SWITCH); - reportTx.b6 = not encoder1.digitalRead(SS_SWITCH); - reportTx.rz = encoder0.getEncoderPosition() << 10; // reduce resolution so we can see it - reportTx.slider = encoder1.getEncoderPosition() << 10; // reduce resolution so we can see it - } - - bool initialized{}; -private: - Adafruit_seesaw encoder0; - Adafruit_seesaw encoder1; -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/debug/debug.ino b/studies/console/arduino/debug/debug.ino deleted file mode 100644 index 0a96ca7..0000000 --- a/studies/console/arduino/debug/debug.ino +++ /dev/null @@ -1,34 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" - -const static uint32_t LONG = 500; -const static uint32_t SHORT = 50; -const static uint8_t LED_PIN = 17; -uint8_t ledState = LOW; -uint32_t prevTime = 0; - - -ReportTx reportTx; -ReportRx reportRx; -Transceiver transceiver(Transceiver::SubConsole::DEBUG, reportRx); -Sensor sensor; - -void setup() { - pinMode(LED_PIN, OUTPUT); - sensor.initialize(); -} - -void loop() { - uint32_t curTime = millis(); - uint32_t interval = sensor.initialized ? LONG : SHORT; - if (curTime - prevTime >= interval) { - prevTime = curTime; - ledState = (ledState == LOW)? HIGH : LOW; - digitalWrite(LED_PIN, ledState); - } - - sensor.sense(reportTx); - transceiver.send(reportTx); - //sensor.indicate(reportRx); -} \ No newline at end of file diff --git a/studies/console/arduino/knobs/README.md b/studies/console/arduino/knobs/README.md deleted file mode 100644 index 491c93f..0000000 --- a/studies/console/arduino/knobs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Knobs - -Many knobs for use with persistent parameters. \ No newline at end of file diff --git a/studies/console/arduino/knobs/Sensor.h b/studies/console/arduino/knobs/Sensor.h deleted file mode 100644 index 69339de..0000000 --- a/studies/console/arduino/knobs/Sensor.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H -#include "Data.h" - -#include - -#include "Adafruit_seesaw.h" - -#define SS_SWITCH 24 - -/** - * Reads physical state - * - * See https://github.com/adafruit/Adafruit_Seesaw - */ -class Sensor { -public: - /** - * Start all the neokeys. - * - * TODO: do something in the case where this fails. - */ - void initialize() { - if (!initOne(encoder0, 0x36)) { - return; - } - if (!initOne(encoder1, 0x37)) { - return; - } - if (!initOne(encoder2, 0x38)) { - return; - } - if (!initOne(encoder3, 0x39)) { - return; - } - if (!initOne(encoder4, 0x3a)) { - return; - } - initialized = true; - } - - // TODO: make this a library function - bool initOne(Adafruit_seesaw& encoder, uint8_t addr) { - if (!encoder.begin(addr)) { - return false; - } - encoder.pinMode(SS_SWITCH, INPUT_PULLUP); - encoder.setGPIOInterrupts((uint32_t)1 << SS_SWITCH, 1); - encoder.enableEncoderInterrupt(); - return true; - } - - /** - * Reads all the encoders and writes the values into reportTx. - */ - void sense(ReportTx& reportTx) { - // this should be the first five buttons. - reportTx.b1 = not encoder0.digitalRead(SS_SWITCH); - reportTx.b2 = not encoder1.digitalRead(SS_SWITCH); - reportTx.b3 = not encoder2.digitalRead(SS_SWITCH); - reportTx.b4 = not encoder3.digitalRead(SS_SWITCH); - reportTx.b5 = not encoder4.digitalRead(SS_SWITCH); - - // Note the axes are int16_t, the encoder is int32_t, - // but overflow would require >1000 revolutions, will - // never happen. - // For now, expand (<< 8) these to make them easier to see. - // this should be the first five axes. - reportTx.x = encoder0.getEncoderPosition() << 8; - reportTx.y = encoder1.getEncoderPosition() << 8; - reportTx.z = encoder2.getEncoderPosition() << 8; - reportTx.rx = encoder3.getEncoderPosition() << 8; - reportTx.ry = encoder4.getEncoderPosition() << 8; - } - - -private: - Adafruit_seesaw encoder0; - Adafruit_seesaw encoder1; - Adafruit_seesaw encoder2; - Adafruit_seesaw encoder3; - Adafruit_seesaw encoder4; - // TODO: do something with initialized (e.g. report an error if it's false) - bool initialized{}; -}; -#endif // SENSOR_H \ No newline at end of file diff --git a/studies/console/arduino/knobs/knobs.ino b/studies/console/arduino/knobs/knobs.ino deleted file mode 100644 index 8b90617..0000000 --- a/studies/console/arduino/knobs/knobs.ino +++ /dev/null @@ -1,17 +0,0 @@ -#include "Data.h" -#include "Transceiver.h" -#include "Sensor.h" - -ReportRx reportRx_; // transceiver writes received data here, indicator displays it. -ReportTx reportTx_; // sensor writes data here, transceiver sends it. -Sensor sensor_; -Transceiver transceiver_(Transceiver::SubConsole::KNOBS, reportRx_); - -void setup() { - sensor_.initialize(); -} - -void loop() { - sensor_.sense(reportTx_); - transceiver_.send(reportTx_); -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/LICENSE b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/LICENSE deleted file mode 100644 index 14aeb7e..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2013, SOSAndroid (E. Ha.) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holders nor the -names of its contributors may be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/README.md b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/README.md deleted file mode 100644 index dbd9e2b..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/README.md +++ /dev/null @@ -1,46 +0,0 @@ -Arduino library for AS5048B from AMS -============== - -AS5048B is a 14-bit magnetic rotary position sensor with digital angle (I2C) and PWM output. -This library deals only with the I2C channel. - -[AS5048B's](http://www.ams.com/eng/Products/Position-Sensors/Magnetic-Rotary-Position-Sensors/AS5048B) AMS page. - - v1.0 - First release - v1.0.1 - Typo to allow compiling on Codebender.cc (Math.h vs math.h) + Wind vane example modification to comply with the Timer.h lib used by them - v1.0.2 - ams_as5048b.cpp - fix setZeroReg() issue raised by @MechatronicsWorkman - v1.0.3 - Small bug fix and improvement by @DavidHowlett - v1.0.4 - Implemented OTP register burning by @brentyi - v1.0.5 - Optional parameters fix - - -## Features ## -- Manage zero position -- Counts CW or CCW -- Reads Auto Gain & Diagnostics registers -- Reads 14 bits magnitude -- Reads 14 bits angle with various units output (raw, turn, degree, radian, grade, minute of arc, second of arc, Nato mil, Russian mil, Swedish mil) -- Computes an angular exponential moving average -- Reads exponential moving average angle and outputting with various units -- Resets Exp moving Avg -- OTP setting -- OTP programming sequence - -## Code examples ## -- Single angle reading, outputs 2 units -- Angular exponential moving average reading, outputs read angle and average -- Wind vane, outputs azimuth and compass direction - This one as a special #define for Codebender.cc support -- Dial reading for X-Plane -- Slave address programming - -## Not available yet features ## -- PWM reading -- Debug - -## Testing ## -- Tested against AS5048B's official [adapter board](http://www.ams.com/eng/Support/Demoboards/Position-Sensors/Rotary-Magnetic-Position-Sensors/AS5048B-Adapterboard) -- Tested on Arduino Mega with Arduino IDE 1.0.5 && Codebender.cc -- Tested on Arduino Uno with Arduino IDE 1.6.9 -- Tested on Arduino Nano with Arduino IDE 1.6.9 -- Tested on Teensy++ 2.0 with Arduino IDE 1.6.9 -- Please comment about other devices diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.cpp b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.cpp deleted file mode 100644 index 0b6e94f..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.cpp +++ /dev/null @@ -1,561 +0,0 @@ -/**************************************************************************/ -/*! - @file ams_as5048b.cpp - @author SOSAndroid (E. Ha.) - @license BSD (see license.txt) - - Library to interface the AS5048B magnetic rotary encoder from AMS over the I2C bus - - @section HISTORY - - v1.0.0 - First release - v1.0.1 - Typo to allow compiling on Codebender.cc (Math.h vs math.h) - v1.0.2 - setZeroReg() issue raised by @MechatronicsWorkman - v1.0.3 - Small bug fix and improvement by @DavidHowlett -*/ -/**************************************************************************/ - -#include -#include -#include -#include "ams_as5048b.h" - -/*========================================================================*/ -/* CONSTRUCTORS */ -/*========================================================================*/ - -/**************************************************************************/ -/*! - Constructor -*/ -/**************************************************************************/ -AMS_AS5048B::AMS_AS5048B(void) { - _chipAddress = AS5048_ADDRESS; - _debugFlag = false; -} - -AMS_AS5048B::AMS_AS5048B(uint8_t chipAddress) { - _chipAddress = chipAddress; - _debugFlag = false; -} - -/*========================================================================*/ -/* PUBLIC FUNCTIONS */ -/*========================================================================*/ - -/**************************************************************************/ -/*! - @brief init values and overall behaviors for AS5948B use - - @params - none - @returns - none -*/ -/**************************************************************************/ - -void AMS_AS5048B::begin(void) { - - #ifdef USE_WIREBEGIN_ENABLED - Wire.begin(); - #endif - #ifdef SERIAL_DEBUG_ENABLED - _debugFlag = true; - if (!Serial) { - Serial.begin(9600); - } - #endif - - _clockWise = false; - _lastAngleRaw = 0.0; - _zeroRegVal = AMS_AS5048B::zeroRegR(); - _addressRegVal = AMS_AS5048B::addressRegR(); - - AMS_AS5048B::resetMovingAvgExp(); - - return; -} - -/**************************************************************************/ -/*! - @brief Toggle debug output to serial - - @params - none - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::toggleDebug(void) { - - _debugFlag = !_debugFlag; - return; -} - -/**************************************************************************/ -/*! - @brief Set / unset clock wise counting - sensor counts CCW natively - - @params[in] - boolean cw - true: CW, false: CCW - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::setClockWise(boolean cw) { - - _clockWise = cw; - _lastAngleRaw = 0.0; - AMS_AS5048B::resetMovingAvgExp(); - return; -} - -/**************************************************************************/ -/*! - @brief writes OTP control register - - @params[in] - unit8_t register value - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::progRegister(uint8_t regVal) { - - AMS_AS5048B::writeReg(AS5048B_PROG_REG, regVal); - return; -} - -/**************************************************************************/ -/*! - @brief Burn values to the slave address OTP register - - @params[in] - none - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::doProg(void) { - - //enable special programming mode - AMS_AS5048B::progRegister(0xFD); - delay(10); - - //set the burn bit: enables automatic programming procedure - AMS_AS5048B::progRegister(0x08); - delay(10); - - //disable special programming mode - AMS_AS5048B::progRegister(0x00); - delay(10); - - return; -} - -/**************************************************************************/ -/*! - @brief Burn values to the zero position OTP register - - @params[in] - none - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::doProgZero(void) { - //this will burn the zero position OTP register like described in the datasheet - //enable programming mode - AMS_AS5048B::progRegister(0x01); - delay(10); - - //set the burn bit: enables automatic programming procedure - AMS_AS5048B::progRegister(0x08); - delay(10); - - //read angle information (equals to 0) - AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG); - delay(10); - - //enable verification - AMS_AS5048B::progRegister(0x40); - delay(10); - - //read angle information (equals to 0) - AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG); - delay(10); - - return; -} - -/**************************************************************************/ -/*! - @brief write I2C address value (5 bits) into the address register - - @params[in] - unit8_t register value - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::addressRegW(uint8_t regVal) { - - // write the new chip address to the register - AMS_AS5048B::writeReg(AS5048B_ADDR_REG, regVal); - - // update our chip address with our 5 programmable bits - // the MSB is internally inverted, so we flip the leftmost bit - _chipAddress = ((regVal << 2) | (_chipAddress & 0b11)) ^ (1 << 6); - return; -} - -/**************************************************************************/ -/*! - @brief reads I2C address register value - - @params[in] - none - @returns - uint8_t register value -*/ -/**************************************************************************/ -uint8_t AMS_AS5048B::addressRegR(void) { - - return AMS_AS5048B::readReg8(AS5048B_ADDR_REG); -} - -/**************************************************************************/ -/*! - @brief sets current angle as the zero position - - @params[in] - none - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::setZeroReg(void) { - - AMS_AS5048B::zeroRegW((uint16_t) 0x00); //Issue closed by @MechatronicsWorkman and @oilXander. The last sequence avoids any offset for the new Zero position - uint16_t newZero = AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG); - AMS_AS5048B::zeroRegW(newZero); - return; -} - -/**************************************************************************/ -/*! - @brief writes the 2 bytes Zero position register value - - @params[in] - unit16_t register value - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::zeroRegW(uint16_t regVal) { - - AMS_AS5048B::writeReg(AS5048B_ZEROMSB_REG, (uint8_t) (regVal >> 6)); - AMS_AS5048B::writeReg(AS5048B_ZEROLSB_REG, (uint8_t) (regVal & 0x3F)); - return; -} - -/**************************************************************************/ -/*! - @brief reads the 2 bytes Zero position register value - - @params[in] - none - @returns - uint16_t register value trimmed on 14 bits -*/ -/**************************************************************************/ -uint16_t AMS_AS5048B::zeroRegR(void) { - - return AMS_AS5048B::readReg16(AS5048B_ZEROMSB_REG); -} - -/**************************************************************************/ -/*! - @brief reads the 2 bytes magnitude register value - - @params[in] - none - @returns - uint16_t register value trimmed on 14 bits -*/ -/**************************************************************************/ -uint16_t AMS_AS5048B::magnitudeR(void) { - - return AMS_AS5048B::readReg16(AS5048B_MAGNMSB_REG); -} - -uint16_t AMS_AS5048B::angleRegR(void) { - - return AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG); -} - -/**************************************************************************/ -/*! - @brief reads the 1 bytes auto gain register value - - @params[in] - none - @returns - uint8_t register value -*/ -/**************************************************************************/ -uint8_t AMS_AS5048B::getAutoGain(void) { - - return AMS_AS5048B::readReg8(AS5048B_GAIN_REG); -} - -/**************************************************************************/ -/*! - @brief reads the 1 bytes diagnostic register value - - @params[in] - none - @returns - uint8_t register value -*/ -/**************************************************************************/ -uint8_t AMS_AS5048B::getDiagReg(void) { - - return AMS_AS5048B::readReg8(AS5048B_DIAG_REG); -} - -/**************************************************************************/ -/*! - @brief reads current angle value and converts it into the desired unit - - @params[in] - String unit : string expressing the unit of the angle. Sensor raw value as default - @params[in] - Boolean newVal : have a new measurement or use the last read one. True as default - @returns - Double angle value converted into the desired unit -*/ -/**************************************************************************/ -double AMS_AS5048B::angleR(int unit, boolean newVal) { - - double angleRaw; - - if (newVal) { - if(_clockWise) { - angleRaw = (double) (0b11111111111111 - AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG)); - } - else { - angleRaw = (double) AMS_AS5048B::readReg16(AS5048B_ANGLMSB_REG); - } - _lastAngleRaw = angleRaw; - } - else { - angleRaw = _lastAngleRaw; - } - - return AMS_AS5048B::convertAngle(unit, angleRaw); -} - -/**************************************************************************/ -/*! - @brief Performs an exponential moving average on the angle. - Works on Sine and Cosine of the angle to avoid issues 0°/360° discontinuity - - @params[in] - none - @returns - none -*/ -/**************************************************************************/ -void AMS_AS5048B::updateMovingAvgExp(void) { - - //sine and cosine calculation on angles in radian - - double angle = AMS_AS5048B::angleR(U_RAD, true); - - if (_movingAvgCountLoop < EXP_MOVAVG_LOOP) { - _movingAvgExpSin += sin(angle); - _movingAvgExpCos += cos(angle); - if (_movingAvgCountLoop == (EXP_MOVAVG_LOOP - 1)) { - _movingAvgExpSin = _movingAvgExpSin / EXP_MOVAVG_LOOP; - _movingAvgExpCos = _movingAvgExpCos / EXP_MOVAVG_LOOP; - } - _movingAvgCountLoop ++; - } - else { - double movavgexpsin = _movingAvgExpSin + _movingAvgExpAlpha * (sin(angle) - _movingAvgExpSin); - double movavgexpcos = _movingAvgExpCos + _movingAvgExpAlpha * (cos(angle) - _movingAvgExpCos); - _movingAvgExpSin = movavgexpsin; - _movingAvgExpCos = movavgexpcos; - _movingAvgExpAngle = getExpAvgRawAngle(); - } - - return; -} - -/**************************************************************************/ -/*! - @brief sent back the exponential moving averaged angle in the desired unit - - @params[in] - String unit : string expressing the unit of the angle. Sensor raw value as default - @returns - Double exponential moving averaged angle value -*/ -/**************************************************************************/ -double AMS_AS5048B::getMovingAvgExp(int unit) { - - return AMS_AS5048B::convertAngle(unit, _movingAvgExpAngle); -} - -void AMS_AS5048B::resetMovingAvgExp(void) { - - _movingAvgExpAngle = 0.0; - _movingAvgCountLoop = 0; - _movingAvgExpAlpha = 2.0 / (EXP_MOVAVG_N + 1.0); - return; -} - - -/*========================================================================*/ -/* PRIVATE FUNCTIONS */ -/*========================================================================*/ - -uint8_t AMS_AS5048B::readReg8(uint8_t address) { - - uint8_t readValue; - byte requestResult; - uint8_t nbByte2Read = 1; - - Wire.beginTransmission(_chipAddress); - Wire.write(address); - requestResult = Wire.endTransmission(false); - if (requestResult){ - Serial.print("I2C error: "); - Serial.println(requestResult); - } - - Wire.requestFrom(_chipAddress, nbByte2Read); - readValue = (uint8_t) Wire.read(); - - return readValue; -} - -uint16_t AMS_AS5048B::readReg16(uint8_t address) { - //16 bit value got from 2 8bits registers (7..0 MSB + 5..0 LSB) => 14 bits value - - uint8_t nbByte2Read = 2; - byte requestResult; - byte readArray[2]; - uint16_t readValue = 0; - - Wire.beginTransmission(_chipAddress); - Wire.write(address); - requestResult = Wire.endTransmission(false); - if (requestResult){ - Serial.print("I2C error: "); - Serial.println(requestResult); - } - - - Wire.requestFrom(_chipAddress, nbByte2Read); - for (byte i=0; i < nbByte2Read; i++) { - readArray[i] = Wire.read(); - } - - readValue = (((uint16_t) readArray[0]) << 6); - readValue += (readArray[1] & 0x3F); - /* - Serial.println(readArray[0], BIN); - Serial.println(readArray[1], BIN); - Serial.println(readValue, BIN); - */ - return readValue; -} - -void AMS_AS5048B::writeReg(uint8_t address, uint8_t value) { - - Wire.beginTransmission(_chipAddress); - Wire.write(address); - Wire.write(value); - Wire.endTransmission(); - - return; -} - -double AMS_AS5048B::convertAngle(int unit, double angle) { - - // convert raw sensor reading into angle unit - - double angleConv; - - switch (unit) { - case U_RAW: - //Sensor raw measurement - angleConv = angle; - break; - case U_TRN: - //full turn ratio - angleConv = (angle / AS5048B_RESOLUTION); - break; - case U_DEG: - //degree - angleConv = (angle / AS5048B_RESOLUTION) * 360.0; - break; - case U_RAD: - //Radian - angleConv = (angle / AS5048B_RESOLUTION) * 2 * M_PI; - break; - case U_MOA: - //minute of arc - angleConv = (angle / AS5048B_RESOLUTION) * 60.0 * 360.0; - break; - case U_SOA: - //second of arc - angleConv = (angle / AS5048B_RESOLUTION) * 60.0 * 60.0 * 360.0; - break; - case U_GRAD: - //grade - angleConv = (angle / AS5048B_RESOLUTION) * 400.0; - break; - case U_MILNATO: - //NATO MIL - angleConv = (angle / AS5048B_RESOLUTION) * 6400.0; - break; - case U_MILSE: - //Swedish MIL - angleConv = (angle / AS5048B_RESOLUTION) * 6300.0; - break; - case U_MILRU: - //Russian MIL - angleConv = (angle / AS5048B_RESOLUTION) * 6000.0; - break; - default: - //no conversion => raw angle - angleConv = angle; - break; - } - return angleConv; -} - -double AMS_AS5048B::getExpAvgRawAngle(void) { - - double angle; - double twopi = 2 * M_PI; - - if (_movingAvgExpSin < 0.0) { - angle = twopi - acos(_movingAvgExpCos); - } - else { - angle = acos(_movingAvgExpCos); - } - - angle = (angle / twopi) * AS5048B_RESOLUTION; - - return angle; -} - -void AMS_AS5048B::printDebug(void) { - - return; -} diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.h b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.h deleted file mode 100644 index a300905..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/ams_as5048b.h +++ /dev/null @@ -1,150 +0,0 @@ -/**************************************************************************/ -/*! - @file ams_as5048b.h - @author SOSAndroid.fr (E. Ha.) - - @section HISTORY - - v1.0 - First release - v1.0.1 - Typo to allow compiling on Codebender.cc (Math.h vs math.h) - v1.0.2 - Small bug fix and improvement by @DavidHowlett - - Library to interface the AS5048B magnetic rotary encoder from AMS over the I2C bus - - @section LICENSE - - Software License Agreement (BSD License) - - Copyright (c) 2013, SOSAndroid.fr (E. Ha.) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holders nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/**************************************************************************/ - -#if ARDUINO >= 100 - #include -#else - #include -#endif - -#include -#include - - -#ifndef _AMS_AS5048B_H_ -#define _AMS_AS5048B_H_ - - -// OPERATIONS -//#define SERIAL_DEBUG_ENABLED -//#define USE_WIREBEGIN_ENABLED // to comment if Wire.begin() function is called in Setup() for instance. Usefull to manage one or several I2C devices in the same sketch - -// Default addresses for AS5048B -#define AS5048_ADDRESS 0x40 // 0b10000 + ( A1 & A2 to GND) -#define AS5048B_PROG_REG 0x03 -#define AS5048B_ADDR_REG 0x15 -#define AS5048B_ZEROMSB_REG 0x16 //bits 0..7 -#define AS5048B_ZEROLSB_REG 0x17 //bits 0..5 -#define AS5048B_GAIN_REG 0xFA -#define AS5048B_DIAG_REG 0xFB -#define AS5048B_MAGNMSB_REG 0xFC //bits 0..7 -#define AS5048B_MAGNLSB_REG 0xFD //bits 0..5 -#define AS5048B_ANGLMSB_REG 0xFE //bits 0..7 -#define AS5048B_ANGLLSB_REG 0xFF //bits 0..5 -#define AS5048B_RESOLUTION 16384.0 //14 bits - - -// Moving Exponential Average on angle - beware heavy calculation for some Arduino boards -// This is a 1st order low pass filter -// Moving average is calculated on Sine et Cosine values of the angle to provide an extrapolated accurate angle value. -#define EXP_MOVAVG_N 5 //history length impact on moving average impact - keep in mind the moving average will be impacted by the measurement frequency too -#define EXP_MOVAVG_LOOP 1 //number of measurements before starting mobile Average - starting with a simple average - 1 allows a quick start. Value must be 1 minimum - -//unit consts - just to make the units more readable -#define U_RAW 1 -#define U_TRN 2 -#define U_DEG 3 -#define U_RAD 4 -#define U_GRAD 5 -#define U_MOA 6 -#define U_SOA 7 -#define U_MILNATO 8 -#define U_MILSE 9 -#define U_MILRU 10 - - - - - -class AMS_AS5048B { - public: - AMS_AS5048B(void); - AMS_AS5048B(uint8_t chipAddress); - - void begin(void); // to init the object, must be called in the setup loop - void toggleDebug(void); // start / stop debug through serial at anytime - void setClockWise(boolean cw = true); //set clockwise counting, default is false (native sensor) - void progRegister(uint8_t regVal); //nothing so far - manipulate the OTP register - void doProg(void); //progress programming slave address OTP - void doProgZero(void); //progress programming zero position OTP - void addressRegW(uint8_t regVal); //change the chip address - uint8_t addressRegR(void); //read chip address - void setZeroReg(void); //set Zero to current angle position - void zeroRegW(uint16_t regVal); //write Zero register value - uint16_t zeroRegR(void); //read Zero register value - uint16_t angleRegR(void); //read raw value of the angle register - uint8_t diagR(void); //read diagnostic register - uint16_t magnitudeR(void); //read current magnitude - double angleR(int unit = U_RAW, boolean newVal = true); //Read current angle or get last measure with unit conversion : RAW, TRN, DEG, RAD, GRAD, MOA, SOA, MILNATO, MILSE, MILRU - uint8_t getAutoGain(void); - uint8_t getDiagReg(void); - - void updateMovingAvgExp(void); //measure the current angle and feed the Exponential Moving Average calculation - double getMovingAvgExp(int unit = U_RAW); //get Exponential Moving Average calculation - void resetMovingAvgExp(void); //reset Exponential Moving Average calculation values - - private: - //variables - boolean _debugFlag; - boolean _clockWise; - uint8_t _chipAddress; - uint8_t _addressRegVal; - uint16_t _zeroRegVal; - double _lastAngleRaw; - double _movingAvgExpAngle; - double _movingAvgExpSin; - double _movingAvgExpCos; - double _movingAvgExpAlpha; - int _movingAvgCountLoop; - - //methods - uint8_t readReg8(uint8_t address); - uint16_t readReg16(uint8_t address); //16 bit value got from 2x8bits registers (7..0 MSB + 5..0 LSB) => 14 bits value - void writeReg(uint8_t address, uint8_t value); - double convertAngle(int unit, double angle); //RAW, TRN, DEG, RAD, GRAD, MOA, SOA, MILNATO, MILSE, MILRU - double getExpAvgRawAngle(void); - void printDebug(void); -}; - -#endif diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/angle_moving_avg/angle_moving_avg.ino b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/angle_moving_avg/angle_moving_avg.ino deleted file mode 100644 index 68a6869..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/angle_moving_avg/angle_moving_avg.ino +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************/ -/*! - @file angle_moving_avg.ino - @author SOSAndroid (E. Ha.) - @license BSD (see license.txt) - - read over I2C bus and averaging angle - - @section HISTORY - - v1.0 - First release -*/ -/**************************************************************************/ - - -#include -#include - -//unit consts -#define U_RAW 1 -#define U_TRN 2 -#define U_DEG 3 -#define U_RAD 4 -#define U_GRAD 5 -#define U_MOA 6 -#define U_SOA 7 -#define U_MILNATO 8 -#define U_MILSE 9 -#define U_MILRU 10 - -AMS_AS5048B mysensor; - -void setup() { - - //Start serial - Serial.begin(9600); - while (!Serial) ; //wait until Serial ready - - //Start Wire object. Unneeded here as this is done (optionnaly) by AMS_AS5048B object (see lib code - #define USE_WIREBEGIN_ENABLED) - //Wire.begin(); - - //init AMS_AS5048B object - mysensor.begin(); - - //set clock wise counting - mysensor.setClockWise(true); - - //set the 0 to the sensorr - //mysensor.zeroRegW(0x0); - -} - -void loop() { - - //prints to serial the read angle in degree and its average every 2 seconds - //prints 2 times the exact same angle - only one measurement - mysensor.updateMovingAvgExp(); - - - Serial.print("Angle degree : "); - Serial.println(mysensor.angleR(U_DEG, false), DEC); - - Serial.print("Average "); - Serial.println(mysensor.getMovingAvgExp(U_DEG), DEC); - - delay(2000); - -} diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/program_address/program_address.ino b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/program_address/program_address.ino deleted file mode 100644 index 5e6f9e8..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/program_address/program_address.ino +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************/ -/*! - @file program_address.ino - @author brentyi - @license BSD (see license.txt) - - Example sketch for programming the i2c slave address - Be careful -- this can only be done once! - - @section HISTORY - - v1.0.4 - Added address programming example -*/ -/**************************************************************************/ - -#include - -//unit consts -#define U_RAW 1 -#define U_TRN 2 -#define U_DEG 3 -#define U_RAD 4 -#define U_GRAD 5 -#define U_MOA 6 -#define U_SOA 7 -#define U_MILNATO 8 -#define U_MILSE 9 -#define U_MILRU 10 - -// Construct our AS5048B object with an I2C address of 0x40 -AMS_AS5048B mysensor(0x40); - -void setup() { - - //start serial - Serial.begin(9600); - while (!Serial) ; //wait until Serial ready - - // Initialize our sensor - mysensor.begin(); - - // Set the first five MSBs, where the MSB will be internally inverted - // If A1 & A2 are pulled low, our new address should be 0b1000100 - mysensor.addressRegW(0x01); - - // Burn our new address to the OTP register - mysensor.doProg(); -} - -void loop() { - - // Print out angle readings -- this should work if programming succeeded - Serial.print("Angle degree : "); - Serial.println(mysensor.angleR(U_DEG, true), DEC); - - delay(200); -} diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/read_simple_angle/read_simple_angle.ino b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/read_simple_angle/read_simple_angle.ino deleted file mode 100644 index dfe2345..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/read_simple_angle/read_simple_angle.ino +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************/ -/*! - @file read_simple_angle.ino - @author SOSAndroid (E. Ha.) - @license BSD (see license.txt) - - read a simple angle from AS5048B over I2C bus - - @section HISTORY - - v1.0 - First release -*/ -/**************************************************************************/ - -#include - -//unit consts -#define U_RAW 1 -#define U_TRN 2 -#define U_DEG 3 -#define U_RAD 4 -#define U_GRAD 5 -#define U_MOA 6 -#define U_SOA 7 -#define U_MILNATO 8 -#define U_MILSE 9 -#define U_MILRU 10 - -AMS_AS5048B mysensor; - -void setup() { - - //Start serial - Serial.begin(9600); - while (!Serial) ; //wait until Serial ready - - //Start Wire object. Unneeded here as this is done (optionally) by the AMS_AS5048B object (see lib code - #define USE_WIREBEGIN_ENABLED) - //Wire.begin(); - - //init AMS_AS5048B object - mysensor.begin(); - - //consider the current position as zero - mysensor.setZeroReg(); - -} - -void loop() { - //print to serial the raw angle and degree angle every 2 seconds - //print 2 times the exact same angle - only one measurement - Serial.print("Angle sensor raw : "); - Serial.println(mysensor.angleR(U_RAW, true), DEC); - - Serial.print("Angle degree : "); - Serial.println(mysensor.angleR(U_DEG, false), DEC); - - delay(2000); -} diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/wind_vane/wind_vane.ino b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/wind_vane/wind_vane.ino deleted file mode 100644 index 84488ff..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/wind_vane/wind_vane.ino +++ /dev/null @@ -1,151 +0,0 @@ -/**************************************************************************/ -/*! - @file wind_vane.ino - @author SOSAndroid (E. Ha.) - @license BSD (see license.txt) - - High resolution wind vane - Measure azimuth & compass directions using an AMS AS5048B chip - Outputs measurement to Serial every 5 seconds - Updates measurement every seconds - Uses Timer lib - https://github.com/JChristensen/Timer - - @section HISTORY - - v1.0 - First release - v1.0.1 - Code modification to comply with Timer.h used by Codebender.cc vs https://github.com/JChristensen/Timer - v1.0.2 - remove duplicate code for Timer.h supported by Codebender.cc - v1.0.3 - Azimuth calculation robustness / error handling -*/ -/**************************************************************************/ - -#define CODEBENDER //comment if used in the Arduino IDE - deals with the Timer.h compatibility. - -#include -#include -#include -#include - -//north position of the sensor/magnet. To be adaoted according to your setting -#define NORTH 0x0 - -//unit consts -#define U_RAW 1 -#define U_TRN 2 -#define U_DEG 3 -#define U_RAD 4 -#define U_GRAD 5 -#define U_MOA 6 -#define U_SOA 7 -#define U_MILNATO 8 -#define U_MILSE 9 -#define U_MILRU 10 - -//magnetic rotary sensor object -AMS_AS5048B mysensor; - -//Timer object -Timer mytimer; - -void setup() { - - //Start serial - Serial.begin(9600); - while (!Serial) ; //wait until Serial ready - - Serial.println("Startup..."); - - //Start Wire object. Unneeded here as this is done (optionnaly) by AMS_AS5048B object (see lib code - #define USE_WIREBEGIN_ENABLED) - //Wire.begin(); - - //init AMS_AS5048B object - mysensor.begin(); - - //set clock wise counting as compass truns clockwise - mysensor.setClockWise(true); - - //set sensor's North position - depending on your setting - mysensor.zeroRegW(NORTH); //needed only once ever - -#ifdef CODEBENDER - //To comply with the Timer.h lib used by codebender.cc - mytimer.every(1000, updateAvg_alt, (void*)0); //updates angular Exp moving average every second - mytimer.every(5000, printWindDir_alt, (void*)0); //outputs to serial wind direction every 5 seconds -#else - //To comply https://github.com/JChristensen/Timer - mytimer.every(1000, updateAvg); //updates angular Exp moving average every second - mytimer.every(5000, printWindDir); //outputs to serial wind direction every 5 seconds -#endif - -} - -void loop() { - mytimer.update(); // updates the timer to trigger proper functions -} - - -char* degreeToCompass(double angle) { - //working with angles in degree - //returns one of the 16 compass azimuth - //French - if (angle < 0.0) return "ERROR"; - else if (angle < 11.25) return "N"; // N - else if (angle < 33.75) return "NNE"; // NNE - else if (angle < 56.25) return "NE"; // NE - else if (angle < 78.75) return "ENE"; // ENE - else if (angle < 101.25) return "E"; // E - else if (angle < 123.75) return "ESE"; // ESE - else if (angle < 146.25) return "SE"; // SE - else if (angle < 168.75) return "SSE"; // SSE - else if (angle < 191.25) return "S"; // S - else if (angle < 213.75) return "SSW"; // SSO - else if (angle < 236.25) return "SW"; // SO - else if (angle < 258.75) return "WSW"; // OSO - else if (angle < 281.25) return "W"; // O - else if (angle < 303.75) return "WNW"; // ONO - else if (angle < 326.25) return "NW"; // NO - else if (angle < 348.75) return "NNW"; // NNO - else if (angle <= 360.0) return "N"; // N - - return "ERROR"; -} - -void updateAvg (void) { - mysensor.updateMovingAvgExp(); - return; -} - -void printWindDir(void) { - - //double angle = (trunc(mysensor.getMovingAvgExp(U_DEG) * 100.0)) / 100.0 ; //rounds to 2 decimal - almost useless - double angle = mysensor.getMovingAvgExp(U_DEG); - - char* compassDir[6]; - compassDir[6] = degreeToCompass(angle); - - Serial.println("Wind direction"); - Serial.print("Degree: "); - Serial.println(angle, DEC); - Serial.print("Compass: "); - Serial.println(compassDir[6]); - Serial.println("----"); - - return; -} - - -#ifdef CODEBENDER -//Quick fix to get the example compiling against Timer.h used by Codebender -//Dirty one, but not time to make it smarter - - void updateAvg_alt (void *context) { - updateAvg(); - return; - } - - void printWindDir_alt(void *context) { - printWindDir(); - return; - } - -#endif \ No newline at end of file diff --git a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/xplane_dials/xplane_dials.ino b/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/xplane_dials/xplane_dials.ino deleted file mode 100644 index 9df7554..0000000 --- a/studies/console/arduino/libraries/AMS_AS5048B-1.0.5/examples/xplane_dials/xplane_dials.ino +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************/ -/*! - @file xplane_dials.ino - @author @DavidHowlett (David Howlett, Peter Dobson) - @license BSD (see license.txt) - - This example reads an array of 4 sensors and prints the results to serial. - This was originally developed to upload dial positions to a flight simulator - called X-Plane using a modified version of Arduino called Teensyduino. - The Teensyduino specific code has now been commented out. - If you want to enable the live upload of values to xplane you need to: - - Download and install Teensyduino - - Set the board type to Teensy++ 2.0 (or which ever version of Teensy you are using) - - Set the USB type to "Flight Sim Controls" in the tools menu (this adds some definitions) - - Uncomment the marked lines - - - @section HISTORY - - v1.0.0 - First release - v1.0.1 - Now works without Teensyduino, also added build instructions -*/ -/**************************************************************************/ - -#include - -// the constant U_DEG means the results are given in degrees -#define U_DEG 3 - -// declare an array of sensors -# define NUM_SENSORS 4 -AMS_AS5048B sensors[NUM_SENSORS] = {AMS_AS5048B(0x40), AMS_AS5048B(0x41), AMS_AS5048B(0x42), AMS_AS5048B(0x43)}; - -// the below line can be uncommented if you install Teensyduino -//FlightSimFloat angles[NUM_SENSORS]; - -void setup() { - //Start serial - Serial.begin(9600); - while (!Serial) ; //wait until Serial ready - - - for(int i=0;i - -#if !defined(SPI_INTERFACES_COUNT) || \ - (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) - -/*! - * @brief Create a register we access over an I2C Device (which defines the - * bus and address) - * @param i2cdevice The I2CDevice to use for underlying I2C access - * @param reg_addr The address pointer value for the I2C/SMBus register, can - * be 8 or 16 bits - * @param width The width of the register data itself, defaults to 1 byte - * @param byteorder The byte order of the register (used when width is > 1), - * defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults - * to 1 byte - */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, - uint16_t reg_addr, - uint8_t width, - uint8_t byteorder, - uint8_t address_width) { - _i2cdevice = i2cdevice; - _spidevice = nullptr; - _addrwidth = address_width; - _address = reg_addr; - _byteorder = byteorder; - _width = width; -} - -/*! - * @brief Create a register we access over an SPI Device (which defines the - * bus and CS pin) - * @param spidevice The SPIDevice to use for underlying SPI access - * @param reg_addr The address pointer value for the SPI register, can - * be 8 or 16 bits - * @param type The method we use to read/write data to SPI (which is not - * as well defined as I2C) - * @param width The width of the register data itself, defaults to 1 byte - * @param byteorder The byte order of the register (used when width is > 1), - * defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults - * to 1 byte - */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, - uint16_t reg_addr, - Adafruit_BusIO_SPIRegType type, - uint8_t width, - uint8_t byteorder, - uint8_t address_width) { - _spidevice = spidevice; - _spiregtype = type; - _i2cdevice = nullptr; - _addrwidth = address_width; - _address = reg_addr; - _byteorder = byteorder; - _width = width; -} - -/*! - * @brief Create a register we access over an I2C or SPI Device. This is a - * handy function because we can pass in nullptr for the unused interface, - * allowing libraries to mass-define all the registers - * @param i2cdevice The I2CDevice to use for underlying I2C access, if - * nullptr we use SPI - * @param spidevice The SPIDevice to use for underlying SPI access, if - * nullptr we use I2C - * @param reg_addr The address pointer value for the I2C/SMBus/SPI register, - * can be 8 or 16 bits - * @param type The method we use to read/write data to SPI (which is not - * as well defined as I2C) - * @param width The width of the register data itself, defaults to 1 byte - * @param byteorder The byte order of the register (used when width is > 1), - * defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults - * to 1 byte - */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register( - Adafruit_I2CDevice *i2cdevice, Adafruit_SPIDevice *spidevice, - Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, uint8_t width, - uint8_t byteorder, uint8_t address_width) { - _spidevice = spidevice; - _i2cdevice = i2cdevice; - _spiregtype = type; - _addrwidth = address_width; - _address = reg_addr; - _byteorder = byteorder; - _width = width; -} - -/*! - * @brief Write a buffer of data to the register location - * @param buffer Pointer to data to write - * @param len Number of bytes to write - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_Register::write(uint8_t *buffer, uint8_t len) { - - uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), - (uint8_t)(_address >> 8)}; - - if (_i2cdevice) { - return _i2cdevice->write(buffer, len, true, addrbuffer, _addrwidth); - } - if (_spidevice) { - if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) { - // very special case! - - // pass the special opcode address which we set as the high byte of the - // regaddr - addrbuffer[0] = - (uint8_t)(_address >> 8) & ~0x01; // set bottom bit low to write - // the 'actual' reg addr is the second byte then - addrbuffer[1] = (uint8_t)(_address & 0xFF); - // the address appears to be a byte longer - return _spidevice->write(buffer, len, addrbuffer, _addrwidth + 1); - } - - if (_spiregtype == ADDRBIT8_HIGH_TOREAD) { - addrbuffer[0] &= ~0x80; - } - if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) { - addrbuffer[0] |= 0x80; - } - if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) { - addrbuffer[0] &= ~0x80; - addrbuffer[0] |= 0x40; - } - return _spidevice->write(buffer, len, addrbuffer, _addrwidth); - } - return false; -} - -/*! - * @brief Write up to 4 bytes of data to the register location - * @param value Data to write - * @param numbytes How many bytes from 'value' to write - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_Register::write(uint32_t value, uint8_t numbytes) { - if (numbytes == 0) { - numbytes = _width; - } - if (numbytes > 4) { - return false; - } - - // store a copy - _cached = value; - - for (int i = 0; i < numbytes; i++) { - if (_byteorder == LSBFIRST) { - _buffer[i] = value & 0xFF; - } else { - _buffer[numbytes - i - 1] = value & 0xFF; - } - value >>= 8; - } - return write(_buffer, numbytes); -} - -/*! - * @brief Read data from the register location. This does not do any error - * checking! - * @return Returns 0xFFFFFFFF on failure, value otherwise - */ -uint32_t Adafruit_BusIO_Register::read(void) { - if (!read(_buffer, _width)) { - return -1; - } - - uint32_t value = 0; - - for (int i = 0; i < _width; i++) { - value <<= 8; - if (_byteorder == LSBFIRST) { - value |= _buffer[_width - i - 1]; - } else { - value |= _buffer[i]; - } - } - - return value; -} - -/*! - * @brief Read cached data from last time we wrote to this register - * @return Returns 0xFFFFFFFF on failure, value otherwise - */ -uint32_t Adafruit_BusIO_Register::readCached(void) { return _cached; } - -/*! - * @brief Read a buffer of data from the register location - * @param buffer Pointer to data to read into - * @param len Number of bytes to read - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) { - uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), - (uint8_t)(_address >> 8)}; - - if (_i2cdevice) { - return _i2cdevice->write_then_read(addrbuffer, _addrwidth, buffer, len); - } - if (_spidevice) { - if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) { - // very special case! - - // pass the special opcode address which we set as the high byte of the - // regaddr - addrbuffer[0] = - (uint8_t)(_address >> 8) | 0x01; // set bottom bit high to read - // the 'actual' reg addr is the second byte then - addrbuffer[1] = (uint8_t)(_address & 0xFF); - // the address appears to be a byte longer - return _spidevice->write_then_read(addrbuffer, _addrwidth + 1, buffer, - len); - } - if (_spiregtype == ADDRBIT8_HIGH_TOREAD) { - addrbuffer[0] |= 0x80; - } - if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) { - addrbuffer[0] &= ~0x80; - } - if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) { - addrbuffer[0] |= 0x80 | 0x40; - } - return _spidevice->write_then_read(addrbuffer, _addrwidth, buffer, len); - } - return false; -} - -/*! - * @brief Read 2 bytes of data from the register location - * @param value Pointer to uint16_t variable to read into - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_Register::read(uint16_t *value) { - if (!read(_buffer, 2)) { - return false; - } - - if (_byteorder == LSBFIRST) { - *value = _buffer[1]; - *value <<= 8; - *value |= _buffer[0]; - } else { - *value = _buffer[0]; - *value <<= 8; - *value |= _buffer[1]; - } - return true; -} - -/*! - * @brief Read 1 byte of data from the register location - * @param value Pointer to uint8_t variable to read into - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_Register::read(uint8_t *value) { - if (!read(_buffer, 1)) { - return false; - } - - *value = _buffer[0]; - return true; -} - -/*! - * @brief Pretty printer for this register - * @param s The Stream to print to, defaults to &Serial - */ -void Adafruit_BusIO_Register::print(Stream *s) { - uint32_t val = read(); - s->print("0x"); - s->print(val, HEX); -} - -/*! - * @brief Pretty printer for this register - * @param s The Stream to print to, defaults to &Serial - */ -void Adafruit_BusIO_Register::println(Stream *s) { - print(s); - s->println(); -} - -/*! - * @brief Create a slice of the register that we can address without - * touching other bits - * @param reg The Adafruit_BusIO_Register which defines the bus/register - * @param bits The number of bits wide we are slicing - * @param shift The number of bits that our bit-slice is shifted from LSB - */ -Adafruit_BusIO_RegisterBits::Adafruit_BusIO_RegisterBits( - Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift) { - _register = reg; - _bits = bits; - _shift = shift; -} - -/*! - * @brief Read 4 bytes of data from the register - * @return data The 4 bytes to read - */ -uint32_t Adafruit_BusIO_RegisterBits::read(void) { - uint32_t val = _register->read(); - val >>= _shift; - return val & ((1 << (_bits)) - 1); -} - -/*! - * @brief Write 4 bytes of data to the register - * @param data The 4 bytes to write - * @return True on successful write (only really useful for I2C as SPI is - * uncheckable) - */ -bool Adafruit_BusIO_RegisterBits::write(uint32_t data) { - uint32_t val = _register->read(); - - // mask off the data before writing - uint32_t mask = (1 << (_bits)) - 1; - data &= mask; - - mask <<= _shift; - val &= ~mask; // remove the current data at that spot - val |= data << _shift; // and add in the new data - - return _register->write(val, _register->width()); -} - -/*! - * @brief The width of the register data, helpful for doing calculations - * @returns The data width used when initializing the register - */ -uint8_t Adafruit_BusIO_Register::width(void) { return _width; } - -/*! - * @brief Set the default width of data - * @param width the default width of data read from register - */ -void Adafruit_BusIO_Register::setWidth(uint8_t width) { _width = width; } - -/*! - * @brief Set register address - * @param address the address from register - */ -void Adafruit_BusIO_Register::setAddress(uint16_t address) { - _address = address; -} - -/*! - * @brief Set the width of register address - * @param address_width the width for register address - */ -void Adafruit_BusIO_Register::setAddressWidth(uint16_t address_width) { - _addrwidth = address_width; -} - -#endif // SPI exists diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_BusIO_Register.h b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_BusIO_Register.h deleted file mode 100644 index c6d58de..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_BusIO_Register.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef Adafruit_BusIO_Register_h -#define Adafruit_BusIO_Register_h - -#include - -#if !defined(SPI_INTERFACES_COUNT) || \ - (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) - -#include -#include - -typedef enum _Adafruit_BusIO_SPIRegType { - ADDRBIT8_HIGH_TOREAD = 0, - /*!< - * ADDRBIT8_HIGH_TOREAD - * When reading a register you must actually send the value 0x80 + register - * address to the device. e.g. To read the register 0x0B the register value - * 0x8B is sent and to write 0x0B is sent. - */ - AD8_HIGH_TOREAD_AD7_HIGH_TOINC = 1, - - /*!< - * ADDRBIT8_HIGH_TOWRITE - * When writing to a register you must actually send the value 0x80 + - * the register address to the device. e.g. To write to the register 0x19 the - * register value 0x99 is sent and to read 0x19 is sent. - */ - ADDRBIT8_HIGH_TOWRITE = 2, - - /*!< - * ADDRESSED_OPCODE_LOWBIT_TO_WRITE - * Used by the MCP23S series, we send 0x40 |'rd with the opcode - * Then set the lowest bit to write - */ - ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE = 3, - -} Adafruit_BusIO_SPIRegType; - -/*! - * @brief The class which defines a device register (a location to read/write - * data from) - */ -class Adafruit_BusIO_Register { -public: - Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr, - uint8_t width = 1, uint8_t byteorder = LSBFIRST, - uint8_t address_width = 1); - - Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr, - Adafruit_BusIO_SPIRegType type, uint8_t width = 1, - uint8_t byteorder = LSBFIRST, - uint8_t address_width = 1); - - Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, - Adafruit_SPIDevice *spidevice, - Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, - uint8_t width = 1, uint8_t byteorder = LSBFIRST, - uint8_t address_width = 1); - - bool read(uint8_t *buffer, uint8_t len); - bool read(uint8_t *value); - bool read(uint16_t *value); - uint32_t read(void); - uint32_t readCached(void); - bool write(uint8_t *buffer, uint8_t len); - bool write(uint32_t value, uint8_t numbytes = 0); - - uint8_t width(void); - - void setWidth(uint8_t width); - void setAddress(uint16_t address); - void setAddressWidth(uint16_t address_width); - - void print(Stream *s = &Serial); - void println(Stream *s = &Serial); - -private: - Adafruit_I2CDevice *_i2cdevice; - Adafruit_SPIDevice *_spidevice; - Adafruit_BusIO_SPIRegType _spiregtype; - uint16_t _address; - uint8_t _width, _addrwidth, _byteorder; - uint8_t _buffer[4]; // we won't support anything larger than uint32 for - // non-buffered read - uint32_t _cached = 0; -}; - -/*! - * @brief The class which defines a slice of bits from within a device register - * (a location to read/write data from) - */ -class Adafruit_BusIO_RegisterBits { -public: - Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits, - uint8_t shift); - bool write(uint32_t value); - uint32_t read(void); - -private: - Adafruit_BusIO_Register *_register; - uint8_t _bits, _shift; -}; - -#endif // SPI exists -#endif // BusIO_Register_h diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.cpp b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.cpp deleted file mode 100644 index 92c1731..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.cpp +++ /dev/null @@ -1,317 +0,0 @@ -#include "Adafruit_I2CDevice.h" - -//#define DEBUG_SERIAL Serial - -/*! - * @brief Create an I2C device at a given address - * @param addr The 7-bit I2C address for the device - * @param theWire The I2C bus to use, defaults to &Wire - */ -Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) { - _addr = addr; - _wire = theWire; - _begun = false; -#ifdef ARDUINO_ARCH_SAMD - _maxBufferSize = 250; // as defined in Wire.h's RingBuffer -#elif defined(ESP32) - _maxBufferSize = I2C_BUFFER_LENGTH; -#else - _maxBufferSize = 32; -#endif -} - -/*! - * @brief Initializes and does basic address detection - * @param addr_detect Whether we should attempt to detect the I2C address - * with a scan. 99% of sensors/devices don't mind, but once in a while they - * don't respond well to a scan! - * @return True if I2C initialized and a device with the addr found - */ -bool Adafruit_I2CDevice::begin(bool addr_detect) { - _wire->begin(); - _begun = true; - - if (addr_detect) { - return detected(); - } - return true; -} - -/*! - * @brief De-initialize device, turn off the Wire interface - */ -void Adafruit_I2CDevice::end(void) { - // Not all port implement Wire::end(), such as - // - ESP8266 - // - AVR core without WIRE_HAS_END - // - ESP32: end() is implemented since 2.0.1 which is latest at the moment. - // Temporarily disable for now to give time for user to update. -#if !(defined(ESP8266) || \ - (defined(ARDUINO_ARCH_AVR) && !defined(WIRE_HAS_END)) || \ - defined(ARDUINO_ARCH_ESP32)) - _wire->end(); - _begun = false; -#endif -} - -/*! - * @brief Scans I2C for the address - note will give a false-positive - * if there's no pullups on I2C - * @return True if I2C initialized and a device with the addr found - */ -bool Adafruit_I2CDevice::detected(void) { - // Init I2C if not done yet - if (!_begun && !begin()) { - return false; - } - - // A basic scanner, see if it ACK's - _wire->beginTransmission(_addr); -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("Address 0x")); - DEBUG_SERIAL.print(_addr); -#endif - if (_wire->endTransmission() == 0) { -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F(" Detected")); -#endif - return true; - } -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F(" Not detected")); -#endif - return false; -} - -/*! - * @brief Write a buffer or two to the I2C device. Cannot be more than - * maxBufferSize() bytes. - * @param buffer Pointer to buffer of data to write. This is const to - * ensure the content of this buffer doesn't change. - * @param len Number of bytes from buffer to write - * @param prefix_buffer Pointer to optional array of data to write before - * buffer. Cannot be more than maxBufferSize() bytes. This is const to - * ensure the content of this buffer doesn't change. - * @param prefix_len Number of bytes from prefix buffer to write - * @param stop Whether to send an I2C STOP signal on write - * @return True if write was successful, otherwise false. - */ -bool Adafruit_I2CDevice::write(const uint8_t *buffer, size_t len, bool stop, - const uint8_t *prefix_buffer, - size_t prefix_len) { - if ((len + prefix_len) > maxBufferSize()) { - // currently not guaranteed to work if more than 32 bytes! - // we will need to find out if some platforms have larger - // I2C buffer sizes :/ -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F("\tI2CDevice could not write such a large buffer")); -#endif - return false; - } - - _wire->beginTransmission(_addr); - - // Write the prefix data (usually an address) - if ((prefix_len != 0) && (prefix_buffer != nullptr)) { - if (_wire->write(prefix_buffer, prefix_len) != prefix_len) { -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F("\tI2CDevice failed to write")); -#endif - return false; - } - } - - // Write the data itself - if (_wire->write(buffer, len) != len) { -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F("\tI2CDevice failed to write")); -#endif - return false; - } - -#ifdef DEBUG_SERIAL - - DEBUG_SERIAL.print(F("\tI2CWRITE @ 0x")); - DEBUG_SERIAL.print(_addr, HEX); - DEBUG_SERIAL.print(F(" :: ")); - if ((prefix_len != 0) && (prefix_buffer != nullptr)) { - for (uint16_t i = 0; i < prefix_len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(prefix_buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - } - } - for (uint16_t i = 0; i < len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (i % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - - if (stop) { - DEBUG_SERIAL.print("\tSTOP"); - } -#endif - - if (_wire->endTransmission(stop) == 0) { -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(); - // DEBUG_SERIAL.println("Sent!"); -#endif - return true; - } else { -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println("\tFailed to send!"); -#endif - return false; - } -} - -/*! - * @brief Read from I2C into a buffer from the I2C device. - * Cannot be more than maxBufferSize() bytes. - * @param buffer Pointer to buffer of data to read into - * @param len Number of bytes from buffer to read. - * @param stop Whether to send an I2C STOP signal on read - * @return True if read was successful, otherwise false. - */ -bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) { - size_t pos = 0; - while (pos < len) { - size_t read_len = - ((len - pos) > maxBufferSize()) ? maxBufferSize() : (len - pos); - bool read_stop = (pos < (len - read_len)) ? false : stop; - if (!_read(buffer + pos, read_len, read_stop)) - return false; - pos += read_len; - } - return true; -} - -bool Adafruit_I2CDevice::_read(uint8_t *buffer, size_t len, bool stop) { -#if defined(TinyWireM_h) - size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len); -#elif defined(ARDUINO_ARCH_MEGAAVR) - size_t recv = _wire->requestFrom(_addr, len, stop); -#else - size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len, (uint8_t)stop); -#endif - - if (recv != len) { - // Not enough data available to fulfill our obligation! -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tI2CDevice did not receive enough data: ")); - DEBUG_SERIAL.println(recv); -#endif - return false; - } - - for (uint16_t i = 0; i < len; i++) { - buffer[i] = _wire->read(); - } - -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tI2CREAD @ 0x")); - DEBUG_SERIAL.print(_addr, HEX); - DEBUG_SERIAL.print(F(" :: ")); - for (uint16_t i = 0; i < len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (len % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - DEBUG_SERIAL.println(); -#endif - - return true; -} - -/*! - * @brief Write some data, then read some data from I2C into another buffer. - * Cannot be more than maxBufferSize() bytes. The buffers can point to - * same/overlapping locations. - * @param write_buffer Pointer to buffer of data to write from - * @param write_len Number of bytes from buffer to write. - * @param read_buffer Pointer to buffer of data to read into. - * @param read_len Number of bytes from buffer to read. - * @param stop Whether to send an I2C STOP signal between the write and read - * @return True if write & read was successful, otherwise false. - */ -bool Adafruit_I2CDevice::write_then_read(const uint8_t *write_buffer, - size_t write_len, uint8_t *read_buffer, - size_t read_len, bool stop) { - if (!write(write_buffer, write_len, stop)) { - return false; - } - - return read(read_buffer, read_len); -} - -/*! - * @brief Returns the 7-bit address of this device - * @return The 7-bit address of this device - */ -uint8_t Adafruit_I2CDevice::address(void) { return _addr; } - -/*! - * @brief Change the I2C clock speed to desired (relies on - * underlying Wire support! - * @param desiredclk The desired I2C SCL frequency - * @return True if this platform supports changing I2C speed. - * Not necessarily that the speed was achieved! - */ -bool Adafruit_I2CDevice::setSpeed(uint32_t desiredclk) { -#if defined(__AVR_ATmega328__) || \ - defined(__AVR_ATmega328P__) // fix arduino core set clock - // calculate TWBR correctly - - if ((F_CPU / 18) < desiredclk) { -#ifdef DEBUG_SERIAL - Serial.println(F("I2C.setSpeed too high.")); -#endif - return false; - } - uint32_t atwbr = ((F_CPU / desiredclk) - 16) / 2; - if (atwbr > 16320) { -#ifdef DEBUG_SERIAL - Serial.println(F("I2C.setSpeed too low.")); -#endif - return false; - } - - if (atwbr <= 255) { - atwbr /= 1; - TWSR = 0x0; - } else if (atwbr <= 1020) { - atwbr /= 4; - TWSR = 0x1; - } else if (atwbr <= 4080) { - atwbr /= 16; - TWSR = 0x2; - } else { // if (atwbr <= 16320) - atwbr /= 64; - TWSR = 0x3; - } - TWBR = atwbr; - -#ifdef DEBUG_SERIAL - Serial.print(F("TWSR prescaler = ")); - Serial.println(pow(4, TWSR)); - Serial.print(F("TWBR = ")); - Serial.println(atwbr); -#endif - return true; -#elif (ARDUINO >= 157) && !defined(ARDUINO_STM32_FEATHER) && \ - !defined(TinyWireM_h) - _wire->setClock(desiredclk); - return true; - -#else - (void)desiredclk; - return false; -#endif -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h deleted file mode 100644 index 6bda7ba..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef Adafruit_I2CDevice_h -#define Adafruit_I2CDevice_h - -#include -#include - -///< The class which defines how we will talk to this device over I2C -class Adafruit_I2CDevice { -public: - Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire = &Wire); - uint8_t address(void); - bool begin(bool addr_detect = true); - void end(void); - bool detected(void); - - bool read(uint8_t *buffer, size_t len, bool stop = true); - bool write(const uint8_t *buffer, size_t len, bool stop = true, - const uint8_t *prefix_buffer = nullptr, size_t prefix_len = 0); - bool write_then_read(const uint8_t *write_buffer, size_t write_len, - uint8_t *read_buffer, size_t read_len, - bool stop = false); - bool setSpeed(uint32_t desiredclk); - - /*! @brief How many bytes we can read in a transaction - * @return The size of the Wire receive/transmit buffer */ - size_t maxBufferSize() { return _maxBufferSize; } - -private: - uint8_t _addr; - TwoWire *_wire; - bool _begun; - size_t _maxBufferSize; - bool _read(uint8_t *buffer, size_t len, bool stop); -}; - -#endif // Adafruit_I2CDevice_h diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CRegister.h b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CRegister.h deleted file mode 100644 index 186850f..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_I2CRegister.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _ADAFRUIT_I2C_REGISTER_H_ -#define _ADAFRUIT_I2C_REGISTER_H_ - -#include -#include - -typedef Adafruit_BusIO_Register Adafruit_I2CRegister; -typedef Adafruit_BusIO_RegisterBits Adafruit_I2CRegisterBits; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.cpp b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.cpp deleted file mode 100644 index 034dc08..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.cpp +++ /dev/null @@ -1,508 +0,0 @@ -#include "Adafruit_SPIDevice.h" - -//#define DEBUG_SERIAL Serial - -/*! - * @brief Create an SPI device with the given CS pin and settings - * @param cspin The arduino pin number to use for chip select - * @param freq The SPI clock frequency to use, defaults to 1MHz - * @param dataOrder The SPI data order to use for bits within each byte, - * defaults to SPI_BITORDER_MSBFIRST - * @param dataMode The SPI mode to use, defaults to SPI_MODE0 - * @param theSPI The SPI bus to use, defaults to &theSPI - */ -Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq, - BusIOBitOrder dataOrder, - uint8_t dataMode, SPIClass *theSPI) { -#ifdef BUSIO_HAS_HW_SPI - _cs = cspin; - _sck = _mosi = _miso = -1; - _spi = theSPI; - _begun = false; - _spiSetting = new SPISettings(freq, dataOrder, dataMode); - _freq = freq; - _dataOrder = dataOrder; - _dataMode = dataMode; -#else - // unused, but needed to suppress compiler warns - (void)cspin; - (void)freq; - (void)dataOrder; - (void)dataMode; - (void)theSPI; -#endif -} - -/*! - * @brief Create an SPI device with the given CS pin and settings - * @param cspin The arduino pin number to use for chip select - * @param sckpin The arduino pin number to use for SCK - * @param misopin The arduino pin number to use for MISO, set to -1 if not - * used - * @param mosipin The arduino pin number to use for MOSI, set to -1 if not - * used - * @param freq The SPI clock frequency to use, defaults to 1MHz - * @param dataOrder The SPI data order to use for bits within each byte, - * defaults to SPI_BITORDER_MSBFIRST - * @param dataMode The SPI mode to use, defaults to SPI_MODE0 - */ -Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin, - int8_t misopin, int8_t mosipin, - uint32_t freq, BusIOBitOrder dataOrder, - uint8_t dataMode) { - _cs = cspin; - _sck = sckpin; - _miso = misopin; - _mosi = mosipin; - -#ifdef BUSIO_USE_FAST_PINIO - csPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(cspin)); - csPinMask = digitalPinToBitMask(cspin); - if (mosipin != -1) { - mosiPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(mosipin)); - mosiPinMask = digitalPinToBitMask(mosipin); - } - if (misopin != -1) { - misoPort = (BusIO_PortReg *)portInputRegister(digitalPinToPort(misopin)); - misoPinMask = digitalPinToBitMask(misopin); - } - clkPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(sckpin)); - clkPinMask = digitalPinToBitMask(sckpin); -#endif - - _freq = freq; - _dataOrder = dataOrder; - _dataMode = dataMode; - _begun = false; -} - -/*! - * @brief Release memory allocated in constructors - */ -Adafruit_SPIDevice::~Adafruit_SPIDevice() { - if (_spiSetting) - delete _spiSetting; -} - -/*! - * @brief Initializes SPI bus and sets CS pin high - * @return Always returns true because there's no way to test success of SPI - * init - */ -bool Adafruit_SPIDevice::begin(void) { - if (_cs != -1) { - pinMode(_cs, OUTPUT); - digitalWrite(_cs, HIGH); - } - - if (_spi) { // hardware SPI -#ifdef BUSIO_HAS_HW_SPI - _spi->begin(); -#endif - } else { - pinMode(_sck, OUTPUT); - - if ((_dataMode == SPI_MODE0) || (_dataMode == SPI_MODE1)) { - // idle low on mode 0 and 1 - digitalWrite(_sck, LOW); - } else { - // idle high on mode 2 or 3 - digitalWrite(_sck, HIGH); - } - if (_mosi != -1) { - pinMode(_mosi, OUTPUT); - digitalWrite(_mosi, HIGH); - } - if (_miso != -1) { - pinMode(_miso, INPUT); - } - } - - _begun = true; - return true; -} - -/*! - * @brief Transfer (send/receive) a buffer over hard/soft SPI, without - * transaction management - * @param buffer The buffer to send and receive at the same time - * @param len The number of bytes to transfer - */ -void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { - // - // HARDWARE SPI - // - if (_spi) { -#ifdef BUSIO_HAS_HW_SPI -#if defined(SPARK) - _spi->transfer(buffer, buffer, len, nullptr); -#elif defined(STM32) - for (size_t i = 0; i < len; i++) { - _spi->transfer(buffer[i]); - } -#else - _spi->transfer(buffer, len); -#endif - return; -#endif - } - - // - // SOFTWARE SPI - // - uint8_t startbit; - if (_dataOrder == SPI_BITORDER_LSBFIRST) { - startbit = 0x1; - } else { - startbit = 0x80; - } - - bool towrite, lastmosi = !(buffer[0] & startbit); - uint8_t bitdelay_us = (1000000 / _freq) / 2; - - for (size_t i = 0; i < len; i++) { - uint8_t reply = 0; - uint8_t send = buffer[i]; - - /* - Serial.print("\tSending software SPI byte 0x"); - Serial.print(send, HEX); - Serial.print(" -> 0x"); - */ - - // Serial.print(send, HEX); - for (uint8_t b = startbit; b != 0; - b = (_dataOrder == SPI_BITORDER_LSBFIRST) ? b << 1 : b >> 1) { - - if (bitdelay_us) { - delayMicroseconds(bitdelay_us); - } - - if (_dataMode == SPI_MODE0 || _dataMode == SPI_MODE2) { - towrite = send & b; - if ((_mosi != -1) && (lastmosi != towrite)) { -#ifdef BUSIO_USE_FAST_PINIO - if (towrite) - *mosiPort = *mosiPort | mosiPinMask; - else - *mosiPort = *mosiPort & ~mosiPinMask; -#else - digitalWrite(_mosi, towrite); -#endif - lastmosi = towrite; - } - -#ifdef BUSIO_USE_FAST_PINIO - *clkPort = *clkPort | clkPinMask; // Clock high -#else - digitalWrite(_sck, HIGH); -#endif - - if (bitdelay_us) { - delayMicroseconds(bitdelay_us); - } - - if (_miso != -1) { -#ifdef BUSIO_USE_FAST_PINIO - if (*misoPort & misoPinMask) { -#else - if (digitalRead(_miso)) { -#endif - reply |= b; - } - } - -#ifdef BUSIO_USE_FAST_PINIO - *clkPort = *clkPort & ~clkPinMask; // Clock low -#else - digitalWrite(_sck, LOW); -#endif - } else { // if (_dataMode == SPI_MODE1 || _dataMode == SPI_MODE3) - -#ifdef BUSIO_USE_FAST_PINIO - *clkPort = *clkPort | clkPinMask; // Clock high -#else - digitalWrite(_sck, HIGH); -#endif - - if (bitdelay_us) { - delayMicroseconds(bitdelay_us); - } - - if (_mosi != -1) { -#ifdef BUSIO_USE_FAST_PINIO - if (send & b) - *mosiPort = *mosiPort | mosiPinMask; - else - *mosiPort = *mosiPort & ~mosiPinMask; -#else - digitalWrite(_mosi, send & b); -#endif - } - -#ifdef BUSIO_USE_FAST_PINIO - *clkPort = *clkPort & ~clkPinMask; // Clock low -#else - digitalWrite(_sck, LOW); -#endif - - if (_miso != -1) { -#ifdef BUSIO_USE_FAST_PINIO - if (*misoPort & misoPinMask) { -#else - if (digitalRead(_miso)) { -#endif - reply |= b; - } - } - } - if (_miso != -1) { - buffer[i] = reply; - } - } - } - return; -} - -/*! - * @brief Transfer (send/receive) one byte over hard/soft SPI, without - * transaction management - * @param send The byte to send - * @return The byte received while transmitting - */ -uint8_t Adafruit_SPIDevice::transfer(uint8_t send) { - uint8_t data = send; - transfer(&data, 1); - return data; -} - -/*! - * @brief Manually begin a transaction (calls beginTransaction if hardware - * SPI) - */ -void Adafruit_SPIDevice::beginTransaction(void) { - if (_spi) { -#ifdef BUSIO_HAS_HW_SPI - _spi->beginTransaction(*_spiSetting); -#endif - } -} - -/*! - * @brief Manually end a transaction (calls endTransaction if hardware SPI) - */ -void Adafruit_SPIDevice::endTransaction(void) { - if (_spi) { -#ifdef BUSIO_HAS_HW_SPI - _spi->endTransaction(); -#endif - } -} - -/*! - * @brief Assert/Deassert the CS pin if it is defined - * @param value The state the CS is set to - */ -void Adafruit_SPIDevice::setChipSelect(int value) { - if (_cs != -1) { - digitalWrite(_cs, value); - } -} - -/*! - * @brief Write a buffer or two to the SPI device, with transaction - * management. - * @brief Manually begin a transaction (calls beginTransaction if hardware - * SPI) with asserting the CS pin - */ -void Adafruit_SPIDevice::beginTransactionWithAssertingCS() { - beginTransaction(); - setChipSelect(LOW); -} - -/*! - * @brief Manually end a transaction (calls endTransaction if hardware SPI) - * with deasserting the CS pin - */ -void Adafruit_SPIDevice::endTransactionWithDeassertingCS() { - setChipSelect(HIGH); - endTransaction(); -} - -/*! - * @brief Write a buffer or two to the SPI device, with transaction - * management. - * @param buffer Pointer to buffer of data to write - * @param len Number of bytes from buffer to write - * @param prefix_buffer Pointer to optional array of data to write before - * buffer. - * @param prefix_len Number of bytes from prefix buffer to write - * @return Always returns true because there's no way to test success of SPI - * writes - */ -bool Adafruit_SPIDevice::write(const uint8_t *buffer, size_t len, - const uint8_t *prefix_buffer, - size_t prefix_len) { - beginTransactionWithAssertingCS(); - - // do the writing -#if defined(ARDUINO_ARCH_ESP32) - if (_spi) { - if (prefix_len > 0) { - _spi->transferBytes((uint8_t *)prefix_buffer, nullptr, prefix_len); - } - if (len > 0) { - _spi->transferBytes((uint8_t *)buffer, nullptr, len); - } - } else -#endif - { - for (size_t i = 0; i < prefix_len; i++) { - transfer(prefix_buffer[i]); - } - for (size_t i = 0; i < len; i++) { - transfer(buffer[i]); - } - } - endTransactionWithDeassertingCS(); - -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tSPIDevice Wrote: ")); - if ((prefix_len != 0) && (prefix_buffer != nullptr)) { - for (uint16_t i = 0; i < prefix_len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(prefix_buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - } - } - for (uint16_t i = 0; i < len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (i % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - DEBUG_SERIAL.println(); -#endif - - return true; -} - -/*! - * @brief Read from SPI into a buffer from the SPI device, with transaction - * management. - * @param buffer Pointer to buffer of data to read into - * @param len Number of bytes from buffer to read. - * @param sendvalue The 8-bits of data to write when doing the data read, - * defaults to 0xFF - * @return Always returns true because there's no way to test success of SPI - * writes - */ -bool Adafruit_SPIDevice::read(uint8_t *buffer, size_t len, uint8_t sendvalue) { - memset(buffer, sendvalue, len); // clear out existing buffer - - beginTransactionWithAssertingCS(); - transfer(buffer, len); - endTransactionWithDeassertingCS(); - -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tSPIDevice Read: ")); - for (uint16_t i = 0; i < len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (len % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - DEBUG_SERIAL.println(); -#endif - - return true; -} - -/*! - * @brief Write some data, then read some data from SPI into another buffer, - * with transaction management. The buffers can point to same/overlapping - * locations. This does not transmit-receive at the same time! - * @param write_buffer Pointer to buffer of data to write from - * @param write_len Number of bytes from buffer to write. - * @param read_buffer Pointer to buffer of data to read into. - * @param read_len Number of bytes from buffer to read. - * @param sendvalue The 8-bits of data to write when doing the data read, - * defaults to 0xFF - * @return Always returns true because there's no way to test success of SPI - * writes - */ -bool Adafruit_SPIDevice::write_then_read(const uint8_t *write_buffer, - size_t write_len, uint8_t *read_buffer, - size_t read_len, uint8_t sendvalue) { - beginTransactionWithAssertingCS(); - // do the writing -#if defined(ARDUINO_ARCH_ESP32) - if (_spi) { - if (write_len > 0) { - _spi->transferBytes((uint8_t *)write_buffer, nullptr, write_len); - } - } else -#endif - { - for (size_t i = 0; i < write_len; i++) { - transfer(write_buffer[i]); - } - } - -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tSPIDevice Wrote: ")); - for (uint16_t i = 0; i < write_len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(write_buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (write_len % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - DEBUG_SERIAL.println(); -#endif - - // do the reading - for (size_t i = 0; i < read_len; i++) { - read_buffer[i] = transfer(sendvalue); - } - -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tSPIDevice Read: ")); - for (uint16_t i = 0; i < read_len; i++) { - DEBUG_SERIAL.print(F("0x")); - DEBUG_SERIAL.print(read_buffer[i], HEX); - DEBUG_SERIAL.print(F(", ")); - if (read_len % 32 == 31) { - DEBUG_SERIAL.println(); - } - } - DEBUG_SERIAL.println(); -#endif - - endTransactionWithDeassertingCS(); - - return true; -} - -/*! - * @brief Write some data and read some data at the same time from SPI - * into the same buffer, with transaction management. This is basicaly a wrapper - * for transfer() with CS-pin and transaction management. This /does/ - * transmit-receive at the same time! - * @param buffer Pointer to buffer of data to write/read to/from - * @param len Number of bytes from buffer to write/read. - * @return Always returns true because there's no way to test success of SPI - * writes - */ -bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) { - beginTransactionWithAssertingCS(); - transfer(buffer, len); - endTransactionWithDeassertingCS(); - - return true; -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h b/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h deleted file mode 100644 index 74123b9..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h +++ /dev/null @@ -1,142 +0,0 @@ -#ifndef Adafruit_SPIDevice_h -#define Adafruit_SPIDevice_h - -#include - -#if !defined(SPI_INTERFACES_COUNT) || \ - (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) -// HW SPI available -#include -#define BUSIO_HAS_HW_SPI -#else -// SW SPI ONLY -enum { SPI_MODE0, SPI_MODE1, SPI_MODE2, _SPI_MODE4 }; -typedef uint8_t SPIClass; -#endif - -// some modern SPI definitions don't have BitOrder enum -#if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) || \ - defined(ESP8266) || defined(TEENSYDUINO) || defined(SPARK) || \ - defined(ARDUINO_ARCH_SPRESENSE) || defined(MEGATINYCORE) || \ - defined(DXCORE) || defined(ARDUINO_AVR_ATmega4809) || \ - defined(ARDUINO_AVR_ATmega4808) || defined(ARDUINO_AVR_ATmega3209) || \ - defined(ARDUINO_AVR_ATmega3208) || defined(ARDUINO_AVR_ATmega1609) || \ - defined(ARDUINO_AVR_ATmega1608) || defined(ARDUINO_AVR_ATmega809) || \ - defined(ARDUINO_AVR_ATmega808) || defined(ARDUINO_ARCH_ARC32) || \ - defined(ARDUINO_ARCH_XMC) - -typedef enum _BitOrder { - SPI_BITORDER_MSBFIRST = MSBFIRST, - SPI_BITORDER_LSBFIRST = LSBFIRST, -} BusIOBitOrder; - -#elif defined(ESP32) || defined(__ASR6501__) || defined(__ASR6502__) - -// some modern SPI definitions don't have BitOrder enum and have different SPI -// mode defines -typedef enum _BitOrder { - SPI_BITORDER_MSBFIRST = SPI_MSBFIRST, - SPI_BITORDER_LSBFIRST = SPI_LSBFIRST, -} BusIOBitOrder; - -#else -// Some platforms have a BitOrder enum but its named MSBFIRST/LSBFIRST -#define SPI_BITORDER_MSBFIRST MSBFIRST -#define SPI_BITORDER_LSBFIRST LSBFIRST -typedef BitOrder BusIOBitOrder; -#endif - -#if defined(__IMXRT1062__) // Teensy 4.x -// *Warning* I disabled the usage of FAST_PINIO as the set/clear operations -// used in the cpp file are not atomic and can effect multiple IO pins -// and if an interrupt happens in between the time the code reads the register -// and writes out the updated value, that changes one or more other IO pins -// on that same IO port, those change will be clobbered when the updated -// values are written back. A fast version can be implemented that uses the -// ports set and clear registers which are atomic. -// typedef volatile uint32_t BusIO_PortReg; -// typedef uint32_t BusIO_PortMask; -//#define BUSIO_USE_FAST_PINIO - -#elif defined(ARDUINO_ARCH_XMC) -#undef BUSIO_USE_FAST_PINIO - -#elif defined(__AVR__) || defined(TEENSYDUINO) -typedef volatile uint8_t BusIO_PortReg; -typedef uint8_t BusIO_PortMask; -#define BUSIO_USE_FAST_PINIO - -#elif defined(ESP8266) || defined(ESP32) || defined(__SAM3X8E__) || \ - defined(ARDUINO_ARCH_SAMD) -typedef volatile uint32_t BusIO_PortReg; -typedef uint32_t BusIO_PortMask; -#define BUSIO_USE_FAST_PINIO - -#elif (defined(__arm__) || defined(ARDUINO_FEATHER52)) && \ - !defined(ARDUINO_ARCH_MBED) && !defined(ARDUINO_ARCH_RP2040) -typedef volatile uint32_t BusIO_PortReg; -typedef uint32_t BusIO_PortMask; -#if !defined(__ASR6501__) && !defined(__ASR6502__) -#define BUSIO_USE_FAST_PINIO -#endif - -#else -#undef BUSIO_USE_FAST_PINIO -#endif - -/**! The class which defines how we will talk to this device over SPI **/ -class Adafruit_SPIDevice { -public: -#ifdef BUSIO_HAS_HW_SPI - Adafruit_SPIDevice(int8_t cspin, uint32_t freq = 1000000, - BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST, - uint8_t dataMode = SPI_MODE0, SPIClass *theSPI = &SPI); -#else - Adafruit_SPIDevice(int8_t cspin, uint32_t freq = 1000000, - BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST, - uint8_t dataMode = SPI_MODE0, SPIClass *theSPI = nullptr); -#endif - Adafruit_SPIDevice(int8_t cspin, int8_t sck, int8_t miso, int8_t mosi, - uint32_t freq = 1000000, - BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST, - uint8_t dataMode = SPI_MODE0); - ~Adafruit_SPIDevice(); - - bool begin(void); - bool read(uint8_t *buffer, size_t len, uint8_t sendvalue = 0xFF); - bool write(const uint8_t *buffer, size_t len, - const uint8_t *prefix_buffer = nullptr, size_t prefix_len = 0); - bool write_then_read(const uint8_t *write_buffer, size_t write_len, - uint8_t *read_buffer, size_t read_len, - uint8_t sendvalue = 0xFF); - bool write_and_read(uint8_t *buffer, size_t len); - - uint8_t transfer(uint8_t send); - void transfer(uint8_t *buffer, size_t len); - void beginTransaction(void); - void endTransaction(void); - void beginTransactionWithAssertingCS(); - void endTransactionWithDeassertingCS(); - -private: -#ifdef BUSIO_HAS_HW_SPI - SPIClass *_spi = nullptr; - SPISettings *_spiSetting = nullptr; -#else - uint8_t *_spi = nullptr; - uint8_t *_spiSetting = nullptr; -#endif - uint32_t _freq; - BusIOBitOrder _dataOrder; - uint8_t _dataMode; - void setChipSelect(int value); - - int8_t _cs, _sck, _mosi, _miso; -#ifdef BUSIO_USE_FAST_PINIO - BusIO_PortReg *mosiPort, *clkPort, *misoPort, *csPort; - BusIO_PortMask mosiPinMask, misoPinMask, clkPinMask, csPinMask; -#endif - bool _begun; -}; - -#endif // Adafruit_SPIDevice_h diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/CMakeLists.txt b/studies/console/arduino/libraries/Adafruit_BusIO/CMakeLists.txt deleted file mode 100644 index 880b1aa..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Adafruit Bus IO Library -# https://github.com/adafruit/Adafruit_BusIO -# MIT License - -cmake_minimum_required(VERSION 3.5) - -idf_component_register(SRCS "Adafruit_I2CDevice.cpp" "Adafruit_BusIO_Register.cpp" "Adafruit_SPIDevice.cpp" - INCLUDE_DIRS "." - REQUIRES arduino) - -project(Adafruit_BusIO) diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/LICENSE b/studies/console/arduino/libraries/Adafruit_BusIO/LICENSE deleted file mode 100644 index 860e3e2..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Adafruit Industries - -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. \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/README.md b/studies/console/arduino/libraries/Adafruit_BusIO/README.md deleted file mode 100644 index 1cc06a1..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Adafruit Bus IO Library [![Build Status](https://github.com/adafruit/Adafruit_BusIO/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_BusIO/actions) - - -This is a helper library to abstract away I2C & SPI transactions and registers - -Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! - -MIT license, all text above must be included in any redistribution diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/component.mk b/studies/console/arduino/libraries/Adafruit_BusIO/component.mk deleted file mode 100644 index 049f190..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/component.mk +++ /dev/null @@ -1 +0,0 @@ -COMPONENT_ADD_INCLUDEDIRS = . diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_address_detect/i2c_address_detect.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_address_detect/i2c_address_detect.ino deleted file mode 100644 index b150525..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_address_detect/i2c_address_detect.ino +++ /dev/null @@ -1,21 +0,0 @@ -#include - -Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(0x10); - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("I2C address detection test"); - - if (!i2c_dev.begin()) { - Serial.print("Did not find device at 0x"); - Serial.println(i2c_dev.address(), HEX); - while (1); - } - Serial.print("Device found on address 0x"); - Serial.println(i2c_dev.address(), HEX); -} - -void loop() { - -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_readwrite/i2c_readwrite.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_readwrite/i2c_readwrite.ino deleted file mode 100644 index 909cf31..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_readwrite/i2c_readwrite.ino +++ /dev/null @@ -1,41 +0,0 @@ -#include - -#define I2C_ADDRESS 0x60 -Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(I2C_ADDRESS); - - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("I2C device read and write test"); - - if (!i2c_dev.begin()) { - Serial.print("Did not find device at 0x"); - Serial.println(i2c_dev.address(), HEX); - while (1); - } - Serial.print("Device found on address 0x"); - Serial.println(i2c_dev.address(), HEX); - - uint8_t buffer[32]; - // Try to read 32 bytes - i2c_dev.read(buffer, 32); - Serial.print("Read: "); - for (uint8_t i=0; i<32; i++) { - Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); - } - Serial.println(); - - // read a register by writing first, then reading - buffer[0] = 0x0C; // we'll reuse the same buffer - i2c_dev.write_then_read(buffer, 1, buffer, 2, false); - Serial.print("Write then Read: "); - for (uint8_t i=0; i<2; i++) { - Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); - } - Serial.println(); -} - -void loop() { - -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_registers/i2c_registers.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_registers/i2c_registers.ino deleted file mode 100644 index 41a3043..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2c_registers/i2c_registers.ino +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -#define I2C_ADDRESS 0x60 -Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(I2C_ADDRESS); - - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("I2C device register test"); - - if (!i2c_dev.begin()) { - Serial.print("Did not find device at 0x"); - Serial.println(i2c_dev.address(), HEX); - while (1); - } - Serial.print("Device found on address 0x"); - Serial.println(i2c_dev.address(), HEX); - - Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(&i2c_dev, 0x0C, 2, LSBFIRST); - uint16_t id; - id_reg.read(&id); - Serial.print("ID register = 0x"); Serial.println(id, HEX); - - Adafruit_BusIO_Register thresh_reg = Adafruit_BusIO_Register(&i2c_dev, 0x01, 2, LSBFIRST); - uint16_t thresh; - thresh_reg.read(&thresh); - Serial.print("Initial threshold register = 0x"); Serial.println(thresh, HEX); - - thresh_reg.write(~thresh); - - Serial.print("Post threshold register = 0x"); Serial.println(thresh_reg.read(), HEX); -} - -void loop() { - -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino deleted file mode 100644 index 992a2e0..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino +++ /dev/null @@ -1,38 +0,0 @@ -#include - -// Define which interface to use by setting the unused interface to NULL! - -#define SPIDEVICE_CS 10 -Adafruit_SPIDevice *spi_dev = NULL; // new Adafruit_SPIDevice(SPIDEVICE_CS); - -#define I2C_ADDRESS 0x5D -Adafruit_I2CDevice *i2c_dev = new Adafruit_I2CDevice(I2C_ADDRESS); - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("I2C or SPI device register test"); - - if (spi_dev && !spi_dev->begin()) { - Serial.println("Could not initialize SPI device"); - } - - if (i2c_dev) { - if (i2c_dev->begin()) { - Serial.print("Device found on I2C address 0x"); - Serial.println(i2c_dev->address(), HEX); - } else { - Serial.print("Did not find I2C device at 0x"); - Serial.println(i2c_dev->address(), HEX); - } - } - - Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, 0x0F); - uint8_t id=0; - id_reg.read(&id); - Serial.print("ID register = 0x"); Serial.println(id, HEX); -} - -void loop() { - -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_modetest/spi_modetest.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_modetest/spi_modetest.ino deleted file mode 100644 index 10168c5..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_modetest/spi_modetest.ino +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#define SPIDEVICE_CS 10 -Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS, 100000, SPI_BITORDER_MSBFIRST, SPI_MODE1); -//Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS, 13, 12, 11, 100000, SPI_BITORDER_MSBFIRST, SPI_MODE1); - - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("SPI device mode test"); - - if (!spi_dev.begin()) { - Serial.println("Could not initialize SPI device"); - while (1); - } -} - -void loop() { - Serial.println("\n\nTransfer test"); - for (uint16_t x=0; x<=0xFF; x++) { - uint8_t i = x; - Serial.print("0x"); Serial.print(i, HEX); - spi_dev.read(&i, 1, i); - Serial.print("/"); Serial.print(i, HEX); - Serial.print(", "); - delay(25); - } -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_readwrite/spi_readwrite.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_readwrite/spi_readwrite.ino deleted file mode 100644 index 6f2c063..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_readwrite/spi_readwrite.ino +++ /dev/null @@ -1,39 +0,0 @@ -#include - -#define SPIDEVICE_CS 10 -Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS); - - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("SPI device read and write test"); - - if (!spi_dev.begin()) { - Serial.println("Could not initialize SPI device"); - while (1); - } - - uint8_t buffer[32]; - - // Try to read 32 bytes - spi_dev.read(buffer, 32); - Serial.print("Read: "); - for (uint8_t i=0; i<32; i++) { - Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); - } - Serial.println(); - - // read a register by writing first, then reading - buffer[0] = 0x8F; // we'll reuse the same buffer - spi_dev.write_then_read(buffer, 1, buffer, 2, false); - Serial.print("Write then Read: "); - for (uint8_t i=0; i<2; i++) { - Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); - } - Serial.println(); -} - -void loop() { - -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino deleted file mode 100644 index e70a17b..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino +++ /dev/null @@ -1,192 +0,0 @@ -/*************************************************** - - This is an example for how to use Adafruit_BusIO_RegisterBits from Adafruit_BusIO library. - - Designed specifically to work with the Adafruit RTD Sensor - ----> https://www.adafruit.com/products/3328 - uisng a MAX31865 RTD-to-Digital Converter - ----> https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf - - This sensor uses SPI to communicate, 4 pins are required to - interface. - A fifth pin helps to detect when a new conversion is ready. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Example written (2020/3) by Andreas Hardtung/AnHard. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include - -#define MAX31865_SPI_SPEED (5000000) -#define MAX31865_SPI_BITORDER (SPI_BITORDER_MSBFIRST) -#define MAX31865_SPI_MODE (SPI_MODE1) - -#define MAX31865_SPI_CS (10) -#define MAX31865_READY_PIN (2) - - -Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE, &SPI); // Hardware SPI -// Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, 13, 12, 11, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE); // Software SPI - -// MAX31865 chip related ********************************************************************************************* -Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(&spi_dev, 0x00, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST); -Adafruit_BusIO_RegisterBits bias_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 7); -Adafruit_BusIO_RegisterBits auto_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 6); -Adafruit_BusIO_RegisterBits oneS_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 5); -Adafruit_BusIO_RegisterBits wire_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 4); -Adafruit_BusIO_RegisterBits faultT_bits = Adafruit_BusIO_RegisterBits(&config_reg, 2, 2); -Adafruit_BusIO_RegisterBits faultR_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 1); -Adafruit_BusIO_RegisterBits fi50hz_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 0); - -Adafruit_BusIO_Register rRatio_reg = Adafruit_BusIO_Register(&spi_dev, 0x01, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); -Adafruit_BusIO_RegisterBits rRatio_bits = Adafruit_BusIO_RegisterBits(&rRatio_reg, 15, 1); -Adafruit_BusIO_RegisterBits fault_bit = Adafruit_BusIO_RegisterBits(&rRatio_reg, 1, 0); - -Adafruit_BusIO_Register maxRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x03, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); -Adafruit_BusIO_RegisterBits maxRratio_bits = Adafruit_BusIO_RegisterBits(&maxRratio_reg, 15, 1); - -Adafruit_BusIO_Register minRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x05, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); -Adafruit_BusIO_RegisterBits minRratio_bits = Adafruit_BusIO_RegisterBits(&minRratio_reg, 15, 1); - -Adafruit_BusIO_Register fault_reg = Adafruit_BusIO_Register(&spi_dev, 0x07, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST); -Adafruit_BusIO_RegisterBits range_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 7); -Adafruit_BusIO_RegisterBits range_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 6); -Adafruit_BusIO_RegisterBits refin_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 5); -Adafruit_BusIO_RegisterBits refin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 4); -Adafruit_BusIO_RegisterBits rtdin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 3); -Adafruit_BusIO_RegisterBits voltage_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 2); - -// Print the details of the configuration register. -void printConfig( void ) { - Serial.print("BIAS: "); if (bias_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); - Serial.print(", AUTO: "); if (auto_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); - Serial.print(", ONES: "); if (oneS_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); - Serial.print(", WIRE: "); if (wire_bit.read() ) Serial.print("3"); else Serial.print("2/4"); - Serial.print(", FAULTCLEAR: "); if (faultR_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); - Serial.print(", "); if (fi50hz_bit.read() ) Serial.print("50HZ"); else Serial.print("60HZ"); - Serial.println(); -} - -// Check and print faults. Then clear them. -void checkFaults( void ) { - if (fault_bit.read()) { - Serial.print("MAX: "); Serial.println(maxRratio_bits.read()); - Serial.print("VAL: "); Serial.println( rRatio_bits.read()); - Serial.print("MIN: "); Serial.println(minRratio_bits.read()); - - if (range_high_fault_bit.read() ) Serial.println("Range high fault"); - if ( range_low_fault_bit.read() ) Serial.println("Range low fault"); - if (refin_high_fault_bit.read() ) Serial.println("REFIN high fault"); - if ( refin_low_fault_bit.read() ) Serial.println("REFIN low fault"); - if ( rtdin_low_fault_bit.read() ) Serial.println("RTDIN low fault"); - if ( voltage_fault_bit.read() ) Serial.println("Voltage fault"); - - faultR_bit.write(1); // clear fault - } -} - -void setup() { - #if (MAX31865_1_READY_PIN != -1) - pinMode(MAX31865_READY_PIN ,INPUT_PULLUP); - #endif - - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("SPI Adafruit_BusIO_RegisterBits test on MAX31865"); - - if (!spi_dev.begin()) { - Serial.println("Could not initialize SPI device"); - while (1); - } - - // Set up for automode 50Hz. We don't care about selfheating. We want the highest possible sampling rate. - auto_bit.write(0); // Don't switch filtermode while auto_mode is on. - fi50hz_bit.write(1); // Set filter to 50Hz mode. - faultR_bit.write(1); // Clear faults. - bias_bit.write(1); // In automode we want to have the bias current always on. - delay(5); // Wait until bias current settles down. - // 10.5 time constants of the input RC network is required. - // 10ms worst case for 10kω reference resistor and a 0.1µF capacitor across the RTD inputs. - // Adafruit Module has 0.1µF and only 430/4300ω So here 0.43/4.3ms - auto_bit.write(1); // Now we can set automode. Automatically starting first conversion. - - // Test the READY_PIN - #if (defined( MAX31865_READY_PIN ) && (MAX31865_READY_PIN != -1)) - int i = 0; - while (digitalRead(MAX31865_READY_PIN) && i++ <= 100) { delay(1); } - if (i >= 100) { - Serial.print("ERROR: Max31865 Pin detection does not work. PIN:"); - Serial.println(MAX31865_READY_PIN); - } - #else - delay(100); - #endif - - // Set ratio range. - // Setting the temperatures would need some more calculation - not related to Adafruit_BusIO_RegisterBits. - uint16_t ratio = rRatio_bits.read(); - maxRratio_bits.write( (ratio < 0x8fffu-1000u) ? ratio + 1000u : 0x8fffu ); - minRratio_bits.write( (ratio > 1000u) ? ratio - 1000u : 0u ); - - printConfig(); - checkFaults(); -} - -void loop() { - #if (defined( MAX31865_READY_PIN ) && (MAX31865_1_READY_PIN != -1)) - // Is conversion ready? - if (!digitalRead(MAX31865_READY_PIN)) - #else - // Warant conversion is ready. - delay(21); // 21ms for 50Hz-mode. 19ms in 60Hz-mode. - #endif - { - // Read ratio, calculate temperature, scale, filter and print. - Serial.println( rRatio2C( rRatio_bits.read() ) * 100.0f, 0); // Temperature scaled by 100 - // Check, print, clear faults. - checkFaults(); - } - - // Do something else. - //delay(15000); -} - - -// Module/Sensor related. Here Adafruit PT100 module with a 2_Wire PT100 Class C ***************************** -float rRatio2C(uint16_t ratio) { - // A simple linear conversion. - const float R0 = 100.0f; - const float Rref = 430.0f; - const float alphaPT = 0.003850f; - const float ADCmax = (1u << 15) - 1.0f; - const float rscale = Rref / ADCmax; - // Measured temperature in boiling water 101.08°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C. - // Measured temperature in ice/water bath 0.76°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C. - //const float a = 1.0f / (alphaPT * R0); - const float a = (100.0f/101.08f) / (alphaPT * R0); - //const float b = 0.0f; // 101.08 - const float b = -0.76f; // 100.32 > 101.08 - - return filterRing( ((ratio * rscale) - R0) * a + b ); -} - -// General purpose ********************************************************************************************* -#define RINGLENGTH 250 -float filterRing( float newVal ) { - static float ring[RINGLENGTH] = { 0.0 }; - static uint8_t ringIndex = 0; - static bool ringFull = false; - - if ( ringIndex == RINGLENGTH ) { ringFull = true; ringIndex = 0; } - ring[ringIndex] = newVal; - uint8_t loopEnd = (ringFull) ? RINGLENGTH : ringIndex + 1; - float ringSum = 0.0f; - for (uint8_t i = 0; i < loopEnd; i++) ringSum += ring[i]; - ringIndex++; - return ringSum / loopEnd; -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_registers/spi_registers.ino b/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_registers/spi_registers.ino deleted file mode 100644 index 091a353..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/examples/spi_registers/spi_registers.ino +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include - -#define SPIDEVICE_CS 10 -Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS); - -void setup() { - while (!Serial) { delay(10); } - Serial.begin(115200); - Serial.println("SPI device register test"); - - if (!spi_dev.begin()) { - Serial.println("Could not initialize SPI device"); - while (1); - } - - Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(&spi_dev, 0x0F, ADDRBIT8_HIGH_TOREAD); - uint8_t id = 0; - id_reg.read(&id); - Serial.print("ID register = 0x"); Serial.println(id, HEX); - - Adafruit_BusIO_Register thresh_reg = Adafruit_BusIO_Register(&spi_dev, 0x0C, ADDRBIT8_HIGH_TOREAD, 2, LSBFIRST); - uint16_t thresh = 0; - thresh_reg.read(&thresh); - Serial.print("Initial threshold register = 0x"); Serial.println(thresh, HEX); - - thresh_reg.write(~thresh); - - Serial.print("Post threshold register = 0x"); Serial.println(thresh_reg.read(), HEX); -} - -void loop() { - -} diff --git a/studies/console/arduino/libraries/Adafruit_BusIO/library.properties b/studies/console/arduino/libraries/Adafruit_BusIO/library.properties deleted file mode 100644 index ba652bb..0000000 --- a/studies/console/arduino/libraries/Adafruit_BusIO/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=Adafruit BusIO -version=1.14.5 -author=Adafruit -maintainer=Adafruit -sentence=This is a library for abstracting away I2C and SPI interfacing -paragraph=This is a library for abstracting away I2C and SPI interfacing -category=Signal Input/Output -url=https://github.com/adafruit/Adafruit_BusIO -architectures=* diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.cpp b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.cpp deleted file mode 100644 index af98900..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.cpp +++ /dev/null @@ -1,2669 +0,0 @@ -/* -This is the core graphics library for all our displays, providing a common -set of graphics primitives (points, lines, circles, etc.). It needs to be -paired with a hardware-specific library for each display device we carry -(to handle the lower-level functions). - -Adafruit invests time and resources providing this open source code, please -support Adafruit & open-source hardware by purchasing products from Adafruit! - -Copyright (c) 2013 Adafruit Industries. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - */ - -#include "Adafruit_GFX.h" -#include "glcdfont.c" -#ifdef __AVR__ -#include -#elif defined(ESP8266) || defined(ESP32) -#include -#endif - -// Many (but maybe not all) non-AVR board installs define macros -// for compatibility with existing PROGMEM-reading AVR code. -// Do our own checks and defines here for good measure... - -#ifndef pgm_read_byte -#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) -#endif -#ifndef pgm_read_word -#define pgm_read_word(addr) (*(const unsigned short *)(addr)) -#endif -#ifndef pgm_read_dword -#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) -#endif - -// Pointers are a peculiar case...typically 16-bit on AVR boards, -// 32 bits elsewhere. Try to accommodate both... - -#if !defined(__INT_MAX__) || (__INT_MAX__ > 0xFFFF) -#define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr)) -#else -#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr)) -#endif - -inline GFXglyph *pgm_read_glyph_ptr(const GFXfont *gfxFont, uint8_t c) { -#ifdef __AVR__ - return &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]); -#else - // expression in __AVR__ section may generate "dereferencing type-punned - // pointer will break strict-aliasing rules" warning In fact, on other - // platforms (such as STM32) there is no need to do this pointer magic as - // program memory may be read in a usual way So expression may be simplified - return gfxFont->glyph + c; -#endif //__AVR__ -} - -inline uint8_t *pgm_read_bitmap_ptr(const GFXfont *gfxFont) { -#ifdef __AVR__ - return (uint8_t *)pgm_read_pointer(&gfxFont->bitmap); -#else - // expression in __AVR__ section generates "dereferencing type-punned pointer - // will break strict-aliasing rules" warning In fact, on other platforms (such - // as STM32) there is no need to do this pointer magic as program memory may - // be read in a usual way So expression may be simplified - return gfxFont->bitmap; -#endif //__AVR__ -} - -#ifndef min -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#endif - -#ifndef _swap_int16_t -#define _swap_int16_t(a, b) \ - { \ - int16_t t = a; \ - a = b; \ - b = t; \ - } -#endif - -/**************************************************************************/ -/*! - @brief Instatiate a GFX context for graphics! Can only be done by a - superclass - @param w Display width, in pixels - @param h Display height, in pixels -*/ -/**************************************************************************/ -Adafruit_GFX::Adafruit_GFX(int16_t w, int16_t h) : WIDTH(w), HEIGHT(h) { - _width = WIDTH; - _height = HEIGHT; - rotation = 0; - cursor_y = cursor_x = 0; - textsize_x = textsize_y = 1; - textcolor = textbgcolor = 0xFFFF; - wrap = true; - _cp437 = false; - gfxFont = NULL; -} - -/**************************************************************************/ -/*! - @brief Write a line. Bresenham's algorithm - thx wikpedia - @param x0 Start point x coordinate - @param y0 Start point y coordinate - @param x1 End point x coordinate - @param y1 End point y coordinate - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - uint16_t color) { -#if defined(ESP8266) - yield(); -#endif - int16_t steep = abs(y1 - y0) > abs(x1 - x0); - if (steep) { - _swap_int16_t(x0, y0); - _swap_int16_t(x1, y1); - } - - if (x0 > x1) { - _swap_int16_t(x0, x1); - _swap_int16_t(y0, y1); - } - - int16_t dx, dy; - dx = x1 - x0; - dy = abs(y1 - y0); - - int16_t err = dx / 2; - int16_t ystep; - - if (y0 < y1) { - ystep = 1; - } else { - ystep = -1; - } - - for (; x0 <= x1; x0++) { - if (steep) { - writePixel(y0, x0, color); - } else { - writePixel(x0, y0, color); - } - err -= dy; - if (err < 0) { - y0 += ystep; - err += dx; - } - } -} - -/**************************************************************************/ -/*! - @brief Start a display-writing routine, overwrite in subclasses. -*/ -/**************************************************************************/ -void Adafruit_GFX::startWrite() {} - -/**************************************************************************/ -/*! - @brief Write a pixel, overwrite in subclasses if startWrite is defined! - @param x x coordinate - @param y y coordinate - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::writePixel(int16_t x, int16_t y, uint16_t color) { - drawPixel(x, y, color); -} - -/**************************************************************************/ -/*! - @brief Write a perfectly vertical line, overwrite in subclasses if - startWrite is defined! - @param x Top-most x coordinate - @param y Top-most y coordinate - @param h Height in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::writeFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - // Overwrite in subclasses if startWrite is defined! - // Can be just writeLine(x, y, x, y+h-1, color); - // or writeFillRect(x, y, 1, h, color); - drawFastVLine(x, y, h, color); -} - -/**************************************************************************/ -/*! - @brief Write a perfectly horizontal line, overwrite in subclasses if - startWrite is defined! - @param x Left-most x coordinate - @param y Left-most y coordinate - @param w Width in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::writeFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - // Overwrite in subclasses if startWrite is defined! - // Example: writeLine(x, y, x+w-1, y, color); - // or writeFillRect(x, y, w, 1, color); - drawFastHLine(x, y, w, color); -} - -/**************************************************************************/ -/*! - @brief Write a rectangle completely with one color, overwrite in - subclasses if startWrite is defined! - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param w Width in pixels - @param h Height in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color) { - // Overwrite in subclasses if desired! - fillRect(x, y, w, h, color); -} - -/**************************************************************************/ -/*! - @brief End a display-writing routine, overwrite in subclasses if - startWrite is defined! -*/ -/**************************************************************************/ -void Adafruit_GFX::endWrite() {} - -/**************************************************************************/ -/*! - @brief Draw a perfectly vertical line (this is often optimized in a - subclass!) - @param x Top-most x coordinate - @param y Top-most y coordinate - @param h Height in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - startWrite(); - writeLine(x, y, x, y + h - 1, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a perfectly horizontal line (this is often optimized in a - subclass!) - @param x Left-most x coordinate - @param y Left-most y coordinate - @param w Width in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - startWrite(); - writeLine(x, y, x + w - 1, y, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Fill a rectangle completely with one color. Update in subclasses if - desired! - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param w Width in pixels - @param h Height in pixels - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color) { - startWrite(); - for (int16_t i = x; i < x + w; i++) { - writeFastVLine(i, y, h, color); - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Fill the screen completely with one color. Update in subclasses if - desired! - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillScreen(uint16_t color) { - fillRect(0, 0, _width, _height, color); -} - -/**************************************************************************/ -/*! - @brief Draw a line - @param x0 Start point x coordinate - @param y0 Start point y coordinate - @param x1 End point x coordinate - @param y1 End point y coordinate - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - uint16_t color) { - // Update in subclasses if desired! - if (x0 == x1) { - if (y0 > y1) - _swap_int16_t(y0, y1); - drawFastVLine(x0, y0, y1 - y0 + 1, color); - } else if (y0 == y1) { - if (x0 > x1) - _swap_int16_t(x0, x1); - drawFastHLine(x0, y0, x1 - x0 + 1, color); - } else { - startWrite(); - writeLine(x0, y0, x1, y1, color); - endWrite(); - } -} - -/**************************************************************************/ -/*! - @brief Draw a circle outline - @param x0 Center-point x coordinate - @param y0 Center-point y coordinate - @param r Radius of circle - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r, - uint16_t color) { -#if defined(ESP8266) - yield(); -#endif - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - startWrite(); - writePixel(x0, y0 + r, color); - writePixel(x0, y0 - r, color); - writePixel(x0 + r, y0, color); - writePixel(x0 - r, y0, color); - - while (x < y) { - if (f >= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - writePixel(x0 + x, y0 + y, color); - writePixel(x0 - x, y0 + y, color); - writePixel(x0 + x, y0 - y, color); - writePixel(x0 - x, y0 - y, color); - writePixel(x0 + y, y0 + x, color); - writePixel(x0 - y, y0 + x, color); - writePixel(x0 + y, y0 - x, color); - writePixel(x0 - y, y0 - x, color); - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Quarter-circle drawer, used to do circles and roundrects - @param x0 Center-point x coordinate - @param y0 Center-point y coordinate - @param r Radius of circle - @param cornername Mask bit #1 or bit #2 to indicate which quarters of - the circle we're doing - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawCircleHelper(int16_t x0, int16_t y0, int16_t r, - uint8_t cornername, uint16_t color) { - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - while (x < y) { - if (f >= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - if (cornername & 0x4) { - writePixel(x0 + x, y0 + y, color); - writePixel(x0 + y, y0 + x, color); - } - if (cornername & 0x2) { - writePixel(x0 + x, y0 - y, color); - writePixel(x0 + y, y0 - x, color); - } - if (cornername & 0x8) { - writePixel(x0 - y, y0 + x, color); - writePixel(x0 - x, y0 + y, color); - } - if (cornername & 0x1) { - writePixel(x0 - y, y0 - x, color); - writePixel(x0 - x, y0 - y, color); - } - } -} - -/**************************************************************************/ -/*! - @brief Draw a circle with filled color - @param x0 Center-point x coordinate - @param y0 Center-point y coordinate - @param r Radius of circle - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r, - uint16_t color) { - startWrite(); - writeFastVLine(x0, y0 - r, 2 * r + 1, color); - fillCircleHelper(x0, y0, r, 3, 0, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Quarter-circle drawer with fill, used for circles and roundrects - @param x0 Center-point x coordinate - @param y0 Center-point y coordinate - @param r Radius of circle - @param corners Mask bits indicating which quarters we're doing - @param delta Offset from center-point, used for round-rects - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r, - uint8_t corners, int16_t delta, - uint16_t color) { - - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - int16_t px = x; - int16_t py = y; - - delta++; // Avoid some +1's in the loop - - while (x < y) { - if (f >= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - // These checks avoid double-drawing certain lines, important - // for the SSD1306 library which has an INVERT drawing mode. - if (x < (y + 1)) { - if (corners & 1) - writeFastVLine(x0 + x, y0 - y, 2 * y + delta, color); - if (corners & 2) - writeFastVLine(x0 - x, y0 - y, 2 * y + delta, color); - } - if (y != py) { - if (corners & 1) - writeFastVLine(x0 + py, y0 - px, 2 * px + delta, color); - if (corners & 2) - writeFastVLine(x0 - py, y0 - px, 2 * px + delta, color); - py = y; - } - px = x; - } -} - -/**************************************************************************/ -/*! - @brief Draw a rectangle with no fill color - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param w Width in pixels - @param h Height in pixels - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color) { - startWrite(); - writeFastHLine(x, y, w, color); - writeFastHLine(x, y + h - 1, w, color); - writeFastVLine(x, y, h, color); - writeFastVLine(x + w - 1, y, h, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a rounded rectangle with no fill color - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param w Width in pixels - @param h Height in pixels - @param r Radius of corner rounding - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, - int16_t r, uint16_t color) { - int16_t max_radius = ((w < h) ? w : h) / 2; // 1/2 minor axis - if (r > max_radius) - r = max_radius; - // smarter version - startWrite(); - writeFastHLine(x + r, y, w - 2 * r, color); // Top - writeFastHLine(x + r, y + h - 1, w - 2 * r, color); // Bottom - writeFastVLine(x, y + r, h - 2 * r, color); // Left - writeFastVLine(x + w - 1, y + r, h - 2 * r, color); // Right - // draw four corners - drawCircleHelper(x + r, y + r, r, 1, color); - drawCircleHelper(x + w - r - 1, y + r, r, 2, color); - drawCircleHelper(x + w - r - 1, y + h - r - 1, r, 4, color); - drawCircleHelper(x + r, y + h - r - 1, r, 8, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a rounded rectangle with fill color - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param w Width in pixels - @param h Height in pixels - @param r Radius of corner rounding - @param color 16-bit 5-6-5 Color to draw/fill with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, - int16_t r, uint16_t color) { - int16_t max_radius = ((w < h) ? w : h) / 2; // 1/2 minor axis - if (r > max_radius) - r = max_radius; - // smarter version - startWrite(); - writeFillRect(x + r, y, w - 2 * r, h, color); - // draw four corners - fillCircleHelper(x + w - r - 1, y + r, r, 1, h - 2 * r - 1, color); - fillCircleHelper(x + r, y + r, r, 2, h - 2 * r - 1, color); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a triangle with no fill color - @param x0 Vertex #0 x coordinate - @param y0 Vertex #0 y coordinate - @param x1 Vertex #1 x coordinate - @param y1 Vertex #1 y coordinate - @param x2 Vertex #2 x coordinate - @param y2 Vertex #2 y coordinate - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - int16_t x2, int16_t y2, uint16_t color) { - drawLine(x0, y0, x1, y1, color); - drawLine(x1, y1, x2, y2, color); - drawLine(x2, y2, x0, y0, color); -} - -/**************************************************************************/ -/*! - @brief Draw a triangle with color-fill - @param x0 Vertex #0 x coordinate - @param y0 Vertex #0 y coordinate - @param x1 Vertex #1 x coordinate - @param y1 Vertex #1 y coordinate - @param x2 Vertex #2 x coordinate - @param y2 Vertex #2 y coordinate - @param color 16-bit 5-6-5 Color to fill/draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - int16_t x2, int16_t y2, uint16_t color) { - - int16_t a, b, y, last; - - // Sort coordinates by Y order (y2 >= y1 >= y0) - if (y0 > y1) { - _swap_int16_t(y0, y1); - _swap_int16_t(x0, x1); - } - if (y1 > y2) { - _swap_int16_t(y2, y1); - _swap_int16_t(x2, x1); - } - if (y0 > y1) { - _swap_int16_t(y0, y1); - _swap_int16_t(x0, x1); - } - - startWrite(); - if (y0 == y2) { // Handle awkward all-on-same-line case as its own thing - a = b = x0; - if (x1 < a) - a = x1; - else if (x1 > b) - b = x1; - if (x2 < a) - a = x2; - else if (x2 > b) - b = x2; - writeFastHLine(a, y0, b - a + 1, color); - endWrite(); - return; - } - - int16_t dx01 = x1 - x0, dy01 = y1 - y0, dx02 = x2 - x0, dy02 = y2 - y0, - dx12 = x2 - x1, dy12 = y2 - y1; - int32_t sa = 0, sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y1 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y0=y1 - // (flat-topped triangle). - if (y1 == y2) - last = y1; // Include y1 scanline - else - last = y1 - 1; // Skip it - - for (y = y0; y <= last; y++) { - a = x0 + sa / dy01; - b = x0 + sb / dy02; - sa += dx01; - sb += dx02; - /* longhand: - a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) - _swap_int16_t(a, b); - writeFastHLine(a, y, b - a + 1, color); - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y1=y2. - sa = (int32_t)dx12 * (y - y1); - sb = (int32_t)dx02 * (y - y0); - for (; y <= y2; y++) { - a = x1 + sa / dy12; - b = x0 + sb / dy02; - sa += dx12; - sb += dx02; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) - _swap_int16_t(a, b); - writeFastHLine(a, y, b - a + 1, color); - } - endWrite(); -} - -// BITMAP / XBITMAP / GRAYSCALE / RGB BITMAP FUNCTIONS --------------------- - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) - position, using the specified foreground color (unset bits are transparent). - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with monochrome bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], - int16_t w, int16_t h, uint16_t color) { - - int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - uint8_t b = 0; - - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); - if (b & 0x80) - writePixel(x + i, y, color); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) - position, using the specified foreground (for set bits) and background (unset - bits) colors. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with monochrome bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels - @param color 16-bit 5-6-5 Color to draw pixels with - @param bg 16-bit 5-6-5 Color to draw background with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], - int16_t w, int16_t h, uint16_t color, - uint16_t bg) { - - int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - uint8_t b = 0; - - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); - writePixel(x + i, y, (b & 0x80) ? color : bg); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, - using the specified foreground color (unset bits are transparent). - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with monochrome bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels - @param color 16-bit 5-6-5 Color to draw with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, - int16_t h, uint16_t color) { - - int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - uint8_t b = 0; - - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = bitmap[j * byteWidth + i / 8]; - if (b & 0x80) - writePixel(x + i, y, color); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, - using the specified foreground (for set bits) and background (unset bits) - colors. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with monochrome bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels - @param color 16-bit 5-6-5 Color to draw pixels with - @param bg 16-bit 5-6-5 Color to draw background with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, - int16_t h, uint16_t color, uint16_t bg) { - - int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - uint8_t b = 0; - - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = bitmap[j * byteWidth + i / 8]; - writePixel(x + i, y, (b & 0x80) ? color : bg); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw PROGMEM-resident XBitMap Files (*.xbm), exported from GIMP. - Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor. - C Array can be directly used with this function. - There is no RAM-resident version of this function; if generating bitmaps - in RAM, use the format defined by drawBitmap() and call that instead. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with monochrome bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels - @param color 16-bit 5-6-5 Color to draw pixels with -*/ -/**************************************************************************/ -void Adafruit_GFX::drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[], - int16_t w, int16_t h, uint16_t color) { - - int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - uint8_t b = 0; - - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b >>= 1; - else - b = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); - // Nearly identical to drawBitmap(), only the bit order - // is reversed here (left-to-right = LSB to MSB): - if (b & 0x01) - writePixel(x + i, y, color); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 8-bit image (grayscale) at the specified - (x,y) pos. Specifically for 8-bit display devices such as IS31FL3731; no - color reduction/expansion is performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with grayscale bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, - const uint8_t bitmap[], int16_t w, - int16_t h) { - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - writePixel(x + i, y, (uint8_t)pgm_read_byte(&bitmap[j * w + i])); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 8-bit image (grayscale) at the specified (x,y) - pos. Specifically for 8-bit display devices such as IS31FL3731; no color - reduction/expansion is performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with grayscale bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, - int16_t w, int16_t h) { - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - writePixel(x + i, y, bitmap[j * w + i]); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 8-bit image (grayscale) with a 1-bit mask - (set bits = opaque, unset bits = clear) at the specified (x,y) position. - BOTH buffers (grayscale and mask) must be PROGMEM-resident. - Specifically for 8-bit display devices such as IS31FL3731; no color - reduction/expansion is performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with grayscale bitmap - @param mask byte array with mask bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, - const uint8_t bitmap[], - const uint8_t mask[], int16_t w, - int16_t h) { - int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte - uint8_t b = 0; - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = pgm_read_byte(&mask[j * bw + i / 8]); - if (b & 0x80) { - writePixel(x + i, y, (uint8_t)pgm_read_byte(&bitmap[j * w + i])); - } - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 8-bit image (grayscale) with a 1-bit mask - (set bits = opaque, unset bits = clear) at the specified (x,y) position. - BOTH buffers (grayscale and mask) must be RAM-residentt, no mix-and-match - Specifically for 8-bit display devices such as IS31FL3731; no color - reduction/expansion is performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with grayscale bitmap - @param mask byte array with mask bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, - uint8_t *mask, int16_t w, int16_t h) { - int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte - uint8_t b = 0; - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = mask[j * bw + i / 8]; - if (b & 0x80) { - writePixel(x + i, y, bitmap[j * w + i]); - } - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified - (x,y) position. For 16-bit display devices; no color reduction performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with 16-bit color bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], - int16_t w, int16_t h) { - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - writePixel(x + i, y, pgm_read_word(&bitmap[j * w + i])); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) - position. For 16-bit display devices; no color reduction performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with 16-bit color bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, - int16_t w, int16_t h) { - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - writePixel(x + i, y, bitmap[j * w + i]); - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) with a 1-bit mask - (set bits = opaque, unset bits = clear) at the specified (x,y) position. BOTH - buffers (color and mask) must be PROGMEM-resident. For 16-bit display - devices; no color reduction performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with 16-bit color bitmap - @param mask byte array with monochrome mask bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], - const uint8_t mask[], int16_t w, int16_t h) { - int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte - uint8_t b = 0; - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = pgm_read_byte(&mask[j * bw + i / 8]); - if (b & 0x80) { - writePixel(x + i, y, pgm_read_word(&bitmap[j * w + i])); - } - } - } - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) with a 1-bit mask (set - bits = opaque, unset bits = clear) at the specified (x,y) position. BOTH - buffers (color and mask) must be RAM-resident. For 16-bit display devices; no - color reduction performed. - @param x Top left corner x coordinate - @param y Top left corner y coordinate - @param bitmap byte array with 16-bit color bitmap - @param mask byte array with monochrome mask bitmap - @param w Width of bitmap in pixels - @param h Height of bitmap in pixels -*/ -/**************************************************************************/ -void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, - uint8_t *mask, int16_t w, int16_t h) { - int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte - uint8_t b = 0; - startWrite(); - for (int16_t j = 0; j < h; j++, y++) { - for (int16_t i = 0; i < w; i++) { - if (i & 7) - b <<= 1; - else - b = mask[j * bw + i / 8]; - if (b & 0x80) { - writePixel(x + i, y, bitmap[j * w + i]); - } - } - } - endWrite(); -} - -// TEXT- AND CHARACTER-HANDLING FUNCTIONS ---------------------------------- - -// Draw a character -/**************************************************************************/ -/*! - @brief Draw a single character - @param x Bottom left corner x coordinate - @param y Bottom left corner y coordinate - @param c The 8-bit font-indexed character (likely ascii) - @param color 16-bit 5-6-5 Color to draw chraracter with - @param bg 16-bit 5-6-5 Color to fill background with (if same as color, - no background) - @param size Font magnification level, 1 is 'original' size -*/ -/**************************************************************************/ -void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, - uint16_t color, uint16_t bg, uint8_t size) { - drawChar(x, y, c, color, bg, size, size); -} - -// Draw a character -/**************************************************************************/ -/*! - @brief Draw a single character - @param x Bottom left corner x coordinate - @param y Bottom left corner y coordinate - @param c The 8-bit font-indexed character (likely ascii) - @param color 16-bit 5-6-5 Color to draw chraracter with - @param bg 16-bit 5-6-5 Color to fill background with (if same as color, - no background) - @param size_x Font magnification level in X-axis, 1 is 'original' size - @param size_y Font magnification level in Y-axis, 1 is 'original' size -*/ -/**************************************************************************/ -void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, - uint16_t color, uint16_t bg, uint8_t size_x, - uint8_t size_y) { - - if (!gfxFont) { // 'Classic' built-in font - - if ((x >= _width) || // Clip right - (y >= _height) || // Clip bottom - ((x + 6 * size_x - 1) < 0) || // Clip left - ((y + 8 * size_y - 1) < 0)) // Clip top - return; - - if (!_cp437 && (c >= 176)) - c++; // Handle 'classic' charset behavior - - startWrite(); - for (int8_t i = 0; i < 5; i++) { // Char bitmap = 5 columns - uint8_t line = pgm_read_byte(&font[c * 5 + i]); - for (int8_t j = 0; j < 8; j++, line >>= 1) { - if (line & 1) { - if (size_x == 1 && size_y == 1) - writePixel(x + i, y + j, color); - else - writeFillRect(x + i * size_x, y + j * size_y, size_x, size_y, - color); - } else if (bg != color) { - if (size_x == 1 && size_y == 1) - writePixel(x + i, y + j, bg); - else - writeFillRect(x + i * size_x, y + j * size_y, size_x, size_y, bg); - } - } - } - if (bg != color) { // If opaque, draw vertical line for last column - if (size_x == 1 && size_y == 1) - writeFastVLine(x + 5, y, 8, bg); - else - writeFillRect(x + 5 * size_x, y, size_x, 8 * size_y, bg); - } - endWrite(); - - } else { // Custom font - - // Character is assumed previously filtered by write() to eliminate - // newlines, returns, non-printable characters, etc. Calling - // drawChar() directly with 'bad' characters of font may cause mayhem! - - c -= (uint8_t)pgm_read_byte(&gfxFont->first); - GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c); - uint8_t *bitmap = pgm_read_bitmap_ptr(gfxFont); - - uint16_t bo = pgm_read_word(&glyph->bitmapOffset); - uint8_t w = pgm_read_byte(&glyph->width), h = pgm_read_byte(&glyph->height); - int8_t xo = pgm_read_byte(&glyph->xOffset), - yo = pgm_read_byte(&glyph->yOffset); - uint8_t xx, yy, bits = 0, bit = 0; - int16_t xo16 = 0, yo16 = 0; - - if (size_x > 1 || size_y > 1) { - xo16 = xo; - yo16 = yo; - } - - // Todo: Add character clipping here - - // NOTE: THERE IS NO 'BACKGROUND' COLOR OPTION ON CUSTOM FONTS. - // THIS IS ON PURPOSE AND BY DESIGN. The background color feature - // has typically been used with the 'classic' font to overwrite old - // screen contents with new data. This ONLY works because the - // characters are a uniform size; it's not a sensible thing to do with - // proportionally-spaced fonts with glyphs of varying sizes (and that - // may overlap). To replace previously-drawn text when using a custom - // font, use the getTextBounds() function to determine the smallest - // rectangle encompassing a string, erase the area with fillRect(), - // then draw new text. This WILL infortunately 'blink' the text, but - // is unavoidable. Drawing 'background' pixels will NOT fix this, - // only creates a new set of problems. Have an idea to work around - // this (a canvas object type for MCUs that can afford the RAM and - // displays supporting setAddrWindow() and pushColors()), but haven't - // implemented this yet. - - startWrite(); - for (yy = 0; yy < h; yy++) { - for (xx = 0; xx < w; xx++) { - if (!(bit++ & 7)) { - bits = pgm_read_byte(&bitmap[bo++]); - } - if (bits & 0x80) { - if (size_x == 1 && size_y == 1) { - writePixel(x + xo + xx, y + yo + yy, color); - } else { - writeFillRect(x + (xo16 + xx) * size_x, y + (yo16 + yy) * size_y, - size_x, size_y, color); - } - } - bits <<= 1; - } - } - endWrite(); - - } // End classic vs custom font -} -/**************************************************************************/ -/*! - @brief Print one byte/character of data, used to support print() - @param c The 8-bit ascii character to write -*/ -/**************************************************************************/ -size_t Adafruit_GFX::write(uint8_t c) { - if (!gfxFont) { // 'Classic' built-in font - - if (c == '\n') { // Newline? - cursor_x = 0; // Reset x to zero, - cursor_y += textsize_y * 8; // advance y one line - } else if (c != '\r') { // Ignore carriage returns - if (wrap && ((cursor_x + textsize_x * 6) > _width)) { // Off right? - cursor_x = 0; // Reset x to zero, - cursor_y += textsize_y * 8; // advance y one line - } - drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize_x, - textsize_y); - cursor_x += textsize_x * 6; // Advance x one char - } - - } else { // Custom font - - if (c == '\n') { - cursor_x = 0; - cursor_y += - (int16_t)textsize_y * (uint8_t)pgm_read_byte(&gfxFont->yAdvance); - } else if (c != '\r') { - uint8_t first = pgm_read_byte(&gfxFont->first); - if ((c >= first) && (c <= (uint8_t)pgm_read_byte(&gfxFont->last))) { - GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c - first); - uint8_t w = pgm_read_byte(&glyph->width), - h = pgm_read_byte(&glyph->height); - if ((w > 0) && (h > 0)) { // Is there an associated bitmap? - int16_t xo = (int8_t)pgm_read_byte(&glyph->xOffset); // sic - if (wrap && ((cursor_x + textsize_x * (xo + w)) > _width)) { - cursor_x = 0; - cursor_y += (int16_t)textsize_y * - (uint8_t)pgm_read_byte(&gfxFont->yAdvance); - } - drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize_x, - textsize_y); - } - cursor_x += - (uint8_t)pgm_read_byte(&glyph->xAdvance) * (int16_t)textsize_x; - } - } - } - return 1; -} - -/**************************************************************************/ -/*! - @brief Set text 'magnification' size. Each increase in s makes 1 pixel - that much bigger. - @param s Desired text size. 1 is default 6x8, 2 is 12x16, 3 is 18x24, etc -*/ -/**************************************************************************/ -void Adafruit_GFX::setTextSize(uint8_t s) { setTextSize(s, s); } - -/**************************************************************************/ -/*! - @brief Set text 'magnification' size. Each increase in s makes 1 pixel - that much bigger. - @param s_x Desired text width magnification level in X-axis. 1 is default - @param s_y Desired text width magnification level in Y-axis. 1 is default -*/ -/**************************************************************************/ -void Adafruit_GFX::setTextSize(uint8_t s_x, uint8_t s_y) { - textsize_x = (s_x > 0) ? s_x : 1; - textsize_y = (s_y > 0) ? s_y : 1; -} - -/**************************************************************************/ -/*! - @brief Set rotation setting for display - @param x 0 thru 3 corresponding to 4 cardinal rotations -*/ -/**************************************************************************/ -void Adafruit_GFX::setRotation(uint8_t x) { - rotation = (x & 3); - switch (rotation) { - case 0: - case 2: - _width = WIDTH; - _height = HEIGHT; - break; - case 1: - case 3: - _width = HEIGHT; - _height = WIDTH; - break; - } -} - -/**************************************************************************/ -/*! - @brief Set the font to display when print()ing, either custom or default - @param f The GFXfont object, if NULL use built in 6x8 font -*/ -/**************************************************************************/ -void Adafruit_GFX::setFont(const GFXfont *f) { - if (f) { // Font struct pointer passed in? - if (!gfxFont) { // And no current font struct? - // Switching from classic to new font behavior. - // Move cursor pos down 6 pixels so it's on baseline. - cursor_y += 6; - } - } else if (gfxFont) { // NULL passed. Current font struct defined? - // Switching from new to classic font behavior. - // Move cursor pos up 6 pixels so it's at top-left of char. - cursor_y -= 6; - } - gfxFont = (GFXfont *)f; -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a character with current font/size. - Broke this out as it's used by both the PROGMEM- and RAM-resident - getTextBounds() functions. - @param c The ASCII character in question - @param x Pointer to x location of character. Value is modified by - this function to advance to next character. - @param y Pointer to y location of character. Value is modified by - this function to advance to next character. - @param minx Pointer to minimum X coordinate, passed in to AND returned - by this function -- this is used to incrementally build a - bounding rectangle for a string. - @param miny Pointer to minimum Y coord, passed in AND returned. - @param maxx Pointer to maximum X coord, passed in AND returned. - @param maxy Pointer to maximum Y coord, passed in AND returned. -*/ -/**************************************************************************/ -void Adafruit_GFX::charBounds(unsigned char c, int16_t *x, int16_t *y, - int16_t *minx, int16_t *miny, int16_t *maxx, - int16_t *maxy) { - - if (gfxFont) { - - if (c == '\n') { // Newline? - *x = 0; // Reset x to zero, advance y by one line - *y += textsize_y * (uint8_t)pgm_read_byte(&gfxFont->yAdvance); - } else if (c != '\r') { // Not a carriage return; is normal char - uint8_t first = pgm_read_byte(&gfxFont->first), - last = pgm_read_byte(&gfxFont->last); - if ((c >= first) && (c <= last)) { // Char present in this font? - GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c - first); - uint8_t gw = pgm_read_byte(&glyph->width), - gh = pgm_read_byte(&glyph->height), - xa = pgm_read_byte(&glyph->xAdvance); - int8_t xo = pgm_read_byte(&glyph->xOffset), - yo = pgm_read_byte(&glyph->yOffset); - if (wrap && ((*x + (((int16_t)xo + gw) * textsize_x)) > _width)) { - *x = 0; // Reset x to zero, advance y by one line - *y += textsize_y * (uint8_t)pgm_read_byte(&gfxFont->yAdvance); - } - int16_t tsx = (int16_t)textsize_x, tsy = (int16_t)textsize_y, - x1 = *x + xo * tsx, y1 = *y + yo * tsy, x2 = x1 + gw * tsx - 1, - y2 = y1 + gh * tsy - 1; - if (x1 < *minx) - *minx = x1; - if (y1 < *miny) - *miny = y1; - if (x2 > *maxx) - *maxx = x2; - if (y2 > *maxy) - *maxy = y2; - *x += xa * tsx; - } - } - - } else { // Default font - - if (c == '\n') { // Newline? - *x = 0; // Reset x to zero, - *y += textsize_y * 8; // advance y one line - // min/max x/y unchaged -- that waits for next 'normal' character - } else if (c != '\r') { // Normal char; ignore carriage returns - if (wrap && ((*x + textsize_x * 6) > _width)) { // Off right? - *x = 0; // Reset x to zero, - *y += textsize_y * 8; // advance y one line - } - int x2 = *x + textsize_x * 6 - 1, // Lower-right pixel of char - y2 = *y + textsize_y * 8 - 1; - if (x2 > *maxx) - *maxx = x2; // Track max x, y - if (y2 > *maxy) - *maxy = y2; - if (*x < *minx) - *minx = *x; // Track min x, y - if (*y < *miny) - *miny = *y; - *x += textsize_x * 6; // Advance x one char - } - } -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a string with current font/size. - Pass string and a cursor position, returns UL corner and W,H. - @param str The ASCII string to measure - @param x The current cursor X - @param y The current cursor Y - @param x1 The boundary X coordinate, returned by function - @param y1 The boundary Y coordinate, returned by function - @param w The boundary width, returned by function - @param h The boundary height, returned by function -*/ -/**************************************************************************/ -void Adafruit_GFX::getTextBounds(const char *str, int16_t x, int16_t y, - int16_t *x1, int16_t *y1, uint16_t *w, - uint16_t *h) { - - uint8_t c; // Current character - int16_t minx = 0x7FFF, miny = 0x7FFF, maxx = -1, maxy = -1; // Bound rect - // Bound rect is intentionally initialized inverted, so 1st char sets it - - *x1 = x; // Initial position is value passed in - *y1 = y; - *w = *h = 0; // Initial size is zero - - while ((c = *str++)) { - // charBounds() modifies x/y to advance for each character, - // and min/max x/y are updated to incrementally build bounding rect. - charBounds(c, &x, &y, &minx, &miny, &maxx, &maxy); - } - - if (maxx >= minx) { // If legit string bounds were found... - *x1 = minx; // Update x1 to least X coord, - *w = maxx - minx + 1; // And w to bound rect width - } - if (maxy >= miny) { // Same for height - *y1 = miny; - *h = maxy - miny + 1; - } -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a string with current font/size. Pass - string and a cursor position, returns UL corner and W,H. - @param str The ascii string to measure (as an arduino String() class) - @param x The current cursor X - @param y The current cursor Y - @param x1 The boundary X coordinate, set by function - @param y1 The boundary Y coordinate, set by function - @param w The boundary width, set by function - @param h The boundary height, set by function -*/ -/**************************************************************************/ -void Adafruit_GFX::getTextBounds(const String &str, int16_t x, int16_t y, - int16_t *x1, int16_t *y1, uint16_t *w, - uint16_t *h) { - if (str.length() != 0) { - getTextBounds(const_cast(str.c_str()), x, y, x1, y1, w, h); - } -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a PROGMEM string with current - font/size. Pass string and a cursor position, returns UL corner and W,H. - @param str The flash-memory ascii string to measure - @param x The current cursor X - @param y The current cursor Y - @param x1 The boundary X coordinate, set by function - @param y1 The boundary Y coordinate, set by function - @param w The boundary width, set by function - @param h The boundary height, set by function -*/ -/**************************************************************************/ -void Adafruit_GFX::getTextBounds(const __FlashStringHelper *str, int16_t x, - int16_t y, int16_t *x1, int16_t *y1, - uint16_t *w, uint16_t *h) { - uint8_t *s = (uint8_t *)str, c; - - *x1 = x; - *y1 = y; - *w = *h = 0; - - int16_t minx = _width, miny = _height, maxx = -1, maxy = -1; - - while ((c = pgm_read_byte(s++))) - charBounds(c, &x, &y, &minx, &miny, &maxx, &maxy); - - if (maxx >= minx) { - *x1 = minx; - *w = maxx - minx + 1; - } - if (maxy >= miny) { - *y1 = miny; - *h = maxy - miny + 1; - } -} - -/**************************************************************************/ -/*! - @brief Invert the display (ideally using built-in hardware command) - @param i True if you want to invert, false to make 'normal' -*/ -/**************************************************************************/ -void Adafruit_GFX::invertDisplay(bool i) { - // Do nothing, must be subclassed if supported by hardware - (void)i; // disable -Wunused-parameter warning -} - -/***************************************************************************/ - -/**************************************************************************/ -/*! - @brief Create a simple drawn button UI element -*/ -/**************************************************************************/ -Adafruit_GFX_Button::Adafruit_GFX_Button(void) { _gfx = 0; } - -/**************************************************************************/ -/*! - @brief Initialize button with our desired color/size/settings - @param gfx Pointer to our display so we can draw to it! - @param x The X coordinate of the center of the button - @param y The Y coordinate of the center of the button - @param w Width of the buttton - @param h Height of the buttton - @param outline Color of the outline (16-bit 5-6-5 standard) - @param fill Color of the button fill (16-bit 5-6-5 standard) - @param textcolor Color of the button label (16-bit 5-6-5 standard) - @param label Ascii string of the text inside the button - @param textsize The font magnification of the label text -*/ -/**************************************************************************/ -// Classic initButton() function: pass center & size -void Adafruit_GFX_Button::initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, - uint16_t w, uint16_t h, uint16_t outline, - uint16_t fill, uint16_t textcolor, - char *label, uint8_t textsize) { - // Tweak arguments and pass to the newer initButtonUL() function... - initButtonUL(gfx, x - (w / 2), y - (h / 2), w, h, outline, fill, textcolor, - label, textsize); -} - -/**************************************************************************/ -/*! - @brief Initialize button with our desired color/size/settings - @param gfx Pointer to our display so we can draw to it! - @param x The X coordinate of the center of the button - @param y The Y coordinate of the center of the button - @param w Width of the buttton - @param h Height of the buttton - @param outline Color of the outline (16-bit 5-6-5 standard) - @param fill Color of the button fill (16-bit 5-6-5 standard) - @param textcolor Color of the button label (16-bit 5-6-5 standard) - @param label Ascii string of the text inside the button - @param textsize_x The font magnification in X-axis of the label text - @param textsize_y The font magnification in Y-axis of the label text -*/ -/**************************************************************************/ -// Classic initButton() function: pass center & size -void Adafruit_GFX_Button::initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, - uint16_t w, uint16_t h, uint16_t outline, - uint16_t fill, uint16_t textcolor, - char *label, uint8_t textsize_x, - uint8_t textsize_y) { - // Tweak arguments and pass to the newer initButtonUL() function... - initButtonUL(gfx, x - (w / 2), y - (h / 2), w, h, outline, fill, textcolor, - label, textsize_x, textsize_y); -} - -/**************************************************************************/ -/*! - @brief Initialize button with our desired color/size/settings, with - upper-left coordinates - @param gfx Pointer to our display so we can draw to it! - @param x1 The X coordinate of the Upper-Left corner of the button - @param y1 The Y coordinate of the Upper-Left corner of the button - @param w Width of the buttton - @param h Height of the buttton - @param outline Color of the outline (16-bit 5-6-5 standard) - @param fill Color of the button fill (16-bit 5-6-5 standard) - @param textcolor Color of the button label (16-bit 5-6-5 standard) - @param label Ascii string of the text inside the button - @param textsize The font magnification of the label text -*/ -/**************************************************************************/ -void Adafruit_GFX_Button::initButtonUL(Adafruit_GFX *gfx, int16_t x1, - int16_t y1, uint16_t w, uint16_t h, - uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, - uint8_t textsize) { - initButtonUL(gfx, x1, y1, w, h, outline, fill, textcolor, label, textsize, - textsize); -} - -/**************************************************************************/ -/*! - @brief Initialize button with our desired color/size/settings, with - upper-left coordinates - @param gfx Pointer to our display so we can draw to it! - @param x1 The X coordinate of the Upper-Left corner of the button - @param y1 The Y coordinate of the Upper-Left corner of the button - @param w Width of the buttton - @param h Height of the buttton - @param outline Color of the outline (16-bit 5-6-5 standard) - @param fill Color of the button fill (16-bit 5-6-5 standard) - @param textcolor Color of the button label (16-bit 5-6-5 standard) - @param label Ascii string of the text inside the button - @param textsize_x The font magnification in X-axis of the label text - @param textsize_y The font magnification in Y-axis of the label text -*/ -/**************************************************************************/ -void Adafruit_GFX_Button::initButtonUL(Adafruit_GFX *gfx, int16_t x1, - int16_t y1, uint16_t w, uint16_t h, - uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, - uint8_t textsize_x, uint8_t textsize_y) { - _x1 = x1; - _y1 = y1; - _w = w; - _h = h; - _outlinecolor = outline; - _fillcolor = fill; - _textcolor = textcolor; - _textsize_x = textsize_x; - _textsize_y = textsize_y; - _gfx = gfx; - strncpy(_label, label, 9); - _label[9] = 0; // strncpy does not place a null at the end. - // When 'label' is >9 characters, _label is not terminated. -} - -/**************************************************************************/ -/*! - @brief Draw the button on the screen - @param inverted Whether to draw with fill/text swapped to indicate - 'pressed' -*/ -/**************************************************************************/ -void Adafruit_GFX_Button::drawButton(bool inverted) { - uint16_t fill, outline, text; - - if (!inverted) { - fill = _fillcolor; - outline = _outlinecolor; - text = _textcolor; - } else { - fill = _textcolor; - outline = _outlinecolor; - text = _fillcolor; - } - - uint8_t r = min(_w, _h) / 4; // Corner radius - _gfx->fillRoundRect(_x1, _y1, _w, _h, r, fill); - _gfx->drawRoundRect(_x1, _y1, _w, _h, r, outline); - - _gfx->setCursor(_x1 + (_w / 2) - (strlen(_label) * 3 * _textsize_x), - _y1 + (_h / 2) - (4 * _textsize_y)); - _gfx->setTextColor(text); - _gfx->setTextSize(_textsize_x, _textsize_y); - _gfx->print(_label); -} - -/**************************************************************************/ -/*! - @brief Helper to let us know if a coordinate is within the bounds of the - button - @param x The X coordinate to check - @param y The Y coordinate to check - @returns True if within button graphics outline -*/ -/**************************************************************************/ -bool Adafruit_GFX_Button::contains(int16_t x, int16_t y) { - return ((x >= _x1) && (x < (int16_t)(_x1 + _w)) && (y >= _y1) && - (y < (int16_t)(_y1 + _h))); -} - -/**************************************************************************/ -/*! - @brief Query whether the button was pressed since we last checked state - @returns True if was not-pressed before, now is. -*/ -/**************************************************************************/ -bool Adafruit_GFX_Button::justPressed() { return (currstate && !laststate); } - -/**************************************************************************/ -/*! - @brief Query whether the button was released since we last checked state - @returns True if was pressed before, now is not. -*/ -/**************************************************************************/ -bool Adafruit_GFX_Button::justReleased() { return (!currstate && laststate); } - -// ------------------------------------------------------------------------- - -// GFXcanvas1, GFXcanvas8 and GFXcanvas16 (currently a WIP, don't get too -// comfy with the implementation) provide 1-, 8- and 16-bit offscreen -// canvases, the address of which can be passed to drawBitmap() or -// pushColors() (the latter appears only in a couple of GFX-subclassed TFT -// libraries at this time). This is here mostly to help with the recently- -// added proportionally-spaced fonts; adds a way to refresh a section of the -// screen without a massive flickering clear-and-redraw...but maybe you'll -// find other uses too. VERY RAM-intensive, since the buffer is in MCU -// memory and not the display driver...GXFcanvas1 might be minimally useful -// on an Uno-class board, but this and the others are much more likely to -// require at least a Mega or various recent ARM-type boards (recommended, -// as the text+bitmap draw can be pokey). GFXcanvas1 requires 1 bit per -// pixel (rounded up to nearest byte per scanline), GFXcanvas8 is 1 byte -// per pixel (no scanline pad), and GFXcanvas16 uses 2 bytes per pixel (no -// scanline pad). -// NOT EXTENSIVELY TESTED YET. MAY CONTAIN WORST BUGS KNOWN TO HUMANKIND. - -#ifdef __AVR__ -// Bitmask tables of 0x80>>X and ~(0x80>>X), because X>>Y is slow on AVR -const uint8_t PROGMEM GFXcanvas1::GFXsetBit[] = {0x80, 0x40, 0x20, 0x10, - 0x08, 0x04, 0x02, 0x01}; -const uint8_t PROGMEM GFXcanvas1::GFXclrBit[] = {0x7F, 0xBF, 0xDF, 0xEF, - 0xF7, 0xFB, 0xFD, 0xFE}; -#endif - -/**************************************************************************/ -/*! - @brief Instatiate a GFX 1-bit canvas context for graphics - @param w Display width, in pixels - @param h Display height, in pixels -*/ -/**************************************************************************/ -GFXcanvas1::GFXcanvas1(uint16_t w, uint16_t h) : Adafruit_GFX(w, h) { - uint32_t bytes = ((w + 7) / 8) * h; - if ((buffer = (uint8_t *)malloc(bytes))) { - memset(buffer, 0, bytes); - } -} - -/**************************************************************************/ -/*! - @brief Delete the canvas, free memory -*/ -/**************************************************************************/ -GFXcanvas1::~GFXcanvas1(void) { - if (buffer) - free(buffer); -} - -/**************************************************************************/ -/*! - @brief Draw a pixel to the canvas framebuffer - @param x x coordinate - @param y y coordinate - @param color Binary (on or off) color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::drawPixel(int16_t x, int16_t y, uint16_t color) { - if (buffer) { - if ((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) - return; - - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - - uint8_t *ptr = &buffer[(x / 8) + y * ((WIDTH + 7) / 8)]; -#ifdef __AVR__ - if (color) - *ptr |= pgm_read_byte(&GFXsetBit[x & 7]); - else - *ptr &= pgm_read_byte(&GFXclrBit[x & 7]); -#else - if (color) - *ptr |= 0x80 >> (x & 7); - else - *ptr &= ~(0x80 >> (x & 7)); -#endif - } -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given coordinate - @param x x coordinate - @param y y coordinate - @returns The desired pixel's binary color value, either 0x1 (on) or 0x0 - (off) -*/ -/**********************************************************************/ -bool GFXcanvas1::getPixel(int16_t x, int16_t y) const { - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - return getRawPixel(x, y); -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given, unrotated coordinate. - This method is intended for hardware drivers to get pixel value - in physical coordinates. - @param x x coordinate - @param y y coordinate - @returns The desired pixel's binary color value, either 0x1 (on) or 0x0 - (off) -*/ -/**********************************************************************/ -bool GFXcanvas1::getRawPixel(int16_t x, int16_t y) const { - if ((x < 0) || (y < 0) || (x >= WIDTH) || (y >= HEIGHT)) - return 0; - if (buffer) { - uint8_t *ptr = &buffer[(x / 8) + y * ((WIDTH + 7) / 8)]; - -#ifdef __AVR__ - return ((*ptr) & pgm_read_byte(&GFXsetBit[x & 7])) != 0; -#else - return ((*ptr) & (0x80 >> (x & 7))) != 0; -#endif - } - return 0; -} - -/**************************************************************************/ -/*! - @brief Fill the framebuffer completely with one color - @param color Binary (on or off) color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::fillScreen(uint16_t color) { - if (buffer) { - uint32_t bytes = ((WIDTH + 7) / 8) * HEIGHT; - memset(buffer, color ? 0xFF : 0x00, bytes); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param h Length of vertical line to be drawn, including first point - @param color Color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::drawFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - - if (h < 0) { // Convert negative heights to positive equivalent - h *= -1; - y -= h - 1; - if (y < 0) { - h += y; - y = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((x < 0) || (x >= width()) || (y >= height()) || ((y + h - 1) < 0)) { - return; - } - - if (y < 0) { // Clip top - h += y; - y = 0; - } - if (y + h > height()) { // Clip bottom - h = height() - y; - } - - if (getRotation() == 0) { - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - x -= h - 1; - drawFastRawHLine(x, y, h, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - y -= h - 1; - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - drawFastRawHLine(x, y, h, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param w Length of horizontal line to be drawn, including first point - @param color Color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::drawFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - if (w < 0) { // Convert negative widths to positive equivalent - w *= -1; - x -= w - 1; - if (x < 0) { - w += x; - x = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((y < 0) || (y >= height()) || (x >= width()) || ((x + w - 1) < 0)) { - return; - } - - if (x < 0) { // Clip left - w += x; - x = 0; - } - if (x + w >= width()) { // Clip right - w = width() - x; - } - - if (getRotation() == 0) { - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - drawFastRawVLine(x, y, w, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - x -= w - 1; - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - y -= w - 1; - drawFastRawVLine(x, y, w, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param h length of vertical line to be drawn, including first point - @param color Binary (on or off) color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::drawFastRawVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - int16_t row_bytes = ((WIDTH + 7) / 8); - uint8_t *ptr = &buffer[(x / 8) + y * row_bytes]; - - if (color > 0) { -#ifdef __AVR__ - uint8_t bit_mask = pgm_read_byte(&GFXsetBit[x & 7]); -#else - uint8_t bit_mask = (0x80 >> (x & 7)); -#endif - for (int16_t i = 0; i < h; i++) { - *ptr |= bit_mask; - ptr += row_bytes; - } - } else { -#ifdef __AVR__ - uint8_t bit_mask = pgm_read_byte(&GFXclrBit[x & 7]); -#else - uint8_t bit_mask = ~(0x80 >> (x & 7)); -#endif - for (int16_t i = 0; i < h; i++) { - *ptr &= bit_mask; - ptr += row_bytes; - } - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param w length of horizontal line to be drawn, including first point - @param color Binary (on or off) color to fill with -*/ -/**************************************************************************/ -void GFXcanvas1::drawFastRawHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - int16_t rowBytes = ((WIDTH + 7) / 8); - uint8_t *ptr = &buffer[(x / 8) + y * rowBytes]; - size_t remainingWidthBits = w; - - // check to see if first byte needs to be partially filled - if ((x & 7) > 0) { - // create bit mask for first byte - uint8_t startByteBitMask = 0x00; - for (int8_t i = (x & 7); ((i < 8) && (remainingWidthBits > 0)); i++) { -#ifdef __AVR__ - startByteBitMask |= pgm_read_byte(&GFXsetBit[i]); -#else - startByteBitMask |= (0x80 >> i); -#endif - remainingWidthBits--; - } - if (color > 0) { - *ptr |= startByteBitMask; - } else { - *ptr &= ~startByteBitMask; - } - - ptr++; - } - - // do the next remainingWidthBits bits - if (remainingWidthBits > 0) { - size_t remainingWholeBytes = remainingWidthBits / 8; - size_t lastByteBits = remainingWidthBits % 8; - uint8_t wholeByteColor = color > 0 ? 0xFF : 0x00; - - memset(ptr, wholeByteColor, remainingWholeBytes); - - if (lastByteBits > 0) { - uint8_t lastByteBitMask = 0x00; - for (size_t i = 0; i < lastByteBits; i++) { -#ifdef __AVR__ - lastByteBitMask |= pgm_read_byte(&GFXsetBit[i]); -#else - lastByteBitMask |= (0x80 >> i); -#endif - } - ptr += remainingWholeBytes; - - if (color > 0) { - *ptr |= lastByteBitMask; - } else { - *ptr &= ~lastByteBitMask; - } - } - } -} - -/**************************************************************************/ -/*! - @brief Instatiate a GFX 8-bit canvas context for graphics - @param w Display width, in pixels - @param h Display height, in pixels -*/ -/**************************************************************************/ -GFXcanvas8::GFXcanvas8(uint16_t w, uint16_t h) : Adafruit_GFX(w, h) { - uint32_t bytes = w * h; - if ((buffer = (uint8_t *)malloc(bytes))) { - memset(buffer, 0, bytes); - } -} - -/**************************************************************************/ -/*! - @brief Delete the canvas, free memory -*/ -/**************************************************************************/ -GFXcanvas8::~GFXcanvas8(void) { - if (buffer) - free(buffer); -} - -/**************************************************************************/ -/*! - @brief Draw a pixel to the canvas framebuffer - @param x x coordinate - @param y y coordinate - @param color 8-bit Color to fill with. Only lower byte of uint16_t is used. -*/ -/**************************************************************************/ -void GFXcanvas8::drawPixel(int16_t x, int16_t y, uint16_t color) { - if (buffer) { - if ((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) - return; - - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - - buffer[x + y * WIDTH] = color; - } -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given coordinate - @param x x coordinate - @param y y coordinate - @returns The desired pixel's 8-bit color value -*/ -/**********************************************************************/ -uint8_t GFXcanvas8::getPixel(int16_t x, int16_t y) const { - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - return getRawPixel(x, y); -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given, unrotated coordinate. - This method is intended for hardware drivers to get pixel value - in physical coordinates. - @param x x coordinate - @param y y coordinate - @returns The desired pixel's 8-bit color value -*/ -/**********************************************************************/ -uint8_t GFXcanvas8::getRawPixel(int16_t x, int16_t y) const { - if ((x < 0) || (y < 0) || (x >= WIDTH) || (y >= HEIGHT)) - return 0; - if (buffer) { - return buffer[x + y * WIDTH]; - } - return 0; -} - -/**************************************************************************/ -/*! - @brief Fill the framebuffer completely with one color - @param color 8-bit Color to fill with. Only lower byte of uint16_t is used. -*/ -/**************************************************************************/ -void GFXcanvas8::fillScreen(uint16_t color) { - if (buffer) { - memset(buffer, color, WIDTH * HEIGHT); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param h Length of vertical line to be drawn, including first point - @param color 8-bit Color to fill with. Only lower byte of uint16_t is - used. -*/ -/**************************************************************************/ -void GFXcanvas8::drawFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - if (h < 0) { // Convert negative heights to positive equivalent - h *= -1; - y -= h - 1; - if (y < 0) { - h += y; - y = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((x < 0) || (x >= width()) || (y >= height()) || ((y + h - 1) < 0)) { - return; - } - - if (y < 0) { // Clip top - h += y; - y = 0; - } - if (y + h > height()) { // Clip bottom - h = height() - y; - } - - if (getRotation() == 0) { - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - x -= h - 1; - drawFastRawHLine(x, y, h, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - y -= h - 1; - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - drawFastRawHLine(x, y, h, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param w Length of horizontal line to be drawn, including 1st point - @param color 8-bit Color to fill with. Only lower byte of uint16_t is - used. -*/ -/**************************************************************************/ -void GFXcanvas8::drawFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - - if (w < 0) { // Convert negative widths to positive equivalent - w *= -1; - x -= w - 1; - if (x < 0) { - w += x; - x = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((y < 0) || (y >= height()) || (x >= width()) || ((x + w - 1) < 0)) { - return; - } - - if (x < 0) { // Clip left - w += x; - x = 0; - } - if (x + w >= width()) { // Clip right - w = width() - x; - } - - if (getRotation() == 0) { - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - drawFastRawVLine(x, y, w, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - x -= w - 1; - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - y -= w - 1; - drawFastRawVLine(x, y, w, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param h length of vertical line to be drawn, including first point - @param color 8-bit Color to fill with. Only lower byte of uint16_t is - used. -*/ -/**************************************************************************/ -void GFXcanvas8::drawFastRawVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - uint8_t *buffer_ptr = buffer + y * WIDTH + x; - for (int16_t i = 0; i < h; i++) { - (*buffer_ptr) = color; - buffer_ptr += WIDTH; - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param w length of horizontal line to be drawn, including first point - @param color 8-bit Color to fill with. Only lower byte of uint16_t is - used. -*/ -/**************************************************************************/ -void GFXcanvas8::drawFastRawHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - memset(buffer + y * WIDTH + x, color, w); -} - -/**************************************************************************/ -/*! - @brief Instatiate a GFX 16-bit canvas context for graphics - @param w Display width, in pixels - @param h Display height, in pixels -*/ -/**************************************************************************/ -GFXcanvas16::GFXcanvas16(uint16_t w, uint16_t h) : Adafruit_GFX(w, h) { - uint32_t bytes = w * h * 2; - if ((buffer = (uint16_t *)malloc(bytes))) { - memset(buffer, 0, bytes); - } -} - -/**************************************************************************/ -/*! - @brief Delete the canvas, free memory -*/ -/**************************************************************************/ -GFXcanvas16::~GFXcanvas16(void) { - if (buffer) - free(buffer); -} - -/**************************************************************************/ -/*! - @brief Draw a pixel to the canvas framebuffer - @param x x coordinate - @param y y coordinate - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void GFXcanvas16::drawPixel(int16_t x, int16_t y, uint16_t color) { - if (buffer) { - if ((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) - return; - - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - - buffer[x + y * WIDTH] = color; - } -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given coordinate - @param x x coordinate - @param y y coordinate - @returns The desired pixel's 16-bit 5-6-5 color value -*/ -/**********************************************************************/ -uint16_t GFXcanvas16::getPixel(int16_t x, int16_t y) const { - int16_t t; - switch (rotation) { - case 1: - t = x; - x = WIDTH - 1 - y; - y = t; - break; - case 2: - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - break; - case 3: - t = x; - x = y; - y = HEIGHT - 1 - t; - break; - } - return getRawPixel(x, y); -} - -/**********************************************************************/ -/*! - @brief Get the pixel color value at a given, unrotated coordinate. - This method is intended for hardware drivers to get pixel value - in physical coordinates. - @param x x coordinate - @param y y coordinate - @returns The desired pixel's 16-bit 5-6-5 color value -*/ -/**********************************************************************/ -uint16_t GFXcanvas16::getRawPixel(int16_t x, int16_t y) const { - if ((x < 0) || (y < 0) || (x >= WIDTH) || (y >= HEIGHT)) - return 0; - if (buffer) { - return buffer[x + y * WIDTH]; - } - return 0; -} - -/**************************************************************************/ -/*! - @brief Fill the framebuffer completely with one color - @param color 16-bit 5-6-5 Color to fill with -*/ -/**************************************************************************/ -void GFXcanvas16::fillScreen(uint16_t color) { - if (buffer) { - uint8_t hi = color >> 8, lo = color & 0xFF; - if (hi == lo) { - memset(buffer, lo, WIDTH * HEIGHT * 2); - } else { - uint32_t i, pixels = WIDTH * HEIGHT; - for (i = 0; i < pixels; i++) - buffer[i] = color; - } - } -} - -/**************************************************************************/ -/*! - @brief Reverses the "endian-ness" of each 16-bit pixel within the - canvas; little-endian to big-endian, or big-endian to little. - Most microcontrollers (such as SAMD) are little-endian, while - most displays tend toward big-endianness. All the drawing - functions (including RGB bitmap drawing) take care of this - automatically, but some specialized code (usually involving - DMA) can benefit from having pixel data already in the - display-native order. Note that this does NOT convert to a - SPECIFIC endian-ness, it just flips the bytes within each word. -*/ -/**************************************************************************/ -void GFXcanvas16::byteSwap(void) { - if (buffer) { - uint32_t i, pixels = WIDTH * HEIGHT; - for (i = 0; i < pixels; i++) - buffer[i] = __builtin_bswap16(buffer[i]); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param h length of vertical line to be drawn, including first point - @param color color 16-bit 5-6-5 Color to draw line with -*/ -/**************************************************************************/ -void GFXcanvas16::drawFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - if (h < 0) { // Convert negative heights to positive equivalent - h *= -1; - y -= h - 1; - if (y < 0) { - h += y; - y = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((x < 0) || (x >= width()) || (y >= height()) || ((y + h - 1) < 0)) { - return; - } - - if (y < 0) { // Clip top - h += y; - y = 0; - } - if (y + h > height()) { // Clip bottom - h = height() - y; - } - - if (getRotation() == 0) { - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - x -= h - 1; - drawFastRawHLine(x, y, h, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - y -= h - 1; - drawFastRawVLine(x, y, h, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - drawFastRawHLine(x, y, h, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing - @param x Line horizontal start point - @param y Line vertical start point - @param w Length of horizontal line to be drawn, including 1st point - @param color Color 16-bit 5-6-5 Color to draw line with -*/ -/**************************************************************************/ -void GFXcanvas16::drawFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - if (w < 0) { // Convert negative widths to positive equivalent - w *= -1; - x -= w - 1; - if (x < 0) { - w += x; - x = 0; - } - } - - // Edge rejection (no-draw if totally off canvas) - if ((y < 0) || (y >= height()) || (x >= width()) || ((x + w - 1) < 0)) { - return; - } - - if (x < 0) { // Clip left - w += x; - x = 0; - } - if (x + w >= width()) { // Clip right - w = width() - x; - } - - if (getRotation() == 0) { - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 1) { - int16_t t = x; - x = WIDTH - 1 - y; - y = t; - drawFastRawVLine(x, y, w, color); - } else if (getRotation() == 2) { - x = WIDTH - 1 - x; - y = HEIGHT - 1 - y; - - x -= w - 1; - drawFastRawHLine(x, y, w, color); - } else if (getRotation() == 3) { - int16_t t = x; - x = y; - y = HEIGHT - 1 - t; - y -= w - 1; - drawFastRawVLine(x, y, w, color); - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized vertical line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param h length of vertical line to be drawn, including first point - @param color color 16-bit 5-6-5 Color to draw line with -*/ -/**************************************************************************/ -void GFXcanvas16::drawFastRawVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - uint16_t *buffer_ptr = buffer + y * WIDTH + x; - for (int16_t i = 0; i < h; i++) { - (*buffer_ptr) = color; - buffer_ptr += WIDTH; - } -} - -/**************************************************************************/ -/*! - @brief Speed optimized horizontal line drawing into the raw canvas buffer - @param x Line horizontal start point - @param y Line vertical start point - @param w length of horizontal line to be drawn, including first point - @param color color 16-bit 5-6-5 Color to draw line with -*/ -/**************************************************************************/ -void GFXcanvas16::drawFastRawHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - // x & y already in raw (rotation 0) coordinates, no need to transform. - uint32_t buffer_index = y * WIDTH + x; - for (uint32_t i = buffer_index; i < buffer_index + w; i++) { - buffer[i] = color; - } -} diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.h deleted file mode 100644 index 63c6ab6..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GFX.h +++ /dev/null @@ -1,391 +0,0 @@ -#ifndef _ADAFRUIT_GFX_H -#define _ADAFRUIT_GFX_H - -#if ARDUINO >= 100 -#include "Arduino.h" -#include "Print.h" -#else -#include "WProgram.h" -#endif -#include "gfxfont.h" - -#include -#include - -/// A generic graphics superclass that can handle all sorts of drawing. At a -/// minimum you can subclass and provide drawPixel(). At a maximum you can do a -/// ton of overriding to optimize. Used for any/all Adafruit displays! -class Adafruit_GFX : public Print { - -public: - Adafruit_GFX(int16_t w, int16_t h); // Constructor - - /**********************************************************************/ - /*! - @brief Draw to the screen/framebuffer/etc. - Must be overridden in subclass. - @param x X coordinate in pixels - @param y Y coordinate in pixels - @param color 16-bit pixel color. - */ - /**********************************************************************/ - virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0; - - // TRANSACTION API / CORE DRAW API - // These MAY be overridden by the subclass to provide device-specific - // optimized code. Otherwise 'generic' versions are used. - virtual void startWrite(void); - virtual void writePixel(int16_t x, int16_t y, uint16_t color); - virtual void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color); - virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - virtual void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - uint16_t color); - virtual void endWrite(void); - - // CONTROL API - // These MAY be overridden by the subclass to provide device-specific - // optimized code. Otherwise 'generic' versions are used. - virtual void setRotation(uint8_t r); - virtual void invertDisplay(bool i); - - // BASIC DRAW API - // These MAY be overridden by the subclass to provide device-specific - // optimized code. Otherwise 'generic' versions are used. - - // It's good to implement those, even if using transaction API - virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color); - virtual void fillScreen(uint16_t color); - // Optional and probably not necessary to change - virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, - uint16_t color); - virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color); - - // These exist only with Adafruit_GFX (no subclass overrides) - void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, - uint16_t color); - void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, - int16_t delta, uint16_t color); - void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, - int16_t y2, uint16_t color); - void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, - int16_t y2, uint16_t color); - void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, - int16_t radius, uint16_t color); - void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, - int16_t radius, uint16_t color); - void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, - int16_t h, uint16_t color); - void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, - int16_t h, uint16_t color, uint16_t bg); - void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, - uint16_t color); - void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, - uint16_t color, uint16_t bg); - void drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, - int16_t h, uint16_t color); - void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], - int16_t w, int16_t h); - void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, - int16_t h); - void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], - const uint8_t mask[], int16_t w, int16_t h); - void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint8_t *mask, - int16_t w, int16_t h); - void drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, - int16_t h); - void drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, - int16_t h); - void drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], - const uint8_t mask[], int16_t w, int16_t h); - void drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, uint8_t *mask, - int16_t w, int16_t h); - void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, - uint16_t bg, uint8_t size); - void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, - uint16_t bg, uint8_t size_x, uint8_t size_y); - void getTextBounds(const char *string, int16_t x, int16_t y, int16_t *x1, - int16_t *y1, uint16_t *w, uint16_t *h); - void getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y, - int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h); - void getTextBounds(const String &str, int16_t x, int16_t y, int16_t *x1, - int16_t *y1, uint16_t *w, uint16_t *h); - void setTextSize(uint8_t s); - void setTextSize(uint8_t sx, uint8_t sy); - void setFont(const GFXfont *f = NULL); - - /**********************************************************************/ - /*! - @brief Set text cursor location - @param x X coordinate in pixels - @param y Y coordinate in pixels - */ - /**********************************************************************/ - void setCursor(int16_t x, int16_t y) { - cursor_x = x; - cursor_y = y; - } - - /**********************************************************************/ - /*! - @brief Set text font color with transparant background - @param c 16-bit 5-6-5 Color to draw text with - @note For 'transparent' background, background and foreground - are set to same color rather than using a separate flag. - */ - /**********************************************************************/ - void setTextColor(uint16_t c) { textcolor = textbgcolor = c; } - - /**********************************************************************/ - /*! - @brief Set text font color with custom background color - @param c 16-bit 5-6-5 Color to draw text with - @param bg 16-bit 5-6-5 Color to draw background/fill with - */ - /**********************************************************************/ - void setTextColor(uint16_t c, uint16_t bg) { - textcolor = c; - textbgcolor = bg; - } - - /**********************************************************************/ - /*! - @brief Set whether text that is too long for the screen width should - automatically wrap around to the next line (else clip right). - @param w true for wrapping, false for clipping - */ - /**********************************************************************/ - void setTextWrap(bool w) { wrap = w; } - - /**********************************************************************/ - /*! - @brief Enable (or disable) Code Page 437-compatible charset. - There was an error in glcdfont.c for the longest time -- one - character (#176, the 'light shade' block) was missing -- this - threw off the index of every character that followed it. - But a TON of code has been written with the erroneous - character indices. By default, the library uses the original - 'wrong' behavior and old sketches will still work. Pass - 'true' to this function to use correct CP437 character values - in your code. - @param x true = enable (new behavior), false = disable (old behavior) - */ - /**********************************************************************/ - void cp437(bool x = true) { _cp437 = x; } - - using Print::write; -#if ARDUINO >= 100 - virtual size_t write(uint8_t); -#else - virtual void write(uint8_t); -#endif - - /************************************************************************/ - /*! - @brief Get width of the display, accounting for current rotation - @returns Width in pixels - */ - /************************************************************************/ - int16_t width(void) const { return _width; }; - - /************************************************************************/ - /*! - @brief Get height of the display, accounting for current rotation - @returns Height in pixels - */ - /************************************************************************/ - int16_t height(void) const { return _height; } - - /************************************************************************/ - /*! - @brief Get rotation setting for display - @returns 0 thru 3 corresponding to 4 cardinal rotations - */ - /************************************************************************/ - uint8_t getRotation(void) const { return rotation; } - - // get current cursor position (get rotation safe maximum values, - // using: width() for x, height() for y) - /************************************************************************/ - /*! - @brief Get text cursor X location - @returns X coordinate in pixels - */ - /************************************************************************/ - int16_t getCursorX(void) const { return cursor_x; } - - /************************************************************************/ - /*! - @brief Get text cursor Y location - @returns Y coordinate in pixels - */ - /************************************************************************/ - int16_t getCursorY(void) const { return cursor_y; }; - -protected: - void charBounds(unsigned char c, int16_t *x, int16_t *y, int16_t *minx, - int16_t *miny, int16_t *maxx, int16_t *maxy); - int16_t WIDTH; ///< This is the 'raw' display width - never changes - int16_t HEIGHT; ///< This is the 'raw' display height - never changes - int16_t _width; ///< Display width as modified by current rotation - int16_t _height; ///< Display height as modified by current rotation - int16_t cursor_x; ///< x location to start print()ing text - int16_t cursor_y; ///< y location to start print()ing text - uint16_t textcolor; ///< 16-bit background color for print() - uint16_t textbgcolor; ///< 16-bit text color for print() - uint8_t textsize_x; ///< Desired magnification in X-axis of text to print() - uint8_t textsize_y; ///< Desired magnification in Y-axis of text to print() - uint8_t rotation; ///< Display rotation (0 thru 3) - bool wrap; ///< If set, 'wrap' text at right edge of display - bool _cp437; ///< If set, use correct CP437 charset (default is off) - GFXfont *gfxFont; ///< Pointer to special font -}; - -/// A simple drawn button UI element -class Adafruit_GFX_Button { - -public: - Adafruit_GFX_Button(void); - // "Classic" initButton() uses center & size - void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, - uint16_t h, uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, uint8_t textsize); - void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, - uint16_t h, uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, uint8_t textsize_x, - uint8_t textsize_y); - // New/alt initButton() uses upper-left corner & size - void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, - uint16_t h, uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, uint8_t textsize); - void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, - uint16_t h, uint16_t outline, uint16_t fill, - uint16_t textcolor, char *label, uint8_t textsize_x, - uint8_t textsize_y); - void drawButton(bool inverted = false); - bool contains(int16_t x, int16_t y); - - /**********************************************************************/ - /*! - @brief Sets button state, should be done by some touch function - @param p True for pressed, false for not. - */ - /**********************************************************************/ - void press(bool p) { - laststate = currstate; - currstate = p; - } - - bool justPressed(); - bool justReleased(); - - /**********************************************************************/ - /*! - @brief Query whether the button is currently pressed - @returns True if pressed - */ - /**********************************************************************/ - bool isPressed(void) { return currstate; }; - -private: - Adafruit_GFX *_gfx; - int16_t _x1, _y1; // Coordinates of top-left corner - uint16_t _w, _h; - uint8_t _textsize_x; - uint8_t _textsize_y; - uint16_t _outlinecolor, _fillcolor, _textcolor; - char _label[10]; - - bool currstate, laststate; -}; - -/// A GFX 1-bit canvas context for graphics -class GFXcanvas1 : public Adafruit_GFX { -public: - GFXcanvas1(uint16_t w, uint16_t h); - ~GFXcanvas1(void); - void drawPixel(int16_t x, int16_t y, uint16_t color); - void fillScreen(uint16_t color); - void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - bool getPixel(int16_t x, int16_t y) const; - /**********************************************************************/ - /*! - @brief Get a pointer to the internal buffer memory - @returns A pointer to the allocated buffer - */ - /**********************************************************************/ - uint8_t *getBuffer(void) const { return buffer; } - -protected: - bool getRawPixel(int16_t x, int16_t y) const; - void drawFastRawVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastRawHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - uint8_t *buffer; ///< Raster data: no longer private, allow subclass access - -private: -#ifdef __AVR__ - // Bitmask tables of 0x80>>X and ~(0x80>>X), because X>>Y is slow on AVR - static const uint8_t PROGMEM GFXsetBit[], GFXclrBit[]; -#endif -}; - -/// A GFX 8-bit canvas context for graphics -class GFXcanvas8 : public Adafruit_GFX { -public: - GFXcanvas8(uint16_t w, uint16_t h); - ~GFXcanvas8(void); - void drawPixel(int16_t x, int16_t y, uint16_t color); - void fillScreen(uint16_t color); - void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - uint8_t getPixel(int16_t x, int16_t y) const; - /**********************************************************************/ - /*! - @brief Get a pointer to the internal buffer memory - @returns A pointer to the allocated buffer - */ - /**********************************************************************/ - uint8_t *getBuffer(void) const { return buffer; } - -protected: - uint8_t getRawPixel(int16_t x, int16_t y) const; - void drawFastRawVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastRawHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - uint8_t *buffer; ///< Raster data: no longer private, allow subclass access -}; - -/// A GFX 16-bit canvas context for graphics -class GFXcanvas16 : public Adafruit_GFX { -public: - GFXcanvas16(uint16_t w, uint16_t h); - ~GFXcanvas16(void); - void drawPixel(int16_t x, int16_t y, uint16_t color); - void fillScreen(uint16_t color); - void byteSwap(void); - void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - uint16_t getPixel(int16_t x, int16_t y) const; - /**********************************************************************/ - /*! - @brief Get a pointer to the internal buffer memory - @returns A pointer to the allocated buffer - */ - /**********************************************************************/ - uint16_t *getBuffer(void) const { return buffer; } - -protected: - uint16_t getRawPixel(int16_t x, int16_t y) const; - void drawFastRawVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastRawHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - uint16_t *buffer; ///< Raster data: no longer private, allow subclass access -}; - -#endif // _ADAFRUIT_GFX_H diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.cpp b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.cpp deleted file mode 100644 index f487861..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.cpp +++ /dev/null @@ -1,421 +0,0 @@ -/*! - * @file Adafruit_GrayOLED.cpp - * - * This is documentation for Adafruit's generic library for grayscale - * OLED displays: http://www.adafruit.com/category/63_98 - * - * These displays use I2C or SPI to communicate. I2C requires 2 pins - * (SCL+SDA) and optionally a RESET pin. SPI requires 4 pins (MOSI, SCK, - * select, data/command) and optionally a reset pin. Hardware SPI or - * 'bitbang' software SPI are both supported. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - */ - -#if !defined(__AVR_ATtiny85__) // Not for ATtiny, at all - -#include "Adafruit_GrayOLED.h" -#include - -// SOME DEFINES AND STATIC VARIABLES USED INTERNALLY ----------------------- - -#define grayoled_swap(a, b) \ - (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b))) ///< No-temp-var swap operation - -// CONSTRUCTORS, DESTRUCTOR ------------------------------------------------ - -/*! - @brief Constructor for I2C-interfaced OLED displays. - @param bpp Bits per pixel, 1 for monochrome, 4 for 16-gray - @param w - Display width in pixels - @param h - Display height in pixels - @param twi - Pointer to an existing TwoWire instance (e.g. &Wire, the - microcontroller's primary I2C bus). - @param rst_pin - Reset pin (using Arduino pin numbering), or -1 if not used - (some displays might be wired to share the microcontroller's - reset pin). - @param clkDuring - Speed (in Hz) for Wire transmissions in library calls. - Defaults to 400000 (400 KHz), a known 'safe' value for most - microcontrollers, and meets the OLED datasheet spec. - Some systems can operate I2C faster (800 KHz for ESP32, 1 MHz - for many other 32-bit MCUs), and some (perhaps not all) - Many OLED's can work with this -- so it's optionally be specified - here and is not a default behavior. (Ignored if using pre-1.5.7 - Arduino software, which operates I2C at a fixed 100 KHz.) - @param clkAfter - Speed (in Hz) for Wire transmissions following library - calls. Defaults to 100000 (100 KHz), the default Arduino Wire - speed. This is done rather than leaving it at the 'during' speed - because other devices on the I2C bus might not be compatible - with the faster rate. (Ignored if using pre-1.5.7 Arduino - software, which operates I2C at a fixed 100 KHz.) - @note Call the object's begin() function before use -- buffer - allocation is performed there! -*/ -Adafruit_GrayOLED::Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, - TwoWire *twi, int8_t rst_pin, - uint32_t clkDuring, uint32_t clkAfter) - : Adafruit_GFX(w, h), i2c_preclk(clkDuring), i2c_postclk(clkAfter), - buffer(NULL), dcPin(-1), csPin(-1), rstPin(rst_pin), _bpp(bpp) { - i2c_dev = NULL; - _theWire = twi; -} - -/*! - @brief Constructor for SPI GrayOLED displays, using software (bitbang) - SPI. - @param bpp Bits per pixel, 1 for monochrome, 4 for 16-gray - @param w - Display width in pixels - @param h - Display height in pixels - @param mosi_pin - MOSI (master out, slave in) pin (using Arduino pin numbering). - This transfers serial data from microcontroller to display. - @param sclk_pin - SCLK (serial clock) pin (using Arduino pin numbering). - This clocks each bit from MOSI. - @param dc_pin - Data/command pin (using Arduino pin numbering), selects whether - display is receiving commands (low) or data (high). - @param rst_pin - Reset pin (using Arduino pin numbering), or -1 if not used - (some displays might be wired to share the microcontroller's - reset pin). - @param cs_pin - Chip-select pin (using Arduino pin numbering) for sharing the - bus with other devices. Active low. - @note Call the object's begin() function before use -- buffer - allocation is performed there! -*/ -Adafruit_GrayOLED::Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, - int8_t mosi_pin, int8_t sclk_pin, - int8_t dc_pin, int8_t rst_pin, - int8_t cs_pin) - : Adafruit_GFX(w, h), dcPin(dc_pin), csPin(cs_pin), rstPin(rst_pin), - _bpp(bpp) { - - spi_dev = new Adafruit_SPIDevice(cs_pin, sclk_pin, -1, mosi_pin, 1000000); -} - -/*! - @brief Constructor for SPI GrayOLED displays, using native hardware SPI. - @param bpp Bits per pixel, 1 for monochrome, 4 for 16-gray - @param w - Display width in pixels - @param h - Display height in pixels - @param spi - Pointer to an existing SPIClass instance (e.g. &SPI, the - microcontroller's primary SPI bus). - @param dc_pin - Data/command pin (using Arduino pin numbering), selects whether - display is receiving commands (low) or data (high). - @param rst_pin - Reset pin (using Arduino pin numbering), or -1 if not used - (some displays might be wired to share the microcontroller's - reset pin). - @param cs_pin - Chip-select pin (using Arduino pin numbering) for sharing the - bus with other devices. Active low. - @param bitrate - SPI clock rate for transfers to this display. Default if - unspecified is 8000000UL (8 MHz). - @note Call the object's begin() function before use -- buffer - allocation is performed there! -*/ -Adafruit_GrayOLED::Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, - SPIClass *spi, int8_t dc_pin, - int8_t rst_pin, int8_t cs_pin, - uint32_t bitrate) - : Adafruit_GFX(w, h), dcPin(dc_pin), csPin(cs_pin), rstPin(rst_pin), - _bpp(bpp) { - - spi_dev = new Adafruit_SPIDevice(cs_pin, bitrate, SPI_BITORDER_MSBFIRST, - SPI_MODE0, spi); -} - -/*! - @brief Destructor for Adafruit_GrayOLED object. -*/ -Adafruit_GrayOLED::~Adafruit_GrayOLED(void) { - if (buffer) { - free(buffer); - buffer = NULL; - } - if (spi_dev) - delete spi_dev; - if (i2c_dev) - delete i2c_dev; -} - -// LOW-LEVEL UTILS --------------------------------------------------------- - -/*! - @brief Issue single command byte to OLED, using I2C or hard/soft SPI as - needed. - @param c The single byte command -*/ -void Adafruit_GrayOLED::oled_command(uint8_t c) { - if (i2c_dev) { // I2C - uint8_t buf[2] = {0x00, c}; // Co = 0, D/C = 0 - i2c_dev->write(buf, 2); - } else { // SPI (hw or soft) -- transaction started in calling function - digitalWrite(dcPin, LOW); - spi_dev->write(&c, 1); - } -} - -// Issue list of commands to GrayOLED -/*! - @brief Issue multiple bytes of commands OLED, using I2C or hard/soft SPI as - needed. - @param c Pointer to the command array - @param n The number of bytes in the command array - @returns True for success on ability to write the data in I2C. -*/ - -bool Adafruit_GrayOLED::oled_commandList(const uint8_t *c, uint8_t n) { - if (i2c_dev) { // I2C - uint8_t dc_byte = 0x00; // Co = 0, D/C = 0 - if (!i2c_dev->write((uint8_t *)c, n, true, &dc_byte, 1)) { - return false; - } - } else { // SPI -- transaction started in calling function - digitalWrite(dcPin, LOW); - if (!spi_dev->write((uint8_t *)c, n)) { - return false; - } - } - return true; -} - -// ALLOCATE & INIT DISPLAY ------------------------------------------------- - -/*! - @brief Allocate RAM for image buffer, initialize peripherals and pins. - Note that subclasses must call this before other begin() init - @param addr - I2C address of corresponding oled display. - SPI displays (hardware or software) do not use addresses, but - this argument is still required. Default if unspecified is 0x3C. - @param reset - If true, and if the reset pin passed to the constructor is - valid, a hard reset will be performed before initializing the - display. If using multiple oled displays on the same bus, and - if they all share the same reset pin, you should only pass true - on the first display being initialized, false on all others, - else the already-initialized displays would be reset. Default if - unspecified is true. - @return true on successful allocation/init, false otherwise. - Well-behaved code should check the return value before - proceeding. - @note MUST call this function before any drawing or updates! -*/ -bool Adafruit_GrayOLED::_init(uint8_t addr, bool reset) { - - // attempt to malloc the bitmap framebuffer - if ((!buffer) && - !(buffer = (uint8_t *)malloc(_bpp * WIDTH * ((HEIGHT + 7) / 8)))) { - return false; - } - - // Reset OLED if requested and reset pin specified in constructor - if (reset && (rstPin >= 0)) { - pinMode(rstPin, OUTPUT); - digitalWrite(rstPin, HIGH); - delay(10); // VDD goes high at start, pause - digitalWrite(rstPin, LOW); // Bring reset low - delay(10); // Wait 10 ms - digitalWrite(rstPin, HIGH); // Bring out of reset - delay(10); - } - - // Setup pin directions - if (_theWire) { // using I2C - i2c_dev = new Adafruit_I2CDevice(addr, _theWire); - // look for i2c address: - if (!i2c_dev || !i2c_dev->begin()) { - return false; - } - } else { // Using one of the SPI modes, either soft or hardware - if (!spi_dev || !spi_dev->begin()) { - return false; - } - pinMode(dcPin, OUTPUT); // Set data/command pin as output - } - - clearDisplay(); - - // set max dirty window - window_x1 = 0; - window_y1 = 0; - window_x2 = WIDTH - 1; - window_y2 = HEIGHT - 1; - - return true; // Success -} - -// DRAWING FUNCTIONS ------------------------------------------------------- - -/*! - @brief Set/clear/invert a single pixel. This is also invoked by the - Adafruit_GFX library in generating many higher-level graphics - primitives. - @param x - Column of display -- 0 at left to (screen width - 1) at right. - @param y - Row of display -- 0 at top to (screen height -1) at bottom. - @param color - Pixel color, one of: MONOOLED_BLACK, MONOOLED_WHITE or - MONOOLED_INVERT. - @note Changes buffer contents only, no immediate effect on display. - Follow up with a call to display(), or with other graphics - commands as needed by one's own application. -*/ -void Adafruit_GrayOLED::drawPixel(int16_t x, int16_t y, uint16_t color) { - if ((x >= 0) && (x < width()) && (y >= 0) && (y < height())) { - // Pixel is in-bounds. Rotate coordinates if needed. - switch (getRotation()) { - case 1: - grayoled_swap(x, y); - x = WIDTH - x - 1; - break; - case 2: - x = WIDTH - x - 1; - y = HEIGHT - y - 1; - break; - case 3: - grayoled_swap(x, y); - y = HEIGHT - y - 1; - break; - } - - // adjust dirty window - window_x1 = min(window_x1, x); - window_y1 = min(window_y1, y); - window_x2 = max(window_x2, x); - window_y2 = max(window_y2, y); - - if (_bpp == 1) { - switch (color) { - case MONOOLED_WHITE: - buffer[x + (y / 8) * WIDTH] |= (1 << (y & 7)); - break; - case MONOOLED_BLACK: - buffer[x + (y / 8) * WIDTH] &= ~(1 << (y & 7)); - break; - case MONOOLED_INVERSE: - buffer[x + (y / 8) * WIDTH] ^= (1 << (y & 7)); - break; - } - } - if (_bpp == 4) { - uint8_t *pixelptr = &buffer[x / 2 + (y * WIDTH / 2)]; - // Serial.printf("(%d, %d) -> offset %d\n", x, y, x/2 + (y * WIDTH / 2)); - if (x % 2 == 0) { // even, left nibble - uint8_t t = pixelptr[0] & 0x0F; - t |= (color & 0xF) << 4; - pixelptr[0] = t; - } else { // odd, right lower nibble - uint8_t t = pixelptr[0] & 0xF0; - t |= color & 0xF; - pixelptr[0] = t; - } - } - } -} - -/*! - @brief Clear contents of display buffer (set all pixels to off). - @note Changes buffer contents only, no immediate effect on display. - Follow up with a call to display(), or with other graphics - commands as needed by one's own application. -*/ -void Adafruit_GrayOLED::clearDisplay(void) { - memset(buffer, 0, _bpp * WIDTH * ((HEIGHT + 7) / 8)); - // set max dirty window - window_x1 = 0; - window_y1 = 0; - window_x2 = WIDTH - 1; - window_y2 = HEIGHT - 1; -} - -/*! - @brief Return color of a single pixel in display buffer. - @param x - Column of display -- 0 at left to (screen width - 1) at right. - @param y - Row of display -- 0 at top to (screen height -1) at bottom. - @return true if pixel is set (usually MONOOLED_WHITE, unless display invert - mode is enabled), false if clear (MONOOLED_BLACK). - @note Reads from buffer contents; may not reflect current contents of - screen if display() has not been called. -*/ -bool Adafruit_GrayOLED::getPixel(int16_t x, int16_t y) { - if ((x >= 0) && (x < width()) && (y >= 0) && (y < height())) { - // Pixel is in-bounds. Rotate coordinates if needed. - switch (getRotation()) { - case 1: - grayoled_swap(x, y); - x = WIDTH - x - 1; - break; - case 2: - x = WIDTH - x - 1; - y = HEIGHT - y - 1; - break; - case 3: - grayoled_swap(x, y); - y = HEIGHT - y - 1; - break; - } - return (buffer[x + (y / 8) * WIDTH] & (1 << (y & 7))); - } - return false; // Pixel out of bounds -} - -/*! - @brief Get base address of display buffer for direct reading or writing. - @return Pointer to an unsigned 8-bit array, column-major, columns padded - to full byte boundary if needed. -*/ -uint8_t *Adafruit_GrayOLED::getBuffer(void) { return buffer; } - -// OTHER HARDWARE SETTINGS ------------------------------------------------- - -/*! - @brief Enable or disable display invert mode (white-on-black vs - black-on-white). Handy for testing! - @param i - If true, switch to invert mode (black-on-white), else normal - mode (white-on-black). - @note This has an immediate effect on the display, no need to call the - display() function -- buffer contents are not changed, rather a - different pixel mode of the display hardware is used. When - enabled, drawing MONOOLED_BLACK (value 0) pixels will actually draw - white, MONOOLED_WHITE (value 1) will draw black. -*/ -void Adafruit_GrayOLED::invertDisplay(bool i) { - oled_command(i ? GRAYOLED_INVERTDISPLAY : GRAYOLED_NORMALDISPLAY); -} - -/*! - @brief Adjust the display contrast. - @param level The contrast level from 0 to 0x7F - @note This has an immediate effect on the display, no need to call the - display() function -- buffer contents are not changed. -*/ -void Adafruit_GrayOLED::setContrast(uint8_t level) { - uint8_t cmd[] = {GRAYOLED_SETCONTRAST, level}; - oled_commandList(cmd, 2); -} - -#endif /* ATTIN85 not supported */ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.h deleted file mode 100644 index 8ec7b23..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_GrayOLED.h +++ /dev/null @@ -1,100 +0,0 @@ -/*! - * @file Adafruit_GrayOLED.h - * - * This is part of for Adafruit's GFX library, supplying generic support - * for grayscale OLED displays: http://www.adafruit.com/category/63_98 - * - * These displays use I2C or SPI to communicate. I2C requires 2 pins - * (SCL+SDA) and optionally a RESET pin. SPI requires 4 pins (MOSI, SCK, - * select, data/command) and optionally a reset pin. Hardware SPI or - * 'bitbang' software SPI are both supported. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Limor Fried/Ladyada for Adafruit Industries, with - * contributions from the open source community. - * - * BSD license, all text above, and the splash screen header file, - * must be included in any redistribution. - * - */ - -#ifndef _Adafruit_GRAYOLED_H_ -#define _Adafruit_GRAYOLED_H_ - -#if !defined(__AVR_ATtiny85__) // Not for ATtiny, at all - -#include -#include -#include -#include -#include - -#define GRAYOLED_SETCONTRAST 0x81 ///< Generic contrast for almost all OLEDs -#define GRAYOLED_NORMALDISPLAY 0xA6 ///< Generic non-invert for almost all OLEDs -#define GRAYOLED_INVERTDISPLAY 0xA7 ///< Generic invert for almost all OLEDs - -#define MONOOLED_BLACK 0 ///< Default black 'color' for monochrome OLEDS -#define MONOOLED_WHITE 1 ///< Default white 'color' for monochrome OLEDS -#define MONOOLED_INVERSE 2 ///< Default inversion command for monochrome OLEDS - -/*! - @brief Class that stores state and functions for interacting with - generic grayscale OLED displays. -*/ -class Adafruit_GrayOLED : public Adafruit_GFX { -public: - Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, TwoWire *twi = &Wire, - int8_t rst_pin = -1, uint32_t preclk = 400000, - uint32_t postclk = 100000); - Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, int8_t mosi_pin, - int8_t sclk_pin, int8_t dc_pin, int8_t rst_pin, - int8_t cs_pin); - Adafruit_GrayOLED(uint8_t bpp, uint16_t w, uint16_t h, SPIClass *spi, - int8_t dc_pin, int8_t rst_pin, int8_t cs_pin, - uint32_t bitrate = 8000000UL); - - ~Adafruit_GrayOLED(void); - - /** - @brief The function that sub-classes define that writes out the buffer to - the display over I2C or SPI - **/ - virtual void display(void) = 0; - void clearDisplay(void); - void invertDisplay(bool i); - void setContrast(uint8_t contrastlevel); - void drawPixel(int16_t x, int16_t y, uint16_t color); - bool getPixel(int16_t x, int16_t y); - uint8_t *getBuffer(void); - - void oled_command(uint8_t c); - bool oled_commandList(const uint8_t *c, uint8_t n); - -protected: - bool _init(uint8_t i2caddr = 0x3C, bool reset = true); - - Adafruit_SPIDevice *spi_dev = NULL; ///< The SPI interface BusIO device - Adafruit_I2CDevice *i2c_dev = NULL; ///< The I2C interface BusIO device - int32_t i2c_preclk = 400000, ///< Configurable 'high speed' I2C rate - i2c_postclk = 100000; ///< Configurable 'low speed' I2C rate - uint8_t *buffer = NULL; ///< Internal 1:1 framebuffer of display mem - - int16_t window_x1, ///< Dirty tracking window minimum x - window_y1, ///< Dirty tracking window minimum y - window_x2, ///< Dirty tracking window maximum x - window_y2; ///< Dirty tracking window maximum y - - int dcPin, ///< The Arduino pin connected to D/C (for SPI) - csPin, ///< The Arduino pin connected to CS (for SPI) - rstPin; ///< The Arduino pin connected to reset (-1 if unused) - - uint8_t _bpp = 1; ///< Bits per pixel color for this display -private: - TwoWire *_theWire = NULL; ///< The underlying hardware I2C -}; - -#endif // end __AVR_ATtiny85__ -#endif // _Adafruit_GrayOLED_H_ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.cpp b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.cpp deleted file mode 100644 index eeffce7..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.cpp +++ /dev/null @@ -1,2561 +0,0 @@ -/*! - * @file Adafruit_SPITFT.cpp - * - * @mainpage Adafruit SPI TFT Displays (and some others) - * - * @section intro_sec Introduction - * - * Part of Adafruit's GFX graphics library. Originally this class was - * written to handle a range of color TFT displays connected via SPI, - * but over time this library and some display-specific subclasses have - * mutated to include some color OLEDs as well as parallel-interfaced - * displays. The name's been kept for the sake of older code. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - - * @section dependencies Dependencies - * - * This library depends on - * Adafruit_GFX being present on your system. Please make sure you have - * installed the latest version before using this library. - * - * @section author Author - * - * Written by Limor "ladyada" Fried for Adafruit Industries, - * with contributions from the open source community. - * - * @section license License - * - * BSD license, all text here must be included in any redistribution. - */ - -#if !defined(__AVR_ATtiny85__) // Not for ATtiny, at all - -#include "Adafruit_SPITFT.h" - -#if defined(__AVR__) -#if defined(__AVR_XMEGA__) // only tested with __AVR_ATmega4809__ -#define AVR_WRITESPI(x) \ - for (SPI0_DATA = (x); (!(SPI0_INTFLAGS & _BV(SPI_IF_bp)));) -#else -#define AVR_WRITESPI(x) for (SPDR = (x); (!(SPSR & _BV(SPIF)));) -#endif -#endif - -#if defined(PORT_IOBUS) -// On SAMD21, redefine digitalPinToPort() to use the slightly-faster -// PORT_IOBUS rather than PORT (not needed on SAMD51). -#undef digitalPinToPort -#define digitalPinToPort(P) (&(PORT_IOBUS->Group[g_APinDescription[P].ulPort])) -#endif // end PORT_IOBUS - -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) -// #pragma message ("GFX DMA IS ENABLED. HIGHLY EXPERIMENTAL.") -#include "wiring_private.h" // pinPeripheral() function -#include -#include // memalign() function -#define tcNum 2 // Timer/Counter for parallel write strobe PWM -#define wrPeripheral PIO_CCL // Use CCL to invert write strobe - -// DMA transfer-in-progress indicator and callback -static volatile bool dma_busy = false; -static void dma_callback(Adafruit_ZeroDMA *dma) { dma_busy = false; } - -#if defined(__SAMD51__) -// Timer/counter info by index # -static const struct { - Tc *tc; // -> Timer/Counter base address - int gclk; // GCLK ID - int evu; // EVSYS user ID -} tcList[] = {{TC0, TC0_GCLK_ID, EVSYS_ID_USER_TC0_EVU}, - {TC1, TC1_GCLK_ID, EVSYS_ID_USER_TC1_EVU}, - {TC2, TC2_GCLK_ID, EVSYS_ID_USER_TC2_EVU}, - {TC3, TC3_GCLK_ID, EVSYS_ID_USER_TC3_EVU}, -#if defined(TC4) - {TC4, TC4_GCLK_ID, EVSYS_ID_USER_TC4_EVU}, -#endif -#if defined(TC5) - {TC5, TC5_GCLK_ID, EVSYS_ID_USER_TC5_EVU}, -#endif -#if defined(TC6) - {TC6, TC6_GCLK_ID, EVSYS_ID_USER_TC6_EVU}, -#endif -#if defined(TC7) - {TC7, TC7_GCLK_ID, EVSYS_ID_USER_TC7_EVU} -#endif -}; -#define NUM_TIMERS (sizeof tcList / sizeof tcList[0]) ///< # timer/counters -#endif // end __SAMD51__ - -#endif // end USE_SPI_DMA - -// Possible values for Adafruit_SPITFT.connection: -#define TFT_HARD_SPI 0 ///< Display interface = hardware SPI -#define TFT_SOFT_SPI 1 ///< Display interface = software SPI -#define TFT_PARALLEL 2 ///< Display interface = 8- or 16-bit parallel - -// CONSTRUCTORS ------------------------------------------------------------ - -/*! - @brief Adafruit_SPITFT constructor for software (bitbang) SPI. - @param w Display width in pixels at default rotation setting (0). - @param h Display height in pixels at default rotation setting (0). - @param cs Arduino pin # for chip-select (-1 if unused, tie CS low). - @param dc Arduino pin # for data/command select (required). - @param mosi Arduino pin # for bitbang SPI MOSI signal (required). - @param sck Arduino pin # for bitbang SPI SCK signal (required). - @param rst Arduino pin # for display reset (optional, display reset - can be tied to MCU reset, default of -1 means unused). - @param miso Arduino pin # for bitbang SPI MISO signal (optional, - -1 default, many displays don't support SPI read). - @note Output pins are not initialized; application typically will - need to call subclass' begin() function, which in turn calls - this library's initSPI() function to initialize pins. -*/ -Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t mosi, int8_t sck, int8_t rst, - int8_t miso) - : Adafruit_GFX(w, h), connection(TFT_SOFT_SPI), _rst(rst), _cs(cs), - _dc(dc) { - swspi._sck = sck; - swspi._mosi = mosi; - swspi._miso = miso; -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(CORE_TEENSY) -#if !defined(KINETISK) - dcPinMask = digitalPinToBitMask(dc); - swspi.sckPinMask = digitalPinToBitMask(sck); - swspi.mosiPinMask = digitalPinToBitMask(mosi); -#endif - dcPortSet = portSetRegister(dc); - dcPortClr = portClearRegister(dc); - swspi.sckPortSet = portSetRegister(sck); - swspi.sckPortClr = portClearRegister(sck); - swspi.mosiPortSet = portSetRegister(mosi); - swspi.mosiPortClr = portClearRegister(mosi); - if (cs >= 0) { -#if !defined(KINETISK) - csPinMask = digitalPinToBitMask(cs); -#endif - csPortSet = portSetRegister(cs); - csPortClr = portClearRegister(cs); - } else { -#if !defined(KINETISK) - csPinMask = 0; -#endif - csPortSet = dcPortSet; - csPortClr = dcPortClr; - } - if (miso >= 0) { - swspi.misoPort = portInputRegister(miso); -#if !defined(KINETISK) - swspi.misoPinMask = digitalPinToBitMask(miso); -#endif - } else { - swspi.misoPort = portInputRegister(dc); - } -#else // !CORE_TEENSY - dcPinMask = digitalPinToBitMask(dc); - swspi.sckPinMask = digitalPinToBitMask(sck); - swspi.mosiPinMask = digitalPinToBitMask(mosi); - dcPortSet = &(PORT->Group[g_APinDescription[dc].ulPort].OUTSET.reg); - dcPortClr = &(PORT->Group[g_APinDescription[dc].ulPort].OUTCLR.reg); - swspi.sckPortSet = &(PORT->Group[g_APinDescription[sck].ulPort].OUTSET.reg); - swspi.sckPortClr = &(PORT->Group[g_APinDescription[sck].ulPort].OUTCLR.reg); - swspi.mosiPortSet = &(PORT->Group[g_APinDescription[mosi].ulPort].OUTSET.reg); - swspi.mosiPortClr = &(PORT->Group[g_APinDescription[mosi].ulPort].OUTCLR.reg); - if (cs >= 0) { - csPinMask = digitalPinToBitMask(cs); - csPortSet = &(PORT->Group[g_APinDescription[cs].ulPort].OUTSET.reg); - csPortClr = &(PORT->Group[g_APinDescription[cs].ulPort].OUTCLR.reg); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPortSet = dcPortSet; - csPortClr = dcPortClr; - csPinMask = 0; - } - if (miso >= 0) { - swspi.misoPinMask = digitalPinToBitMask(miso); - swspi.misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(miso)); - } else { - swspi.misoPinMask = 0; - swspi.misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(dc)); - } -#endif // end !CORE_TEENSY -#else // !HAS_PORT_SET_CLR - dcPort = (PORTreg_t)portOutputRegister(digitalPinToPort(dc)); - dcPinMaskSet = digitalPinToBitMask(dc); - swspi.sckPort = (PORTreg_t)portOutputRegister(digitalPinToPort(sck)); - swspi.sckPinMaskSet = digitalPinToBitMask(sck); - swspi.mosiPort = (PORTreg_t)portOutputRegister(digitalPinToPort(mosi)); - swspi.mosiPinMaskSet = digitalPinToBitMask(mosi); - if (cs >= 0) { - csPort = (PORTreg_t)portOutputRegister(digitalPinToPort(cs)); - csPinMaskSet = digitalPinToBitMask(cs); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPort = dcPort; - csPinMaskSet = 0; - } - if (miso >= 0) { - swspi.misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(miso)); - swspi.misoPinMask = digitalPinToBitMask(miso); - } else { - swspi.misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(dc)); - swspi.misoPinMask = 0; - } - csPinMaskClr = ~csPinMaskSet; - dcPinMaskClr = ~dcPinMaskSet; - swspi.sckPinMaskClr = ~swspi.sckPinMaskSet; - swspi.mosiPinMaskClr = ~swspi.mosiPinMaskSet; -#endif // !end HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO -} - -/*! - @brief Adafruit_SPITFT constructor for hardware SPI using the board's - default SPI peripheral. - @param w Display width in pixels at default rotation setting (0). - @param h Display height in pixels at default rotation setting (0). - @param cs Arduino pin # for chip-select (-1 if unused, tie CS low). - @param dc Arduino pin # for data/command select (required). - @param rst Arduino pin # for display reset (optional, display reset - can be tied to MCU reset, default of -1 means unused). - @note Output pins are not initialized; application typically will - need to call subclass' begin() function, which in turn calls - this library's initSPI() function to initialize pins. -*/ -#if defined(ESP8266) // See notes below -Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t rst) - : Adafruit_GFX(w, h), connection(TFT_HARD_SPI), _rst(rst), _cs(cs), - _dc(dc) { - hwspi._spi = &SPI; -} -#else // !ESP8266 -Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t rst) - : Adafruit_SPITFT(w, h, &SPI, cs, dc, rst) { - // This just invokes the hardware SPI constructor below, - // passing the default SPI device (&SPI). -} -#endif // end !ESP8266 - -#if !defined(ESP8266) -// ESP8266 compiler freaks out at this constructor -- it can't disambiguate -// beteween the SPIClass pointer (argument #3) and a regular integer. -// Solution here it to just not offer this variant on the ESP8266. You can -// use the default hardware SPI peripheral, or you can use software SPI, -// but if there's any library out there that creates a 'virtual' SPIClass -// peripheral and drives it with software bitbanging, that's not supported. -/*! - @brief Adafruit_SPITFT constructor for hardware SPI using a specific - SPI peripheral. - @param w Display width in pixels at default rotation (0). - @param h Display height in pixels at default rotation (0). - @param spiClass Pointer to SPIClass type (e.g. &SPI or &SPI1). - @param cs Arduino pin # for chip-select (-1 if unused, tie CS low). - @param dc Arduino pin # for data/command select (required). - @param rst Arduino pin # for display reset (optional, display reset - can be tied to MCU reset, default of -1 means unused). - @note Output pins are not initialized in constructor; application - typically will need to call subclass' begin() function, which - in turn calls this library's initSPI() function to initialize - pins. EXCEPT...if you have built your own SERCOM SPI peripheral - (calling the SPIClass constructor) rather than one of the - built-in SPI devices (e.g. &SPI, &SPI1 and so forth), you will - need to call the begin() function for your object as well as - pinPeripheral() for the MOSI, MISO and SCK pins to configure - GPIO manually. Do this BEFORE calling the display-specific - begin or init function. Unfortunate but unavoidable. -*/ -Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass, - int8_t cs, int8_t dc, int8_t rst) - : Adafruit_GFX(w, h), connection(TFT_HARD_SPI), _rst(rst), _cs(cs), - _dc(dc) { - hwspi._spi = spiClass; -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(CORE_TEENSY) -#if !defined(KINETISK) - dcPinMask = digitalPinToBitMask(dc); -#endif - dcPortSet = portSetRegister(dc); - dcPortClr = portClearRegister(dc); - if (cs >= 0) { -#if !defined(KINETISK) - csPinMask = digitalPinToBitMask(cs); -#endif - csPortSet = portSetRegister(cs); - csPortClr = portClearRegister(cs); - } else { // see comments below -#if !defined(KINETISK) - csPinMask = 0; -#endif - csPortSet = dcPortSet; - csPortClr = dcPortClr; - } -#else // !CORE_TEENSY - dcPinMask = digitalPinToBitMask(dc); - dcPortSet = &(PORT->Group[g_APinDescription[dc].ulPort].OUTSET.reg); - dcPortClr = &(PORT->Group[g_APinDescription[dc].ulPort].OUTCLR.reg); - if (cs >= 0) { - csPinMask = digitalPinToBitMask(cs); - csPortSet = &(PORT->Group[g_APinDescription[cs].ulPort].OUTSET.reg); - csPortClr = &(PORT->Group[g_APinDescription[cs].ulPort].OUTCLR.reg); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPortSet = dcPortSet; - csPortClr = dcPortClr; - csPinMask = 0; - } -#endif // end !CORE_TEENSY -#else // !HAS_PORT_SET_CLR - dcPort = (PORTreg_t)portOutputRegister(digitalPinToPort(dc)); - dcPinMaskSet = digitalPinToBitMask(dc); - if (cs >= 0) { - csPort = (PORTreg_t)portOutputRegister(digitalPinToPort(cs)); - csPinMaskSet = digitalPinToBitMask(cs); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPort = dcPort; - csPinMaskSet = 0; - } - csPinMaskClr = ~csPinMaskSet; - dcPinMaskClr = ~dcPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO -} -#endif // end !ESP8266 - -/*! - @brief Adafruit_SPITFT constructor for parallel display connection. - @param w Display width in pixels at default rotation (0). - @param h Display height in pixels at default rotation (0). - @param busWidth If tft16 (enumeration in header file), is a 16-bit - parallel connection, else 8-bit. - 16-bit isn't fully implemented or tested yet so - applications should pass "tft8bitbus" for now...needed to - stick a required enum argument in there to - disambiguate this constructor from the soft-SPI case. - Argument is ignored on 8-bit architectures (no 'wide' - support there since PORTs are 8 bits anyway). - @param d0 Arduino pin # for data bit 0 (1+ are extrapolated). - The 8 (or 16) data bits MUST be contiguous and byte- - aligned (or word-aligned for wide interface) within - the same PORT register (might not correspond to - Arduino pin sequence). - @param wr Arduino pin # for write strobe (required). - @param dc Arduino pin # for data/command select (required). - @param cs Arduino pin # for chip-select (optional, -1 if unused, - tie CS low). - @param rst Arduino pin # for display reset (optional, display reset - can be tied to MCU reset, default of -1 means unused). - @param rd Arduino pin # for read strobe (optional, -1 if unused). - @note Output pins are not initialized; application typically will need - to call subclass' begin() function, which in turn calls this - library's initSPI() function to initialize pins. - Yes, the name is a misnomer...this library originally handled - only SPI displays, parallel being a recent addition (but not - wanting to break existing code). -*/ -Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, tftBusWidth busWidth, - int8_t d0, int8_t wr, int8_t dc, int8_t cs, - int8_t rst, int8_t rd) - : Adafruit_GFX(w, h), connection(TFT_PARALLEL), _rst(rst), _cs(cs), - _dc(dc) { - tft8._d0 = d0; - tft8._wr = wr; - tft8._rd = rd; - tft8.wide = (busWidth == tft16bitbus); -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(CORE_TEENSY) - tft8.wrPortSet = portSetRegister(wr); - tft8.wrPortClr = portClearRegister(wr); -#if !defined(KINETISK) - dcPinMask = digitalPinToBitMask(dc); -#endif - dcPortSet = portSetRegister(dc); - dcPortClr = portClearRegister(dc); - if (cs >= 0) { -#if !defined(KINETISK) - csPinMask = digitalPinToBitMask(cs); -#endif - csPortSet = portSetRegister(cs); - csPortClr = portClearRegister(cs); - } else { // see comments below -#if !defined(KINETISK) - csPinMask = 0; -#endif - csPortSet = dcPortSet; - csPortClr = dcPortClr; - } - if (rd >= 0) { // if read-strobe pin specified... -#if defined(KINETISK) - tft8.rdPinMask = 1; -#else // !KINETISK - tft8.rdPinMask = digitalPinToBitMask(rd); -#endif - tft8.rdPortSet = portSetRegister(rd); - tft8.rdPortClr = portClearRegister(rd); - } else { - tft8.rdPinMask = 0; - tft8.rdPortSet = dcPortSet; - tft8.rdPortClr = dcPortClr; - } - // These are all uint8_t* pointers -- elsewhere they're recast - // as necessary if a 'wide' 16-bit interface is in use. - tft8.writePort = portOutputRegister(d0); - tft8.readPort = portInputRegister(d0); - tft8.dirSet = portModeRegister(d0); - tft8.dirClr = portModeRegister(d0); -#else // !CORE_TEENSY - tft8.wrPinMask = digitalPinToBitMask(wr); - tft8.wrPortSet = &(PORT->Group[g_APinDescription[wr].ulPort].OUTSET.reg); - tft8.wrPortClr = &(PORT->Group[g_APinDescription[wr].ulPort].OUTCLR.reg); - dcPinMask = digitalPinToBitMask(dc); - dcPortSet = &(PORT->Group[g_APinDescription[dc].ulPort].OUTSET.reg); - dcPortClr = &(PORT->Group[g_APinDescription[dc].ulPort].OUTCLR.reg); - if (cs >= 0) { - csPinMask = digitalPinToBitMask(cs); - csPortSet = &(PORT->Group[g_APinDescription[cs].ulPort].OUTSET.reg); - csPortClr = &(PORT->Group[g_APinDescription[cs].ulPort].OUTCLR.reg); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPortSet = dcPortSet; - csPortClr = dcPortClr; - csPinMask = 0; - } - if (rd >= 0) { // if read-strobe pin specified... - tft8.rdPinMask = digitalPinToBitMask(rd); - tft8.rdPortSet = &(PORT->Group[g_APinDescription[rd].ulPort].OUTSET.reg); - tft8.rdPortClr = &(PORT->Group[g_APinDescription[rd].ulPort].OUTCLR.reg); - } else { - tft8.rdPinMask = 0; - tft8.rdPortSet = dcPortSet; - tft8.rdPortClr = dcPortClr; - } - // Get pointers to PORT write/read/dir bytes within 32-bit PORT - uint8_t dBit = g_APinDescription[d0].ulPin; // d0 bit # in PORT - PortGroup *p = (&(PORT->Group[g_APinDescription[d0].ulPort])); - uint8_t offset = dBit / 8; // d[7:0] byte # within PORT - if (tft8.wide) - offset &= ~1; // d[15:8] byte # within PORT - // These are all uint8_t* pointers -- elsewhere they're recast - // as necessary if a 'wide' 16-bit interface is in use. - tft8.writePort = (volatile uint8_t *)&(p->OUT.reg) + offset; - tft8.readPort = (volatile uint8_t *)&(p->IN.reg) + offset; - tft8.dirSet = (volatile uint8_t *)&(p->DIRSET.reg) + offset; - tft8.dirClr = (volatile uint8_t *)&(p->DIRCLR.reg) + offset; -#endif // end !CORE_TEENSY -#else // !HAS_PORT_SET_CLR - tft8.wrPort = (PORTreg_t)portOutputRegister(digitalPinToPort(wr)); - tft8.wrPinMaskSet = digitalPinToBitMask(wr); - dcPort = (PORTreg_t)portOutputRegister(digitalPinToPort(dc)); - dcPinMaskSet = digitalPinToBitMask(dc); - if (cs >= 0) { - csPort = (PORTreg_t)portOutputRegister(digitalPinToPort(cs)); - csPinMaskSet = digitalPinToBitMask(cs); - } else { - // No chip-select line defined; might be permanently tied to GND. - // Assign a valid GPIO register (though not used for CS), and an - // empty pin bitmask...the nonsense bit-twiddling might be faster - // than checking _cs and possibly branching. - csPort = dcPort; - csPinMaskSet = 0; - } - if (rd >= 0) { // if read-strobe pin specified... - tft8.rdPort = (PORTreg_t)portOutputRegister(digitalPinToPort(rd)); - tft8.rdPinMaskSet = digitalPinToBitMask(rd); - } else { - tft8.rdPort = dcPort; - tft8.rdPinMaskSet = 0; - } - csPinMaskClr = ~csPinMaskSet; - dcPinMaskClr = ~dcPinMaskSet; - tft8.wrPinMaskClr = ~tft8.wrPinMaskSet; - tft8.rdPinMaskClr = ~tft8.rdPinMaskSet; - tft8.writePort = (PORTreg_t)portOutputRegister(digitalPinToPort(d0)); - tft8.readPort = (PORTreg_t)portInputRegister(digitalPinToPort(d0)); - tft8.portDir = (PORTreg_t)portModeRegister(digitalPinToPort(d0)); -#endif // end !HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO -} - -// end constructors ------- - -// CLASS MEMBER FUNCTIONS -------------------------------------------------- - -// begin() and setAddrWindow() MUST be declared by any subclass. - -/*! - @brief Configure microcontroller pins for TFT interfacing. Typically - called by a subclass' begin() function. - @param freq SPI frequency when using hardware SPI. If default (0) - is passed, will fall back on a device-specific value. - Value is ignored when using software SPI or parallel - connection. - @param spiMode SPI mode when using hardware SPI. MUST be one of the - values SPI_MODE0, SPI_MODE1, SPI_MODE2 or SPI_MODE3 - defined in SPI.h. Do NOT attempt to pass '0' for - SPI_MODE0 and so forth...the values are NOT the same! - Use ONLY the defines! (Pity it's not an enum.) - @note Another anachronistically-named function; this is called even - when the display connection is parallel (not SPI). Also, this - could probably be made private...quite a few class functions - were generously put in the public section. -*/ -void Adafruit_SPITFT::initSPI(uint32_t freq, uint8_t spiMode) { - - if (!freq) - freq = DEFAULT_SPI_FREQ; // If no freq specified, use default - - // Init basic control pins common to all connection types - if (_cs >= 0) { - pinMode(_cs, OUTPUT); - digitalWrite(_cs, HIGH); // Deselect - } - pinMode(_dc, OUTPUT); - digitalWrite(_dc, HIGH); // Data mode - - if (connection == TFT_HARD_SPI) { - -#if defined(SPI_HAS_TRANSACTION) - hwspi.settings = SPISettings(freq, MSBFIRST, spiMode); -#else - hwspi._freq = freq; // Save freq value for later -#endif - hwspi._mode = spiMode; // Save spiMode value for later - // Call hwspi._spi->begin() ONLY if this is among the 'established' - // SPI interfaces in variant.h. For DIY roll-your-own SERCOM SPIs, - // begin() and pinPeripheral() calls MUST be made in one's calling - // code, BEFORE the screen-specific begin/init function is called. - // Reason for this is that SPI::begin() makes its own calls to - // pinPeripheral() based on g_APinDescription[n].ulPinType, which - // on non-established SPI interface pins will always be PIO_DIGITAL - // or similar, while we need PIO_SERCOM or PIO_SERCOM_ALT...it's - // highly unique between devices and variants for each pin or - // SERCOM so we can't make those calls ourselves here. And the SPI - // device needs to be set up before calling this because it's - // immediately followed with initialization commands. Blargh. - if ( -#if !defined(SPI_INTERFACES_COUNT) - 1 -#else -#if SPI_INTERFACES_COUNT > 0 - (hwspi._spi == &SPI) -#endif -#if SPI_INTERFACES_COUNT > 1 - || (hwspi._spi == &SPI1) -#endif -#if SPI_INTERFACES_COUNT > 2 - || (hwspi._spi == &SPI2) -#endif -#if SPI_INTERFACES_COUNT > 3 - || (hwspi._spi == &SPI3) -#endif -#if SPI_INTERFACES_COUNT > 4 - || (hwspi._spi == &SPI4) -#endif -#if SPI_INTERFACES_COUNT > 5 - || (hwspi._spi == &SPI5) -#endif -#endif // end SPI_INTERFACES_COUNT - ) { - hwspi._spi->begin(); - } - } else if (connection == TFT_SOFT_SPI) { - - pinMode(swspi._mosi, OUTPUT); - digitalWrite(swspi._mosi, LOW); - pinMode(swspi._sck, OUTPUT); - digitalWrite(swspi._sck, LOW); - if (swspi._miso >= 0) { - pinMode(swspi._miso, INPUT); - } - - } else { // TFT_PARALLEL - // Initialize data pins. We were only passed d0, so scan - // the pin description list looking for the other pins. - // They'll be on the same PORT, and within the next 7 (or 15) bits - // (because we need to write to a contiguous PORT byte or word). -#if defined(__AVR__) - // PORT registers are 8 bits wide, so just need a register match... - for (uint8_t i = 0; i < NUM_DIGITAL_PINS; i++) { - if ((PORTreg_t)portOutputRegister(digitalPinToPort(i)) == - tft8.writePort) { - pinMode(i, OUTPUT); - digitalWrite(i, LOW); - } - } -#elif defined(USE_FAST_PINIO) -#if defined(CORE_TEENSY) - if (!tft8.wide) { - *tft8.dirSet = 0xFF; // Set port to output - *tft8.writePort = 0x00; // Write all 0s - } else { - *(volatile uint16_t *)tft8.dirSet = 0xFFFF; - *(volatile uint16_t *)tft8.writePort = 0x0000; - } -#else // !CORE_TEENSY - uint8_t portNum = g_APinDescription[tft8._d0].ulPort, // d0 PORT # - dBit = g_APinDescription[tft8._d0].ulPin, // d0 bit in PORT - lastBit = dBit + (tft8.wide ? 15 : 7); - for (uint8_t i = 0; i < PINS_COUNT; i++) { - if ((g_APinDescription[i].ulPort == portNum) && - (g_APinDescription[i].ulPin >= dBit) && - (g_APinDescription[i].ulPin <= (uint32_t)lastBit)) { - pinMode(i, OUTPUT); - digitalWrite(i, LOW); - } - } -#endif // end !CORE_TEENSY -#endif - pinMode(tft8._wr, OUTPUT); - digitalWrite(tft8._wr, HIGH); - if (tft8._rd >= 0) { - pinMode(tft8._rd, OUTPUT); - digitalWrite(tft8._rd, HIGH); - } - } - - if (_rst >= 0) { - // Toggle _rst low to reset - pinMode(_rst, OUTPUT); - digitalWrite(_rst, HIGH); - delay(100); - digitalWrite(_rst, LOW); - delay(100); - digitalWrite(_rst, HIGH); - delay(200); - } - -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) - if (((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) && - (dma.allocate() == DMA_STATUS_OK)) { // Allocate channel - // The DMA library needs to alloc at least one valid descriptor, - // so we do that here. It's not used in the usual sense though, - // just before a transfer we copy descriptor[0] to this address. - if (dptr = dma.addDescriptor(NULL, NULL, 42, DMA_BEAT_SIZE_BYTE, false, - false)) { - // Alloc 2 scanlines worth of pixels on display's major axis, - // whichever that is, rounding each up to 2-pixel boundary. - int major = (WIDTH > HEIGHT) ? WIDTH : HEIGHT; - major += (major & 1); // -> next 2-pixel bound, if needed. - maxFillLen = major * 2; // 2 scanlines - // Note to future self: if you decide to make the pixel buffer - // much larger, remember that DMA transfer descriptors can't - // exceed 65,535 bytes (not 65,536), meaning 32,767 pixels max. - // Not that we have that kind of RAM to throw around right now. - if ((pixelBuf[0] = (uint16_t *)malloc(maxFillLen * sizeof(uint16_t)))) { - // Alloc OK. Get pointer to start of second scanline. - pixelBuf[1] = &pixelBuf[0][major]; - // Determine number of DMA descriptors needed to cover - // entire screen when entire 2-line pixelBuf is used - // (round up for fractional last descriptor). - int numDescriptors = (WIDTH * HEIGHT + (maxFillLen - 1)) / maxFillLen; - // DMA descriptors MUST be 128-bit (16 byte) aligned. - // memalign() is considered obsolete but it's replacements - // (aligned_alloc() or posix_memalign()) are not currently - // available in the version of ARM GCC in use, but this - // is, so here we are. - if ((descriptor = (DmacDescriptor *)memalign( - 16, numDescriptors * sizeof(DmacDescriptor)))) { - int dmac_id; - volatile uint32_t *data_reg; - - if (connection == TFT_HARD_SPI) { - // THIS IS AN AFFRONT TO NATURE, but I don't know - // any "clean" way to get the sercom number from the - // the SPIClass pointer (e.g. &SPI or &SPI1), which - // is all we have to work with. SPIClass does contain - // a SERCOM pointer but it is a PRIVATE member! - // Doing an UNSPEAKABLY HORRIBLE THING here, directly - // accessing the first 32-bit value in the SPIClass - // structure, knowing that's (currently) where the - // SERCOM pointer lives, but this ENTIRELY DEPENDS on - // that structure not changing nor the compiler - // rearranging things. Oh the humanity! - - if (*(SERCOM **)hwspi._spi == &sercom0) { - dmac_id = SERCOM0_DMAC_ID_TX; - data_reg = &SERCOM0->SPI.DATA.reg; -#if defined SERCOM1 - } else if (*(SERCOM **)hwspi._spi == &sercom1) { - dmac_id = SERCOM1_DMAC_ID_TX; - data_reg = &SERCOM1->SPI.DATA.reg; -#endif -#if defined SERCOM2 - } else if (*(SERCOM **)hwspi._spi == &sercom2) { - dmac_id = SERCOM2_DMAC_ID_TX; - data_reg = &SERCOM2->SPI.DATA.reg; -#endif -#if defined SERCOM3 - } else if (*(SERCOM **)hwspi._spi == &sercom3) { - dmac_id = SERCOM3_DMAC_ID_TX; - data_reg = &SERCOM3->SPI.DATA.reg; -#endif -#if defined SERCOM4 - } else if (*(SERCOM **)hwspi._spi == &sercom4) { - dmac_id = SERCOM4_DMAC_ID_TX; - data_reg = &SERCOM4->SPI.DATA.reg; -#endif -#if defined SERCOM5 - } else if (*(SERCOM **)hwspi._spi == &sercom5) { - dmac_id = SERCOM5_DMAC_ID_TX; - data_reg = &SERCOM5->SPI.DATA.reg; -#endif -#if defined SERCOM6 - } else if (*(SERCOM **)hwspi._spi == &sercom6) { - dmac_id = SERCOM6_DMAC_ID_TX; - data_reg = &SERCOM6->SPI.DATA.reg; -#endif -#if defined SERCOM7 - } else if (*(SERCOM **)hwspi._spi == &sercom7) { - dmac_id = SERCOM7_DMAC_ID_TX; - data_reg = &SERCOM7->SPI.DATA.reg; -#endif - } - dma.setPriority(DMA_PRIORITY_3); - dma.setTrigger(dmac_id); - dma.setAction(DMA_TRIGGER_ACTON_BEAT); - - // Initialize descriptor list. - for (int d = 0; d < numDescriptors; d++) { - // No need to set SRCADDR, DESCADDR or BTCNT -- - // those are done in the pixel-writing functions. - descriptor[d].BTCTRL.bit.VALID = true; - descriptor[d].BTCTRL.bit.EVOSEL = DMA_EVENT_OUTPUT_DISABLE; - descriptor[d].BTCTRL.bit.BLOCKACT = DMA_BLOCK_ACTION_NOACT; - descriptor[d].BTCTRL.bit.BEATSIZE = DMA_BEAT_SIZE_BYTE; - descriptor[d].BTCTRL.bit.DSTINC = 0; - descriptor[d].BTCTRL.bit.STEPSEL = DMA_STEPSEL_SRC; - descriptor[d].BTCTRL.bit.STEPSIZE = - DMA_ADDRESS_INCREMENT_STEP_SIZE_1; - descriptor[d].DSTADDR.reg = (uint32_t)data_reg; - } - - } else { // Parallel connection - -#if defined(__SAMD51__) - int dmaChannel = dma.getChannel(); - // Enable event output, use EVOSEL output - DMAC->Channel[dmaChannel].CHEVCTRL.bit.EVOE = 1; - DMAC->Channel[dmaChannel].CHEVCTRL.bit.EVOMODE = 0; - - // CONFIGURE TIMER/COUNTER (for write strobe) - - Tc *timer = tcList[tcNum].tc; // -> Timer struct - int id = tcList[tcNum].gclk; // Timer GCLK ID - GCLK_PCHCTRL_Type pchctrl; - - // Set up timer clock source from GCLK - GCLK->PCHCTRL[id].bit.CHEN = 0; // Stop timer - while (GCLK->PCHCTRL[id].bit.CHEN) - ; // Wait for it - pchctrl.bit.GEN = GCLK_PCHCTRL_GEN_GCLK0_Val; - pchctrl.bit.CHEN = 1; // Enable - GCLK->PCHCTRL[id].reg = pchctrl.reg; - while (!GCLK->PCHCTRL[id].bit.CHEN) - ; // Wait for it - - // Disable timer/counter before configuring it - timer->COUNT8.CTRLA.bit.ENABLE = 0; - while (timer->COUNT8.SYNCBUSY.bit.STATUS) - ; - - timer->COUNT8.WAVE.bit.WAVEGEN = 2; // NPWM - timer->COUNT8.CTRLA.bit.MODE = 1; // 8-bit - timer->COUNT8.CTRLA.bit.PRESCALER = 0; // 1:1 - while (timer->COUNT8.SYNCBUSY.bit.STATUS) - ; - - timer->COUNT8.CTRLBCLR.bit.DIR = 1; // Count UP - while (timer->COUNT8.SYNCBUSY.bit.CTRLB) - ; - timer->COUNT8.CTRLBSET.bit.ONESHOT = 1; // One-shot - while (timer->COUNT8.SYNCBUSY.bit.CTRLB) - ; - timer->COUNT8.PER.reg = 6; // PWM top - while (timer->COUNT8.SYNCBUSY.bit.PER) - ; - timer->COUNT8.CC[0].reg = 2; // Compare - while (timer->COUNT8.SYNCBUSY.bit.CC0) - ; - // Enable async input events, - // event action = restart. - timer->COUNT8.EVCTRL.bit.TCEI = 1; - timer->COUNT8.EVCTRL.bit.EVACT = 1; - - // Enable timer - timer->COUNT8.CTRLA.reg |= TC_CTRLA_ENABLE; - while (timer->COUNT8.SYNCBUSY.bit.STATUS) - ; - -#if (wrPeripheral == PIO_CCL) - // CONFIGURE CCL (inverts timer/counter output) - - MCLK->APBCMASK.bit.CCL_ = 1; // Enable CCL clock - CCL->CTRL.bit.ENABLE = 0; // Disable to config - CCL->CTRL.bit.SWRST = 1; // Reset CCL registers - CCL->LUTCTRL[tcNum].bit.ENABLE = 0; // Disable LUT - CCL->LUTCTRL[tcNum].bit.FILTSEL = 0; // No filter - CCL->LUTCTRL[tcNum].bit.INSEL0 = 6; // TC input - CCL->LUTCTRL[tcNum].bit.INSEL1 = 0; // MASK - CCL->LUTCTRL[tcNum].bit.INSEL2 = 0; // MASK - CCL->LUTCTRL[tcNum].bit.TRUTH = 1; // Invert in 0 - CCL->LUTCTRL[tcNum].bit.ENABLE = 1; // Enable LUT - CCL->CTRL.bit.ENABLE = 1; // Enable CCL -#endif - - // CONFIGURE EVENT SYSTEM - - // Set up event system clock source from GCLK... - // Disable EVSYS, wait for disable - GCLK->PCHCTRL[EVSYS_GCLK_ID_0].bit.CHEN = 0; - while (GCLK->PCHCTRL[EVSYS_GCLK_ID_0].bit.CHEN) - ; - pchctrl.bit.GEN = GCLK_PCHCTRL_GEN_GCLK0_Val; - pchctrl.bit.CHEN = 1; // Re-enable - GCLK->PCHCTRL[EVSYS_GCLK_ID_0].reg = pchctrl.reg; - // Wait for it, then enable EVSYS clock - while (!GCLK->PCHCTRL[EVSYS_GCLK_ID_0].bit.CHEN) - ; - MCLK->APBBMASK.bit.EVSYS_ = 1; - - // Connect Timer EVU to ch 0 - EVSYS->USER[tcList[tcNum].evu].reg = 1; - // Datasheet recommends single write operation; - // reg instead of bit. Also datasheet: PATH bits - // must be zero when using async! - EVSYS_CHANNEL_Type ev; - ev.reg = 0; - ev.bit.PATH = 2; // Asynchronous - ev.bit.EVGEN = 0x22 + dmaChannel; // DMA channel 0+ - EVSYS->Channel[0].CHANNEL.reg = ev.reg; - - // Initialize descriptor list. - for (int d = 0; d < numDescriptors; d++) { - // No need to set SRCADDR, DESCADDR or BTCNT -- - // those are done in the pixel-writing functions. - descriptor[d].BTCTRL.bit.VALID = true; - // Event strobe on beat xfer: - descriptor[d].BTCTRL.bit.EVOSEL = 0x3; - descriptor[d].BTCTRL.bit.BLOCKACT = DMA_BLOCK_ACTION_NOACT; - descriptor[d].BTCTRL.bit.BEATSIZE = - tft8.wide ? DMA_BEAT_SIZE_HWORD : DMA_BEAT_SIZE_BYTE; - descriptor[d].BTCTRL.bit.SRCINC = 1; - descriptor[d].BTCTRL.bit.DSTINC = 0; - descriptor[d].BTCTRL.bit.STEPSEL = DMA_STEPSEL_SRC; - descriptor[d].BTCTRL.bit.STEPSIZE = - DMA_ADDRESS_INCREMENT_STEP_SIZE_1; - descriptor[d].DSTADDR.reg = (uint32_t)tft8.writePort; - } -#endif // __SAMD51 - } // end parallel-specific DMA setup - - lastFillColor = 0x0000; - lastFillLen = 0; - dma.setCallback(dma_callback); - return; // Success! - // else clean up any partial allocation... - } // end descriptor memalign() - free(pixelBuf[0]); - pixelBuf[0] = pixelBuf[1] = NULL; - } // end pixelBuf malloc() - // Don't currently have a descriptor delete function in - // ZeroDMA lib, but if we did, it would be called here. - } // end addDescriptor() - dma.free(); // Deallocate DMA channel - } -#endif // end USE_SPI_DMA -} - -/*! - @brief Allow changing the SPI clock speed after initialization - @param freq Desired frequency of SPI clock, may not be the - end frequency you get based on what the chip can do! -*/ -void Adafruit_SPITFT::setSPISpeed(uint32_t freq) { -#if defined(SPI_HAS_TRANSACTION) - hwspi.settings = SPISettings(freq, MSBFIRST, hwspi._mode); -#else - hwspi._freq = freq; // Save freq value for later -#endif -} - -/*! - @brief Call before issuing command(s) or data to display. Performs - chip-select (if required) and starts an SPI transaction (if - using hardware SPI and transactions are supported). Required - for all display types; not an SPI-specific function. -*/ -void Adafruit_SPITFT::startWrite(void) { - SPI_BEGIN_TRANSACTION(); - if (_cs >= 0) - SPI_CS_LOW(); -} - -/*! - @brief Call after issuing command(s) or data to display. Performs - chip-deselect (if required) and ends an SPI transaction (if - using hardware SPI and transactions are supported). Required - for all display types; not an SPI-specific function. -*/ -void Adafruit_SPITFT::endWrite(void) { - if (_cs >= 0) - SPI_CS_HIGH(); - SPI_END_TRANSACTION(); -} - -// ------------------------------------------------------------------------- -// Lower-level graphics operations. These functions require a chip-select -// and/or SPI transaction around them (via startWrite(), endWrite() above). -// Higher-level graphics primitives might start a single transaction and -// then make multiple calls to these functions (e.g. circle or text -// rendering might make repeated lines or rects) before ending the -// transaction. It's more efficient than starting a transaction every time. - -/*! - @brief Draw a single pixel to the display at requested coordinates. - Not self-contained; should follow a startWrite() call. - @param x Horizontal position (0 = left). - @param y Vertical position (0 = top). - @param color 16-bit pixel color in '565' RGB format. -*/ -void Adafruit_SPITFT::writePixel(int16_t x, int16_t y, uint16_t color) { - if ((x >= 0) && (x < _width) && (y >= 0) && (y < _height)) { - setAddrWindow(x, y, 1, 1); - SPI_WRITE16(color); - } -} - -/*! - @brief Swap bytes in an array of pixels; converts little-to-big or - big-to-little endian. Used by writePixels() below in some - situations, but may also be helpful for user code occasionally. - @param src Source address of 16-bit pixels buffer. - @param len Number of pixels to byte-swap. - @param dest Optional destination address if different than src -- - otherwise, if NULL (default) or same address is passed, - pixel buffer is overwritten in-place. -*/ -void Adafruit_SPITFT::swapBytes(uint16_t *src, uint32_t len, uint16_t *dest) { - if (!dest) - dest = src; // NULL -> overwrite src buffer - for (uint32_t i = 0; i < len; i++) { - dest[i] = __builtin_bswap16(src[i]); - } -} - -/*! - @brief Issue a series of pixels from memory to the display. Not self- - contained; should follow startWrite() and setAddrWindow() calls. - @param colors Pointer to array of 16-bit pixel values in '565' RGB - format. - @param len Number of elements in 'colors' array. - @param block If true (default case if unspecified), function blocks - until DMA transfer is complete. This is simply IGNORED - if DMA is not enabled. If false, the function returns - immediately after the last DMA transfer is started, - and one should use the dmaWait() function before - doing ANY other display-related activities (or even - any SPI-related activities, if using an SPI display - that shares the bus with other devices). - @param bigEndian If true, bitmap in memory is in big-endian order (most - significant byte first). By default this is false, as - most microcontrollers seem to be little-endian and - 16-bit pixel values must be byte-swapped before - issuing to the display (which tend toward big-endian - when using SPI or 8-bit parallel). If an application - can optimize around this -- for example, a bitmap in a - uint16_t array having the byte values already ordered - big-endian, this can save time here, ESPECIALLY if - using this function's non-blocking DMA mode. -*/ -void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, bool block, - bool bigEndian) { - - if (!len) - return; // Avoid 0-byte transfers - - // avoid paramater-not-used complaints - (void)block; - (void)bigEndian; - -#if defined(ESP32) - if (connection == TFT_HARD_SPI) { - if (!bigEndian) { - hwspi._spi->writePixels(colors, len * 2); // Inbuilt endian-swap - } else { - hwspi._spi->writeBytes((uint8_t *)colors, len * 2); // Issue bytes direct - } - return; - } -#elif defined(ARDUINO_NRF52_ADAFRUIT) && \ - defined(NRF52840_XXAA) // Adafruit nRF52 use SPIM3 DMA at 32Mhz - if (!bigEndian) { - swapBytes(colors, len); // convert little-to-big endian for display - } - hwspi._spi->transfer(colors, NULL, 2 * len); // NULL RX to avoid overwrite - if (!bigEndian) { - swapBytes(colors, len); // big-to-little endian to restore pixel buffer - } - - return; -#elif defined(ARDUINO_ARCH_RP2040) - spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1; - - if (!bigEndian) { - // switch to 16-bit writes - hw_write_masked(&spi_get_hw(pi_spi)->cr0, 15 << SPI_SSPCR0_DSS_LSB, - SPI_SSPCR0_DSS_BITS); - spi_write16_blocking(pi_spi, colors, len); - // switch back to 8-bit - hw_write_masked(&spi_get_hw(pi_spi)->cr0, 7 << SPI_SSPCR0_DSS_LSB, - SPI_SSPCR0_DSS_BITS); - } else { - spi_write_blocking(pi_spi, (uint8_t *)colors, len * 2); - } - return; -#elif defined(USE_SPI_DMA) && \ - (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) - if ((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) { - int maxSpan = maxFillLen / 2; // One scanline max - uint8_t pixelBufIdx = 0; // Active pixel buffer number -#if defined(__SAMD51__) - if (connection == TFT_PARALLEL) { - // Switch WR pin to PWM or CCL - pinPeripheral(tft8._wr, wrPeripheral); - } -#endif // end __SAMD51__ - if (!bigEndian) { // Normal little-endian situation... - while (len) { - int count = (len < maxSpan) ? len : maxSpan; - - // Because TFT and SAMD endianisms are different, must swap - // bytes from the 'colors' array passed into a DMA working - // buffer. This can take place while the prior DMA transfer - // is in progress, hence the need for two pixelBufs. - swapBytes(colors, count, pixelBuf[pixelBufIdx]); - colors += count; - - // The transfers themselves are relatively small, so we don't - // need a long descriptor list. We just alternate between the - // first two, sharing pixelBufIdx for that purpose. - descriptor[pixelBufIdx].SRCADDR.reg = - (uint32_t)pixelBuf[pixelBufIdx] + count * 2; - descriptor[pixelBufIdx].BTCTRL.bit.SRCINC = 1; - descriptor[pixelBufIdx].BTCNT.reg = count * 2; - descriptor[pixelBufIdx].DESCADDR.reg = 0; - - while (dma_busy) - ; // Wait for prior line to finish - - // Move new descriptor into place... - memcpy(dptr, &descriptor[pixelBufIdx], sizeof(DmacDescriptor)); - dma_busy = true; - dma.startJob(); // Trigger SPI DMA transfer - if (connection == TFT_PARALLEL) - dma.trigger(); - pixelBufIdx = 1 - pixelBufIdx; // Swap DMA pixel buffers - - len -= count; - } - } else { // bigEndian == true - // With big-endian pixel data, this can be handled as a single - // DMA transfer using chained descriptors. Even full screen, this - // needs only a relatively short descriptor list, each - // transferring a max of 32,767 (not 32,768) pixels. The list - // was allocated large enough to accommodate a full screen's - // worth of data, so this won't run past the end of the list. - int d, numDescriptors = (len + 32766) / 32767; - for (d = 0; d < numDescriptors; d++) { - int count = (len < 32767) ? len : 32767; - descriptor[d].SRCADDR.reg = (uint32_t)colors + count * 2; - descriptor[d].BTCTRL.bit.SRCINC = 1; - descriptor[d].BTCNT.reg = count * 2; - descriptor[d].DESCADDR.reg = (uint32_t)&descriptor[d + 1]; - len -= count; - colors += count; - } - descriptor[d - 1].DESCADDR.reg = 0; - - while (dma_busy) - ; // Wait for prior transfer (if any) to finish - - // Move first descriptor into place and start transfer... - memcpy(dptr, &descriptor[0], sizeof(DmacDescriptor)); - dma_busy = true; - dma.startJob(); // Trigger SPI DMA transfer - if (connection == TFT_PARALLEL) - dma.trigger(); - } // end bigEndian - - lastFillColor = 0x0000; // pixelBuf has been sullied - lastFillLen = 0; - if (block) { - while (dma_busy) - ; // Wait for last line to complete -#if defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO) - if (connection == TFT_HARD_SPI) { - // See SAMD51/21 note in writeColor() - hwspi._spi->setDataMode(hwspi._mode); - } else { - pinPeripheral(tft8._wr, PIO_OUTPUT); // Switch WR back to GPIO - } -#endif // end __SAMD51__ || ARDUINO_SAMD_ZERO - } - return; - } -#endif // end USE_SPI_DMA - - // All other cases (bitbang SPI or non-DMA hard SPI or parallel), - // use a loop with the normal 16-bit data write function: - - if (!bigEndian) { - while (len--) { - SPI_WRITE16(*colors++); - } - } else { - // Well this is awkward. SPI_WRITE16() was designed for little-endian - // hosts and big-endian displays as that's nearly always the typical - // case. If the bigEndian flag was set, data is already in display's - // order...so each pixel needs byte-swapping before being issued. - // Rather than having a separate big-endian SPI_WRITE16 (adding more - // bloat), it's preferred if calling function is smart and only uses - // bigEndian where DMA is supported. But we gotta handle this... - while (len--) { - SPI_WRITE16(__builtin_bswap16(*colors++)); - } - } -} - -/*! - @brief Wait for the last DMA transfer in a prior non-blocking - writePixels() call to complete. This does nothing if DMA - is not enabled, and is not needed if blocking writePixels() - was used (as is the default case). -*/ -void Adafruit_SPITFT::dmaWait(void) { -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) - while (dma_busy) - ; -#if defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO) - if (connection == TFT_HARD_SPI) { - // See SAMD51/21 note in writeColor() - hwspi._spi->setDataMode(hwspi._mode); - } else { - pinPeripheral(tft8._wr, PIO_OUTPUT); // Switch WR back to GPIO - } -#endif // end __SAMD51__ || ARDUINO_SAMD_ZERO -#endif -} - -/*! - @brief Check if DMA transfer is active. Always returts false if DMA - is not enabled. - @return true if DMA is enabled and transmitting data, false otherwise. -*/ -bool Adafruit_SPITFT::dmaBusy(void) const { -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) - return dma_busy; -#else - return false; -#endif -} - -/*! - @brief Issue a series of pixels, all the same color. Not self- - contained; should follow startWrite() and setAddrWindow() calls. - @param color 16-bit pixel color in '565' RGB format. - @param len Number of pixels to draw. -*/ -void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) { - - if (!len) - return; // Avoid 0-byte transfers - - uint8_t hi = color >> 8, lo = color; - -#if defined(ESP32) // ESP32 has a special SPI pixel-writing function... - if (connection == TFT_HARD_SPI) { -#define SPI_MAX_PIXELS_AT_ONCE 32 -#define TMPBUF_LONGWORDS (SPI_MAX_PIXELS_AT_ONCE + 1) / 2 -#define TMPBUF_PIXELS (TMPBUF_LONGWORDS * 2) - static uint32_t temp[TMPBUF_LONGWORDS]; - uint32_t c32 = color * 0x00010001; - uint16_t bufLen = (len < TMPBUF_PIXELS) ? len : TMPBUF_PIXELS, xferLen, - fillLen; - // Fill temp buffer 32 bits at a time - fillLen = (bufLen + 1) / 2; // Round up to next 32-bit boundary - for (uint32_t t = 0; t < fillLen; t++) { - temp[t] = c32; - } - // Issue pixels in blocks from temp buffer - while (len) { // While pixels remain - xferLen = (bufLen < len) ? bufLen : len; // How many this pass? - writePixels((uint16_t *)temp, xferLen); - len -= xferLen; - } - return; - } -#elif defined(ARDUINO_NRF52_ADAFRUIT) && \ - defined(NRF52840_XXAA) // Adafruit nRF52840 use SPIM3 DMA at 32Mhz - // at most 2 scan lines - uint32_t const pixbufcount = min(len, ((uint32_t)2 * width())); - uint16_t *pixbuf = (uint16_t *)rtos_malloc(2 * pixbufcount); - - // use SPI3 DMA if we could allocate buffer, else fall back to writing each - // pixel loop below - if (pixbuf) { - uint16_t const swap_color = __builtin_bswap16(color); - - // fill buffer with color - for (uint32_t i = 0; i < pixbufcount; i++) { - pixbuf[i] = swap_color; - } - - while (len) { - uint32_t const count = min(len, pixbufcount); - writePixels(pixbuf, count, true, true); - len -= count; - } - - rtos_free(pixbuf); - return; - } -#else // !ESP32 -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) - if (((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) && - (len >= 16)) { // Don't bother with DMA on short pixel runs - int i, d, numDescriptors; - if (hi == lo) { // If high & low bytes are same... - onePixelBuf = color; - // Can do this with a relatively short descriptor list, - // each transferring a max of 32,767 (not 32,768) pixels. - // This won't run off the end of the allocated descriptor list, - // since we're using much larger chunks per descriptor here. - numDescriptors = (len + 32766) / 32767; - for (d = 0; d < numDescriptors; d++) { - int count = (len < 32767) ? len : 32767; - descriptor[d].SRCADDR.reg = (uint32_t)&onePixelBuf; - descriptor[d].BTCTRL.bit.SRCINC = 0; - descriptor[d].BTCNT.reg = count * 2; - descriptor[d].DESCADDR.reg = (uint32_t)&descriptor[d + 1]; - len -= count; - } - descriptor[d - 1].DESCADDR.reg = 0; - } else { - // If high and low bytes are distinct, it's necessary to fill - // a buffer with pixel data (swapping high and low bytes because - // TFT and SAMD are different endianisms) and create a longer - // descriptor list pointing repeatedly to this data. We can do - // this slightly faster working 2 pixels (32 bits) at a time. - uint32_t *pixelPtr = (uint32_t *)pixelBuf[0], - twoPixels = __builtin_bswap16(color) * 0x00010001; - // We can avoid some or all of the buffer-filling if the color - // is the same as last time... - if (color == lastFillColor) { - // If length is longer than prior instance, fill only the - // additional pixels in the buffer and update lastFillLen. - if (len > lastFillLen) { - int fillStart = lastFillLen / 2, - fillEnd = (((len < maxFillLen) ? len : maxFillLen) + 1) / 2; - for (i = fillStart; i < fillEnd; i++) - pixelPtr[i] = twoPixels; - lastFillLen = fillEnd * 2; - } // else do nothing, don't set pixels or change lastFillLen - } else { - int fillEnd = (((len < maxFillLen) ? len : maxFillLen) + 1) / 2; - for (i = 0; i < fillEnd; i++) - pixelPtr[i] = twoPixels; - lastFillLen = fillEnd * 2; - lastFillColor = color; - } - - numDescriptors = (len + maxFillLen - 1) / maxFillLen; - for (d = 0; d < numDescriptors; d++) { - int pixels = (len < maxFillLen) ? len : maxFillLen, bytes = pixels * 2; - descriptor[d].SRCADDR.reg = (uint32_t)pixelPtr + bytes; - descriptor[d].BTCTRL.bit.SRCINC = 1; - descriptor[d].BTCNT.reg = bytes; - descriptor[d].DESCADDR.reg = (uint32_t)&descriptor[d + 1]; - len -= pixels; - } - descriptor[d - 1].DESCADDR.reg = 0; - } - memcpy(dptr, &descriptor[0], sizeof(DmacDescriptor)); -#if defined(__SAMD51__) - if (connection == TFT_PARALLEL) { - // Switch WR pin to PWM or CCL - pinPeripheral(tft8._wr, wrPeripheral); - } -#endif // end __SAMD51__ - - dma_busy = true; - dma.startJob(); - if (connection == TFT_PARALLEL) - dma.trigger(); - while (dma_busy) - ; // Wait for completion - // Unfortunately blocking is necessary. An earlier version returned - // immediately and checked dma_busy on startWrite() instead, but it - // turns out to be MUCH slower on many graphics operations (as when - // drawing lines, pixel-by-pixel), perhaps because it's a volatile - // type and doesn't cache. Working on this. -#if defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO) - if (connection == TFT_HARD_SPI) { - // SAMD51: SPI DMA seems to leave the SPI peripheral in a freaky - // state on completion. Workaround is to explicitly set it back... - // (5/17/2019: apparently SAMD21 too, in certain cases, observed - // with ST7789 display.) - hwspi._spi->setDataMode(hwspi._mode); - } else { - pinPeripheral(tft8._wr, PIO_OUTPUT); // Switch WR back to GPIO - } -#endif // end __SAMD51__ - return; - } -#endif // end USE_SPI_DMA -#endif // end !ESP32 - - // All other cases (non-DMA hard SPI, bitbang SPI, parallel)... - - if (connection == TFT_HARD_SPI) { -#if defined(ESP8266) - do { - uint32_t pixelsThisPass = len; - if (pixelsThisPass > 50000) - pixelsThisPass = 50000; - len -= pixelsThisPass; - delay(1); // Periodic delay on long fills - while (pixelsThisPass--) { - hwspi._spi->write(hi); - hwspi._spi->write(lo); - } - } while (len); -#elif defined(ARDUINO_ARCH_RP2040) - spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1; - color = __builtin_bswap16(color); - - while (len--) - spi_write_blocking(pi_spi, (uint8_t *)&color, 2); -#else // !ESP8266 && !ARDUINO_ARCH_RP2040 - while (len--) { -#if defined(__AVR__) - AVR_WRITESPI(hi); - AVR_WRITESPI(lo); -#elif defined(ESP32) - hwspi._spi->write(hi); - hwspi._spi->write(lo); -#else - hwspi._spi->transfer(hi); - hwspi._spi->transfer(lo); -#endif - } -#endif // end !ESP8266 - } else if (connection == TFT_SOFT_SPI) { -#if defined(ESP8266) - do { - uint32_t pixelsThisPass = len; - if (pixelsThisPass > 20000) - pixelsThisPass = 20000; - len -= pixelsThisPass; - yield(); // Periodic yield() on long fills - while (pixelsThisPass--) { - for (uint16_t bit = 0, x = color; bit < 16; bit++) { - if (x & 0x8000) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - SPI_SCK_LOW(); - x <<= 1; - } - } - } while (len); -#else // !ESP8266 - while (len--) { -#if defined(__AVR__) - for (uint8_t bit = 0, x = hi; bit < 8; bit++) { - if (x & 0x80) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - SPI_SCK_LOW(); - x <<= 1; - } - for (uint8_t bit = 0, x = lo; bit < 8; bit++) { - if (x & 0x80) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - SPI_SCK_LOW(); - x <<= 1; - } -#else // !__AVR__ - for (uint16_t bit = 0, x = color; bit < 16; bit++) { - if (x & 0x8000) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - x <<= 1; - SPI_SCK_LOW(); - } -#endif // end !__AVR__ - } -#endif // end !ESP8266 - } else { // PARALLEL - if (hi == lo) { -#if defined(__AVR__) - len *= 2; - *tft8.writePort = hi; - while (len--) { - TFT_WR_STROBE(); - } -#elif defined(USE_FAST_PINIO) - if (!tft8.wide) { - len *= 2; - *tft8.writePort = hi; - } else { - *(volatile uint16_t *)tft8.writePort = color; - } - while (len--) { - TFT_WR_STROBE(); - } -#endif - } else { - while (len--) { -#if defined(__AVR__) - *tft8.writePort = hi; - TFT_WR_STROBE(); - *tft8.writePort = lo; -#elif defined(USE_FAST_PINIO) - if (!tft8.wide) { - *tft8.writePort = hi; - TFT_WR_STROBE(); - *tft8.writePort = lo; - } else { - *(volatile uint16_t *)tft8.writePort = color; - } -#endif - TFT_WR_STROBE(); - } - } - } -} - -/*! - @brief Draw a filled rectangle to the display. Not self-contained; - should follow startWrite(). Typically used by higher-level - graphics primitives; user code shouldn't need to call this and - is likely to use the self-contained fillRect() instead. - writeFillRect() performs its own edge clipping and rejection; - see writeFillRectPreclipped() for a more 'raw' implementation. - @param x Horizontal position of first corner. - @param y Vertical position of first corner. - @param w Rectangle width in pixels (positive = right of first - corner, negative = left of first corner). - @param h Rectangle height in pixels (positive = below first - corner, negative = above first corner). - @param color 16-bit fill color in '565' RGB format. - @note Written in this deep-nested way because C by definition will - optimize for the 'if' case, not the 'else' -- avoids branches - and rejects clipped rectangles at the least-work possibility. -*/ -void Adafruit_SPITFT::writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color) { - if (w && h) { // Nonzero width and height? - if (w < 0) { // If negative width... - x += w + 1; // Move X to left edge - w = -w; // Use positive width - } - if (x < _width) { // Not off right - if (h < 0) { // If negative height... - y += h + 1; // Move Y to top edge - h = -h; // Use positive height - } - if (y < _height) { // Not off bottom - int16_t x2 = x + w - 1; - if (x2 >= 0) { // Not off left - int16_t y2 = y + h - 1; - if (y2 >= 0) { // Not off top - // Rectangle partly or fully overlaps screen - if (x < 0) { - x = 0; - w = x2 + 1; - } // Clip left - if (y < 0) { - y = 0; - h = y2 + 1; - } // Clip top - if (x2 >= _width) { - w = _width - x; - } // Clip right - if (y2 >= _height) { - h = _height - y; - } // Clip bottom - writeFillRectPreclipped(x, y, w, h, color); - } - } - } - } - } -} - -/*! - @brief Draw a horizontal line on the display. Performs edge clipping - and rejection. Not self-contained; should follow startWrite(). - Typically used by higher-level graphics primitives; user code - shouldn't need to call this and is likely to use the self- - contained drawFastHLine() instead. - @param x Horizontal position of first point. - @param y Vertical position of first point. - @param w Line width in pixels (positive = right of first point, - negative = point of first corner). - @param color 16-bit line color in '565' RGB format. -*/ -void inline Adafruit_SPITFT::writeFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - if ((y >= 0) && (y < _height) && w) { // Y on screen, nonzero width - if (w < 0) { // If negative width... - x += w + 1; // Move X to left edge - w = -w; // Use positive width - } - if (x < _width) { // Not off right - int16_t x2 = x + w - 1; - if (x2 >= 0) { // Not off left - // Line partly or fully overlaps screen - if (x < 0) { - x = 0; - w = x2 + 1; - } // Clip left - if (x2 >= _width) { - w = _width - x; - } // Clip right - writeFillRectPreclipped(x, y, w, 1, color); - } - } - } -} - -/*! - @brief Draw a vertical line on the display. Performs edge clipping and - rejection. Not self-contained; should follow startWrite(). - Typically used by higher-level graphics primitives; user code - shouldn't need to call this and is likely to use the self- - contained drawFastVLine() instead. - @param x Horizontal position of first point. - @param y Vertical position of first point. - @param h Line height in pixels (positive = below first point, - negative = above first point). - @param color 16-bit line color in '565' RGB format. -*/ -void inline Adafruit_SPITFT::writeFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - if ((x >= 0) && (x < _width) && h) { // X on screen, nonzero height - if (h < 0) { // If negative height... - y += h + 1; // Move Y to top edge - h = -h; // Use positive height - } - if (y < _height) { // Not off bottom - int16_t y2 = y + h - 1; - if (y2 >= 0) { // Not off top - // Line partly or fully overlaps screen - if (y < 0) { - y = 0; - h = y2 + 1; - } // Clip top - if (y2 >= _height) { - h = _height - y; - } // Clip bottom - writeFillRectPreclipped(x, y, 1, h, color); - } - } - } -} - -/*! - @brief A lower-level version of writeFillRect(). This version requires - all inputs are in-bounds, that width and height are positive, - and no part extends offscreen. NO EDGE CLIPPING OR REJECTION IS - PERFORMED. If higher-level graphics primitives are written to - handle their own clipping earlier in the drawing process, this - can avoid unnecessary function calls and repeated clipping - operations in the lower-level functions. - @param x Horizontal position of first corner. MUST BE WITHIN - SCREEN BOUNDS. - @param y Vertical position of first corner. MUST BE WITHIN SCREEN - BOUNDS. - @param w Rectangle width in pixels. MUST BE POSITIVE AND NOT - EXTEND OFF SCREEN. - @param h Rectangle height in pixels. MUST BE POSITIVE AND NOT - EXTEND OFF SCREEN. - @param color 16-bit fill color in '565' RGB format. - @note This is a new function, no graphics primitives besides rects - and horizontal/vertical lines are written to best use this yet. -*/ -inline void Adafruit_SPITFT::writeFillRectPreclipped(int16_t x, int16_t y, - int16_t w, int16_t h, - uint16_t color) { - setAddrWindow(x, y, w, h); - writeColor(color, (uint32_t)w * h); -} - -// ------------------------------------------------------------------------- -// Ever-so-slightly higher-level graphics operations. Similar to the 'write' -// functions above, but these contain their own chip-select and SPI -// transactions as needed (via startWrite(), endWrite()). They're typically -// used solo -- as graphics primitives in themselves, not invoked by higher- -// level primitives (which should use the functions above for better -// performance). - -/*! - @brief Draw a single pixel to the display at requested coordinates. - Self-contained and provides its own transaction as needed - (see writePixel(x,y,color) for a lower-level variant). - Edge clipping is performed here. - @param x Horizontal position (0 = left). - @param y Vertical position (0 = top). - @param color 16-bit pixel color in '565' RGB format. -*/ -void Adafruit_SPITFT::drawPixel(int16_t x, int16_t y, uint16_t color) { - // Clip first... - if ((x >= 0) && (x < _width) && (y >= 0) && (y < _height)) { - // THEN set up transaction (if needed) and draw... - startWrite(); - setAddrWindow(x, y, 1, 1); - SPI_WRITE16(color); - endWrite(); - } -} - -/*! - @brief Draw a filled rectangle to the display. Self-contained and - provides its own transaction as needed (see writeFillRect() or - writeFillRectPreclipped() for lower-level variants). Edge - clipping and rejection is performed here. - @param x Horizontal position of first corner. - @param y Vertical position of first corner. - @param w Rectangle width in pixels (positive = right of first - corner, negative = left of first corner). - @param h Rectangle height in pixels (positive = below first - corner, negative = above first corner). - @param color 16-bit fill color in '565' RGB format. - @note This repeats the writeFillRect() function almost in its entirety, - with the addition of a transaction start/end. It's done this way - (rather than starting the transaction and calling writeFillRect() - to handle clipping and so forth) so that the transaction isn't - performed at all if the rectangle is rejected. It's really not - that much code. -*/ -void Adafruit_SPITFT::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color) { - if (w && h) { // Nonzero width and height? - if (w < 0) { // If negative width... - x += w + 1; // Move X to left edge - w = -w; // Use positive width - } - if (x < _width) { // Not off right - if (h < 0) { // If negative height... - y += h + 1; // Move Y to top edge - h = -h; // Use positive height - } - if (y < _height) { // Not off bottom - int16_t x2 = x + w - 1; - if (x2 >= 0) { // Not off left - int16_t y2 = y + h - 1; - if (y2 >= 0) { // Not off top - // Rectangle partly or fully overlaps screen - if (x < 0) { - x = 0; - w = x2 + 1; - } // Clip left - if (y < 0) { - y = 0; - h = y2 + 1; - } // Clip top - if (x2 >= _width) { - w = _width - x; - } // Clip right - if (y2 >= _height) { - h = _height - y; - } // Clip bottom - startWrite(); - writeFillRectPreclipped(x, y, w, h, color); - endWrite(); - } - } - } - } - } -} - -/*! - @brief Draw a horizontal line on the display. Self-contained and - provides its own transaction as needed (see writeFastHLine() for - a lower-level variant). Edge clipping and rejection is performed - here. - @param x Horizontal position of first point. - @param y Vertical position of first point. - @param w Line width in pixels (positive = right of first point, - negative = point of first corner). - @param color 16-bit line color in '565' RGB format. - @note This repeats the writeFastHLine() function almost in its - entirety, with the addition of a transaction start/end. It's - done this way (rather than starting the transaction and calling - writeFastHLine() to handle clipping and so forth) so that the - transaction isn't performed at all if the line is rejected. -*/ -void Adafruit_SPITFT::drawFastHLine(int16_t x, int16_t y, int16_t w, - uint16_t color) { - if ((y >= 0) && (y < _height) && w) { // Y on screen, nonzero width - if (w < 0) { // If negative width... - x += w + 1; // Move X to left edge - w = -w; // Use positive width - } - if (x < _width) { // Not off right - int16_t x2 = x + w - 1; - if (x2 >= 0) { // Not off left - // Line partly or fully overlaps screen - if (x < 0) { - x = 0; - w = x2 + 1; - } // Clip left - if (x2 >= _width) { - w = _width - x; - } // Clip right - startWrite(); - writeFillRectPreclipped(x, y, w, 1, color); - endWrite(); - } - } - } -} - -/*! - @brief Draw a vertical line on the display. Self-contained and provides - its own transaction as needed (see writeFastHLine() for a lower- - level variant). Edge clipping and rejection is performed here. - @param x Horizontal position of first point. - @param y Vertical position of first point. - @param h Line height in pixels (positive = below first point, - negative = above first point). - @param color 16-bit line color in '565' RGB format. - @note This repeats the writeFastVLine() function almost in its - entirety, with the addition of a transaction start/end. It's - done this way (rather than starting the transaction and calling - writeFastVLine() to handle clipping and so forth) so that the - transaction isn't performed at all if the line is rejected. -*/ -void Adafruit_SPITFT::drawFastVLine(int16_t x, int16_t y, int16_t h, - uint16_t color) { - if ((x >= 0) && (x < _width) && h) { // X on screen, nonzero height - if (h < 0) { // If negative height... - y += h + 1; // Move Y to top edge - h = -h; // Use positive height - } - if (y < _height) { // Not off bottom - int16_t y2 = y + h - 1; - if (y2 >= 0) { // Not off top - // Line partly or fully overlaps screen - if (y < 0) { - y = 0; - h = y2 + 1; - } // Clip top - if (y2 >= _height) { - h = _height - y; - } // Clip bottom - startWrite(); - writeFillRectPreclipped(x, y, 1, h, color); - endWrite(); - } - } - } -} - -/*! - @brief Essentially writePixel() with a transaction around it. I don't - think this is in use by any of our code anymore (believe it was - for some older BMP-reading examples), but is kept here in case - any user code relies on it. Consider it DEPRECATED. - @param color 16-bit pixel color in '565' RGB format. -*/ -void Adafruit_SPITFT::pushColor(uint16_t color) { - startWrite(); - SPI_WRITE16(color); - endWrite(); -} - -/*! - @brief Draw a 16-bit image (565 RGB) at the specified (x,y) position. - For 16-bit display devices; no color reduction performed. - Adapted from https://github.com/PaulStoffregen/ILI9341_t3 - by Marc MERLIN. See examples/pictureEmbed to use this. - 5/6/2017: function name and arguments have changed for - compatibility with current GFX library and to avoid naming - problems in prior implementation. Formerly drawBitmap() with - arguments in different order. Handles its own transaction and - edge clipping/rejection. - @param x Top left corner horizontal coordinate. - @param y Top left corner vertical coordinate. - @param pcolors Pointer to 16-bit array of pixel values. - @param w Width of bitmap in pixels. - @param h Height of bitmap in pixels. -*/ -void Adafruit_SPITFT::drawRGBBitmap(int16_t x, int16_t y, uint16_t *pcolors, - int16_t w, int16_t h) { - - int16_t x2, y2; // Lower-right coord - if ((x >= _width) || // Off-edge right - (y >= _height) || // " top - ((x2 = (x + w - 1)) < 0) || // " left - ((y2 = (y + h - 1)) < 0)) - return; // " bottom - - int16_t bx1 = 0, by1 = 0, // Clipped top-left within bitmap - saveW = w; // Save original bitmap width value - if (x < 0) { // Clip left - w += x; - bx1 = -x; - x = 0; - } - if (y < 0) { // Clip top - h += y; - by1 = -y; - y = 0; - } - if (x2 >= _width) - w = _width - x; // Clip right - if (y2 >= _height) - h = _height - y; // Clip bottom - - pcolors += by1 * saveW + bx1; // Offset bitmap ptr to clipped top-left - startWrite(); - setAddrWindow(x, y, w, h); // Clipped area - while (h--) { // For each (clipped) scanline... - writePixels(pcolors, w); // Push one (clipped) row - pcolors += saveW; // Advance pointer by one full (unclipped) line - } - endWrite(); -} - -// ------------------------------------------------------------------------- -// Miscellaneous class member functions that don't draw anything. - -/*! - @brief Invert the colors of the display (if supported by hardware). - Self-contained, no transaction setup required. - @param i true = inverted display, false = normal display. -*/ -void Adafruit_SPITFT::invertDisplay(bool i) { - startWrite(); - writeCommand(i ? invertOnCommand : invertOffCommand); - endWrite(); -} - -/*! - @brief Given 8-bit red, green and blue values, return a 'packed' - 16-bit color value in '565' RGB format (5 bits red, 6 bits - green, 5 bits blue). This is just a mathematical operation, - no hardware is touched. - @param red 8-bit red brightnesss (0 = off, 255 = max). - @param green 8-bit green brightnesss (0 = off, 255 = max). - @param blue 8-bit blue brightnesss (0 = off, 255 = max). - @return 'Packed' 16-bit color value (565 format). -*/ -uint16_t Adafruit_SPITFT::color565(uint8_t red, uint8_t green, uint8_t blue) { - return ((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3); -} - -/*! -@brief Adafruit_SPITFT Send Command handles complete sending of commands and -data -@param commandByte The Command Byte -@param dataBytes A pointer to the Data bytes to send -@param numDataBytes The number of bytes we should send -*/ -void Adafruit_SPITFT::sendCommand(uint8_t commandByte, uint8_t *dataBytes, - uint8_t numDataBytes) { - SPI_BEGIN_TRANSACTION(); - if (_cs >= 0) - SPI_CS_LOW(); - - SPI_DC_LOW(); // Command mode - spiWrite(commandByte); // Send the command byte - - SPI_DC_HIGH(); - for (int i = 0; i < numDataBytes; i++) { - if ((connection == TFT_PARALLEL) && tft8.wide) { - SPI_WRITE16(*(uint16_t *)dataBytes); - dataBytes += 2; - } else { - spiWrite(*dataBytes); // Send the data bytes - dataBytes++; - } - } - - if (_cs >= 0) - SPI_CS_HIGH(); - SPI_END_TRANSACTION(); -} - -/*! - @brief Adafruit_SPITFT Send Command handles complete sending of commands and - data - @param commandByte The Command Byte - @param dataBytes A pointer to the Data bytes to send - @param numDataBytes The number of bytes we should send - */ -void Adafruit_SPITFT::sendCommand(uint8_t commandByte, const uint8_t *dataBytes, - uint8_t numDataBytes) { - SPI_BEGIN_TRANSACTION(); - if (_cs >= 0) - SPI_CS_LOW(); - - SPI_DC_LOW(); // Command mode - spiWrite(commandByte); // Send the command byte - - SPI_DC_HIGH(); - for (int i = 0; i < numDataBytes; i++) { - if ((connection == TFT_PARALLEL) && tft8.wide) { - SPI_WRITE16(*(uint16_t *)dataBytes); - dataBytes += 2; - } else { - spiWrite(pgm_read_byte(dataBytes++)); - } - } - - if (_cs >= 0) - SPI_CS_HIGH(); - SPI_END_TRANSACTION(); -} - -/*! - @brief Adafruit_SPITFT sendCommand16 handles complete sending of - commands and data for 16-bit parallel displays. Currently somewhat - rigged for the NT35510, which has the odd behavior of wanting - commands 16-bit, but subsequent data as 8-bit values, despite - the 16-bit bus (high byte is always 0). Also seems to require - issuing and incrementing address with each transfer. - @param commandWord The command word (16 bits) - @param dataBytes A pointer to the data bytes to send - @param numDataBytes The number of bytes we should send - */ -void Adafruit_SPITFT::sendCommand16(uint16_t commandWord, - const uint8_t *dataBytes, - uint8_t numDataBytes) { - SPI_BEGIN_TRANSACTION(); - if (_cs >= 0) - SPI_CS_LOW(); - - if (numDataBytes == 0) { - SPI_DC_LOW(); // Command mode - SPI_WRITE16(commandWord); // Send the command word - SPI_DC_HIGH(); // Data mode - } - for (int i = 0; i < numDataBytes; i++) { - SPI_DC_LOW(); // Command mode - SPI_WRITE16(commandWord); // Send the command word - SPI_DC_HIGH(); // Data mode - commandWord++; - SPI_WRITE16((uint16_t)pgm_read_byte(dataBytes++)); - } - - if (_cs >= 0) - SPI_CS_HIGH(); - SPI_END_TRANSACTION(); -} - -/*! - @brief Read 8 bits of data from display configuration memory (not RAM). - This is highly undocumented/supported and should be avoided, - function is only included because some of the examples use it. - @param commandByte - The command register to read data from. - @param index - The byte index into the command to read from. - @return Unsigned 8-bit data read from display register. - */ -/**************************************************************************/ -uint8_t Adafruit_SPITFT::readcommand8(uint8_t commandByte, uint8_t index) { - uint8_t result; - startWrite(); - SPI_DC_LOW(); // Command mode - spiWrite(commandByte); - SPI_DC_HIGH(); // Data mode - do { - result = spiRead(); - } while (index--); // Discard bytes up to index'th - endWrite(); - return result; -} - -/*! - @brief Read 16 bits of data from display register. - For 16-bit parallel displays only. - @param addr Command/register to access. - @return Unsigned 16-bit data. - */ -uint16_t Adafruit_SPITFT::readcommand16(uint16_t addr) { -#if defined(USE_FAST_PINIO) // NOT SUPPORTED without USE_FAST_PINIO - uint16_t result = 0; - if ((connection == TFT_PARALLEL) && tft8.wide) { - startWrite(); - SPI_DC_LOW(); // Command mode - SPI_WRITE16(addr); - SPI_DC_HIGH(); // Data mode - TFT_RD_LOW(); // Read line LOW -#if defined(HAS_PORT_SET_CLR) - *(volatile uint16_t *)tft8.dirClr = 0xFFFF; // Input state - result = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.dirSet = 0xFFFF; // Output state -#else // !HAS_PORT_SET_CLR - *(volatile uint16_t *)tft8.portDir = 0x0000; // Input state - result = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.portDir = 0xFFFF; // Output state -#endif // end !HAS_PORT_SET_CLR - TFT_RD_HIGH(); // Read line HIGH - endWrite(); - } - return result; -#else - (void)addr; // disable -Wunused-parameter warning - return 0; -#endif // end !USE_FAST_PINIO -} - -// ------------------------------------------------------------------------- -// Lowest-level hardware-interfacing functions. Many of these are inline and -// compile to different things based on #defines -- typically just a few -// instructions. Others, not so much, those are not inlined. - -/*! - @brief Start an SPI transaction if using the hardware SPI interface to - the display. If using an earlier version of the Arduino platform - (before the addition of SPI transactions), this instead attempts - to set up the SPI clock and mode. No action is taken if the - connection is not hardware SPI-based. This does NOT include a - chip-select operation -- see startWrite() for a function that - encapsulated both actions. -*/ -inline void Adafruit_SPITFT::SPI_BEGIN_TRANSACTION(void) { - if (connection == TFT_HARD_SPI) { -#if defined(SPI_HAS_TRANSACTION) - hwspi._spi->beginTransaction(hwspi.settings); -#else // No transactions, configure SPI manually... -#if defined(__AVR__) || defined(TEENSYDUINO) || defined(ARDUINO_ARCH_STM32F1) - hwspi._spi->setClockDivider(SPI_CLOCK_DIV2); -#elif defined(__arm__) - hwspi._spi->setClockDivider(11); -#elif defined(ESP8266) || defined(ESP32) - hwspi._spi->setFrequency(hwspi._freq); -#elif defined(RASPI) || defined(ARDUINO_ARCH_STM32F1) - hwspi._spi->setClock(hwspi._freq); -#endif - hwspi._spi->setBitOrder(MSBFIRST); - hwspi._spi->setDataMode(hwspi._mode); -#endif // end !SPI_HAS_TRANSACTION - } -} - -/*! - @brief End an SPI transaction if using the hardware SPI interface to - the display. No action is taken if the connection is not - hardware SPI-based or if using an earlier version of the Arduino - platform (before the addition of SPI transactions). This does - NOT include a chip-deselect operation -- see endWrite() for a - function that encapsulated both actions. -*/ -inline void Adafruit_SPITFT::SPI_END_TRANSACTION(void) { -#if defined(SPI_HAS_TRANSACTION) - if (connection == TFT_HARD_SPI) { - hwspi._spi->endTransaction(); - } -#endif -} - -/*! - @brief Issue a single 8-bit value to the display. Chip-select, - transaction and data/command selection must have been - previously set -- this ONLY issues the byte. This is another of - those functions in the library with a now-not-accurate name - that's being maintained for compatibility with outside code. - This function is used even if display connection is parallel. - @param b 8-bit value to write. -*/ -void Adafruit_SPITFT::spiWrite(uint8_t b) { - if (connection == TFT_HARD_SPI) { -#if defined(__AVR__) - AVR_WRITESPI(b); -#elif defined(ESP8266) || defined(ESP32) - hwspi._spi->write(b); -#elif defined(ARDUINO_ARCH_RP2040) - spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1; - spi_write_blocking(pi_spi, &b, 1); -#else - hwspi._spi->transfer(b); -#endif - } else if (connection == TFT_SOFT_SPI) { - for (uint8_t bit = 0; bit < 8; bit++) { - if (b & 0x80) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - b <<= 1; - SPI_SCK_LOW(); - } - } else { // TFT_PARALLEL -#if defined(__AVR__) - *tft8.writePort = b; -#elif defined(USE_FAST_PINIO) - if (!tft8.wide) - *tft8.writePort = b; - else - *(volatile uint16_t *)tft8.writePort = b; -#endif - TFT_WR_STROBE(); - } -} - -/*! - @brief Write a single command byte to the display. Chip-select and - transaction must have been previously set -- this ONLY sets - the device to COMMAND mode, issues the byte and then restores - DATA mode. There is no corresponding explicit writeData() - function -- just use spiWrite(). - @param cmd 8-bit command to write. -*/ -void Adafruit_SPITFT::writeCommand(uint8_t cmd) { - SPI_DC_LOW(); - spiWrite(cmd); - SPI_DC_HIGH(); -} - -/*! - @brief Read a single 8-bit value from the display. Chip-select and - transaction must have been previously set -- this ONLY reads - the byte. This is another of those functions in the library - with a now-not-accurate name that's being maintained for - compatibility with outside code. This function is used even if - display connection is parallel. - @return Unsigned 8-bit value read (always zero if USE_FAST_PINIO is - not supported by the MCU architecture). -*/ -uint8_t Adafruit_SPITFT::spiRead(void) { - uint8_t b = 0; - uint16_t w = 0; - if (connection == TFT_HARD_SPI) { - return hwspi._spi->transfer((uint8_t)0); - } else if (connection == TFT_SOFT_SPI) { - if (swspi._miso >= 0) { - for (uint8_t i = 0; i < 8; i++) { - SPI_SCK_HIGH(); - b <<= 1; - if (SPI_MISO_READ()) - b++; - SPI_SCK_LOW(); - } - } - return b; - } else { // TFT_PARALLEL - if (tft8._rd >= 0) { -#if defined(USE_FAST_PINIO) - TFT_RD_LOW(); // Read line LOW -#if defined(__AVR__) - *tft8.portDir = 0x00; // Set port to input state - w = *tft8.readPort; // Read value from port - *tft8.portDir = 0xFF; // Restore port to output -#else // !__AVR__ - if (!tft8.wide) { // 8-bit TFT connection -#if defined(HAS_PORT_SET_CLR) - *tft8.dirClr = 0xFF; // Set port to input state - w = *tft8.readPort; // Read value from port - *tft8.dirSet = 0xFF; // Restore port to output -#else // !HAS_PORT_SET_CLR - *tft8.portDir = 0x00; // Set port to input state - w = *tft8.readPort; // Read value from port - *tft8.portDir = 0xFF; // Restore port to output -#endif // end HAS_PORT_SET_CLR - } else { // 16-bit TFT connection -#if defined(HAS_PORT_SET_CLR) - *(volatile uint16_t *)tft8.dirClr = 0xFFFF; // Input state - w = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.dirSet = 0xFFFF; // Output state -#else // !HAS_PORT_SET_CLR - *(volatile uint16_t *)tft8.portDir = 0x0000; // Input state - w = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.portDir = 0xFFFF; // Output state -#endif // end !HAS_PORT_SET_CLR - } - TFT_RD_HIGH(); // Read line HIGH -#endif // end !__AVR__ -#else // !USE_FAST_PINIO - w = 0; // Parallel TFT is NOT SUPPORTED without USE_FAST_PINIO -#endif // end !USE_FAST_PINIO - } - return w; - } -} - -/*! - @brief Issue a single 16-bit value to the display. Chip-select, - transaction and data/command selection must have been - previously set -- this ONLY issues the word. - Thus operates ONLY on 'wide' (16-bit) parallel displays! - @param w 16-bit value to write. -*/ -void Adafruit_SPITFT::write16(uint16_t w) { - if (connection == TFT_PARALLEL) { -#if defined(USE_FAST_PINIO) - if (tft8.wide) - *(volatile uint16_t *)tft8.writePort = w; -#else - (void)w; // disable -Wunused-parameter warning -#endif - TFT_WR_STROBE(); - } -} - -/*! - @brief Write a single command word to the display. Chip-select and - transaction must have been previously set -- this ONLY sets - the device to COMMAND mode, issues the byte and then restores - DATA mode. This operates ONLY on 'wide' (16-bit) parallel - displays! - @param cmd 16-bit command to write. -*/ -void Adafruit_SPITFT::writeCommand16(uint16_t cmd) { - SPI_DC_LOW(); - write16(cmd); - SPI_DC_HIGH(); -} - -/*! - @brief Read a single 16-bit value from the display. Chip-select and - transaction must have been previously set -- this ONLY reads - the byte. This operates ONLY on 'wide' (16-bit) parallel - displays! - @return Unsigned 16-bit value read (always zero if USE_FAST_PINIO is - not supported by the MCU architecture). -*/ -uint16_t Adafruit_SPITFT::read16(void) { - uint16_t w = 0; - if (connection == TFT_PARALLEL) { - if (tft8._rd >= 0) { -#if defined(USE_FAST_PINIO) - TFT_RD_LOW(); // Read line LOW - if (tft8.wide) { // 16-bit TFT connection -#if defined(HAS_PORT_SET_CLR) - *(volatile uint16_t *)tft8.dirClr = 0xFFFF; // Input state - w = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.dirSet = 0xFFFF; // Output state -#else // !HAS_PORT_SET_CLR - *(volatile uint16_t *)tft8.portDir = 0x0000; // Input state - w = *(volatile uint16_t *)tft8.readPort; // 16-bit read - *(volatile uint16_t *)tft8.portDir = 0xFFFF; // Output state -#endif // end !HAS_PORT_SET_CLR - } - TFT_RD_HIGH(); // Read line HIGH -#else // !USE_FAST_PINIO - w = 0; // Parallel TFT is NOT SUPPORTED without USE_FAST_PINIO -#endif // end !USE_FAST_PINIO - } - } - return w; -} - -/*! - @brief Set the software (bitbang) SPI MOSI line HIGH. -*/ -inline void Adafruit_SPITFT::SPI_MOSI_HIGH(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *swspi.mosiPortSet = 1; -#else // !KINETISK - *swspi.mosiPortSet = swspi.mosiPinMask; -#endif -#else // !HAS_PORT_SET_CLR - *swspi.mosiPort |= swspi.mosiPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(swspi._mosi, HIGH); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Set the software (bitbang) SPI MOSI line LOW. -*/ -inline void Adafruit_SPITFT::SPI_MOSI_LOW(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *swspi.mosiPortClr = 1; -#else // !KINETISK - *swspi.mosiPortClr = swspi.mosiPinMask; -#endif -#else // !HAS_PORT_SET_CLR - *swspi.mosiPort &= swspi.mosiPinMaskClr; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(swspi._mosi, LOW); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Set the software (bitbang) SPI SCK line HIGH. -*/ -inline void Adafruit_SPITFT::SPI_SCK_HIGH(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *swspi.sckPortSet = 1; -#else // !KINETISK - *swspi.sckPortSet = swspi.sckPinMask; -#endif -#else // !HAS_PORT_SET_CLR - *swspi.sckPort |= swspi.sckPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(swspi._sck, HIGH); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Set the software (bitbang) SPI SCK line LOW. -*/ -inline void Adafruit_SPITFT::SPI_SCK_LOW(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *swspi.sckPortClr = 1; -#else // !KINETISK - *swspi.sckPortClr = swspi.sckPinMask; -#endif -#else // !HAS_PORT_SET_CLR - *swspi.sckPort &= swspi.sckPinMaskClr; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(swspi._sck, LOW); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Read the state of the software (bitbang) SPI MISO line. - @return true if HIGH, false if LOW. -*/ -inline bool Adafruit_SPITFT::SPI_MISO_READ(void) { -#if defined(USE_FAST_PINIO) -#if defined(KINETISK) - return *swspi.misoPort; -#else // !KINETISK - return *swspi.misoPort & swspi.misoPinMask; -#endif // end !KINETISK -#else // !USE_FAST_PINIO - return digitalRead(swspi._miso); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Issue a single 16-bit value to the display. Chip-select, - transaction and data/command selection must have been - previously set -- this ONLY issues the word. Despite the name, - this function is used even if display connection is parallel; - name was maintaned for backward compatibility. Naming is also - not consistent with the 8-bit version, spiWrite(). Sorry about - that. Again, staying compatible with outside code. - @param w 16-bit value to write. -*/ -void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) { - if (connection == TFT_HARD_SPI) { -#if defined(__AVR__) - AVR_WRITESPI(w >> 8); - AVR_WRITESPI(w); -#elif defined(ESP8266) || defined(ESP32) - hwspi._spi->write16(w); -#elif defined(ARDUINO_ARCH_RP2040) - spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1; - w = __builtin_bswap16(w); - spi_write_blocking(pi_spi, (uint8_t *)&w, 2); -#else - // MSB, LSB because TFTs are generally big-endian - hwspi._spi->transfer(w >> 8); - hwspi._spi->transfer(w); -#endif - } else if (connection == TFT_SOFT_SPI) { - for (uint8_t bit = 0; bit < 16; bit++) { - if (w & 0x8000) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - SPI_SCK_LOW(); - w <<= 1; - } - } else { // TFT_PARALLEL -#if defined(__AVR__) - *tft8.writePort = w >> 8; - TFT_WR_STROBE(); - *tft8.writePort = w; -#elif defined(USE_FAST_PINIO) - if (!tft8.wide) { - *tft8.writePort = w >> 8; - TFT_WR_STROBE(); - *tft8.writePort = w; - } else { - *(volatile uint16_t *)tft8.writePort = w; - } -#endif - TFT_WR_STROBE(); - } -} - -/*! - @brief Issue a single 32-bit value to the display. Chip-select, - transaction and data/command selection must have been - previously set -- this ONLY issues the longword. Despite the - name, this function is used even if display connection is - parallel; name was maintaned for backward compatibility. Naming - is also not consistent with the 8-bit version, spiWrite(). - Sorry about that. Again, staying compatible with outside code. - @param l 32-bit value to write. -*/ -void Adafruit_SPITFT::SPI_WRITE32(uint32_t l) { - if (connection == TFT_HARD_SPI) { -#if defined(__AVR__) - AVR_WRITESPI(l >> 24); - AVR_WRITESPI(l >> 16); - AVR_WRITESPI(l >> 8); - AVR_WRITESPI(l); -#elif defined(ESP8266) || defined(ESP32) - hwspi._spi->write32(l); -#elif defined(ARDUINO_ARCH_RP2040) - spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1; - l = __builtin_bswap32(l); - spi_write_blocking(pi_spi, (uint8_t *)&l, 4); -#else - hwspi._spi->transfer(l >> 24); - hwspi._spi->transfer(l >> 16); - hwspi._spi->transfer(l >> 8); - hwspi._spi->transfer(l); -#endif - } else if (connection == TFT_SOFT_SPI) { - for (uint8_t bit = 0; bit < 32; bit++) { - if (l & 0x80000000) - SPI_MOSI_HIGH(); - else - SPI_MOSI_LOW(); - SPI_SCK_HIGH(); - SPI_SCK_LOW(); - l <<= 1; - } - } else { // TFT_PARALLEL -#if defined(__AVR__) - *tft8.writePort = l >> 24; - TFT_WR_STROBE(); - *tft8.writePort = l >> 16; - TFT_WR_STROBE(); - *tft8.writePort = l >> 8; - TFT_WR_STROBE(); - *tft8.writePort = l; -#elif defined(USE_FAST_PINIO) - if (!tft8.wide) { - *tft8.writePort = l >> 24; - TFT_WR_STROBE(); - *tft8.writePort = l >> 16; - TFT_WR_STROBE(); - *tft8.writePort = l >> 8; - TFT_WR_STROBE(); - *tft8.writePort = l; - } else { - *(volatile uint16_t *)tft8.writePort = l >> 16; - TFT_WR_STROBE(); - *(volatile uint16_t *)tft8.writePort = l; - } -#endif - TFT_WR_STROBE(); - } -} - -/*! - @brief Set the WR line LOW, then HIGH. Used for parallel-connected - interfaces when writing data. -*/ -inline void Adafruit_SPITFT::TFT_WR_STROBE(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *tft8.wrPortClr = 1; - *tft8.wrPortSet = 1; -#else // !KINETISK - *tft8.wrPortClr = tft8.wrPinMask; - *tft8.wrPortSet = tft8.wrPinMask; -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - *tft8.wrPort &= tft8.wrPinMaskClr; - *tft8.wrPort |= tft8.wrPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(tft8._wr, LOW); - digitalWrite(tft8._wr, HIGH); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Set the RD line HIGH. Used for parallel-connected interfaces - when reading data. -*/ -inline void Adafruit_SPITFT::TFT_RD_HIGH(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) - *tft8.rdPortSet = tft8.rdPinMask; -#else // !HAS_PORT_SET_CLR - *tft8.rdPort |= tft8.rdPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(tft8._rd, HIGH); -#endif // end !USE_FAST_PINIO -} - -/*! - @brief Set the RD line LOW. Used for parallel-connected interfaces - when reading data. -*/ -inline void Adafruit_SPITFT::TFT_RD_LOW(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) - *tft8.rdPortClr = tft8.rdPinMask; -#else // !HAS_PORT_SET_CLR - *tft8.rdPort &= tft8.rdPinMaskClr; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(tft8._rd, LOW); -#endif // end !USE_FAST_PINIO -} - -#endif // end __AVR_ATtiny85__ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.h deleted file mode 100644 index 8064a74..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT.h +++ /dev/null @@ -1,530 +0,0 @@ -/*! - * @file Adafruit_SPITFT.h - * - * Part of Adafruit's GFX graphics library. Originally this class was - * written to handle a range of color TFT displays connected via SPI, - * but over time this library and some display-specific subclasses have - * mutated to include some color OLEDs as well as parallel-interfaced - * displays. The name's been kept for the sake of older code. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Limor "ladyada" Fried for Adafruit Industries, - * with contributions from the open source community. - * - * BSD license, all text here must be included in any redistribution. - */ - -#ifndef _ADAFRUIT_SPITFT_H_ -#define _ADAFRUIT_SPITFT_H_ - -#if !defined(__AVR_ATtiny85__) // Not for ATtiny, at all - -#include "Adafruit_GFX.h" -#include - -// HARDWARE CONFIG --------------------------------------------------------- - -#if defined(__AVR__) -typedef uint8_t ADAGFX_PORT_t; ///< PORT values are 8-bit -#define USE_FAST_PINIO ///< Use direct PORT register access -#elif defined(ARDUINO_STM32_FEATHER) // WICED -typedef class HardwareSPI SPIClass; ///< SPI is a bit odd on WICED -typedef uint32_t ADAGFX_PORT_t; ///< PORT values are 32-bit -#elif defined(__arm__) -#if defined(ARDUINO_ARCH_SAMD) -// Adafruit M0, M4 -typedef uint32_t ADAGFX_PORT_t; ///< PORT values are 32-bit -#define USE_FAST_PINIO ///< Use direct PORT register access -#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers -#elif defined(CORE_TEENSY) -// PJRC Teensy 4.x -#if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x -typedef uint32_t ADAGFX_PORT_t; ///< PORT values are 32-bit - // PJRC Teensy 3.x -#else -typedef uint8_t ADAGFX_PORT_t; ///< PORT values are 8-bit -#endif -#define USE_FAST_PINIO ///< Use direct PORT register access -#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers -#else -// Arduino Due? -typedef uint32_t ADAGFX_PORT_t; ///< PORT values are 32-bit -// USE_FAST_PINIO not available here (yet)...Due has a totally different -// GPIO register set and will require some changes elsewhere (e.g. in -// constructors especially). -#endif -#else // !ARM -// Probably ESP8266 or ESP32. USE_FAST_PINIO is not available here (yet) -// but don't worry about it too much...the digitalWrite() implementation -// on these platforms is reasonably efficient and already RAM-resident, -// only gotcha then is no parallel connection support for now. -typedef uint32_t ADAGFX_PORT_t; ///< PORT values are 32-bit -#endif // end !ARM -typedef volatile ADAGFX_PORT_t *PORTreg_t; ///< PORT register type - -#if defined(__AVR__) -#define DEFAULT_SPI_FREQ 8000000L ///< Hardware SPI default speed -#else -#define DEFAULT_SPI_FREQ 16000000L ///< Hardware SPI default speed -#endif - -#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYPORTAL_M4_TITANO) || \ - defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || \ - defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || \ - defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) || defined(NRF52_SERIES) || \ - defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) -#define USE_SPI_DMA ///< Auto DMA -#else - //#define USE_SPI_DMA ///< If set, - // use DMA if available -#endif -// Another "oops" name -- this now also handles parallel DMA. -// If DMA is enabled, Arduino sketch MUST #include -// Estimated RAM usage: -// 4 bytes/pixel on display major axis + 8 bytes/pixel on minor axis, -// e.g. 320x240 pixels = 320 * 4 + 240 * 8 = 3,200 bytes. - -#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) -#include -#endif - -// This is kind of a kludge. Needed a way to disambiguate the software SPI -// and parallel constructors via their argument lists. Originally tried a -// bool as the first argument to the parallel constructor (specifying 8-bit -// vs 16-bit interface) but the compiler regards this as equivalent to an -// integer and thus still ambiguous. SO...the parallel constructor requires -// an enumerated type as the first argument: tft8 (for 8-bit parallel) or -// tft16 (for 16-bit)...even though 16-bit isn't fully implemented or tested -// and might never be, still needed that disambiguation from soft SPI. -/*! For first arg to parallel constructor */ -enum tftBusWidth { tft8bitbus, tft16bitbus }; - -// CLASS DEFINITION -------------------------------------------------------- - -/*! - @brief Adafruit_SPITFT is an intermediary class between Adafruit_GFX - and various hardware-specific subclasses for different displays. - It handles certain operations that are common to a range of - displays (address window, area fills, etc.). Originally these were - all color TFT displays interfaced via SPI, but it's since expanded - to include color OLEDs and parallel-interfaced TFTs. THE NAME HAS - BEEN KEPT TO AVOID BREAKING A LOT OF SUBCLASSES AND EXAMPLE CODE. - Many of the class member functions similarly live on with names - that don't necessarily accurately describe what they're doing, - again to avoid breaking a lot of other code. If in doubt, read - the comments. -*/ -class Adafruit_SPITFT : public Adafruit_GFX { - -public: - // CONSTRUCTORS -------------------------------------------------------- - - // Software SPI constructor: expects width & height (at default rotation - // setting 0), 4 signal pins (cs, dc, mosi, sclk), 2 optional pins - // (reset, miso). cs argument is required but can be -1 if unused -- - // rather than moving it to the optional arguments, it was done this way - // to avoid breaking existing code (-1 option was a later addition). - Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, int8_t mosi, - int8_t sck, int8_t rst = -1, int8_t miso = -1); - - // Hardware SPI constructor using the default SPI port: expects width & - // height (at default rotation setting 0), 2 signal pins (cs, dc), - // optional reset pin. cs is required but can be -1 if unused -- rather - // than moving it to the optional arguments, it was done this way to - // avoid breaking existing code (-1 option was a later addition). - Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t rst = -1); - -#if !defined(ESP8266) // See notes in .cpp - // Hardware SPI constructor using an arbitrary SPI peripheral: expects - // width & height (rotation 0), SPIClass pointer, 2 signal pins (cs, dc) - // and optional reset pin. cs is required but can be -1 if unused. - Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass, int8_t cs, - int8_t dc, int8_t rst = -1); -#endif // end !ESP8266 - - // Parallel constructor: expects width & height (rotation 0), flag - // indicating whether 16-bit (true) or 8-bit (false) interface, 3 signal - // pins (d0, wr, dc), 3 optional pins (cs, rst, rd). 16-bit parallel - // isn't even fully implemented but the 'wide' flag was added as a - // required argument to avoid ambiguity with other constructors. - Adafruit_SPITFT(uint16_t w, uint16_t h, tftBusWidth busWidth, int8_t d0, - int8_t wr, int8_t dc, int8_t cs = -1, int8_t rst = -1, - int8_t rd = -1); - - // DESTRUCTOR ---------------------------------------------------------- - - ~Adafruit_SPITFT(){}; - - // CLASS MEMBER FUNCTIONS ---------------------------------------------- - - // These first two functions MUST be declared by subclasses: - - /*! - @brief Display-specific initialization function. - @param freq SPI frequency, in hz (or 0 for default or unused). - */ - virtual void begin(uint32_t freq) = 0; - - /*! - @brief Set up the specific display hardware's "address window" - for subsequent pixel-pushing operations. - @param x Leftmost pixel of area to be drawn (MUST be within - display bounds at current rotation setting). - @param y Topmost pixel of area to be drawn (MUST be within - display bounds at current rotation setting). - @param w Width of area to be drawn, in pixels (MUST be >0 and, - added to x, within display bounds at current rotation). - @param h Height of area to be drawn, in pixels (MUST be >0 and, - added to x, within display bounds at current rotation). - */ - virtual void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, - uint16_t h) = 0; - - // Remaining functions do not need to be declared in subclasses - // unless they wish to provide hardware-specific optimizations. - // Brief comments here...documented more thoroughly in .cpp file. - - // Subclass' begin() function invokes this to initialize hardware. - // freq=0 to use default SPI speed. spiMode must be one of the SPI_MODEn - // values defined in SPI.h, which are NOT the same as 0 for SPI_MODE0, - // 1 for SPI_MODE1, etc...use ONLY the SPI_MODEn defines! Only! - // Name is outdated (interface may be parallel) but for compatibility: - void initSPI(uint32_t freq = 0, uint8_t spiMode = SPI_MODE0); - void setSPISpeed(uint32_t freq); - // Chip select and/or hardware SPI transaction start as needed: - void startWrite(void); - // Chip deselect and/or hardware SPI transaction end as needed: - void endWrite(void); - void sendCommand(uint8_t commandByte, uint8_t *dataBytes, - uint8_t numDataBytes); - void sendCommand(uint8_t commandByte, const uint8_t *dataBytes = NULL, - uint8_t numDataBytes = 0); - void sendCommand16(uint16_t commandWord, const uint8_t *dataBytes = NULL, - uint8_t numDataBytes = 0); - uint8_t readcommand8(uint8_t commandByte, uint8_t index = 0); - uint16_t readcommand16(uint16_t addr); - - // These functions require a chip-select and/or SPI transaction - // around them. Higher-level graphics primitives might start a - // single transaction and then make multiple calls to these functions - // (e.g. circle or text rendering might make repeated lines or rects) - // before ending the transaction. It's more efficient than starting a - // transaction every time. - void writePixel(int16_t x, int16_t y, uint16_t color); - void writePixels(uint16_t *colors, uint32_t len, bool block = true, - bool bigEndian = false); - void writeColor(uint16_t color, uint32_t len); - void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, - uint16_t color); - void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - // This is a new function, similar to writeFillRect() except that - // all arguments MUST be onscreen, sorted and clipped. If higher-level - // primitives can handle their own sorting/clipping, it avoids repeating - // such operations in the low-level code, making it potentially faster. - // CALLING THIS WITH UNCLIPPED OR NEGATIVE VALUES COULD BE DISASTROUS. - inline void writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, - int16_t h, uint16_t color); - // Another new function, companion to the new non-blocking - // writePixels() variant. - void dmaWait(void); - // Used by writePixels() in some situations, but might have rare need in - // user code, so it's public... - bool dmaBusy(void) const; // true if DMA is used and busy, false otherwise - void swapBytes(uint16_t *src, uint32_t len, uint16_t *dest = NULL); - - // These functions are similar to the 'write' functions above, but with - // a chip-select and/or SPI transaction built-in. They're typically used - // solo -- that is, as graphics primitives in themselves, not invoked by - // higher-level primitives (which should use the functions above). - void drawPixel(int16_t x, int16_t y, uint16_t color); - void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - // A single-pixel push encapsulated in a transaction. I don't think - // this is used anymore (BMP demos might've used it?) but is provided - // for backward compatibility, consider it deprecated: - void pushColor(uint16_t color); - - using Adafruit_GFX::drawRGBBitmap; // Check base class first - void drawRGBBitmap(int16_t x, int16_t y, uint16_t *pcolors, int16_t w, - int16_t h); - - void invertDisplay(bool i); - uint16_t color565(uint8_t r, uint8_t g, uint8_t b); - - // Despite parallel additions, function names kept for compatibility: - void spiWrite(uint8_t b); // Write single byte as DATA - void writeCommand(uint8_t cmd); // Write single byte as COMMAND - uint8_t spiRead(void); // Read single byte of data - void write16(uint16_t w); // Write 16-bit value as DATA - void writeCommand16(uint16_t cmd); // Write 16-bit value as COMMAND - uint16_t read16(void); // Read single 16-bit value - - // Most of these low-level functions were formerly macros in - // Adafruit_SPITFT_Macros.h. Some have been made into inline functions - // to avoid macro mishaps. Despite the addition of code for a parallel - // display interface, the names have been kept for backward - // compatibility (some subclasses may be invoking these): - void SPI_WRITE16(uint16_t w); // Not inline - void SPI_WRITE32(uint32_t l); // Not inline - // Old code had both a spiWrite16() function and SPI_WRITE16 macro - // in addition to the SPI_WRITE32 macro. The latter two have been - // made into functions here, and spiWrite16() removed (use SPI_WRITE16() - // instead). It looks like most subclasses had gotten comfortable with - // SPI_WRITE16 and SPI_WRITE32 anyway so those names were kept rather - // than the less-obnoxious camelcase variants, oh well. - - // Placing these functions entirely in the class definition inlines - // them implicitly them while allowing their use in other code: - - /*! - @brief Set the chip-select line HIGH. Does NOT check whether CS pin - is set (>=0), that should be handled in calling function. - Despite function name, this is used even if the display - connection is parallel. - */ - void SPI_CS_HIGH(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *csPortSet = 1; -#else // !KINETISK - *csPortSet = csPinMask; -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - *csPort |= csPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(_cs, HIGH); -#endif // end !USE_FAST_PINIO - } - - /*! - @brief Set the chip-select line LOW. Does NOT check whether CS pin - is set (>=0), that should be handled in calling function. - Despite function name, this is used even if the display - connection is parallel. - */ - void SPI_CS_LOW(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *csPortClr = 1; -#else // !KINETISK - *csPortClr = csPinMask; -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - *csPort &= csPinMaskClr; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(_cs, LOW); -#endif // end !USE_FAST_PINIO - } - - /*! - @brief Set the data/command line HIGH (data mode). - */ - void SPI_DC_HIGH(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *dcPortSet = 1; -#else // !KINETISK - *dcPortSet = dcPinMask; -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - *dcPort |= dcPinMaskSet; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(_dc, HIGH); -#endif // end !USE_FAST_PINIO - } - - /*! - @brief Set the data/command line LOW (command mode). - */ - void SPI_DC_LOW(void) { -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if defined(KINETISK) - *dcPortClr = 1; -#else // !KINETISK - *dcPortClr = dcPinMask; -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - *dcPort &= dcPinMaskClr; -#endif // end !HAS_PORT_SET_CLR -#else // !USE_FAST_PINIO - digitalWrite(_dc, LOW); -#endif // end !USE_FAST_PINIO - } - -protected: - // A few more low-level member functions -- some may have previously - // been macros. Shouldn't have a need to access these externally, so - // they've been moved to the protected section. Additionally, they're - // declared inline here and the code is in the .cpp file, since outside - // code doesn't need to see these. - inline void SPI_MOSI_HIGH(void); - inline void SPI_MOSI_LOW(void); - inline void SPI_SCK_HIGH(void); - inline void SPI_SCK_LOW(void); - inline bool SPI_MISO_READ(void); - inline void SPI_BEGIN_TRANSACTION(void); - inline void SPI_END_TRANSACTION(void); - inline void TFT_WR_STROBE(void); // Parallel interface write strobe - inline void TFT_RD_HIGH(void); // Parallel interface read high - inline void TFT_RD_LOW(void); // Parallel interface read low - - // CLASS INSTANCE VARIABLES -------------------------------------------- - - // Here be dragons! There's a big union of three structures here -- - // one each for hardware SPI, software (bitbang) SPI, and parallel - // interfaces. This is to save some memory, since a display's connection - // will be only one of these. The order of some things is a little weird - // in an attempt to get values to align and pack better in RAM. - -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) - PORTreg_t csPortSet; ///< PORT register for chip select SET - PORTreg_t csPortClr; ///< PORT register for chip select CLEAR - PORTreg_t dcPortSet; ///< PORT register for data/command SET - PORTreg_t dcPortClr; ///< PORT register for data/command CLEAR -#else // !HAS_PORT_SET_CLR - PORTreg_t csPort; ///< PORT register for chip select - PORTreg_t dcPort; ///< PORT register for data/command -#endif // end HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO -#if defined(__cplusplus) && (__cplusplus >= 201100) - union { -#endif - struct { // Values specific to HARDWARE SPI: - SPIClass *_spi; ///< SPI class pointer -#if defined(SPI_HAS_TRANSACTION) - SPISettings settings; ///< SPI transaction settings -#else - uint32_t _freq; ///< SPI bitrate (if no SPI transactions) -#endif - uint32_t _mode; ///< SPI data mode (transactions or no) - } hwspi; ///< Hardware SPI values - struct { // Values specific to SOFTWARE SPI: -#if defined(USE_FAST_PINIO) - PORTreg_t misoPort; ///< PORT (PIN) register for MISO -#if defined(HAS_PORT_SET_CLR) - PORTreg_t mosiPortSet; ///< PORT register for MOSI SET - PORTreg_t mosiPortClr; ///< PORT register for MOSI CLEAR - PORTreg_t sckPortSet; ///< PORT register for SCK SET - PORTreg_t sckPortClr; ///< PORT register for SCK CLEAR -#if !defined(KINETISK) - ADAGFX_PORT_t mosiPinMask; ///< Bitmask for MOSI - ADAGFX_PORT_t sckPinMask; ///< Bitmask for SCK -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - PORTreg_t mosiPort; ///< PORT register for MOSI - PORTreg_t sckPort; ///< PORT register for SCK - ADAGFX_PORT_t mosiPinMaskSet; ///< Bitmask for MOSI SET (OR) - ADAGFX_PORT_t mosiPinMaskClr; ///< Bitmask for MOSI CLEAR (AND) - ADAGFX_PORT_t sckPinMaskSet; ///< Bitmask for SCK SET (OR bitmask) - ADAGFX_PORT_t sckPinMaskClr; ///< Bitmask for SCK CLEAR (AND) -#endif // end HAS_PORT_SET_CLR -#if !defined(KINETISK) - ADAGFX_PORT_t misoPinMask; ///< Bitmask for MISO -#endif // end !KINETISK -#endif // end USE_FAST_PINIO - int8_t _mosi; ///< MOSI pin # - int8_t _miso; ///< MISO pin # - int8_t _sck; ///< SCK pin # - } swspi; ///< Software SPI values - struct { // Values specific to 8-bit parallel: -#if defined(USE_FAST_PINIO) - -#if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x - volatile uint32_t *writePort; ///< PORT register for DATA WRITE - volatile uint32_t *readPort; ///< PORT (PIN) register for DATA READ -#else - volatile uint8_t *writePort; ///< PORT register for DATA WRITE - volatile uint8_t *readPort; ///< PORT (PIN) register for DATA READ -#endif -#if defined(HAS_PORT_SET_CLR) - // Port direction register pointers are always 8-bit regardless of - // PORTreg_t -- even if 32-bit port, we modify a byte-aligned 8 bits. -#if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x - volatile uint32_t *dirSet; ///< PORT byte data direction SET - volatile uint32_t *dirClr; ///< PORT byte data direction CLEAR -#else - volatile uint8_t *dirSet; ///< PORT byte data direction SET - volatile uint8_t *dirClr; ///< PORT byte data direction CLEAR -#endif - PORTreg_t wrPortSet; ///< PORT register for write strobe SET - PORTreg_t wrPortClr; ///< PORT register for write strobe CLEAR - PORTreg_t rdPortSet; ///< PORT register for read strobe SET - PORTreg_t rdPortClr; ///< PORT register for read strobe CLEAR -#if !defined(KINETISK) - ADAGFX_PORT_t wrPinMask; ///< Bitmask for write strobe -#endif // end !KINETISK - ADAGFX_PORT_t rdPinMask; ///< Bitmask for read strobe -#else // !HAS_PORT_SET_CLR - // Port direction register pointer is always 8-bit regardless of - // PORTreg_t -- even if 32-bit port, we modify a byte-aligned 8 bits. - volatile uint8_t *portDir; ///< PORT direction register - PORTreg_t wrPort; ///< PORT register for write strobe - PORTreg_t rdPort; ///< PORT register for read strobe - ADAGFX_PORT_t wrPinMaskSet; ///< Bitmask for write strobe SET (OR) - ADAGFX_PORT_t wrPinMaskClr; ///< Bitmask for write strobe CLEAR (AND) - ADAGFX_PORT_t rdPinMaskSet; ///< Bitmask for read strobe SET (OR) - ADAGFX_PORT_t rdPinMaskClr; ///< Bitmask for read strobe CLEAR (AND) -#endif // end HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO - int8_t _d0; ///< Data pin 0 # - int8_t _wr; ///< Write strobe pin # - int8_t _rd; ///< Read strobe pin # (or -1) - bool wide = 0; ///< If true, is 16-bit interface - } tft8; ///< Parallel interface settings -#if defined(__cplusplus) && (__cplusplus >= 201100) - }; ///< Only one interface is active -#endif -#if defined(USE_SPI_DMA) && \ - (defined(__SAMD51__) || \ - defined(ARDUINO_SAMD_ZERO)) // Used by hardware SPI and tft8 - Adafruit_ZeroDMA dma; ///< DMA instance - DmacDescriptor *dptr = NULL; ///< 1st descriptor - DmacDescriptor *descriptor = NULL; ///< Allocated descriptor list - uint16_t *pixelBuf[2]; ///< Working buffers - uint16_t maxFillLen; ///< Max pixels per DMA xfer - uint16_t lastFillColor = 0; ///< Last color used w/fill - uint32_t lastFillLen = 0; ///< # of pixels w/last fill - uint8_t onePixelBuf; ///< For hi==lo fill -#endif -#if defined(USE_FAST_PINIO) -#if defined(HAS_PORT_SET_CLR) -#if !defined(KINETISK) - ADAGFX_PORT_t csPinMask; ///< Bitmask for chip select - ADAGFX_PORT_t dcPinMask; ///< Bitmask for data/command -#endif // end !KINETISK -#else // !HAS_PORT_SET_CLR - ADAGFX_PORT_t csPinMaskSet; ///< Bitmask for chip select SET (OR) - ADAGFX_PORT_t csPinMaskClr; ///< Bitmask for chip select CLEAR (AND) - ADAGFX_PORT_t dcPinMaskSet; ///< Bitmask for data/command SET (OR) - ADAGFX_PORT_t dcPinMaskClr; ///< Bitmask for data/command CLEAR (AND) -#endif // end HAS_PORT_SET_CLR -#endif // end USE_FAST_PINIO - uint8_t connection; ///< TFT_HARD_SPI, TFT_SOFT_SPI, etc. - int8_t _rst; ///< Reset pin # (or -1) - int8_t _cs; ///< Chip select pin # (or -1) - int8_t _dc; ///< Data/command pin # - - int16_t _xstart = 0; ///< Internal framebuffer X offset - int16_t _ystart = 0; ///< Internal framebuffer Y offset - uint8_t invertOnCommand = 0; ///< Command to enable invert mode - uint8_t invertOffCommand = 0; ///< Command to disable invert mode - - uint32_t _freq = 0; ///< Dummy var to keep subclasses happy -}; - -#endif // end __AVR_ATtiny85__ -#endif // end _ADAFRUIT_SPITFT_H_ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT_Macros.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT_Macros.h deleted file mode 100644 index fcd6253..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Adafruit_SPITFT_Macros.h +++ /dev/null @@ -1,6 +0,0 @@ -// THIS FILE INTENTIONALLY LEFT BLANK. - -// Macros previously #defined here have been made into (mostly) inline -// functions in the Adafruit_SPITFT class. Other libraries might still -// contain code trying to #include this header file, so until everything's -// updated this file still exists (but doing nothing) to avoid trouble. diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/CMakeLists.txt b/studies/console/arduino/libraries/Adafruit_GFX_Library/CMakeLists.txt deleted file mode 100644 index 531c721..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Adafruit GFX Library -# https://github.com/adafruit/Adafruit-GFX-Library -# BSD License - -cmake_minimum_required(VERSION 3.5) - -idf_component_register(SRCS "Adafruit_GFX.cpp" "Adafruit_GrayOLED.cpp" "Adafruit_SPITFT.cpp" "glcdfont.c" - INCLUDE_DIRS "." - REQUIRES arduino Adafruit_BusIO) - -project(Adafruit-GFX-Library) diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono12pt7b.h deleted file mode 100644 index d124f20..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono12pt7b.h +++ /dev/null @@ -1,229 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMono12pt7bBitmaps[] PROGMEM = { - 0x49, 0x24, 0x92, 0x48, 0x01, 0xF8, 0xE7, 0xE7, 0x67, 0x42, 0x42, 0x42, - 0x42, 0x09, 0x02, 0x41, 0x10, 0x44, 0x11, 0x1F, 0xF1, 0x10, 0x4C, 0x12, - 0x3F, 0xE1, 0x20, 0x48, 0x12, 0x04, 0x81, 0x20, 0x48, 0x04, 0x07, 0xA2, - 0x19, 0x02, 0x40, 0x10, 0x03, 0x00, 0x3C, 0x00, 0x80, 0x10, 0x06, 0x01, - 0xE0, 0xA7, 0xC0, 0x40, 0x10, 0x04, 0x00, 0x3C, 0x19, 0x84, 0x21, 0x08, - 0x66, 0x0F, 0x00, 0x0C, 0x1C, 0x78, 0x01, 0xE0, 0xCC, 0x21, 0x08, 0x43, - 0x30, 0x78, 0x3E, 0x30, 0x10, 0x08, 0x02, 0x03, 0x03, 0x47, 0x14, 0x8A, - 0x43, 0x11, 0x8F, 0x60, 0xFD, 0xA4, 0x90, 0x05, 0x25, 0x24, 0x92, 0x48, - 0x92, 0x24, 0x11, 0x24, 0x89, 0x24, 0x92, 0x92, 0x90, 0x00, 0x04, 0x02, - 0x11, 0x07, 0xF0, 0xC0, 0x50, 0x48, 0x42, 0x00, 0x08, 0x04, 0x02, 0x01, - 0x00, 0x87, 0xFC, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x3B, 0x9C, 0xCE, - 0x62, 0x00, 0xFF, 0xE0, 0xFF, 0x80, 0x00, 0x80, 0xC0, 0x40, 0x20, 0x20, - 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x80, - 0x80, 0x40, 0x00, 0x1C, 0x31, 0x90, 0x58, 0x38, 0x0C, 0x06, 0x03, 0x01, - 0x80, 0xC0, 0x60, 0x30, 0x34, 0x13, 0x18, 0x70, 0x30, 0xE1, 0x44, 0x81, - 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x1F, 0xC0, 0x1E, 0x10, 0x90, - 0x68, 0x10, 0x08, 0x0C, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x0E, - 0x07, 0xFE, 0x3E, 0x10, 0x40, 0x08, 0x02, 0x00, 0x80, 0x40, 0xE0, 0x04, - 0x00, 0x80, 0x10, 0x04, 0x01, 0x00, 0xD8, 0x63, 0xE0, 0x06, 0x0A, 0x0A, - 0x12, 0x22, 0x22, 0x42, 0x42, 0x82, 0x82, 0xFF, 0x02, 0x02, 0x02, 0x0F, - 0x7F, 0x20, 0x10, 0x08, 0x04, 0x02, 0xF1, 0x8C, 0x03, 0x00, 0x80, 0x40, - 0x20, 0x18, 0x16, 0x18, 0xF0, 0x0F, 0x8C, 0x08, 0x08, 0x04, 0x04, 0x02, - 0x79, 0x46, 0xC1, 0xE0, 0x60, 0x28, 0x14, 0x19, 0x08, 0x78, 0xFF, 0x81, - 0x81, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, - 0x08, 0x3E, 0x31, 0xB0, 0x70, 0x18, 0x0C, 0x05, 0x8C, 0x38, 0x63, 0x40, - 0x60, 0x30, 0x18, 0x1B, 0x18, 0xF8, 0x3C, 0x31, 0x30, 0x50, 0x28, 0x0C, - 0x0F, 0x06, 0x85, 0x3C, 0x80, 0x40, 0x40, 0x20, 0x20, 0x63, 0xE0, 0xFF, - 0x80, 0x07, 0xFC, 0x39, 0xCE, 0x00, 0x00, 0x06, 0x33, 0x98, 0xC4, 0x00, - 0x00, 0xC0, 0x60, 0x18, 0x0C, 0x06, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, - 0x00, 0x30, 0x01, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x06, - 0x00, 0x30, 0x01, 0x80, 0x18, 0x01, 0x80, 0xC0, 0x30, 0x18, 0x0C, 0x02, - 0x00, 0x00, 0x3E, 0x60, 0xA0, 0x20, 0x10, 0x08, 0x08, 0x18, 0x10, 0x08, - 0x00, 0x00, 0x00, 0x01, 0xC0, 0xE0, 0x1C, 0x31, 0x10, 0x50, 0x28, 0x14, - 0x3A, 0x25, 0x22, 0x91, 0x4C, 0xA3, 0xF0, 0x08, 0x02, 0x01, 0x80, 0x7C, - 0x3F, 0x00, 0x0C, 0x00, 0x48, 0x01, 0x20, 0x04, 0x40, 0x21, 0x00, 0x84, - 0x04, 0x08, 0x1F, 0xE0, 0x40, 0x82, 0x01, 0x08, 0x04, 0x20, 0x13, 0xE1, - 0xF0, 0xFF, 0x08, 0x11, 0x01, 0x20, 0x24, 0x04, 0x81, 0x1F, 0xC2, 0x06, - 0x40, 0x68, 0x05, 0x00, 0xA0, 0x14, 0x05, 0xFF, 0x00, 0x1E, 0x48, 0x74, - 0x05, 0x01, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x04, 0x01, 0x01, - 0x30, 0x87, 0xC0, 0xFE, 0x10, 0x44, 0x09, 0x02, 0x40, 0x50, 0x14, 0x05, - 0x01, 0x40, 0x50, 0x14, 0x0D, 0x02, 0x41, 0x3F, 0x80, 0xFF, 0xC8, 0x09, - 0x01, 0x20, 0x04, 0x00, 0x88, 0x1F, 0x02, 0x20, 0x40, 0x08, 0x01, 0x00, - 0xA0, 0x14, 0x03, 0xFF, 0xC0, 0xFF, 0xE8, 0x05, 0x00, 0xA0, 0x04, 0x00, - 0x88, 0x1F, 0x02, 0x20, 0x40, 0x08, 0x01, 0x00, 0x20, 0x04, 0x01, 0xF0, - 0x00, 0x1F, 0x46, 0x19, 0x01, 0x60, 0x28, 0x01, 0x00, 0x20, 0x04, 0x00, - 0x83, 0xF0, 0x0B, 0x01, 0x20, 0x23, 0x0C, 0x3E, 0x00, 0xE1, 0xD0, 0x24, - 0x09, 0x02, 0x40, 0x90, 0x27, 0xF9, 0x02, 0x40, 0x90, 0x24, 0x09, 0x02, - 0x40, 0xB8, 0x70, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, - 0x40, 0x81, 0x1F, 0xC0, 0x0F, 0xE0, 0x10, 0x02, 0x00, 0x40, 0x08, 0x01, - 0x00, 0x20, 0x04, 0x80, 0x90, 0x12, 0x02, 0x40, 0xC6, 0x30, 0x7C, 0x00, - 0xF1, 0xE4, 0x0C, 0x41, 0x04, 0x20, 0x44, 0x04, 0x80, 0x5C, 0x06, 0x60, - 0x43, 0x04, 0x10, 0x40, 0x84, 0x08, 0x40, 0xCF, 0x07, 0xF8, 0x04, 0x00, - 0x80, 0x10, 0x02, 0x00, 0x40, 0x08, 0x01, 0x00, 0x20, 0x04, 0x04, 0x80, - 0x90, 0x12, 0x03, 0xFF, 0xC0, 0xE0, 0x3B, 0x01, 0x94, 0x14, 0xA0, 0xA4, - 0x89, 0x24, 0x49, 0x14, 0x48, 0xA2, 0x45, 0x12, 0x10, 0x90, 0x04, 0x80, - 0x24, 0x01, 0x78, 0x3C, 0xE0, 0xF6, 0x02, 0x50, 0x25, 0x02, 0x48, 0x24, - 0xC2, 0x44, 0x24, 0x22, 0x43, 0x24, 0x12, 0x40, 0xA4, 0x0A, 0x40, 0x6F, - 0x06, 0x0F, 0x03, 0x0C, 0x60, 0x64, 0x02, 0x80, 0x18, 0x01, 0x80, 0x18, - 0x01, 0x80, 0x18, 0x01, 0x40, 0x26, 0x06, 0x30, 0xC0, 0xF0, 0xFF, 0x10, - 0x64, 0x05, 0x01, 0x40, 0x50, 0x34, 0x19, 0xFC, 0x40, 0x10, 0x04, 0x01, - 0x00, 0x40, 0x3E, 0x00, 0x0F, 0x03, 0x0C, 0x60, 0x64, 0x02, 0x80, 0x18, - 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x40, 0x26, 0x06, 0x30, 0xC1, - 0xF0, 0x0C, 0x01, 0xF1, 0x30, 0xE0, 0xFF, 0x04, 0x18, 0x40, 0xC4, 0x04, - 0x40, 0x44, 0x0C, 0x41, 0x87, 0xE0, 0x43, 0x04, 0x10, 0x40, 0x84, 0x04, - 0x40, 0x4F, 0x03, 0x1F, 0x48, 0x34, 0x05, 0x01, 0x40, 0x08, 0x01, 0xC0, - 0x0E, 0x00, 0x40, 0x18, 0x06, 0x01, 0xE1, 0xA7, 0xC0, 0xFF, 0xF0, 0x86, - 0x10, 0x82, 0x00, 0x40, 0x08, 0x01, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, - 0x02, 0x00, 0x40, 0x7F, 0x00, 0xF0, 0xF4, 0x02, 0x40, 0x24, 0x02, 0x40, - 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x24, 0x02, 0x40, 0x22, 0x04, 0x30, - 0xC0, 0xF0, 0xF8, 0x7C, 0x80, 0x22, 0x01, 0x04, 0x04, 0x10, 0x20, 0x40, - 0x80, 0x82, 0x02, 0x10, 0x08, 0x40, 0x11, 0x00, 0x48, 0x01, 0xA0, 0x03, - 0x00, 0x0C, 0x00, 0xF8, 0x7C, 0x80, 0x22, 0x00, 0x88, 0xC2, 0x23, 0x10, - 0x8E, 0x42, 0x29, 0x09, 0x24, 0x24, 0x90, 0x91, 0x41, 0x85, 0x06, 0x14, - 0x18, 0x70, 0x60, 0x80, 0xF0, 0xF2, 0x06, 0x30, 0x41, 0x08, 0x09, 0x80, - 0x50, 0x06, 0x00, 0x60, 0x0D, 0x00, 0x88, 0x10, 0xC2, 0x04, 0x60, 0x2F, - 0x0F, 0xF0, 0xF2, 0x02, 0x10, 0x41, 0x04, 0x08, 0x80, 0x50, 0x05, 0x00, - 0x20, 0x02, 0x00, 0x20, 0x02, 0x00, 0x20, 0x02, 0x01, 0xFC, 0xFF, 0x40, - 0xA0, 0x90, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x50, 0x30, 0x18, - 0x0F, 0xFC, 0xF2, 0x49, 0x24, 0x92, 0x49, 0x24, 0x9C, 0x80, 0x60, 0x10, - 0x08, 0x02, 0x01, 0x00, 0x40, 0x20, 0x08, 0x04, 0x01, 0x00, 0x80, 0x20, - 0x10, 0x04, 0x02, 0x00, 0x80, 0x40, 0xE4, 0x92, 0x49, 0x24, 0x92, 0x49, - 0x3C, 0x08, 0x0C, 0x09, 0x0C, 0x4C, 0x14, 0x04, 0xFF, 0xFC, 0x84, 0x21, - 0x3E, 0x00, 0x60, 0x08, 0x02, 0x3F, 0x98, 0x28, 0x0A, 0x02, 0xC3, 0x9F, - 0x30, 0xE0, 0x01, 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, 0x13, 0xE0, 0xA0, - 0x86, 0x02, 0x20, 0x09, 0x00, 0x48, 0x02, 0x40, 0x13, 0x01, 0x14, 0x1B, - 0x9F, 0x00, 0x1F, 0x4C, 0x19, 0x01, 0x40, 0x28, 0x01, 0x00, 0x20, 0x02, - 0x00, 0x60, 0x43, 0xF0, 0x00, 0xC0, 0x08, 0x01, 0x00, 0x20, 0x04, 0x3C, - 0x98, 0x52, 0x06, 0x80, 0x50, 0x0A, 0x01, 0x40, 0x24, 0x0C, 0xC2, 0x87, - 0x98, 0x3F, 0x18, 0x68, 0x06, 0x01, 0xFF, 0xE0, 0x08, 0x03, 0x00, 0x60, - 0xC7, 0xC0, 0x0F, 0x98, 0x08, 0x04, 0x02, 0x07, 0xF8, 0x80, 0x40, 0x20, - 0x10, 0x08, 0x04, 0x02, 0x01, 0x03, 0xF8, 0x1E, 0x6C, 0x39, 0x03, 0x40, - 0x28, 0x05, 0x00, 0xA0, 0x12, 0x06, 0x61, 0x43, 0xC8, 0x01, 0x00, 0x20, - 0x08, 0x3E, 0x00, 0xC0, 0x10, 0x04, 0x01, 0x00, 0x40, 0x13, 0x87, 0x11, - 0x82, 0x40, 0x90, 0x24, 0x09, 0x02, 0x40, 0x90, 0x2E, 0x1C, 0x08, 0x04, - 0x02, 0x00, 0x00, 0x03, 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, - 0x80, 0x43, 0xFE, 0x04, 0x08, 0x10, 0x00, 0x1F, 0xC0, 0x81, 0x02, 0x04, - 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x0B, 0xE0, 0xE0, 0x02, 0x00, 0x20, - 0x02, 0x00, 0x20, 0x02, 0x3C, 0x21, 0x02, 0x60, 0x2C, 0x03, 0x80, 0x24, - 0x02, 0x20, 0x21, 0x02, 0x08, 0xE1, 0xF0, 0x78, 0x04, 0x02, 0x01, 0x00, - 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x43, 0xFE, - 0xDC, 0xE3, 0x19, 0x90, 0x84, 0x84, 0x24, 0x21, 0x21, 0x09, 0x08, 0x48, - 0x42, 0x42, 0x17, 0x18, 0xC0, 0x67, 0x83, 0x84, 0x20, 0x22, 0x02, 0x20, - 0x22, 0x02, 0x20, 0x22, 0x02, 0x20, 0x2F, 0x07, 0x1F, 0x04, 0x11, 0x01, - 0x40, 0x18, 0x03, 0x00, 0x60, 0x0A, 0x02, 0x20, 0x83, 0xE0, 0xCF, 0x85, - 0x06, 0x60, 0x24, 0x01, 0x40, 0x14, 0x01, 0x40, 0x16, 0x02, 0x50, 0x44, - 0xF8, 0x40, 0x04, 0x00, 0x40, 0x0F, 0x00, 0x1E, 0x6C, 0x3B, 0x03, 0x40, - 0x28, 0x05, 0x00, 0xA0, 0x12, 0x06, 0x61, 0x43, 0xC8, 0x01, 0x00, 0x20, - 0x04, 0x03, 0xC0, 0xE3, 0x8B, 0x13, 0x80, 0x80, 0x20, 0x08, 0x02, 0x00, - 0x80, 0x20, 0x3F, 0x80, 0x1F, 0x58, 0x34, 0x05, 0x80, 0x1E, 0x00, 0x60, - 0x06, 0x01, 0xC0, 0xAF, 0xC0, 0x20, 0x04, 0x00, 0x80, 0x10, 0x0F, 0xF0, - 0x40, 0x08, 0x01, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x03, 0x04, 0x3F, - 0x00, 0xC1, 0xC8, 0x09, 0x01, 0x20, 0x24, 0x04, 0x80, 0x90, 0x12, 0x02, - 0x61, 0xC7, 0xCC, 0xF8, 0xF9, 0x01, 0x08, 0x10, 0x60, 0x81, 0x08, 0x08, - 0x40, 0x22, 0x01, 0x20, 0x05, 0x00, 0x30, 0x00, 0xF0, 0x7A, 0x01, 0x10, - 0x08, 0x8C, 0x42, 0x62, 0x12, 0x90, 0xA5, 0x05, 0x18, 0x28, 0xC0, 0x86, - 0x00, 0x78, 0xF3, 0x04, 0x18, 0x80, 0xD0, 0x06, 0x00, 0x70, 0x09, 0x81, - 0x0C, 0x20, 0x6F, 0x8F, 0xF0, 0xF2, 0x02, 0x20, 0x41, 0x04, 0x10, 0x80, - 0x88, 0x09, 0x00, 0x50, 0x06, 0x00, 0x20, 0x04, 0x00, 0x40, 0x08, 0x0F, - 0xE0, 0xFF, 0x41, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0xBF, - 0xC0, 0x19, 0x08, 0x42, 0x10, 0x84, 0x64, 0x18, 0x42, 0x10, 0x84, 0x20, - 0xC0, 0xFF, 0xFF, 0xC0, 0xC1, 0x08, 0x42, 0x10, 0x84, 0x10, 0x4C, 0x42, - 0x10, 0x84, 0x26, 0x00, 0x38, 0x13, 0x38, 0x38}; - -const GFXglyph FreeMono12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 14, 0, 1}, // 0x20 ' ' - {0, 3, 15, 14, 6, -14}, // 0x21 '!' - {6, 8, 7, 14, 3, -14}, // 0x22 '"' - {13, 10, 16, 14, 2, -14}, // 0x23 '#' - {33, 10, 17, 14, 2, -14}, // 0x24 '$' - {55, 10, 15, 14, 2, -14}, // 0x25 '%' - {74, 9, 12, 14, 3, -11}, // 0x26 '&' - {88, 3, 7, 14, 5, -14}, // 0x27 ''' - {91, 3, 18, 14, 7, -14}, // 0x28 '(' - {98, 3, 18, 14, 4, -14}, // 0x29 ')' - {105, 9, 9, 14, 3, -14}, // 0x2A '*' - {116, 9, 11, 14, 3, -11}, // 0x2B '+' - {129, 5, 7, 14, 3, -3}, // 0x2C ',' - {134, 11, 1, 14, 2, -6}, // 0x2D '-' - {136, 3, 3, 14, 5, -2}, // 0x2E '.' - {138, 9, 18, 14, 3, -15}, // 0x2F '/' - {159, 9, 15, 14, 3, -14}, // 0x30 '0' - {176, 7, 14, 14, 4, -13}, // 0x31 '1' - {189, 9, 15, 14, 2, -14}, // 0x32 '2' - {206, 10, 15, 14, 2, -14}, // 0x33 '3' - {225, 8, 15, 14, 3, -14}, // 0x34 '4' - {240, 9, 15, 14, 3, -14}, // 0x35 '5' - {257, 9, 15, 14, 3, -14}, // 0x36 '6' - {274, 8, 15, 14, 3, -14}, // 0x37 '7' - {289, 9, 15, 14, 3, -14}, // 0x38 '8' - {306, 9, 15, 14, 3, -14}, // 0x39 '9' - {323, 3, 10, 14, 5, -9}, // 0x3A ':' - {327, 5, 13, 14, 3, -9}, // 0x3B ';' - {336, 11, 11, 14, 2, -11}, // 0x3C '<' - {352, 12, 4, 14, 1, -8}, // 0x3D '=' - {358, 11, 11, 14, 2, -11}, // 0x3E '>' - {374, 9, 14, 14, 3, -13}, // 0x3F '?' - {390, 9, 16, 14, 3, -14}, // 0x40 '@' - {408, 14, 14, 14, 0, -13}, // 0x41 'A' - {433, 11, 14, 14, 2, -13}, // 0x42 'B' - {453, 10, 14, 14, 2, -13}, // 0x43 'C' - {471, 10, 14, 14, 2, -13}, // 0x44 'D' - {489, 11, 14, 14, 2, -13}, // 0x45 'E' - {509, 11, 14, 14, 2, -13}, // 0x46 'F' - {529, 11, 14, 14, 2, -13}, // 0x47 'G' - {549, 10, 14, 14, 2, -13}, // 0x48 'H' - {567, 7, 14, 14, 4, -13}, // 0x49 'I' - {580, 11, 14, 14, 2, -13}, // 0x4A 'J' - {600, 12, 14, 14, 2, -13}, // 0x4B 'K' - {621, 11, 14, 14, 2, -13}, // 0x4C 'L' - {641, 13, 14, 14, 1, -13}, // 0x4D 'M' - {664, 12, 14, 14, 1, -13}, // 0x4E 'N' - {685, 12, 14, 14, 1, -13}, // 0x4F 'O' - {706, 10, 14, 14, 2, -13}, // 0x50 'P' - {724, 12, 17, 14, 1, -13}, // 0x51 'Q' - {750, 12, 14, 14, 2, -13}, // 0x52 'R' - {771, 10, 14, 14, 2, -13}, // 0x53 'S' - {789, 11, 14, 14, 2, -13}, // 0x54 'T' - {809, 12, 14, 14, 1, -13}, // 0x55 'U' - {830, 14, 14, 14, 0, -13}, // 0x56 'V' - {855, 14, 14, 14, 0, -13}, // 0x57 'W' - {880, 12, 14, 14, 1, -13}, // 0x58 'X' - {901, 12, 14, 14, 1, -13}, // 0x59 'Y' - {922, 9, 14, 14, 3, -13}, // 0x5A 'Z' - {938, 3, 18, 14, 7, -14}, // 0x5B '[' - {945, 9, 18, 14, 3, -15}, // 0x5C '\' - {966, 3, 18, 14, 5, -14}, // 0x5D ']' - {973, 9, 6, 14, 3, -14}, // 0x5E '^' - {980, 14, 1, 14, 0, 3}, // 0x5F '_' - {982, 4, 4, 14, 4, -15}, // 0x60 '`' - {984, 10, 10, 14, 2, -9}, // 0x61 'a' - {997, 13, 15, 14, 0, -14}, // 0x62 'b' - {1022, 11, 10, 14, 2, -9}, // 0x63 'c' - {1036, 11, 15, 14, 2, -14}, // 0x64 'd' - {1057, 10, 10, 14, 2, -9}, // 0x65 'e' - {1070, 9, 15, 14, 4, -14}, // 0x66 'f' - {1087, 11, 14, 14, 2, -9}, // 0x67 'g' - {1107, 10, 15, 14, 2, -14}, // 0x68 'h' - {1126, 9, 15, 14, 3, -14}, // 0x69 'i' - {1143, 7, 19, 14, 3, -14}, // 0x6A 'j' - {1160, 12, 15, 14, 1, -14}, // 0x6B 'k' - {1183, 9, 15, 14, 3, -14}, // 0x6C 'l' - {1200, 13, 10, 14, 1, -9}, // 0x6D 'm' - {1217, 12, 10, 14, 1, -9}, // 0x6E 'n' - {1232, 11, 10, 14, 2, -9}, // 0x6F 'o' - {1246, 12, 14, 14, 1, -9}, // 0x70 'p' - {1267, 11, 14, 14, 2, -9}, // 0x71 'q' - {1287, 10, 10, 14, 3, -9}, // 0x72 'r' - {1300, 10, 10, 14, 2, -9}, // 0x73 's' - {1313, 11, 14, 14, 1, -13}, // 0x74 't' - {1333, 11, 10, 14, 2, -9}, // 0x75 'u' - {1347, 13, 10, 14, 1, -9}, // 0x76 'v' - {1364, 13, 10, 14, 1, -9}, // 0x77 'w' - {1381, 12, 10, 14, 1, -9}, // 0x78 'x' - {1396, 12, 14, 14, 1, -9}, // 0x79 'y' - {1417, 9, 10, 14, 3, -9}, // 0x7A 'z' - {1429, 5, 18, 14, 5, -14}, // 0x7B '{' - {1441, 1, 18, 14, 7, -14}, // 0x7C '|' - {1444, 5, 18, 14, 5, -14}, // 0x7D '}' - {1456, 10, 3, 14, 2, -7}}; // 0x7E '~' - -const GFXfont FreeMono12pt7b PROGMEM = {(uint8_t *)FreeMono12pt7bBitmaps, - (GFXglyph *)FreeMono12pt7bGlyphs, 0x20, - 0x7E, 24}; - -// Approx. 2132 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono18pt7b.h deleted file mode 100644 index 6a3641c..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono18pt7b.h +++ /dev/null @@ -1,365 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMono18pt7bBitmaps[] PROGMEM = { - 0x27, 0x77, 0x77, 0x77, 0x77, 0x22, 0x22, 0x20, 0x00, 0x6F, 0xF6, 0xF1, - 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1E, 0xC3, 0x98, 0x33, 0x06, 0x60, 0xCC, - 0x18, 0x04, 0x20, 0x10, 0x80, 0x42, 0x01, 0x08, 0x04, 0x20, 0x10, 0x80, - 0x42, 0x01, 0x10, 0x04, 0x41, 0xFF, 0xF0, 0x44, 0x02, 0x10, 0x08, 0x40, - 0x21, 0x0F, 0xFF, 0xC2, 0x10, 0x08, 0x40, 0x21, 0x00, 0x84, 0x02, 0x10, - 0x08, 0x40, 0x23, 0x00, 0x88, 0x02, 0x20, 0x02, 0x00, 0x10, 0x00, 0x80, - 0x1F, 0xA3, 0x07, 0x10, 0x09, 0x00, 0x48, 0x00, 0x40, 0x03, 0x00, 0x0C, - 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x18, 0x00, 0x20, 0x01, 0x80, 0x0C, 0x00, - 0x70, 0x05, 0xE0, 0xC9, 0xF8, 0x01, 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, - 0x10, 0x00, 0x1E, 0x00, 0x42, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, - 0x10, 0x08, 0x40, 0x0F, 0x00, 0x00, 0x1E, 0x01, 0xF0, 0x1F, 0x01, 0xE0, - 0x0E, 0x00, 0x00, 0x3C, 0x00, 0x86, 0x02, 0x06, 0x04, 0x04, 0x08, 0x08, - 0x10, 0x30, 0x10, 0xC0, 0x1E, 0x00, 0x0F, 0xC1, 0x00, 0x20, 0x02, 0x00, - 0x20, 0x02, 0x00, 0x10, 0x01, 0x00, 0x08, 0x03, 0xC0, 0x6C, 0x3C, 0x62, - 0x82, 0x68, 0x34, 0x81, 0xCC, 0x08, 0x61, 0xC3, 0xE7, 0xFF, 0xFF, 0xF6, - 0x66, 0x66, 0x08, 0xC4, 0x62, 0x31, 0x8C, 0xC6, 0x31, 0x8C, 0x63, 0x18, - 0xC3, 0x18, 0xC2, 0x18, 0xC3, 0x18, 0x86, 0x10, 0xC2, 0x18, 0xC6, 0x10, - 0xC6, 0x31, 0x8C, 0x63, 0x18, 0x8C, 0x62, 0x31, 0x98, 0x80, 0x02, 0x00, - 0x10, 0x00, 0x80, 0x04, 0x0C, 0x21, 0x9D, 0x70, 0x1C, 0x00, 0xA0, 0x0D, - 0x80, 0xC6, 0x04, 0x10, 0x40, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0xFF, 0xFE, 0x02, - 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, - 0x01, 0x00, 0x3E, 0x78, 0xF3, 0xC7, 0x8E, 0x18, 0x70, 0xC1, 0x80, 0xFF, - 0xFE, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0x00, 0xC0, 0x04, 0x00, 0x60, - 0x02, 0x00, 0x30, 0x01, 0x00, 0x18, 0x00, 0x80, 0x0C, 0x00, 0x40, 0x02, - 0x00, 0x20, 0x01, 0x00, 0x10, 0x00, 0x80, 0x08, 0x00, 0x40, 0x04, 0x00, - 0x20, 0x02, 0x00, 0x10, 0x01, 0x00, 0x08, 0x00, 0x80, 0x04, 0x00, 0x00, - 0x0F, 0x81, 0x82, 0x08, 0x08, 0x80, 0x24, 0x01, 0x60, 0x0E, 0x00, 0x30, - 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, - 0x30, 0x03, 0x40, 0x12, 0x00, 0x88, 0x08, 0x60, 0xC0, 0xF8, 0x00, 0x06, - 0x00, 0x70, 0x06, 0x80, 0x64, 0x06, 0x20, 0x31, 0x00, 0x08, 0x00, 0x40, - 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, - 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, 0x0F, 0xFF, 0x80, 0x0F, 0x80, - 0xC3, 0x08, 0x04, 0x80, 0x24, 0x00, 0x80, 0x04, 0x00, 0x20, 0x02, 0x00, - 0x10, 0x01, 0x00, 0x10, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, - 0x18, 0x01, 0x80, 0x58, 0x03, 0x80, 0x1F, 0xFF, 0x80, 0x0F, 0xC0, 0xC0, - 0x86, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x04, 0x00, - 0x20, 0x0F, 0x00, 0x06, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x40, - 0x01, 0x00, 0x04, 0x00, 0x2C, 0x01, 0x9C, 0x0C, 0x0F, 0xC0, 0x01, 0xC0, - 0x14, 0x02, 0x40, 0x64, 0x04, 0x40, 0xC4, 0x08, 0x41, 0x84, 0x10, 0x42, - 0x04, 0x20, 0x44, 0x04, 0x40, 0x48, 0x04, 0xFF, 0xF0, 0x04, 0x00, 0x40, - 0x04, 0x00, 0x40, 0x04, 0x07, 0xF0, 0x3F, 0xF0, 0x80, 0x02, 0x00, 0x08, - 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x0B, 0xF0, 0x30, 0x30, 0x00, 0x60, - 0x00, 0x80, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x40, 0x01, 0x00, 0x0E, - 0x00, 0x2C, 0x01, 0x0C, 0x18, 0x0F, 0xC0, 0x01, 0xF0, 0x60, 0x18, 0x03, - 0x00, 0x20, 0x04, 0x00, 0x40, 0x0C, 0x00, 0x80, 0x08, 0xF8, 0x98, 0x4A, - 0x02, 0xE0, 0x3C, 0x01, 0x80, 0x14, 0x01, 0x40, 0x14, 0x03, 0x20, 0x21, - 0x0C, 0x0F, 0x80, 0xFF, 0xF8, 0x01, 0x80, 0x18, 0x03, 0x00, 0x20, 0x02, - 0x00, 0x20, 0x04, 0x00, 0x40, 0x04, 0x00, 0xC0, 0x08, 0x00, 0x80, 0x18, - 0x01, 0x00, 0x10, 0x01, 0x00, 0x30, 0x02, 0x00, 0x20, 0x02, 0x00, 0x0F, - 0x81, 0x83, 0x10, 0x05, 0x80, 0x38, 0x00, 0xC0, 0x06, 0x00, 0x30, 0x03, - 0x40, 0x11, 0x83, 0x07, 0xF0, 0x60, 0xC4, 0x01, 0x60, 0x0E, 0x00, 0x30, - 0x01, 0x80, 0x0E, 0x00, 0xD0, 0x04, 0x60, 0xC1, 0xFC, 0x00, 0x1F, 0x03, - 0x08, 0x40, 0x4C, 0x02, 0x80, 0x28, 0x02, 0x80, 0x18, 0x03, 0xC0, 0x74, - 0x05, 0x21, 0x91, 0xF1, 0x00, 0x10, 0x03, 0x00, 0x20, 0x02, 0x00, 0x40, - 0x0C, 0x01, 0x80, 0x60, 0xF8, 0x00, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x00, - 0x1D, 0xFF, 0xFD, 0xC0, 0x1C, 0x7C, 0xF9, 0xF1, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0xF1, 0xE3, 0x8F, 0x1C, 0x38, 0xE1, 0xC3, 0x06, 0x00, 0x00, 0x06, - 0x00, 0x18, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x38, - 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0E, - 0x00, 0x07, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0xC0, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, - 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x70, - 0x03, 0x80, 0x0C, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0x60, 0x00, 0x3F, - 0x8E, 0x0C, 0x80, 0x28, 0x01, 0x80, 0x10, 0x01, 0x00, 0x10, 0x02, 0x00, - 0xC0, 0x38, 0x06, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, - 0x01, 0xF0, 0x1F, 0x00, 0xE0, 0x0F, 0x01, 0x86, 0x08, 0x08, 0x80, 0x24, - 0x01, 0x40, 0x0A, 0x00, 0x50, 0x1E, 0x83, 0x14, 0x20, 0xA2, 0x05, 0x10, - 0x28, 0x81, 0x46, 0x0A, 0x18, 0x50, 0x3F, 0x80, 0x04, 0x00, 0x10, 0x00, - 0x80, 0x02, 0x00, 0x18, 0x18, 0x3F, 0x00, 0x1F, 0xF0, 0x00, 0x06, 0x80, - 0x00, 0x34, 0x00, 0x01, 0x30, 0x00, 0x18, 0x80, 0x00, 0x86, 0x00, 0x04, - 0x30, 0x00, 0x60, 0x80, 0x02, 0x06, 0x00, 0x10, 0x10, 0x01, 0x80, 0x80, - 0x08, 0x06, 0x00, 0x7F, 0xF0, 0x06, 0x00, 0x80, 0x20, 0x06, 0x01, 0x00, - 0x10, 0x18, 0x00, 0xC0, 0x80, 0x06, 0x04, 0x00, 0x11, 0xFC, 0x0F, 0xF0, - 0xFF, 0xF8, 0x04, 0x01, 0x01, 0x00, 0x20, 0x40, 0x04, 0x10, 0x01, 0x04, - 0x00, 0x41, 0x00, 0x10, 0x40, 0x08, 0x10, 0x0C, 0x07, 0xFF, 0x01, 0x00, - 0x70, 0x40, 0x06, 0x10, 0x00, 0x84, 0x00, 0x11, 0x00, 0x04, 0x40, 0x01, - 0x10, 0x00, 0x44, 0x00, 0x21, 0x00, 0x33, 0xFF, 0xF8, 0x03, 0xF1, 0x06, - 0x0E, 0x8C, 0x01, 0xC4, 0x00, 0x64, 0x00, 0x12, 0x00, 0x0A, 0x00, 0x01, - 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x20, 0x01, 0x88, 0x01, 0x83, - 0x03, 0x80, 0x7E, 0x00, 0xFF, 0xE0, 0x20, 0x18, 0x20, 0x0C, 0x20, 0x04, - 0x20, 0x02, 0x20, 0x02, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, - 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x02, 0x20, 0x02, - 0x20, 0x04, 0x20, 0x0C, 0x20, 0x18, 0xFF, 0xE0, 0xFF, 0xFF, 0x08, 0x00, - 0x84, 0x00, 0x42, 0x00, 0x21, 0x00, 0x10, 0x80, 0x00, 0x40, 0x00, 0x20, - 0x40, 0x10, 0x20, 0x0F, 0xF0, 0x04, 0x08, 0x02, 0x04, 0x01, 0x00, 0x00, - 0x80, 0x00, 0x40, 0x02, 0x20, 0x01, 0x10, 0x00, 0x88, 0x00, 0x44, 0x00, - 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0x88, 0x00, 0x44, 0x00, 0x22, 0x00, 0x11, - 0x00, 0x08, 0x80, 0x00, 0x40, 0x00, 0x20, 0x40, 0x10, 0x20, 0x0F, 0xF0, - 0x04, 0x08, 0x02, 0x04, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, - 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xF9, - 0x06, 0x07, 0x84, 0x00, 0xC4, 0x00, 0x24, 0x00, 0x12, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x0F, 0xF8, - 0x00, 0x14, 0x00, 0x09, 0x00, 0x04, 0x80, 0x02, 0x20, 0x01, 0x18, 0x00, - 0x83, 0x01, 0xC0, 0x7F, 0x00, 0xFC, 0x3F, 0x20, 0x04, 0x20, 0x04, 0x20, - 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x3F, - 0xFC, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, - 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0xFC, 0x3F, 0xFF, 0xF8, 0x10, - 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, - 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, 0x40, 0x02, - 0x00, 0x10, 0x00, 0x81, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x02, 0x10, 0x01, 0x08, 0x00, 0x84, 0x00, 0x42, - 0x00, 0x21, 0x00, 0x10, 0x80, 0x10, 0x20, 0x18, 0x0C, 0x18, 0x01, 0xF0, - 0x00, 0xFF, 0x1F, 0x84, 0x01, 0x81, 0x00, 0xC0, 0x40, 0x60, 0x10, 0x30, - 0x04, 0x18, 0x01, 0x0C, 0x00, 0x46, 0x00, 0x13, 0x00, 0x05, 0xF0, 0x01, - 0xC6, 0x00, 0x60, 0xC0, 0x10, 0x18, 0x04, 0x06, 0x01, 0x00, 0xC0, 0x40, - 0x30, 0x10, 0x04, 0x04, 0x01, 0x81, 0x00, 0x23, 0xFC, 0x0F, 0xFF, 0x80, - 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, - 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, - 0x42, 0x00, 0x84, 0x01, 0x08, 0x02, 0x10, 0x04, 0x20, 0x0F, 0xFF, 0xF0, - 0xF0, 0x01, 0xE7, 0x00, 0x70, 0xA0, 0x0A, 0x16, 0x03, 0x42, 0x40, 0x48, - 0x4C, 0x19, 0x08, 0x82, 0x21, 0x10, 0x44, 0x23, 0x18, 0x84, 0x22, 0x10, - 0x86, 0xC2, 0x10, 0x50, 0x42, 0x0E, 0x08, 0x41, 0xC1, 0x08, 0x00, 0x21, - 0x00, 0x04, 0x20, 0x00, 0x84, 0x00, 0x10, 0x80, 0x02, 0x7F, 0x03, 0xF0, - 0xF8, 0x1F, 0xC6, 0x00, 0x41, 0xC0, 0x10, 0x50, 0x04, 0x12, 0x01, 0x04, - 0xC0, 0x41, 0x10, 0x10, 0x46, 0x04, 0x10, 0x81, 0x04, 0x10, 0x41, 0x04, - 0x10, 0x40, 0x84, 0x10, 0x31, 0x04, 0x04, 0x41, 0x01, 0x90, 0x40, 0x24, - 0x10, 0x05, 0x04, 0x01, 0xC1, 0x00, 0x31, 0xFC, 0x0C, 0x03, 0xE0, 0x06, - 0x0C, 0x04, 0x01, 0x04, 0x00, 0x46, 0x00, 0x32, 0x00, 0x0B, 0x00, 0x05, - 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, - 0x0E, 0x00, 0x0D, 0x00, 0x04, 0xC0, 0x06, 0x20, 0x02, 0x08, 0x02, 0x03, - 0x06, 0x00, 0x7C, 0x00, 0xFF, 0xF0, 0x10, 0x0C, 0x10, 0x02, 0x10, 0x03, - 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x03, 0x10, 0x06, 0x10, 0x0C, - 0x1F, 0xF0, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFF, 0xC0, 0x03, 0xE0, 0x06, 0x0C, - 0x04, 0x01, 0x04, 0x00, 0x46, 0x00, 0x32, 0x00, 0x0B, 0x00, 0x07, 0x00, - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0E, - 0x00, 0x0D, 0x00, 0x04, 0xC0, 0x06, 0x20, 0x02, 0x08, 0x02, 0x03, 0x06, - 0x00, 0xFC, 0x00, 0x30, 0x00, 0x30, 0x00, 0x7F, 0xC6, 0x38, 0x1E, 0xFF, - 0xF0, 0x02, 0x01, 0x80, 0x40, 0x08, 0x08, 0x01, 0x81, 0x00, 0x10, 0x20, - 0x02, 0x04, 0x00, 0x40, 0x80, 0x18, 0x10, 0x06, 0x02, 0x03, 0x80, 0x7F, - 0xC0, 0x08, 0x18, 0x01, 0x01, 0x80, 0x20, 0x18, 0x04, 0x01, 0x80, 0x80, - 0x10, 0x10, 0x03, 0x02, 0x00, 0x20, 0x40, 0x06, 0x7F, 0x80, 0x70, 0x0F, - 0xC8, 0x61, 0xE2, 0x01, 0x90, 0x02, 0x40, 0x09, 0x00, 0x04, 0x00, 0x08, - 0x00, 0x38, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, - 0x00, 0x60, 0x01, 0x80, 0x0F, 0x00, 0x2B, 0x03, 0x23, 0xF0, 0xFF, 0xFF, - 0x02, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x10, 0x20, 0x20, 0x00, 0x40, 0x00, - 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, - 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x01, 0xFF, 0xC0, - 0xFC, 0x1F, 0x90, 0x01, 0x08, 0x00, 0x84, 0x00, 0x42, 0x00, 0x21, 0x00, - 0x10, 0x80, 0x08, 0x40, 0x04, 0x20, 0x02, 0x10, 0x01, 0x08, 0x00, 0x84, - 0x00, 0x42, 0x00, 0x21, 0x00, 0x10, 0x80, 0x08, 0x40, 0x04, 0x10, 0x04, - 0x0C, 0x06, 0x03, 0x06, 0x00, 0x7C, 0x00, 0xFE, 0x03, 0xF8, 0x80, 0x02, - 0x04, 0x00, 0x10, 0x30, 0x01, 0x80, 0x80, 0x08, 0x06, 0x00, 0xC0, 0x30, - 0x06, 0x00, 0x80, 0x20, 0x06, 0x03, 0x00, 0x30, 0x10, 0x00, 0x80, 0x80, - 0x06, 0x0C, 0x00, 0x10, 0x40, 0x00, 0x86, 0x00, 0x06, 0x20, 0x00, 0x11, - 0x00, 0x00, 0xD8, 0x00, 0x06, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, - 0xFC, 0x0F, 0xE8, 0x00, 0x19, 0x00, 0x03, 0x10, 0x00, 0x62, 0x00, 0x08, - 0x41, 0x81, 0x08, 0x28, 0x21, 0x05, 0x04, 0x21, 0xA0, 0x84, 0x36, 0x30, - 0x84, 0x46, 0x08, 0x88, 0xC1, 0x31, 0x18, 0x24, 0x12, 0x04, 0x82, 0x40, - 0xB0, 0x48, 0x14, 0x09, 0x02, 0x80, 0xA0, 0x30, 0x1C, 0x06, 0x03, 0x80, - 0x7E, 0x0F, 0xC2, 0x00, 0x60, 0x60, 0x0C, 0x06, 0x03, 0x00, 0x60, 0xC0, - 0x0C, 0x10, 0x00, 0xC6, 0x00, 0x0D, 0x80, 0x00, 0xA0, 0x00, 0x1C, 0x00, - 0x03, 0x80, 0x00, 0xD8, 0x00, 0x11, 0x00, 0x06, 0x30, 0x01, 0x83, 0x00, - 0x60, 0x30, 0x08, 0x06, 0x03, 0x00, 0x60, 0xC0, 0x06, 0x7F, 0x07, 0xF0, - 0xFC, 0x1F, 0x98, 0x03, 0x04, 0x01, 0x03, 0x01, 0x80, 0xC1, 0x80, 0x20, - 0x80, 0x18, 0xC0, 0x04, 0x40, 0x03, 0x60, 0x00, 0xE0, 0x00, 0x20, 0x00, - 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, - 0x00, 0x40, 0x00, 0x20, 0x03, 0xFF, 0x80, 0xFF, 0xF4, 0x00, 0xA0, 0x09, - 0x00, 0x48, 0x04, 0x40, 0x40, 0x02, 0x00, 0x20, 0x02, 0x00, 0x10, 0x01, - 0x00, 0x10, 0x00, 0x80, 0x08, 0x04, 0x80, 0x24, 0x01, 0x40, 0x0C, 0x00, - 0x60, 0x03, 0xFF, 0xF0, 0xFC, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, - 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0xF8, 0x80, 0x02, 0x00, 0x10, - 0x00, 0xC0, 0x02, 0x00, 0x18, 0x00, 0x40, 0x03, 0x00, 0x08, 0x00, 0x40, - 0x01, 0x00, 0x08, 0x00, 0x20, 0x01, 0x00, 0x04, 0x00, 0x20, 0x00, 0x80, - 0x04, 0x00, 0x10, 0x00, 0x80, 0x02, 0x00, 0x10, 0x00, 0x40, 0x02, 0x00, - 0x08, 0x00, 0x40, 0xF8, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, - 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0xF8, 0x02, 0x00, 0x38, 0x03, 0x60, - 0x11, 0x01, 0x8C, 0x18, 0x31, 0x80, 0xD8, 0x03, 0x80, 0x08, 0xFF, 0xFF, - 0xF8, 0xC1, 0x83, 0x06, 0x0C, 0x0F, 0xC0, 0x70, 0x30, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x08, 0x00, 0x08, 0x0F, 0xF8, 0x30, 0x08, 0x40, 0x08, 0x80, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x38, 0x60, 0xE8, 0x3F, 0x8F, 0xF0, - 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x04, 0x00, - 0x01, 0x0F, 0x80, 0x4C, 0x18, 0x14, 0x01, 0x06, 0x00, 0x21, 0x80, 0x08, - 0x40, 0x01, 0x10, 0x00, 0x44, 0x00, 0x11, 0x00, 0x04, 0x40, 0x01, 0x18, - 0x00, 0x86, 0x00, 0x21, 0xC0, 0x10, 0x5C, 0x18, 0xF1, 0xF8, 0x00, 0x07, - 0xE4, 0x30, 0x78, 0x80, 0x32, 0x00, 0x24, 0x00, 0x50, 0x00, 0x20, 0x00, - 0x40, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x12, 0x00, 0xC3, - 0x07, 0x01, 0xF8, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, - 0x08, 0x00, 0x02, 0x00, 0x00, 0x80, 0x7C, 0x20, 0x60, 0xC8, 0x20, 0x0A, - 0x10, 0x01, 0x84, 0x00, 0x62, 0x00, 0x08, 0x80, 0x02, 0x20, 0x00, 0x88, - 0x00, 0x22, 0x00, 0x08, 0xC0, 0x06, 0x10, 0x01, 0x82, 0x00, 0xE0, 0x60, - 0xE8, 0x0F, 0xE3, 0xC0, 0x07, 0xE0, 0x1C, 0x18, 0x30, 0x0C, 0x60, 0x06, - 0x40, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xC0, 0x00, - 0x40, 0x00, 0x60, 0x00, 0x30, 0x03, 0x0C, 0x0E, 0x03, 0xF0, 0x03, 0xFC, - 0x18, 0x00, 0x80, 0x02, 0x00, 0x08, 0x00, 0x20, 0x0F, 0xFF, 0x82, 0x00, - 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, - 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0xFF, 0xF0, 0x0F, - 0xC7, 0x9C, 0x3A, 0x18, 0x07, 0x08, 0x01, 0x8C, 0x00, 0xC4, 0x00, 0x22, - 0x00, 0x11, 0x00, 0x08, 0x80, 0x04, 0x40, 0x02, 0x10, 0x03, 0x08, 0x01, - 0x82, 0x01, 0x40, 0xC3, 0x20, 0x3F, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x7F, 0x00, 0xF0, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x47, - 0xC0, 0x2C, 0x18, 0x1C, 0x04, 0x0C, 0x01, 0x04, 0x00, 0x82, 0x00, 0x41, - 0x00, 0x20, 0x80, 0x10, 0x40, 0x08, 0x20, 0x04, 0x10, 0x02, 0x08, 0x01, - 0x04, 0x00, 0x82, 0x00, 0x47, 0xC0, 0xF8, 0x06, 0x00, 0x18, 0x00, 0x60, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x02, 0x00, 0x08, - 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, - 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, 0x03, 0xFF, 0xF0, 0x03, 0x00, - 0xC0, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x40, 0x10, 0x04, - 0x01, 0x00, 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, 0x10, 0x04, 0x01, 0x00, - 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, 0x10, 0x08, 0x06, 0xFE, 0x00, 0xF0, - 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, - 0xFE, 0x10, 0x30, 0x10, 0xE0, 0x11, 0xC0, 0x13, 0x00, 0x16, 0x00, 0x1E, - 0x00, 0x1B, 0x00, 0x11, 0x80, 0x10, 0xC0, 0x10, 0x60, 0x10, 0x30, 0x10, - 0x18, 0x10, 0x1C, 0xF0, 0x3F, 0x7E, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, - 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x08, 0x00, 0x20, - 0x00, 0x80, 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x08, - 0x00, 0x20, 0x00, 0x80, 0xFF, 0xFC, 0xEF, 0x9E, 0x07, 0x1E, 0x20, 0xC1, - 0x82, 0x10, 0x20, 0x42, 0x04, 0x08, 0x40, 0x81, 0x08, 0x10, 0x21, 0x02, - 0x04, 0x20, 0x40, 0x84, 0x08, 0x10, 0x81, 0x02, 0x10, 0x20, 0x42, 0x04, - 0x08, 0x40, 0x81, 0x3E, 0x1C, 0x38, 0x71, 0xF0, 0x0B, 0x06, 0x07, 0x01, - 0x03, 0x00, 0x41, 0x00, 0x20, 0x80, 0x10, 0x40, 0x08, 0x20, 0x04, 0x10, - 0x02, 0x08, 0x01, 0x04, 0x00, 0x82, 0x00, 0x41, 0x00, 0x20, 0x80, 0x13, - 0xF0, 0x3E, 0x07, 0xC0, 0x30, 0x60, 0x80, 0x22, 0x00, 0x24, 0x00, 0x50, - 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x05, 0x00, 0x12, 0x00, - 0x22, 0x00, 0x83, 0x06, 0x01, 0xF0, 0x00, 0xF1, 0xFC, 0x05, 0xC1, 0x81, - 0xC0, 0x10, 0x60, 0x02, 0x18, 0x00, 0xC4, 0x00, 0x11, 0x00, 0x04, 0x40, - 0x01, 0x10, 0x00, 0x44, 0x00, 0x11, 0x80, 0x08, 0x60, 0x02, 0x14, 0x01, - 0x04, 0xC1, 0x81, 0x0F, 0x80, 0x40, 0x00, 0x10, 0x00, 0x04, 0x00, 0x01, - 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xE3, 0xC6, - 0x0E, 0x86, 0x00, 0xE1, 0x00, 0x18, 0xC0, 0x06, 0x20, 0x00, 0x88, 0x00, - 0x22, 0x00, 0x08, 0x80, 0x02, 0x20, 0x00, 0x84, 0x00, 0x61, 0x00, 0x18, - 0x20, 0x0A, 0x06, 0x0C, 0x80, 0x7C, 0x20, 0x00, 0x08, 0x00, 0x02, 0x00, - 0x00, 0x80, 0x00, 0x20, 0x00, 0x08, 0x00, 0x02, 0x00, 0x0F, 0xF0, 0xF8, - 0x7C, 0x11, 0x8C, 0x2C, 0x00, 0x70, 0x00, 0xC0, 0x01, 0x00, 0x02, 0x00, - 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, - 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xD1, 0x83, 0x98, 0x04, 0x80, 0x24, 0x00, - 0x30, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0x30, 0x00, 0xE0, 0x03, 0x00, 0x1C, - 0x01, 0xF0, 0x1A, 0x7F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x08, 0x00, 0xFF, 0xFC, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x08, 0x00, 0x08, 0x01, 0x06, 0x0F, 0x03, 0xF8, 0xF0, 0x3E, 0x08, - 0x01, 0x04, 0x00, 0x82, 0x00, 0x41, 0x00, 0x20, 0x80, 0x10, 0x40, 0x08, - 0x20, 0x04, 0x10, 0x02, 0x08, 0x01, 0x04, 0x00, 0x82, 0x00, 0x41, 0x00, - 0xE0, 0x41, 0xD0, 0x1F, 0x8E, 0xFE, 0x0F, 0xE2, 0x00, 0x20, 0x60, 0x0C, - 0x0C, 0x01, 0x80, 0x80, 0x20, 0x18, 0x0C, 0x01, 0x01, 0x00, 0x30, 0x60, - 0x02, 0x08, 0x00, 0x41, 0x00, 0x0C, 0x60, 0x00, 0x88, 0x00, 0x19, 0x00, - 0x01, 0x40, 0x00, 0x38, 0x00, 0xFC, 0x07, 0xE4, 0x00, 0x10, 0x80, 0x02, - 0x18, 0x20, 0xC3, 0x0E, 0x18, 0x21, 0x42, 0x04, 0x28, 0x40, 0x8D, 0x88, - 0x19, 0x93, 0x03, 0x22, 0x60, 0x2C, 0x68, 0x05, 0x85, 0x00, 0xA0, 0xA0, - 0x1C, 0x1C, 0x01, 0x81, 0x80, 0x7C, 0x1F, 0x18, 0x03, 0x06, 0x03, 0x01, - 0x83, 0x00, 0x63, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x60, - 0x03, 0x18, 0x03, 0x06, 0x03, 0x01, 0x83, 0x00, 0x61, 0x00, 0x33, 0xF0, - 0x7E, 0xFC, 0x1F, 0x90, 0x01, 0x8C, 0x00, 0x86, 0x00, 0xC1, 0x80, 0x40, - 0xC0, 0x60, 0x20, 0x20, 0x18, 0x30, 0x04, 0x10, 0x03, 0x08, 0x00, 0x8C, - 0x00, 0x64, 0x00, 0x16, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x01, 0x00, 0x01, - 0x80, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x20, 0x07, 0xFE, 0x00, - 0xFF, 0xF4, 0x01, 0x20, 0x09, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, - 0xC0, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x14, 0x00, 0xA0, 0x07, 0xFF, - 0xE0, 0x07, 0x0C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x30, 0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x0C, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x30, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x07, 0x0C, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0xE0, 0x1C, 0x00, 0x44, 0x0D, 0x84, - 0x36, 0x04, 0x40, 0x07, 0x00}; - -const GFXglyph FreeMono18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 21, 0, 1}, // 0x20 ' ' - {0, 4, 22, 21, 8, -21}, // 0x21 '!' - {11, 11, 10, 21, 5, -20}, // 0x22 '"' - {25, 14, 24, 21, 3, -21}, // 0x23 '#' - {67, 13, 26, 21, 4, -22}, // 0x24 '$' - {110, 15, 21, 21, 3, -20}, // 0x25 '%' - {150, 12, 18, 21, 4, -17}, // 0x26 '&' - {177, 4, 10, 21, 8, -20}, // 0x27 ''' - {182, 5, 25, 21, 10, -20}, // 0x28 '(' - {198, 5, 25, 21, 6, -20}, // 0x29 ')' - {214, 13, 12, 21, 4, -20}, // 0x2A '*' - {234, 15, 17, 21, 3, -17}, // 0x2B '+' - {266, 7, 10, 21, 5, -4}, // 0x2C ',' - {275, 15, 1, 21, 3, -9}, // 0x2D '-' - {277, 5, 5, 21, 8, -4}, // 0x2E '.' - {281, 13, 26, 21, 4, -22}, // 0x2F '/' - {324, 13, 21, 21, 4, -20}, // 0x30 '0' - {359, 13, 21, 21, 4, -20}, // 0x31 '1' - {394, 13, 21, 21, 3, -20}, // 0x32 '2' - {429, 14, 21, 21, 3, -20}, // 0x33 '3' - {466, 12, 21, 21, 4, -20}, // 0x34 '4' - {498, 14, 21, 21, 3, -20}, // 0x35 '5' - {535, 12, 21, 21, 5, -20}, // 0x36 '6' - {567, 12, 21, 21, 4, -20}, // 0x37 '7' - {599, 13, 21, 21, 4, -20}, // 0x38 '8' - {634, 12, 21, 21, 5, -20}, // 0x39 '9' - {666, 5, 15, 21, 8, -14}, // 0x3A ':' - {676, 7, 20, 21, 5, -14}, // 0x3B ';' - {694, 15, 16, 21, 3, -17}, // 0x3C '<' - {724, 17, 6, 21, 2, -12}, // 0x3D '=' - {737, 15, 16, 21, 3, -17}, // 0x3E '>' - {767, 12, 20, 21, 5, -19}, // 0x3F '?' - {797, 13, 23, 21, 4, -20}, // 0x40 '@' - {835, 21, 20, 21, 0, -19}, // 0x41 'A' - {888, 18, 20, 21, 1, -19}, // 0x42 'B' - {933, 17, 20, 21, 2, -19}, // 0x43 'C' - {976, 16, 20, 21, 2, -19}, // 0x44 'D' - {1016, 17, 20, 21, 1, -19}, // 0x45 'E' - {1059, 17, 20, 21, 1, -19}, // 0x46 'F' - {1102, 17, 20, 21, 2, -19}, // 0x47 'G' - {1145, 16, 20, 21, 2, -19}, // 0x48 'H' - {1185, 13, 20, 21, 4, -19}, // 0x49 'I' - {1218, 17, 20, 21, 3, -19}, // 0x4A 'J' - {1261, 18, 20, 21, 1, -19}, // 0x4B 'K' - {1306, 15, 20, 21, 3, -19}, // 0x4C 'L' - {1344, 19, 20, 21, 1, -19}, // 0x4D 'M' - {1392, 18, 20, 21, 1, -19}, // 0x4E 'N' - {1437, 17, 20, 21, 2, -19}, // 0x4F 'O' - {1480, 16, 20, 21, 1, -19}, // 0x50 'P' - {1520, 17, 24, 21, 2, -19}, // 0x51 'Q' - {1571, 19, 20, 21, 1, -19}, // 0x52 'R' - {1619, 14, 20, 21, 3, -19}, // 0x53 'S' - {1654, 15, 20, 21, 3, -19}, // 0x54 'T' - {1692, 17, 20, 21, 2, -19}, // 0x55 'U' - {1735, 21, 20, 21, 0, -19}, // 0x56 'V' - {1788, 19, 20, 21, 1, -19}, // 0x57 'W' - {1836, 19, 20, 21, 1, -19}, // 0x58 'X' - {1884, 17, 20, 21, 2, -19}, // 0x59 'Y' - {1927, 13, 20, 21, 4, -19}, // 0x5A 'Z' - {1960, 5, 25, 21, 10, -20}, // 0x5B '[' - {1976, 13, 26, 21, 4, -22}, // 0x5C '\' - {2019, 5, 25, 21, 6, -20}, // 0x5D ']' - {2035, 13, 9, 21, 4, -20}, // 0x5E '^' - {2050, 21, 1, 21, 0, 4}, // 0x5F '_' - {2053, 6, 5, 21, 5, -21}, // 0x60 '`' - {2057, 16, 15, 21, 3, -14}, // 0x61 'a' - {2087, 18, 21, 21, 1, -20}, // 0x62 'b' - {2135, 15, 15, 21, 3, -14}, // 0x63 'c' - {2164, 18, 21, 21, 2, -20}, // 0x64 'd' - {2212, 16, 15, 21, 2, -14}, // 0x65 'e' - {2242, 14, 21, 21, 4, -20}, // 0x66 'f' - {2279, 17, 22, 21, 2, -14}, // 0x67 'g' - {2326, 17, 21, 21, 1, -20}, // 0x68 'h' - {2371, 14, 22, 21, 4, -21}, // 0x69 'i' - {2410, 10, 29, 21, 5, -21}, // 0x6A 'j' - {2447, 16, 21, 21, 2, -20}, // 0x6B 'k' - {2489, 14, 21, 21, 4, -20}, // 0x6C 'l' - {2526, 19, 15, 21, 1, -14}, // 0x6D 'm' - {2562, 17, 15, 21, 1, -14}, // 0x6E 'n' - {2594, 15, 15, 21, 3, -14}, // 0x6F 'o' - {2623, 18, 22, 21, 1, -14}, // 0x70 'p' - {2673, 18, 22, 21, 2, -14}, // 0x71 'q' - {2723, 15, 15, 21, 3, -14}, // 0x72 'r' - {2752, 13, 15, 21, 4, -14}, // 0x73 's' - {2777, 16, 20, 21, 1, -19}, // 0x74 't' - {2817, 17, 15, 21, 1, -14}, // 0x75 'u' - {2849, 19, 15, 21, 1, -14}, // 0x76 'v' - {2885, 19, 15, 21, 1, -14}, // 0x77 'w' - {2921, 17, 15, 21, 2, -14}, // 0x78 'x' - {2953, 17, 22, 21, 2, -14}, // 0x79 'y' - {3000, 13, 15, 21, 4, -14}, // 0x7A 'z' - {3025, 8, 25, 21, 6, -20}, // 0x7B '{' - {3050, 1, 25, 21, 10, -20}, // 0x7C '|' - {3054, 8, 25, 21, 7, -20}, // 0x7D '}' - {3079, 15, 5, 21, 3, -11}}; // 0x7E '~' - -const GFXfont FreeMono18pt7b PROGMEM = {(uint8_t *)FreeMono18pt7bBitmaps, - (GFXglyph *)FreeMono18pt7bGlyphs, 0x20, - 0x7E, 35}; - -// Approx. 3761 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono24pt7b.h deleted file mode 100644 index 2540ed4..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono24pt7b.h +++ /dev/null @@ -1,579 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMono24pt7bBitmaps[] PROGMEM = { - 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x10, 0x84, 0x21, 0x08, - 0x00, 0x00, 0x00, 0x03, 0xBF, 0xFF, 0xB8, 0xFE, 0x7F, 0x7C, 0x3E, 0x7C, - 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x3C, - 0x3E, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x01, - 0x86, 0x00, 0x30, 0xC0, 0x06, 0x18, 0x00, 0xC3, 0x00, 0x18, 0x60, 0x03, - 0x0C, 0x00, 0x61, 0x80, 0x0C, 0x70, 0x01, 0x8C, 0x00, 0x61, 0x80, 0x0C, - 0x30, 0x3F, 0xFF, 0xF7, 0xFF, 0xFE, 0x06, 0x18, 0x00, 0xC3, 0x00, 0x18, - 0x60, 0x03, 0x0C, 0x00, 0x61, 0x80, 0x0C, 0x30, 0x7F, 0xFF, 0xEF, 0xFF, - 0xFC, 0x06, 0x18, 0x00, 0xC7, 0x00, 0x38, 0xC0, 0x06, 0x18, 0x00, 0xC3, - 0x00, 0x18, 0x60, 0x03, 0x0C, 0x00, 0x61, 0x80, 0x0C, 0x30, 0x01, 0x86, - 0x00, 0x30, 0xC0, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x0F, 0xC0, - 0x0F, 0xFD, 0x87, 0x03, 0xE3, 0x80, 0x39, 0xC0, 0x06, 0x60, 0x01, 0x98, - 0x00, 0x06, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0xC0, 0x00, 0x7F, - 0x80, 0x03, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0x60, 0x00, 0x1C, 0x00, 0x03, - 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x80, 0x0E, 0xFC, 0x0F, 0x37, - 0xFF, 0x80, 0x7F, 0x80, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, - 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x07, 0x80, 0x01, 0xFE, 0x00, 0x38, - 0x70, 0x03, 0x03, 0x00, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, - 0x01, 0x80, 0x30, 0x30, 0x03, 0x87, 0x00, 0x1F, 0xE0, 0x30, 0x78, 0x1F, - 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0xF8, 0x00, - 0x0C, 0x01, 0xE0, 0x00, 0x7F, 0x80, 0x0E, 0x1C, 0x00, 0xC0, 0xC0, 0x18, - 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x0C, 0x0E, 0x00, - 0xE1, 0xC0, 0x07, 0xF8, 0x00, 0x1E, 0x00, 0x03, 0xEC, 0x01, 0xFF, 0x00, - 0xE1, 0x00, 0x70, 0x00, 0x18, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x30, - 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x7C, 0x00, 0x3B, 0x83, - 0xD8, 0x60, 0xFE, 0x0C, 0x33, 0x03, 0x98, 0xC0, 0x66, 0x30, 0x0D, 0x8C, - 0x03, 0xC3, 0x00, 0x70, 0x60, 0x1C, 0x1C, 0x0F, 0x03, 0x87, 0x7C, 0x7F, - 0x9F, 0x07, 0x80, 0x00, 0xFE, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x3C, - 0x70, 0xE1, 0xC3, 0x87, 0x00, 0x06, 0x1C, 0x30, 0xE1, 0x87, 0x0E, 0x18, - 0x70, 0xE1, 0xC3, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x0C, - 0x1C, 0x38, 0x70, 0x60, 0xE1, 0xC1, 0x83, 0x83, 0x06, 0x06, 0x04, 0xC1, - 0xC1, 0x83, 0x83, 0x07, 0x0E, 0x0C, 0x1C, 0x38, 0x70, 0xE0, 0xE1, 0xC3, - 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0x87, 0x0E, 0x1C, 0x30, 0x61, 0xC3, - 0x0E, 0x18, 0x70, 0xC1, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, - 0x03, 0x00, 0x00, 0xC0, 0x10, 0x30, 0x3F, 0x8C, 0x7C, 0xFF, 0xFC, 0x07, - 0xF8, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x0C, 0xC0, 0x06, 0x18, 0x03, 0x87, - 0x00, 0xC0, 0xC0, 0x60, 0x18, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, - 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, - 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, - 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, - 0x1F, 0x8F, 0x87, 0xC7, 0xC3, 0xE1, 0xE1, 0xF0, 0xF0, 0x78, 0x38, 0x3C, - 0x1C, 0x0E, 0x06, 0x00, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xF0, 0x7D, 0xFF, - 0xFF, 0xFF, 0xEF, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x18, 0x00, - 0x06, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x18, 0x00, 0x0C, - 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x30, 0x00, 0x0C, 0x00, - 0x06, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x18, 0x00, 0x06, - 0x00, 0x03, 0x80, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x18, 0x00, 0x0E, 0x00, - 0x03, 0x00, 0x01, 0xC0, 0x00, 0x60, 0x00, 0x38, 0x00, 0x0C, 0x00, 0x07, - 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x03, - 0xF0, 0x03, 0xFF, 0x01, 0xE1, 0xE0, 0xE0, 0x18, 0x30, 0x03, 0x1C, 0x00, - 0xE6, 0x00, 0x19, 0x80, 0x06, 0xE0, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, - 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, - 0x76, 0x00, 0x19, 0x80, 0x06, 0x70, 0x03, 0x8C, 0x00, 0xC3, 0x80, 0x60, - 0x78, 0x78, 0x0F, 0xFC, 0x00, 0xFC, 0x00, 0x03, 0x80, 0x07, 0x80, 0x0F, - 0x80, 0x1D, 0x80, 0x39, 0x80, 0x71, 0x80, 0xE1, 0x80, 0xC1, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x03, 0xFF, 0x01, 0xC0, 0xE0, - 0xC0, 0x1C, 0x60, 0x03, 0xB8, 0x00, 0x6C, 0x00, 0x0F, 0x00, 0x03, 0x00, - 0x00, 0xC0, 0x00, 0x30, 0x00, 0x18, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, - 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, - 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, - 0x00, 0xD0, 0x00, 0x38, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, - 0xF8, 0x01, 0xFF, 0xC0, 0x70, 0x3C, 0x18, 0x01, 0xC6, 0x00, 0x18, 0x00, - 0x01, 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, - 0x06, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x00, - 0x78, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, - 0x06, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0xD8, 0x00, - 0x3B, 0x80, 0x0E, 0x3E, 0x07, 0x81, 0xFF, 0xE0, 0x07, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x7C, 0x00, 0x6C, 0x00, 0xCC, 0x00, 0x8C, 0x01, 0x8C, 0x03, - 0x0C, 0x03, 0x0C, 0x06, 0x0C, 0x04, 0x0C, 0x0C, 0x0C, 0x08, 0x0C, 0x10, - 0x0C, 0x30, 0x0C, 0x20, 0x0C, 0x60, 0x0C, 0x40, 0x0C, 0x80, 0x0C, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, - 0x0C, 0x00, 0x0C, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0xFF, 0x07, 0xFF, 0xE0, - 0xC0, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x0C, 0x00, 0x01, - 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xC7, 0xE0, 0x1F, 0xFF, 0x03, - 0x80, 0x70, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0x60, - 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xC0, - 0x00, 0x30, 0x00, 0x06, 0xC0, 0x01, 0xDC, 0x00, 0x71, 0xF0, 0x3C, 0x0F, - 0xFF, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0xF0, 0x3E, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x00, 0xC0, 0x00, 0x70, 0x00, - 0x18, 0x00, 0x06, 0x00, 0x03, 0x80, 0x00, 0xC1, 0xF8, 0x31, 0xFF, 0x0C, - 0xF0, 0xF3, 0x70, 0x0C, 0xD8, 0x01, 0xBC, 0x00, 0x6E, 0x00, 0x0F, 0x80, - 0x03, 0xC0, 0x00, 0xD8, 0x00, 0x36, 0x00, 0x0D, 0x80, 0x03, 0x30, 0x01, - 0x8E, 0x00, 0x61, 0xC0, 0x30, 0x38, 0x38, 0x07, 0xFC, 0x00, 0x7C, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x01, 0xC0, - 0x00, 0x60, 0x00, 0x18, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, - 0x30, 0x00, 0x18, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x30, - 0x00, 0x0C, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x30, 0x00, - 0x0C, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x18, 0x00, 0x0C, - 0x00, 0x03, 0x00, 0x03, 0xF0, 0x03, 0xFF, 0x03, 0xC0, 0xF1, 0xC0, 0x0E, - 0x60, 0x01, 0xB8, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, - 0x00, 0x36, 0x00, 0x18, 0xC0, 0x0C, 0x1C, 0x0E, 0x03, 0xFF, 0x00, 0xFF, - 0xC0, 0x70, 0x38, 0x30, 0x03, 0x18, 0x00, 0x66, 0x00, 0x1B, 0x00, 0x03, - 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0x60, 0x01, 0x98, - 0x00, 0xE3, 0x00, 0x70, 0x70, 0x38, 0x0F, 0xFC, 0x00, 0xFC, 0x00, 0x07, - 0xE0, 0x03, 0xFE, 0x01, 0xC1, 0xC0, 0xC0, 0x38, 0x60, 0x07, 0x18, 0x00, - 0xCC, 0x00, 0x1B, 0x00, 0x06, 0xC0, 0x01, 0xB0, 0x00, 0x3C, 0x00, 0x1F, - 0x00, 0x07, 0x60, 0x03, 0xD8, 0x01, 0xB3, 0x00, 0xCC, 0xF0, 0xF3, 0x0F, - 0xF8, 0xC1, 0xF8, 0x30, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, - 0xE0, 0x00, 0x30, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x07, 0x80, - 0x07, 0xC0, 0xFF, 0xC0, 0x1F, 0xC0, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xEF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0xFF, 0xFF, 0xFF, - 0xF7, 0xC0, 0x0F, 0x87, 0xF1, 0xFC, 0x7F, 0x1F, 0xC3, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF1, 0xF8, 0x7C, 0x3F, 0x0F, - 0x83, 0xE0, 0xF0, 0x7C, 0x1E, 0x07, 0x81, 0xC0, 0xF0, 0x38, 0x04, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, - 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, - 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x20, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, - 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x3C, 0x00, 0x01, 0xE0, - 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x01, 0xE0, - 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x0E, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xFE, 0x3E, 0x07, 0x98, 0x00, 0xEC, 0x00, - 0x36, 0x00, 0x0F, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x01, 0xC0, - 0x00, 0xC0, 0x01, 0xC0, 0x03, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0x03, 0x00, - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x80, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, - 0x78, 0x00, 0x03, 0xF0, 0x03, 0xFF, 0x01, 0xE0, 0xE0, 0xE0, 0x1C, 0x30, - 0x03, 0x1C, 0x00, 0x66, 0x00, 0x19, 0x80, 0x06, 0xC0, 0x01, 0xB0, 0x07, - 0xEC, 0x07, 0xFB, 0x03, 0xC6, 0xC1, 0xC1, 0xB0, 0xE0, 0x6C, 0x30, 0x1B, - 0x0C, 0x06, 0xC3, 0x01, 0xB0, 0xC0, 0x6C, 0x18, 0x1B, 0x07, 0x86, 0xC0, - 0xFF, 0xF0, 0x0F, 0xFC, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, - 0x07, 0x00, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0xC0, 0xFF, 0xF0, - 0x0F, 0xE0, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1B, 0x00, - 0x00, 0x01, 0x98, 0x00, 0x00, 0x11, 0x80, 0x00, 0x03, 0x0C, 0x00, 0x00, - 0x30, 0xC0, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x60, 0x60, 0x00, 0x06, 0x06, - 0x00, 0x00, 0xC0, 0x30, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x80, 0x30, 0x00, - 0x18, 0x01, 0x80, 0x01, 0x80, 0x18, 0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, - 0xFC, 0x00, 0x20, 0x00, 0xC0, 0x06, 0x00, 0x06, 0x00, 0x60, 0x00, 0x60, - 0x0C, 0x00, 0x06, 0x00, 0xC0, 0x00, 0x30, 0x0C, 0x00, 0x03, 0x01, 0x80, - 0x00, 0x18, 0x7F, 0xC0, 0x3F, 0xF7, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x03, - 0xFF, 0xFF, 0x01, 0x80, 0x0E, 0x06, 0x00, 0x1C, 0x18, 0x00, 0x38, 0x60, - 0x00, 0x61, 0x80, 0x01, 0x86, 0x00, 0x06, 0x18, 0x00, 0x38, 0x60, 0x01, - 0xC1, 0x80, 0x1E, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0xC0, 0x60, 0x03, 0xC1, - 0x80, 0x03, 0x86, 0x00, 0x06, 0x18, 0x00, 0x1C, 0x60, 0x00, 0x31, 0x80, - 0x00, 0xC6, 0x00, 0x03, 0x18, 0x00, 0x0C, 0x60, 0x00, 0x61, 0x80, 0x03, - 0x86, 0x00, 0x1C, 0xFF, 0xFF, 0xE3, 0xFF, 0xFE, 0x00, 0x00, 0xFC, 0x00, - 0x0F, 0xFE, 0x60, 0xF0, 0x3D, 0x87, 0x00, 0x3E, 0x38, 0x00, 0x38, 0xC0, - 0x00, 0xE7, 0x00, 0x01, 0x98, 0x00, 0x06, 0x60, 0x00, 0x03, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, - 0xC7, 0x00, 0x06, 0x0E, 0x00, 0x70, 0x1E, 0x07, 0x80, 0x3F, 0xFC, 0x00, - 0x1F, 0x80, 0xFF, 0xFE, 0x03, 0xFF, 0xFE, 0x03, 0x00, 0x3C, 0x0C, 0x00, - 0x38, 0x30, 0x00, 0x70, 0xC0, 0x00, 0xC3, 0x00, 0x03, 0x8C, 0x00, 0x06, - 0x30, 0x00, 0x1C, 0xC0, 0x00, 0x33, 0x00, 0x00, 0xCC, 0x00, 0x03, 0x30, - 0x00, 0x0C, 0xC0, 0x00, 0x33, 0x00, 0x00, 0xCC, 0x00, 0x03, 0x30, 0x00, - 0x0C, 0xC0, 0x00, 0x33, 0x00, 0x01, 0x8C, 0x00, 0x06, 0x30, 0x00, 0x30, - 0xC0, 0x01, 0xC3, 0x00, 0x0E, 0x0C, 0x00, 0xF0, 0xFF, 0xFF, 0x83, 0xFF, - 0xF8, 0x00, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xE1, 0x80, 0x01, 0x86, 0x00, - 0x06, 0x18, 0x00, 0x18, 0x60, 0x00, 0x61, 0x80, 0x01, 0x86, 0x00, 0x00, - 0x18, 0x0C, 0x00, 0x60, 0x30, 0x01, 0x80, 0xC0, 0x07, 0xFF, 0x00, 0x1F, - 0xFC, 0x00, 0x60, 0x30, 0x01, 0x80, 0xC0, 0x06, 0x03, 0x00, 0x18, 0x00, - 0x00, 0x60, 0x00, 0x01, 0x80, 0x00, 0xC6, 0x00, 0x03, 0x18, 0x00, 0x0C, - 0x60, 0x00, 0x31, 0x80, 0x00, 0xC6, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x80, 0x00, 0xC6, 0x00, - 0x03, 0x18, 0x00, 0x0C, 0x60, 0x00, 0x31, 0x80, 0x00, 0xC6, 0x00, 0x00, - 0x18, 0x0C, 0x00, 0x60, 0x30, 0x01, 0x80, 0xC0, 0x07, 0xFF, 0x00, 0x1F, - 0xFC, 0x00, 0x60, 0x30, 0x01, 0x80, 0xC0, 0x06, 0x03, 0x00, 0x18, 0x00, - 0x00, 0x60, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0xFF, 0xF0, 0x03, 0xFF, - 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x98, 0x1E, 0x03, 0xF0, 0x70, - 0x01, 0xE1, 0x80, 0x01, 0xC6, 0x00, 0x01, 0x9C, 0x00, 0x03, 0x30, 0x00, - 0x00, 0x60, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x03, 0xFF, - 0xC0, 0x07, 0xFF, 0x80, 0x00, 0x1B, 0x00, 0x00, 0x37, 0x00, 0x00, 0x66, - 0x00, 0x00, 0xCC, 0x00, 0x01, 0x8C, 0x00, 0x03, 0x1C, 0x00, 0x06, 0x1E, - 0x00, 0x0C, 0x0F, 0x00, 0xF8, 0x0F, 0xFF, 0xC0, 0x03, 0xFC, 0x00, 0x7F, - 0x01, 0xFC, 0xFE, 0x03, 0xF8, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, - 0x03, 0x03, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, - 0x30, 0x30, 0x00, 0x60, 0x60, 0x00, 0xC0, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, - 0x03, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, 0x30, - 0x30, 0x00, 0x60, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, 0x03, 0x03, - 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0xFF, 0x01, 0xFF, 0xFE, - 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFE, 0x01, 0xFF, 0xFC, - 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, - 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x60, 0xC0, 0x00, 0xC1, 0x80, 0x01, 0x83, 0x00, 0x03, - 0x06, 0x00, 0x06, 0x0C, 0x00, 0x0C, 0x18, 0x00, 0x30, 0x38, 0x00, 0x60, - 0x38, 0x01, 0x80, 0x3C, 0x0E, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xC0, 0x00, - 0xFF, 0x81, 0xFE, 0xFF, 0x81, 0xFE, 0x18, 0x00, 0x30, 0x18, 0x00, 0xE0, - 0x18, 0x01, 0xC0, 0x18, 0x03, 0x80, 0x18, 0x07, 0x00, 0x18, 0x0E, 0x00, - 0x18, 0x18, 0x00, 0x18, 0x70, 0x00, 0x18, 0xE0, 0x00, 0x19, 0xE0, 0x00, - 0x1B, 0xF8, 0x00, 0x1F, 0x1C, 0x00, 0x1C, 0x06, 0x00, 0x18, 0x03, 0x00, - 0x18, 0x03, 0x80, 0x18, 0x01, 0x80, 0x18, 0x00, 0xC0, 0x18, 0x00, 0xC0, - 0x18, 0x00, 0x60, 0x18, 0x00, 0x60, 0x18, 0x00, 0x70, 0x18, 0x00, 0x30, - 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x01, - 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, - 0x00, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, - 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, - 0x06, 0x00, 0x18, 0x30, 0x00, 0xC1, 0x80, 0x06, 0x0C, 0x00, 0x30, 0x60, - 0x01, 0x83, 0x00, 0x0C, 0x18, 0x00, 0x60, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xF3, 0x60, 0x01, - 0xB0, 0xD8, 0x00, 0x6C, 0x33, 0x00, 0x33, 0x0C, 0xC0, 0x0C, 0xC3, 0x38, - 0x07, 0x30, 0xC6, 0x01, 0x8C, 0x31, 0xC0, 0xE3, 0x0C, 0x30, 0x30, 0xC3, - 0x0C, 0x0C, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x61, 0x83, 0x0C, 0x0C, 0xC0, - 0xC3, 0x03, 0x30, 0x30, 0xC0, 0x78, 0x0C, 0x30, 0x1E, 0x03, 0x0C, 0x03, - 0x00, 0xC3, 0x00, 0x00, 0x30, 0xC0, 0x00, 0x0C, 0x30, 0x00, 0x03, 0x0C, - 0x00, 0x00, 0xC3, 0x00, 0x00, 0x30, 0xC0, 0x00, 0x0C, 0xFF, 0x00, 0x3F, - 0xFF, 0xC0, 0x0F, 0xF0, 0xFC, 0x00, 0xFF, 0xFC, 0x00, 0xFF, 0x1E, 0x00, - 0x0C, 0x1F, 0x00, 0x0C, 0x1B, 0x00, 0x0C, 0x19, 0x80, 0x0C, 0x19, 0xC0, - 0x0C, 0x18, 0xC0, 0x0C, 0x18, 0x60, 0x0C, 0x18, 0x60, 0x0C, 0x18, 0x30, - 0x0C, 0x18, 0x38, 0x0C, 0x18, 0x18, 0x0C, 0x18, 0x0C, 0x0C, 0x18, 0x0E, - 0x0C, 0x18, 0x06, 0x0C, 0x18, 0x03, 0x0C, 0x18, 0x03, 0x0C, 0x18, 0x01, - 0x8C, 0x18, 0x01, 0xCC, 0x18, 0x00, 0xCC, 0x18, 0x00, 0x6C, 0x18, 0x00, - 0x7C, 0x18, 0x00, 0x3C, 0x7F, 0x80, 0x1C, 0x7F, 0x80, 0x1C, 0x00, 0x7E, - 0x00, 0x01, 0xFF, 0xC0, 0x07, 0x81, 0xE0, 0x0E, 0x00, 0x70, 0x1C, 0x00, - 0x38, 0x38, 0x00, 0x1C, 0x30, 0x00, 0x0C, 0x70, 0x00, 0x0E, 0x60, 0x00, - 0x06, 0x60, 0x00, 0x06, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0xC0, 0x00, 0x03, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x70, 0x00, - 0x0E, 0x30, 0x00, 0x0C, 0x38, 0x00, 0x1C, 0x1C, 0x00, 0x38, 0x0E, 0x00, - 0x70, 0x07, 0x81, 0xE0, 0x03, 0xFF, 0xC0, 0x00, 0x7E, 0x00, 0xFF, 0xFF, - 0x07, 0xFF, 0xFE, 0x06, 0x00, 0x78, 0x30, 0x00, 0xE1, 0x80, 0x03, 0x0C, - 0x00, 0x0C, 0x60, 0x00, 0x63, 0x00, 0x03, 0x18, 0x00, 0x18, 0xC0, 0x01, - 0xC6, 0x00, 0x0C, 0x30, 0x00, 0xC1, 0x80, 0x1E, 0x0F, 0xFF, 0xC0, 0x7F, - 0xF8, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, - 0x00, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFF, - 0x80, 0x07, 0x81, 0xE0, 0x0E, 0x00, 0x70, 0x1C, 0x00, 0x38, 0x38, 0x00, - 0x1C, 0x30, 0x00, 0x0C, 0x70, 0x00, 0x0E, 0x60, 0x00, 0x06, 0x60, 0x00, - 0x06, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x70, 0x00, 0x0E, 0x30, 0x00, - 0x0C, 0x18, 0x00, 0x1C, 0x0C, 0x00, 0x38, 0x06, 0x00, 0x70, 0x03, 0x81, - 0xE0, 0x00, 0xFF, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x00, 0x03, 0xFF, - 0x87, 0x07, 0xFF, 0xFE, 0x07, 0x00, 0xF8, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, - 0x80, 0x18, 0x03, 0xC0, 0x18, 0x00, 0xE0, 0x18, 0x00, 0x60, 0x18, 0x00, - 0x30, 0x18, 0x00, 0x30, 0x18, 0x00, 0x30, 0x18, 0x00, 0x30, 0x18, 0x00, - 0x70, 0x18, 0x00, 0x60, 0x18, 0x01, 0xC0, 0x18, 0x07, 0x80, 0x1F, 0xFF, - 0x00, 0x1F, 0xFC, 0x00, 0x18, 0x0E, 0x00, 0x18, 0x07, 0x00, 0x18, 0x03, - 0x80, 0x18, 0x01, 0xC0, 0x18, 0x00, 0xE0, 0x18, 0x00, 0x60, 0x18, 0x00, - 0x30, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0xFF, 0x80, 0x1F, 0xFF, 0x80, - 0x0F, 0x03, 0xF8, 0x00, 0xFF, 0xE6, 0x1E, 0x07, 0xE3, 0x80, 0x1E, 0x30, - 0x00, 0xE6, 0x00, 0x06, 0x60, 0x00, 0x66, 0x00, 0x06, 0x60, 0x00, 0x07, - 0x00, 0x00, 0x30, 0x00, 0x01, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0xC0, - 0x00, 0x3F, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, - 0x30, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00, 0x7E, 0x00, - 0x06, 0xF8, 0x01, 0xED, 0xE0, 0x7C, 0xCF, 0xFF, 0x00, 0x3F, 0xC0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0x00, 0xF0, 0x0C, 0x03, 0xC0, 0x30, - 0x0F, 0x00, 0xC0, 0x3C, 0x03, 0x00, 0xC0, 0x0C, 0x00, 0x00, 0x30, 0x00, - 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, - 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, - 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, - 0x03, 0x00, 0x00, 0x0C, 0x00, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0xFF, - 0x01, 0xFF, 0xFE, 0x03, 0xFC, 0xC0, 0x00, 0x61, 0x80, 0x00, 0xC3, 0x00, - 0x01, 0x86, 0x00, 0x03, 0x0C, 0x00, 0x06, 0x18, 0x00, 0x0C, 0x30, 0x00, - 0x18, 0x60, 0x00, 0x30, 0xC0, 0x00, 0x61, 0x80, 0x00, 0xC3, 0x00, 0x01, - 0x86, 0x00, 0x03, 0x0C, 0x00, 0x06, 0x18, 0x00, 0x0C, 0x30, 0x00, 0x18, - 0x60, 0x00, 0x30, 0xC0, 0x00, 0x61, 0x80, 0x00, 0xC3, 0x80, 0x03, 0x83, - 0x00, 0x06, 0x07, 0x00, 0x1C, 0x07, 0x00, 0x70, 0x07, 0x83, 0xC0, 0x07, - 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x7F, 0xC0, 0x3F, 0xF7, 0xFC, 0x03, 0xFF, - 0x18, 0x00, 0x01, 0x80, 0xC0, 0x00, 0x30, 0x0C, 0x00, 0x03, 0x00, 0x60, - 0x00, 0x30, 0x06, 0x00, 0x06, 0x00, 0x60, 0x00, 0x60, 0x03, 0x00, 0x0C, - 0x00, 0x30, 0x00, 0xC0, 0x03, 0x80, 0x0C, 0x00, 0x18, 0x01, 0x80, 0x01, - 0x80, 0x18, 0x00, 0x0C, 0x03, 0x00, 0x00, 0xC0, 0x30, 0x00, 0x0E, 0x03, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x06, 0x06, 0x00, 0x00, 0x30, 0xC0, 0x00, - 0x03, 0x0C, 0x00, 0x00, 0x30, 0x80, 0x00, 0x01, 0x98, 0x00, 0x00, 0x19, - 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x00, - 0xFF, 0x80, 0x7F, 0xFF, 0xE0, 0x1F, 0xF3, 0x00, 0x00, 0x30, 0xC0, 0x00, - 0x0C, 0x30, 0x00, 0x03, 0x0C, 0x03, 0x80, 0xC3, 0x01, 0xE0, 0x30, 0x60, - 0x78, 0x0C, 0x18, 0x1F, 0x02, 0x06, 0x04, 0xC0, 0x81, 0x83, 0x30, 0x60, - 0x60, 0xCC, 0x18, 0x18, 0x31, 0x86, 0x06, 0x18, 0x61, 0x81, 0x86, 0x18, - 0x60, 0x71, 0x87, 0x18, 0x0C, 0x40, 0xC6, 0x03, 0x30, 0x31, 0x00, 0xCC, - 0x0C, 0xC0, 0x33, 0x01, 0xB0, 0x0D, 0x80, 0x6C, 0x03, 0x60, 0x1B, 0x00, - 0xD8, 0x06, 0xC0, 0x34, 0x00, 0xF0, 0x07, 0x00, 0x3C, 0x01, 0xC0, 0x0E, - 0x00, 0x7F, 0x00, 0xFF, 0x7F, 0x00, 0xFF, 0x18, 0x00, 0x18, 0x0C, 0x00, - 0x38, 0x0E, 0x00, 0x70, 0x07, 0x00, 0x60, 0x03, 0x00, 0xC0, 0x01, 0x81, - 0x80, 0x01, 0xC3, 0x80, 0x00, 0xE7, 0x00, 0x00, 0x76, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x66, - 0x00, 0x00, 0xC3, 0x00, 0x01, 0x81, 0x80, 0x03, 0x81, 0xC0, 0x07, 0x00, - 0xE0, 0x06, 0x00, 0x60, 0x0C, 0x00, 0x30, 0x18, 0x00, 0x18, 0x38, 0x00, - 0x1C, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, - 0xFF, 0x18, 0x00, 0x18, 0x0C, 0x00, 0x30, 0x0E, 0x00, 0x70, 0x06, 0x00, - 0x60, 0x03, 0x00, 0xC0, 0x03, 0x81, 0xC0, 0x01, 0x81, 0x80, 0x00, 0xC3, - 0x00, 0x00, 0xE7, 0x00, 0x00, 0x66, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x07, 0xFF, 0xE0, 0x07, 0xFF, - 0xE0, 0x7F, 0xFF, 0x9F, 0xFF, 0xE6, 0x00, 0x19, 0x80, 0x0C, 0x60, 0x07, - 0x18, 0x03, 0x86, 0x00, 0xC1, 0x80, 0x70, 0x00, 0x38, 0x00, 0x0C, 0x00, - 0x07, 0x00, 0x03, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x38, 0x00, 0x1C, - 0x00, 0x06, 0x00, 0x03, 0x80, 0x31, 0xC0, 0x0C, 0x60, 0x03, 0x30, 0x00, - 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0xFF, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, - 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, - 0x0C, 0x18, 0x30, 0x60, 0xFF, 0xFC, 0xC0, 0x00, 0x30, 0x00, 0x06, 0x00, - 0x01, 0x80, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, - 0x0C, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, - 0xC0, 0x00, 0x18, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x06, - 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x80, 0x00, 0x60, - 0x00, 0x1C, 0x00, 0x03, 0x00, 0x00, 0xE0, 0x00, 0x18, 0x00, 0x07, 0x00, - 0x00, 0xC0, 0x00, 0x30, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, - 0x0C, 0xFF, 0xFC, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, - 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, - 0x18, 0x30, 0x60, 0xC1, 0x83, 0xFF, 0xFC, 0x00, 0x40, 0x00, 0x30, 0x00, - 0x1E, 0x00, 0x0E, 0xC0, 0x07, 0x38, 0x01, 0x87, 0x00, 0xC0, 0xC0, 0x60, - 0x18, 0x38, 0x03, 0x1C, 0x00, 0xE6, 0x00, 0x1F, 0x00, 0x03, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x3C, 0x0E, 0x07, 0x03, - 0x01, 0xFC, 0x00, 0x7F, 0xFC, 0x01, 0xC0, 0x3C, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x60, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x60, 0x0F, 0xF9, 0x81, 0xFF, 0xFE, 0x0F, 0x80, 0x38, 0x70, 0x00, 0x63, - 0x80, 0x01, 0x8C, 0x00, 0x06, 0x30, 0x00, 0x18, 0xC0, 0x00, 0xE3, 0x00, - 0x07, 0x86, 0x00, 0x76, 0x1E, 0x07, 0x9F, 0x3F, 0xF8, 0x7C, 0x3F, 0x80, - 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x00, - 0x01, 0x80, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x1F, 0x80, - 0x18, 0xFF, 0xC0, 0x33, 0x81, 0xC0, 0x6E, 0x01, 0xC0, 0xF0, 0x00, 0xC1, - 0xE0, 0x01, 0xC3, 0x80, 0x01, 0x87, 0x00, 0x03, 0x8C, 0x00, 0x03, 0x18, - 0x00, 0x06, 0x30, 0x00, 0x0C, 0x60, 0x00, 0x18, 0xC0, 0x00, 0x31, 0x80, - 0x00, 0x63, 0x80, 0x01, 0x87, 0x00, 0x03, 0x0F, 0x00, 0x0E, 0x1F, 0x00, - 0x38, 0x37, 0x00, 0xE3, 0xE7, 0x03, 0x87, 0xC7, 0xFE, 0x00, 0x03, 0xF0, - 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xF9, 0x83, 0xC0, 0xFC, 0x38, 0x01, 0xE3, - 0x00, 0x07, 0x38, 0x00, 0x19, 0x80, 0x00, 0xDC, 0x00, 0x06, 0xC0, 0x00, - 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, - 0x00, 0x03, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x70, 0x00, 0x01, 0x80, 0x00, - 0xC7, 0x00, 0x1E, 0x1E, 0x03, 0xC0, 0x7F, 0xFC, 0x00, 0xFF, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x01, 0xF8, 0x18, 0x07, - 0xFE, 0x18, 0x0F, 0x07, 0x98, 0x1C, 0x01, 0xD8, 0x38, 0x00, 0xF8, 0x70, - 0x00, 0x78, 0x60, 0x00, 0x38, 0xE0, 0x00, 0x38, 0xC0, 0x00, 0x18, 0xC0, - 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, - 0x00, 0x18, 0x60, 0x00, 0x38, 0x60, 0x00, 0x38, 0x70, 0x00, 0x78, 0x38, - 0x00, 0xD8, 0x1C, 0x01, 0xD8, 0x0F, 0x07, 0x9F, 0x07, 0xFE, 0x1F, 0x01, - 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x07, 0x80, 0xF0, 0x70, 0x01, - 0xC3, 0x00, 0x07, 0x30, 0x00, 0x19, 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0C, 0x00, 0x00, - 0x60, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x01, 0xC0, - 0x00, 0xC7, 0x00, 0x0E, 0x1E, 0x03, 0xE0, 0x3F, 0xFC, 0x00, 0x7F, 0x00, - 0x00, 0x7F, 0xC0, 0x3F, 0xFC, 0x0E, 0x00, 0x03, 0x80, 0x00, 0x60, 0x00, - 0x0C, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0xFF, 0xFF, 0x9F, 0xFF, 0xF0, - 0x18, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, - 0x30, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, - 0x60, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, - 0xC0, 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0xFC, - 0x7C, 0x38, 0x1C, 0xF8, 0xE0, 0x0D, 0x83, 0x00, 0x0F, 0x0E, 0x00, 0x1E, - 0x18, 0x00, 0x1C, 0x70, 0x00, 0x38, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x63, - 0x00, 0x00, 0xC6, 0x00, 0x01, 0x8C, 0x00, 0x03, 0x18, 0x00, 0x06, 0x18, - 0x00, 0x1C, 0x30, 0x00, 0x38, 0x30, 0x00, 0xF0, 0x70, 0x03, 0x60, 0x78, - 0x1C, 0xC0, 0x3F, 0xF1, 0x80, 0x1F, 0x83, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, - 0x80, 0x00, 0x0E, 0x00, 0x3F, 0xF8, 0x00, 0x7F, 0xC0, 0x00, 0xF8, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, - 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x3F, 0x00, 0x18, 0xFF, 0x80, - 0x37, 0x03, 0x80, 0x7C, 0x03, 0x80, 0xF0, 0x03, 0x81, 0xC0, 0x03, 0x03, - 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, 0x30, 0x30, - 0x00, 0x60, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, 0x03, 0x03, 0x00, - 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, 0x30, 0x30, 0x00, - 0x63, 0xFC, 0x07, 0xFF, 0xF8, 0x0F, 0xF0, 0x01, 0xC0, 0x00, 0x70, 0x00, - 0x1C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0x03, 0x00, 0x00, 0xC0, - 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, - 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, - 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0x00, 0x0C, - 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, - 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, - 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, - 0x70, 0x03, 0x80, 0x1C, 0xFF, 0xE3, 0xFF, 0x00, 0xF8, 0x00, 0x03, 0xE0, - 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, - 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, 0x1F, 0xE0, 0x60, 0x7F, 0x81, - 0x80, 0x60, 0x06, 0x07, 0x00, 0x18, 0x38, 0x00, 0x61, 0xC0, 0x01, 0x8E, - 0x00, 0x06, 0x70, 0x00, 0x1B, 0x80, 0x00, 0x7F, 0x00, 0x01, 0xCE, 0x00, - 0x06, 0x1C, 0x00, 0x18, 0x38, 0x00, 0x60, 0x70, 0x01, 0x80, 0xE0, 0x06, - 0x01, 0xC0, 0x18, 0x03, 0x80, 0x60, 0x07, 0x0F, 0x80, 0x7F, 0xFE, 0x01, - 0xFF, 0x3F, 0xC0, 0x0F, 0xF0, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, - 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, - 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, - 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, - 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x3C, 0x0F, 0x9F, 0x87, 0xE0, 0xFB, - 0x1C, 0xC7, 0x01, 0xE0, 0xD8, 0x38, 0x1C, 0x07, 0x01, 0x81, 0x80, 0x60, - 0x18, 0x18, 0x06, 0x01, 0x81, 0x80, 0x60, 0x18, 0x18, 0x06, 0x01, 0x81, - 0x80, 0x60, 0x18, 0x18, 0x06, 0x01, 0x81, 0x80, 0x60, 0x18, 0x18, 0x06, - 0x01, 0x81, 0x80, 0x60, 0x18, 0x18, 0x06, 0x01, 0x81, 0x80, 0x60, 0x18, - 0x18, 0x06, 0x01, 0x81, 0x80, 0x60, 0x18, 0x18, 0x06, 0x01, 0x8F, 0xE0, - 0x7C, 0x1F, 0xFE, 0x07, 0xC1, 0xF0, 0x00, 0x1F, 0x00, 0xF8, 0xFF, 0x81, - 0xF3, 0x83, 0x80, 0x6C, 0x03, 0x80, 0xF0, 0x03, 0x81, 0xC0, 0x03, 0x03, - 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, 0x30, 0x30, - 0x00, 0x60, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, 0x03, 0x03, 0x00, - 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, 0x30, 0x30, 0x00, - 0x67, 0xFC, 0x03, 0xFF, 0xF8, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0xFE, - 0x00, 0xF0, 0x3C, 0x07, 0x00, 0x38, 0x38, 0x00, 0x71, 0xC0, 0x00, 0xE6, - 0x00, 0x01, 0x98, 0x00, 0x06, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x36, 0x00, 0x01, - 0x98, 0x00, 0x06, 0x70, 0x00, 0x38, 0xE0, 0x01, 0xC1, 0xC0, 0x0E, 0x03, - 0xC0, 0xF0, 0x07, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x01, 0xF1, - 0xFF, 0x83, 0xE7, 0x03, 0x80, 0xD8, 0x01, 0x81, 0xE0, 0x01, 0x83, 0xC0, - 0x03, 0x87, 0x00, 0x03, 0x0E, 0x00, 0x07, 0x18, 0x00, 0x06, 0x30, 0x00, - 0x0C, 0x60, 0x00, 0x18, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x63, 0x00, 0x00, - 0xC7, 0x00, 0x03, 0x0E, 0x00, 0x06, 0x1E, 0x00, 0x18, 0x36, 0x00, 0x70, - 0x67, 0x03, 0xC0, 0xC7, 0xFE, 0x01, 0x83, 0xF0, 0x03, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, - 0x00, 0x00, 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xFF, 0x1F, 0x0F, 0x07, 0x9F, 0x1C, 0x01, 0xD8, 0x38, - 0x00, 0x78, 0x70, 0x00, 0x78, 0x60, 0x00, 0x38, 0xE0, 0x00, 0x38, 0xC0, - 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, 0x00, 0x18, 0xC0, - 0x00, 0x18, 0xC0, 0x00, 0x18, 0x60, 0x00, 0x38, 0x70, 0x00, 0x78, 0x30, - 0x00, 0x78, 0x1C, 0x01, 0xD8, 0x0F, 0x07, 0x98, 0x07, 0xFF, 0x18, 0x01, - 0xFC, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x03, 0xFF, 0x00, 0x03, 0xFF, 0x7E, 0x03, 0xC3, 0xF0, 0x7F, 0x81, 0x8F, - 0x0E, 0x0C, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x00, - 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, - 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, 0x06, - 0x00, 0x00, 0x30, 0x00, 0x3F, 0xFF, 0xC1, 0xFF, 0xFE, 0x00, 0x07, 0xF0, - 0x07, 0xFF, 0x63, 0xC0, 0xF9, 0xC0, 0x0E, 0x60, 0x01, 0x98, 0x00, 0x66, - 0x00, 0x19, 0xC0, 0x00, 0x38, 0x00, 0x07, 0xC0, 0x00, 0x7F, 0xC0, 0x00, - 0x7C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0xF8, 0x00, 0x7F, 0x00, 0x3B, 0xF0, 0x3C, 0xDF, 0xFE, 0x00, 0xFE, 0x00, - 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, - 0x00, 0x06, 0x00, 0x03, 0xFF, 0xFE, 0x1F, 0xFF, 0xF0, 0x0C, 0x00, 0x00, - 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, 0x06, 0x00, - 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, - 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, - 0x00, 0xC0, 0x07, 0x07, 0x01, 0xF0, 0x1F, 0xFF, 0x00, 0x3F, 0x80, 0xF8, - 0x03, 0xF1, 0xF0, 0x07, 0xE0, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, - 0x03, 0x03, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x18, 0x18, 0x00, - 0x30, 0x30, 0x00, 0x60, 0x60, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, 0x03, - 0x03, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x00, 0x38, 0x18, 0x00, 0xF0, - 0x18, 0x03, 0x60, 0x38, 0x3C, 0xF8, 0x3F, 0xF1, 0xF0, 0x1F, 0x00, 0x00, - 0x7F, 0xC0, 0xFF, 0xDF, 0xF0, 0x3F, 0xF0, 0xC0, 0x00, 0xC0, 0x30, 0x00, - 0x30, 0x06, 0x00, 0x1C, 0x01, 0x80, 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, - 0x00, 0xC0, 0x03, 0x80, 0x30, 0x00, 0x60, 0x18, 0x00, 0x18, 0x06, 0x00, - 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x18, 0x30, 0x00, 0x06, 0x18, - 0x00, 0x00, 0xC6, 0x00, 0x00, 0x33, 0x00, 0x00, 0x0E, 0xC0, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x78, 0x00, 0x7F, 0x00, 0x3F, 0xDF, 0xC0, 0x0F, 0xF1, - 0x80, 0x00, 0x20, 0x60, 0x00, 0x18, 0x18, 0x00, 0x06, 0x06, 0x03, 0x01, - 0x80, 0x81, 0xE0, 0x60, 0x30, 0x78, 0x10, 0x0C, 0x1E, 0x0C, 0x03, 0x0C, - 0xC3, 0x00, 0xC3, 0x30, 0xC0, 0x10, 0xCC, 0x30, 0x06, 0x61, 0x98, 0x01, - 0x98, 0x66, 0x00, 0x66, 0x19, 0x80, 0x0B, 0x03, 0x60, 0x03, 0xC0, 0xD0, - 0x00, 0xF0, 0x1C, 0x00, 0x38, 0x07, 0x00, 0x0E, 0x01, 0xC0, 0x3F, 0x81, - 0xFE, 0x3F, 0x81, 0xFE, 0x0C, 0x00, 0x38, 0x06, 0x00, 0x70, 0x03, 0x00, - 0xE0, 0x01, 0x81, 0xC0, 0x00, 0xC3, 0x80, 0x00, 0x67, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x67, 0x00, 0x00, 0xC3, - 0x80, 0x01, 0x81, 0xC0, 0x03, 0x00, 0xE0, 0x06, 0x00, 0x70, 0x0C, 0x00, - 0x38, 0x18, 0x00, 0x1C, 0x7F, 0x81, 0xFF, 0x7F, 0x81, 0xFF, 0x7F, 0x00, - 0xFF, 0x7F, 0x00, 0xFF, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x0C, 0x00, - 0x18, 0x0C, 0x00, 0x30, 0x06, 0x00, 0x30, 0x06, 0x00, 0x60, 0x03, 0x00, - 0x60, 0x03, 0x00, 0xC0, 0x01, 0x80, 0xC0, 0x01, 0x81, 0x80, 0x00, 0xC1, - 0x80, 0x00, 0xC3, 0x00, 0x00, 0x63, 0x00, 0x00, 0x66, 0x00, 0x00, 0x36, - 0x00, 0x00, 0x34, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFC, - 0x00, 0xFF, 0xFF, 0x7F, 0xFF, 0xB0, 0x01, 0x98, 0x01, 0xCC, 0x01, 0xC0, - 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0, - 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x03, 0x70, - 0x01, 0xB0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xE0, 0x7C, 0x0C, - 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, - 0x00, 0x60, 0x0C, 0x03, 0x00, 0xE0, 0xF0, 0x1E, 0x00, 0x70, 0x06, 0x00, - 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, - 0x0C, 0x01, 0x80, 0x18, 0x03, 0xE0, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xE0, 0x1F, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x18, - 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x01, - 0x80, 0x38, 0x01, 0xE0, 0x3C, 0x1C, 0x03, 0x00, 0xC0, 0x18, 0x03, 0x00, - 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0xC0, - 0xF8, 0x1C, 0x00, 0x0F, 0x00, 0x03, 0xFC, 0x03, 0x70, 0xE0, 0x76, 0x07, - 0x8E, 0xC0, 0x1F, 0xC0, 0x00, 0xF0}; - -const GFXglyph FreeMono24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 28, 0, 1}, // 0x20 ' ' - {0, 5, 30, 28, 11, -28}, // 0x21 '!' - {19, 16, 14, 28, 6, -28}, // 0x22 '"' - {47, 19, 32, 28, 4, -29}, // 0x23 '#' - {123, 18, 33, 28, 5, -29}, // 0x24 '$' - {198, 20, 29, 28, 4, -27}, // 0x25 '%' - {271, 18, 25, 28, 5, -23}, // 0x26 '&' - {328, 7, 14, 28, 11, -28}, // 0x27 ''' - {341, 7, 34, 28, 14, -27}, // 0x28 '(' - {371, 7, 34, 28, 8, -27}, // 0x29 ')' - {401, 18, 16, 28, 5, -27}, // 0x2A '*' - {437, 20, 22, 28, 4, -23}, // 0x2B '+' - {492, 9, 14, 28, 6, -6}, // 0x2C ',' - {508, 22, 2, 28, 3, -13}, // 0x2D '-' - {514, 7, 6, 28, 11, -4}, // 0x2E '.' - {520, 18, 35, 28, 5, -30}, // 0x2F '/' - {599, 18, 30, 28, 5, -28}, // 0x30 '0' - {667, 16, 29, 28, 6, -28}, // 0x31 '1' - {725, 18, 29, 28, 5, -28}, // 0x32 '2' - {791, 19, 30, 28, 5, -28}, // 0x33 '3' - {863, 16, 28, 28, 6, -27}, // 0x34 '4' - {919, 19, 29, 28, 5, -27}, // 0x35 '5' - {988, 18, 30, 28, 6, -28}, // 0x36 '6' - {1056, 18, 28, 28, 5, -27}, // 0x37 '7' - {1119, 18, 30, 28, 5, -28}, // 0x38 '8' - {1187, 18, 30, 28, 6, -28}, // 0x39 '9' - {1255, 7, 21, 28, 11, -19}, // 0x3A ':' - {1274, 10, 27, 28, 7, -19}, // 0x3B ';' - {1308, 22, 22, 28, 3, -23}, // 0x3C '<' - {1369, 24, 9, 28, 2, -17}, // 0x3D '=' - {1396, 21, 22, 28, 4, -23}, // 0x3E '>' - {1454, 17, 28, 28, 6, -26}, // 0x3F '?' - {1514, 18, 32, 28, 5, -28}, // 0x40 '@' - {1586, 28, 26, 28, 0, -25}, // 0x41 'A' - {1677, 22, 26, 28, 3, -25}, // 0x42 'B' - {1749, 22, 28, 28, 3, -26}, // 0x43 'C' - {1826, 22, 26, 28, 3, -25}, // 0x44 'D' - {1898, 22, 26, 28, 3, -25}, // 0x45 'E' - {1970, 22, 26, 28, 3, -25}, // 0x46 'F' - {2042, 23, 28, 28, 3, -26}, // 0x47 'G' - {2123, 23, 26, 28, 3, -25}, // 0x48 'H' - {2198, 16, 26, 28, 6, -25}, // 0x49 'I' - {2250, 23, 27, 28, 4, -25}, // 0x4A 'J' - {2328, 24, 26, 28, 3, -25}, // 0x4B 'K' - {2406, 21, 26, 28, 4, -25}, // 0x4C 'L' - {2475, 26, 26, 28, 1, -25}, // 0x4D 'M' - {2560, 24, 26, 28, 2, -25}, // 0x4E 'N' - {2638, 24, 28, 28, 2, -26}, // 0x4F 'O' - {2722, 21, 26, 28, 3, -25}, // 0x50 'P' - {2791, 24, 32, 28, 2, -26}, // 0x51 'Q' - {2887, 24, 26, 28, 3, -25}, // 0x52 'R' - {2965, 20, 28, 28, 4, -26}, // 0x53 'S' - {3035, 22, 26, 28, 3, -25}, // 0x54 'T' - {3107, 23, 27, 28, 3, -25}, // 0x55 'U' - {3185, 28, 26, 28, 0, -25}, // 0x56 'V' - {3276, 26, 26, 28, 1, -25}, // 0x57 'W' - {3361, 24, 26, 28, 2, -25}, // 0x58 'X' - {3439, 24, 26, 28, 2, -25}, // 0x59 'Y' - {3517, 18, 26, 28, 5, -25}, // 0x5A 'Z' - {3576, 7, 34, 28, 13, -27}, // 0x5B '[' - {3606, 18, 35, 28, 5, -30}, // 0x5C '\' - {3685, 7, 34, 28, 8, -27}, // 0x5D ']' - {3715, 18, 12, 28, 5, -28}, // 0x5E '^' - {3742, 28, 2, 28, 0, 5}, // 0x5F '_' - {3749, 8, 7, 28, 7, -29}, // 0x60 '`' - {3756, 22, 22, 28, 3, -20}, // 0x61 'a' - {3817, 23, 29, 28, 2, -27}, // 0x62 'b' - {3901, 21, 22, 28, 4, -20}, // 0x63 'c' - {3959, 24, 29, 28, 3, -27}, // 0x64 'd' - {4046, 21, 22, 28, 3, -20}, // 0x65 'e' - {4104, 19, 28, 28, 6, -27}, // 0x66 'f' - {4171, 23, 30, 28, 3, -20}, // 0x67 'g' - {4258, 23, 28, 28, 3, -27}, // 0x68 'h' - {4339, 18, 29, 28, 5, -28}, // 0x69 'i' - {4405, 14, 38, 28, 6, -28}, // 0x6A 'j' - {4472, 22, 28, 28, 4, -27}, // 0x6B 'k' - {4549, 18, 28, 28, 5, -27}, // 0x6C 'l' - {4612, 28, 21, 28, 0, -20}, // 0x6D 'm' - {4686, 23, 21, 28, 2, -20}, // 0x6E 'n' - {4747, 22, 22, 28, 3, -20}, // 0x6F 'o' - {4808, 23, 30, 28, 2, -20}, // 0x70 'p' - {4895, 24, 30, 28, 3, -20}, // 0x71 'q' - {4985, 21, 20, 28, 5, -19}, // 0x72 'r' - {5038, 18, 22, 28, 5, -20}, // 0x73 's' - {5088, 21, 27, 28, 3, -25}, // 0x74 't' - {5159, 23, 21, 28, 3, -19}, // 0x75 'u' - {5220, 26, 20, 28, 1, -19}, // 0x76 'v' - {5285, 26, 20, 28, 1, -19}, // 0x77 'w' - {5350, 24, 20, 28, 2, -19}, // 0x78 'x' - {5410, 24, 29, 28, 2, -19}, // 0x79 'y' - {5497, 17, 20, 28, 6, -19}, // 0x7A 'z' - {5540, 11, 34, 28, 8, -27}, // 0x7B '{' - {5587, 2, 34, 28, 13, -27}, // 0x7C '|' - {5596, 11, 34, 28, 9, -27}, // 0x7D '}' - {5643, 20, 6, 28, 4, -15}}; // 0x7E '~' - -const GFXfont FreeMono24pt7b PROGMEM = {(uint8_t *)FreeMono24pt7bBitmaps, - (GFXglyph *)FreeMono24pt7bGlyphs, 0x20, - 0x7E, 47}; - -// Approx. 6330 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono9pt7b.h deleted file mode 100644 index a2e9a00..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMono9pt7b.h +++ /dev/null @@ -1,178 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMono9pt7bBitmaps[] PROGMEM = { - 0xAA, 0xA8, 0x0C, 0xED, 0x24, 0x92, 0x48, 0x24, 0x48, 0x91, 0x2F, 0xE4, - 0x89, 0x7F, 0x28, 0x51, 0x22, 0x40, 0x08, 0x3E, 0x62, 0x40, 0x30, 0x0E, - 0x01, 0x81, 0xC3, 0xBE, 0x08, 0x08, 0x71, 0x12, 0x23, 0x80, 0x23, 0xB8, - 0x0E, 0x22, 0x44, 0x70, 0x38, 0x81, 0x02, 0x06, 0x1A, 0x65, 0x46, 0xC8, - 0xEC, 0xE9, 0x24, 0x5A, 0xAA, 0xA9, 0x40, 0xA9, 0x55, 0x5A, 0x80, 0x10, - 0x22, 0x4B, 0xE3, 0x05, 0x11, 0x00, 0x10, 0x20, 0x47, 0xF1, 0x02, 0x04, - 0x00, 0x6B, 0x48, 0xFF, 0x00, 0xF0, 0x02, 0x08, 0x10, 0x60, 0x81, 0x04, - 0x08, 0x20, 0x41, 0x02, 0x08, 0x00, 0x38, 0x8A, 0x0C, 0x18, 0x30, 0x60, - 0xC1, 0x82, 0x88, 0xE0, 0x27, 0x28, 0x42, 0x10, 0x84, 0x21, 0x3E, 0x38, - 0x8A, 0x08, 0x10, 0x20, 0x82, 0x08, 0x61, 0x03, 0xF8, 0x7C, 0x06, 0x02, - 0x02, 0x1C, 0x06, 0x01, 0x01, 0x01, 0x42, 0x3C, 0x18, 0xA2, 0x92, 0x8A, - 0x28, 0xBF, 0x08, 0x21, 0xC0, 0x7C, 0x81, 0x03, 0xE4, 0x40, 0x40, 0x81, - 0x03, 0x88, 0xE0, 0x1E, 0x41, 0x04, 0x0B, 0x98, 0xB0, 0xC1, 0xC2, 0x88, - 0xE0, 0xFE, 0x04, 0x08, 0x20, 0x40, 0x82, 0x04, 0x08, 0x20, 0x40, 0x38, - 0x8A, 0x0C, 0x14, 0x47, 0x11, 0x41, 0x83, 0x8C, 0xE0, 0x38, 0x8A, 0x1C, - 0x18, 0x68, 0xCE, 0x81, 0x04, 0x13, 0xC0, 0xF0, 0x0F, 0x6C, 0x00, 0xD2, - 0xD2, 0x00, 0x03, 0x04, 0x18, 0x60, 0x60, 0x18, 0x04, 0x03, 0xFF, 0x80, - 0x00, 0x1F, 0xF0, 0x40, 0x18, 0x03, 0x00, 0x60, 0x20, 0x60, 0xC0, 0x80, - 0x3D, 0x84, 0x08, 0x30, 0xC2, 0x00, 0x00, 0x00, 0x30, 0x3C, 0x46, 0x82, - 0x8E, 0xB2, 0xA2, 0xA2, 0x9F, 0x80, 0x80, 0x40, 0x3C, 0x3C, 0x01, 0x40, - 0x28, 0x09, 0x01, 0x10, 0x42, 0x0F, 0xC1, 0x04, 0x40, 0x9E, 0x3C, 0xFE, - 0x21, 0x90, 0x48, 0x67, 0xE2, 0x09, 0x02, 0x81, 0x41, 0xFF, 0x80, 0x3E, - 0xB0, 0xF0, 0x30, 0x08, 0x04, 0x02, 0x00, 0x80, 0x60, 0x8F, 0x80, 0xFE, - 0x21, 0x90, 0x68, 0x14, 0x0A, 0x05, 0x02, 0x83, 0x43, 0x7F, 0x00, 0xFF, - 0x20, 0x90, 0x08, 0x87, 0xC2, 0x21, 0x00, 0x81, 0x40, 0xFF, 0xC0, 0xFF, - 0xA0, 0x50, 0x08, 0x87, 0xC2, 0x21, 0x00, 0x80, 0x40, 0x78, 0x00, 0x1E, - 0x98, 0x6C, 0x0A, 0x00, 0x80, 0x20, 0xF8, 0x0B, 0x02, 0x60, 0x87, 0xC0, - 0xE3, 0xA0, 0x90, 0x48, 0x27, 0xF2, 0x09, 0x04, 0x82, 0x41, 0x71, 0xC0, - 0xF9, 0x08, 0x42, 0x10, 0x84, 0x27, 0xC0, 0x1F, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x82, 0x82, 0xC6, 0x78, 0xE3, 0xA1, 0x11, 0x09, 0x05, 0x83, 0x21, - 0x08, 0x84, 0x41, 0x70, 0xC0, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, - 0x41, 0x41, 0xFF, 0xE0, 0xEC, 0x19, 0x45, 0x28, 0xA4, 0xA4, 0x94, 0x91, - 0x12, 0x02, 0x40, 0x5C, 0x1C, 0xC3, 0xB0, 0x94, 0x4A, 0x24, 0x92, 0x49, - 0x14, 0x8A, 0x43, 0x70, 0x80, 0x1E, 0x31, 0x90, 0x50, 0x18, 0x0C, 0x06, - 0x02, 0x82, 0x63, 0x0F, 0x00, 0xFE, 0x43, 0x41, 0x41, 0x42, 0x7C, 0x40, - 0x40, 0x40, 0xF0, 0x1C, 0x31, 0x90, 0x50, 0x18, 0x0C, 0x06, 0x02, 0x82, - 0x63, 0x1F, 0x04, 0x07, 0x92, 0x30, 0xFE, 0x21, 0x90, 0x48, 0x24, 0x23, - 0xE1, 0x10, 0x84, 0x41, 0x70, 0xC0, 0x3A, 0xCD, 0x0A, 0x03, 0x01, 0x80, - 0xC1, 0xC7, 0x78, 0xFF, 0xC4, 0x62, 0x21, 0x00, 0x80, 0x40, 0x20, 0x10, - 0x08, 0x1F, 0x00, 0xE3, 0xA0, 0x90, 0x48, 0x24, 0x12, 0x09, 0x04, 0x82, - 0x22, 0x0E, 0x00, 0xF1, 0xE8, 0x10, 0x82, 0x10, 0x42, 0x10, 0x22, 0x04, - 0x80, 0x50, 0x0C, 0x00, 0x80, 0xF1, 0xE8, 0x09, 0x11, 0x25, 0x44, 0xA8, - 0x55, 0x0C, 0xA1, 0x8C, 0x31, 0x84, 0x30, 0xE3, 0xA0, 0x88, 0x82, 0x80, - 0x80, 0xC0, 0x90, 0x44, 0x41, 0x71, 0xC0, 0xE3, 0xA0, 0x88, 0x82, 0x81, - 0x40, 0x40, 0x20, 0x10, 0x08, 0x1F, 0x00, 0xFD, 0x0A, 0x20, 0x81, 0x04, - 0x10, 0x21, 0x83, 0xFC, 0xEA, 0xAA, 0xAA, 0xC0, 0x80, 0x81, 0x03, 0x02, - 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0xD5, 0x55, 0x55, 0xC0, - 0x10, 0x51, 0x22, 0x28, 0x20, 0xFF, 0xE0, 0x88, 0x80, 0x7E, 0x00, 0x80, - 0x47, 0xEC, 0x14, 0x0A, 0x0C, 0xFB, 0xC0, 0x20, 0x10, 0x0B, 0xC6, 0x12, - 0x05, 0x02, 0x81, 0x40, 0xB0, 0xB7, 0x80, 0x3A, 0x8E, 0x0C, 0x08, 0x10, - 0x10, 0x9E, 0x03, 0x00, 0x80, 0x47, 0xA4, 0x34, 0x0A, 0x05, 0x02, 0x81, - 0x21, 0x8F, 0x60, 0x3C, 0x43, 0x81, 0xFF, 0x80, 0x80, 0x61, 0x3E, 0x3D, - 0x04, 0x3E, 0x41, 0x04, 0x10, 0x41, 0x0F, 0x80, 0x3D, 0xA1, 0xA0, 0x50, - 0x28, 0x14, 0x09, 0x0C, 0x7A, 0x01, 0x01, 0x87, 0x80, 0xC0, 0x20, 0x10, - 0x0B, 0xC6, 0x32, 0x09, 0x04, 0x82, 0x41, 0x20, 0xB8, 0xE0, 0x10, 0x01, - 0xC0, 0x81, 0x02, 0x04, 0x08, 0x11, 0xFC, 0x10, 0x3E, 0x10, 0x84, 0x21, - 0x08, 0x42, 0x3F, 0x00, 0xC0, 0x40, 0x40, 0x4F, 0x44, 0x58, 0x70, 0x48, - 0x44, 0x42, 0xC7, 0x70, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x23, - 0xF8, 0xB7, 0x64, 0x62, 0x31, 0x18, 0x8C, 0x46, 0x23, 0x91, 0x5E, 0x31, - 0x90, 0x48, 0x24, 0x12, 0x09, 0x05, 0xC7, 0x3E, 0x31, 0xA0, 0x30, 0x18, - 0x0C, 0x05, 0x8C, 0x7C, 0xDE, 0x30, 0x90, 0x28, 0x14, 0x0A, 0x05, 0x84, - 0xBC, 0x40, 0x20, 0x38, 0x00, 0x3D, 0xA1, 0xA0, 0x50, 0x28, 0x14, 0x09, - 0x0C, 0x7A, 0x01, 0x00, 0x80, 0xE0, 0xCE, 0xA1, 0x82, 0x04, 0x08, 0x10, - 0x7C, 0x3A, 0x8D, 0x0B, 0x80, 0xF0, 0x70, 0xDE, 0x40, 0x40, 0xFC, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x41, 0x3E, 0xC3, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x43, 0x3D, 0xE3, 0xA0, 0x90, 0x84, 0x42, 0x20, 0xA0, 0x50, 0x10, 0xE3, - 0xC0, 0x92, 0x4B, 0x25, 0x92, 0xA9, 0x98, 0x44, 0xE3, 0x31, 0x05, 0x01, - 0x01, 0x41, 0x11, 0x05, 0xC7, 0xE3, 0xA0, 0x90, 0x84, 0x42, 0x40, 0xA0, - 0x60, 0x10, 0x10, 0x08, 0x3E, 0x00, 0xFD, 0x08, 0x20, 0x82, 0x08, 0x10, - 0xBF, 0x29, 0x24, 0xA2, 0x49, 0x26, 0xFF, 0xF8, 0x89, 0x24, 0x8A, 0x49, - 0x2C, 0x61, 0x24, 0x30}; - -const GFXglyph FreeMono9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 11, 0, 1}, // 0x20 ' ' - {0, 2, 11, 11, 4, -10}, // 0x21 '!' - {3, 6, 5, 11, 2, -10}, // 0x22 '"' - {7, 7, 12, 11, 2, -10}, // 0x23 '#' - {18, 8, 12, 11, 1, -10}, // 0x24 '$' - {30, 7, 11, 11, 2, -10}, // 0x25 '%' - {40, 7, 10, 11, 2, -9}, // 0x26 '&' - {49, 3, 5, 11, 4, -10}, // 0x27 ''' - {51, 2, 13, 11, 5, -10}, // 0x28 '(' - {55, 2, 13, 11, 4, -10}, // 0x29 ')' - {59, 7, 7, 11, 2, -10}, // 0x2A '*' - {66, 7, 7, 11, 2, -8}, // 0x2B '+' - {73, 3, 5, 11, 2, -1}, // 0x2C ',' - {75, 9, 1, 11, 1, -5}, // 0x2D '-' - {77, 2, 2, 11, 4, -1}, // 0x2E '.' - {78, 7, 13, 11, 2, -11}, // 0x2F '/' - {90, 7, 11, 11, 2, -10}, // 0x30 '0' - {100, 5, 11, 11, 3, -10}, // 0x31 '1' - {107, 7, 11, 11, 2, -10}, // 0x32 '2' - {117, 8, 11, 11, 1, -10}, // 0x33 '3' - {128, 6, 11, 11, 3, -10}, // 0x34 '4' - {137, 7, 11, 11, 2, -10}, // 0x35 '5' - {147, 7, 11, 11, 2, -10}, // 0x36 '6' - {157, 7, 11, 11, 2, -10}, // 0x37 '7' - {167, 7, 11, 11, 2, -10}, // 0x38 '8' - {177, 7, 11, 11, 2, -10}, // 0x39 '9' - {187, 2, 8, 11, 4, -7}, // 0x3A ':' - {189, 3, 11, 11, 3, -7}, // 0x3B ';' - {194, 8, 8, 11, 1, -8}, // 0x3C '<' - {202, 9, 4, 11, 1, -6}, // 0x3D '=' - {207, 9, 8, 11, 1, -8}, // 0x3E '>' - {216, 7, 10, 11, 2, -9}, // 0x3F '?' - {225, 8, 12, 11, 2, -10}, // 0x40 '@' - {237, 11, 10, 11, 0, -9}, // 0x41 'A' - {251, 9, 10, 11, 1, -9}, // 0x42 'B' - {263, 9, 10, 11, 1, -9}, // 0x43 'C' - {275, 9, 10, 11, 1, -9}, // 0x44 'D' - {287, 9, 10, 11, 1, -9}, // 0x45 'E' - {299, 9, 10, 11, 1, -9}, // 0x46 'F' - {311, 10, 10, 11, 1, -9}, // 0x47 'G' - {324, 9, 10, 11, 1, -9}, // 0x48 'H' - {336, 5, 10, 11, 3, -9}, // 0x49 'I' - {343, 8, 10, 11, 2, -9}, // 0x4A 'J' - {353, 9, 10, 11, 1, -9}, // 0x4B 'K' - {365, 8, 10, 11, 2, -9}, // 0x4C 'L' - {375, 11, 10, 11, 0, -9}, // 0x4D 'M' - {389, 9, 10, 11, 1, -9}, // 0x4E 'N' - {401, 9, 10, 11, 1, -9}, // 0x4F 'O' - {413, 8, 10, 11, 1, -9}, // 0x50 'P' - {423, 9, 13, 11, 1, -9}, // 0x51 'Q' - {438, 9, 10, 11, 1, -9}, // 0x52 'R' - {450, 7, 10, 11, 2, -9}, // 0x53 'S' - {459, 9, 10, 11, 1, -9}, // 0x54 'T' - {471, 9, 10, 11, 1, -9}, // 0x55 'U' - {483, 11, 10, 11, 0, -9}, // 0x56 'V' - {497, 11, 10, 11, 0, -9}, // 0x57 'W' - {511, 9, 10, 11, 1, -9}, // 0x58 'X' - {523, 9, 10, 11, 1, -9}, // 0x59 'Y' - {535, 7, 10, 11, 2, -9}, // 0x5A 'Z' - {544, 2, 13, 11, 5, -10}, // 0x5B '[' - {548, 7, 13, 11, 2, -11}, // 0x5C '\' - {560, 2, 13, 11, 4, -10}, // 0x5D ']' - {564, 7, 5, 11, 2, -10}, // 0x5E '^' - {569, 11, 1, 11, 0, 2}, // 0x5F '_' - {571, 3, 3, 11, 3, -11}, // 0x60 '`' - {573, 9, 8, 11, 1, -7}, // 0x61 'a' - {582, 9, 11, 11, 1, -10}, // 0x62 'b' - {595, 7, 8, 11, 2, -7}, // 0x63 'c' - {602, 9, 11, 11, 1, -10}, // 0x64 'd' - {615, 8, 8, 11, 1, -7}, // 0x65 'e' - {623, 6, 11, 11, 3, -10}, // 0x66 'f' - {632, 9, 11, 11, 1, -7}, // 0x67 'g' - {645, 9, 11, 11, 1, -10}, // 0x68 'h' - {658, 7, 10, 11, 2, -9}, // 0x69 'i' - {667, 5, 13, 11, 3, -9}, // 0x6A 'j' - {676, 8, 11, 11, 2, -10}, // 0x6B 'k' - {687, 7, 11, 11, 2, -10}, // 0x6C 'l' - {697, 9, 8, 11, 1, -7}, // 0x6D 'm' - {706, 9, 8, 11, 1, -7}, // 0x6E 'n' - {715, 9, 8, 11, 1, -7}, // 0x6F 'o' - {724, 9, 11, 11, 1, -7}, // 0x70 'p' - {737, 9, 11, 11, 1, -7}, // 0x71 'q' - {750, 7, 8, 11, 3, -7}, // 0x72 'r' - {757, 7, 8, 11, 2, -7}, // 0x73 's' - {764, 8, 10, 11, 2, -9}, // 0x74 't' - {774, 8, 8, 11, 1, -7}, // 0x75 'u' - {782, 9, 8, 11, 1, -7}, // 0x76 'v' - {791, 9, 8, 11, 1, -7}, // 0x77 'w' - {800, 9, 8, 11, 1, -7}, // 0x78 'x' - {809, 9, 11, 11, 1, -7}, // 0x79 'y' - {822, 7, 8, 11, 2, -7}, // 0x7A 'z' - {829, 3, 13, 11, 4, -10}, // 0x7B '{' - {834, 1, 13, 11, 5, -10}, // 0x7C '|' - {836, 3, 13, 11, 4, -10}, // 0x7D '}' - {841, 7, 3, 11, 2, -6}}; // 0x7E '~' - -const GFXfont FreeMono9pt7b PROGMEM = {(uint8_t *)FreeMono9pt7bBitmaps, - (GFXglyph *)FreeMono9pt7bGlyphs, 0x20, - 0x7E, 18}; - -// Approx. 1516 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold12pt7b.h deleted file mode 100644 index a205386..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold12pt7b.h +++ /dev/null @@ -1,252 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBold12pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xF6, 0x66, 0x60, 0x6F, 0x60, 0xE7, 0xE7, 0x62, 0x42, - 0x42, 0x42, 0x42, 0x11, 0x87, 0x30, 0xC6, 0x18, 0xC3, 0x31, 0xFF, 0xFF, - 0xF9, 0x98, 0x33, 0x06, 0x60, 0xCC, 0x7F, 0xEF, 0xFC, 0x66, 0x0C, 0xC3, - 0x98, 0x63, 0x04, 0x40, 0x0C, 0x03, 0x00, 0xC0, 0xFE, 0x7F, 0x9C, 0x66, - 0x09, 0x80, 0x78, 0x0F, 0xE0, 0x7F, 0x03, 0xE0, 0xF8, 0x7F, 0xFB, 0xFC, - 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x38, 0x1F, 0x0C, 0x42, 0x10, 0xC4, 0x1F, - 0x03, 0x9C, 0x3C, 0x7F, 0x33, 0xE0, 0x8C, 0x21, 0x08, 0xC3, 0xE0, 0x70, - 0x3E, 0x1F, 0xC6, 0x61, 0x80, 0x70, 0x0C, 0x07, 0x83, 0xEE, 0xDF, 0xB3, - 0xCC, 0x73, 0xFE, 0x7F, 0x80, 0xFD, 0x24, 0x90, 0x39, 0xDC, 0xE6, 0x73, - 0x18, 0xC6, 0x31, 0x8C, 0x31, 0x8E, 0x31, 0xC4, 0xE7, 0x1C, 0xE3, 0x1C, - 0x63, 0x18, 0xC6, 0x31, 0x98, 0xCE, 0x67, 0x10, 0x0C, 0x03, 0x00, 0xC3, - 0xB7, 0xFF, 0xDF, 0xE1, 0xE0, 0xFC, 0x33, 0x0C, 0xC0, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x00, 0x3B, 0x9C, 0xCE, 0x62, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x40, 0x30, 0x1C, 0x07, 0x03, 0x80, 0xE0, 0x30, - 0x1C, 0x06, 0x03, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0xC0, 0x60, - 0x38, 0x0E, 0x01, 0x00, 0x1E, 0x0F, 0xC6, 0x1B, 0x87, 0xC0, 0xF0, 0x3C, - 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x87, 0x61, 0x8F, 0xC1, 0xE0, 0x1C, - 0x0F, 0x0F, 0xC3, 0xB0, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, - 0xC0, 0x30, 0x0C, 0x3F, 0xFF, 0xFC, 0x1F, 0x1F, 0xEE, 0x1F, 0x83, 0xC0, - 0xC0, 0x70, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE3, 0xF0, 0xFF, 0xFF, - 0xFC, 0x3F, 0x0F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x83, 0xE0, 0x7C, - 0x01, 0xC0, 0x0C, 0x01, 0x80, 0x3C, 0x0F, 0xFF, 0x9F, 0xC0, 0x07, 0x07, - 0x83, 0xC3, 0xE1, 0xB1, 0xD8, 0xCC, 0xC6, 0xE3, 0x7F, 0xFF, 0xE0, 0x61, - 0xF8, 0xFC, 0x7F, 0x9F, 0xE6, 0x01, 0x80, 0x60, 0x1F, 0x87, 0xF9, 0x86, - 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xC1, 0xBF, 0xE7, 0xE0, 0x07, 0xC7, 0xF3, - 0xC1, 0xC0, 0x60, 0x38, 0x0E, 0xF3, 0xFE, 0xF1, 0xF8, 0x3E, 0x0F, 0x83, - 0x71, 0xCF, 0xE1, 0xF0, 0xFF, 0xFF, 0xFC, 0x1F, 0x07, 0x01, 0x80, 0x60, - 0x38, 0x0C, 0x03, 0x01, 0xC0, 0x60, 0x18, 0x0E, 0x03, 0x00, 0xC0, 0x1E, - 0x1F, 0xEE, 0x1F, 0x03, 0xC0, 0xF0, 0x36, 0x19, 0xFE, 0x7F, 0xB8, 0x7C, - 0x0F, 0x03, 0xE1, 0xDF, 0xE3, 0xF0, 0x3E, 0x1F, 0xCE, 0x3B, 0x07, 0xC1, - 0xF0, 0x7E, 0x3D, 0xFF, 0x3D, 0xC0, 0x70, 0x18, 0x0E, 0x0F, 0x3F, 0x8F, - 0x80, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x77, 0x70, 0x00, 0x00, 0x76, 0x6C, - 0xC8, 0x80, 0x00, 0x30, 0x0F, 0x03, 0xE0, 0xF8, 0x3E, 0x0F, 0x80, 0x3E, - 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x0F, 0x80, 0x3E, 0x00, 0xF8, - 0x03, 0xE0, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x0F, 0x00, 0x40, 0x00, 0x7C, - 0x7F, 0xB0, 0xF8, 0x30, 0x18, 0x1C, 0x3C, 0x3C, 0x18, 0x08, 0x00, 0x07, - 0x03, 0x81, 0xC0, 0x1E, 0x07, 0xF1, 0xC7, 0x30, 0x6C, 0x0D, 0x87, 0xB3, - 0xF6, 0xE6, 0xD8, 0xDB, 0x1B, 0x73, 0x67, 0xFC, 0x7F, 0x80, 0x30, 0x03, - 0x00, 0x71, 0xC7, 0xF8, 0x7C, 0x00, 0x3F, 0x80, 0x7F, 0x80, 0x1F, 0x00, - 0x76, 0x00, 0xEE, 0x01, 0x8C, 0x07, 0x18, 0x0E, 0x38, 0x1F, 0xF0, 0x7F, - 0xF0, 0xC0, 0x61, 0x80, 0xCF, 0xC7, 0xFF, 0x8F, 0xC0, 0xFF, 0xC7, 0xFF, - 0x0C, 0x1C, 0x60, 0x63, 0x03, 0x18, 0x38, 0xFF, 0x87, 0xFE, 0x30, 0x39, - 0x80, 0xCC, 0x06, 0x60, 0x7F, 0xFF, 0x7F, 0xF0, 0x0F, 0xF3, 0xFF, 0x70, - 0x76, 0x03, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, - 0x37, 0x07, 0x3F, 0xF0, 0xFC, 0xFF, 0x0F, 0xFC, 0x60, 0xE6, 0x06, 0x60, - 0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x76, 0x0E, 0xFF, - 0xCF, 0xF8, 0xFF, 0xF7, 0xFF, 0x8C, 0x0C, 0x60, 0x63, 0x1B, 0x18, 0xC0, - 0xFE, 0x07, 0xF0, 0x31, 0x81, 0x8C, 0xCC, 0x06, 0x60, 0x3F, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFF, 0xCC, 0x06, 0x60, 0x33, 0x19, 0x98, 0xC0, 0xFE, - 0x07, 0xF0, 0x31, 0x81, 0x8C, 0x0C, 0x00, 0x60, 0x0F, 0xF0, 0x7F, 0x80, - 0x0F, 0xF1, 0xFF, 0x9C, 0x1C, 0xC0, 0x6C, 0x03, 0x60, 0x03, 0x00, 0x18, - 0x7F, 0xC3, 0xFE, 0x01, 0xB8, 0x0C, 0xE0, 0xE3, 0xFF, 0x07, 0xE0, 0x7C, - 0xF9, 0xF3, 0xE3, 0x03, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0xFF, 0x0F, - 0xFC, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0xFC, 0xFF, 0xF3, 0xF0, - 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, - 0x00, 0xC0, 0x30, 0xFF, 0xFF, 0xF0, 0x0F, 0xF8, 0x7F, 0xC0, 0x30, 0x01, - 0x80, 0x0C, 0x00, 0x60, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, 0x31, - 0xC3, 0x0F, 0xF8, 0x1F, 0x00, 0xFC, 0xFB, 0xF3, 0xE3, 0x0E, 0x0C, 0x70, - 0x33, 0x80, 0xFC, 0x03, 0xF0, 0x0F, 0xE0, 0x39, 0xC0, 0xC3, 0x03, 0x0E, - 0x0C, 0x18, 0xFC, 0x7F, 0xF0, 0xF0, 0xFF, 0x0F, 0xF0, 0x18, 0x01, 0x80, - 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x31, 0x83, 0x18, 0x31, 0x83, - 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xC0, 0xF7, 0x87, 0x9E, 0x1E, 0x7C, 0xF9, - 0xB3, 0xE6, 0xFD, 0x99, 0xF6, 0x67, 0x99, 0x8E, 0x66, 0x31, 0x98, 0x06, - 0xFC, 0xFF, 0xF3, 0xF0, 0xF1, 0xFF, 0xCF, 0xCF, 0x0C, 0x78, 0x63, 0xE3, - 0x1B, 0x18, 0xDC, 0xC6, 0x76, 0x31, 0xB1, 0x8F, 0x8C, 0x3C, 0x61, 0xE7, - 0xE7, 0x3F, 0x18, 0x0F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03, - 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0x60, 0x67, 0x0E, 0x3F, 0xC0, 0xF0, - 0xFF, 0x8F, 0xFE, 0x30, 0x73, 0x03, 0x30, 0x33, 0x03, 0x30, 0x73, 0xFE, - 0x3F, 0x83, 0x00, 0x30, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0x03, 0xFC, - 0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, - 0x60, 0x67, 0x0E, 0x3F, 0xC1, 0xF0, 0x18, 0x33, 0xFF, 0x3F, 0xE0, 0xFF, - 0x83, 0xFF, 0x83, 0x07, 0x0C, 0x0C, 0x30, 0x30, 0xC1, 0xC3, 0xFE, 0x0F, - 0xF0, 0x31, 0xE0, 0xC3, 0x83, 0x07, 0x0C, 0x0C, 0xFE, 0x3F, 0xF8, 0x70, - 0x3F, 0xDF, 0xFE, 0x1F, 0x03, 0xC0, 0xF8, 0x07, 0xE0, 0x7E, 0x01, 0xF0, - 0x3C, 0x0F, 0x87, 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC6, 0x3C, 0x63, - 0xC6, 0x3C, 0x63, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x3F, 0xC3, 0xFC, 0xFF, 0xFF, 0xFF, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, - 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x63, 0x9C, 0x1F, 0xC0, 0xF0, - 0xFC, 0x3F, 0xFC, 0x3F, 0x30, 0x0C, 0x38, 0x1C, 0x18, 0x18, 0x1C, 0x38, - 0x1C, 0x38, 0x0E, 0x70, 0x0E, 0x70, 0x0F, 0x60, 0x07, 0xE0, 0x07, 0xE0, - 0x03, 0xC0, 0x03, 0xC0, 0xFC, 0xFF, 0xF3, 0xF6, 0x01, 0xDC, 0xC6, 0x77, - 0x99, 0xDE, 0x67, 0x79, 0x8D, 0xFE, 0x3F, 0xF8, 0xF3, 0xE3, 0xCF, 0x8F, - 0x3C, 0x38, 0x70, 0xE1, 0xC0, 0xF8, 0xFB, 0xE3, 0xE3, 0x86, 0x0F, 0x38, - 0x1F, 0xC0, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x0F, 0x80, 0x77, 0x03, 0x8E, - 0x1E, 0x1C, 0xFC, 0xFF, 0xF3, 0xF0, 0xF9, 0xFF, 0x9F, 0x30, 0xC3, 0x9C, - 0x19, 0x81, 0xF8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x3F, 0xC3, 0xFC, 0xFF, 0xBF, 0xEC, 0x3B, 0x0C, 0xC6, 0x33, 0x80, 0xC0, - 0x60, 0x38, 0xCC, 0x36, 0x0F, 0x03, 0xFF, 0xFF, 0xF0, 0xFF, 0xF1, 0x8C, - 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC7, 0xFE, 0x40, 0x30, 0x0E, - 0x01, 0x80, 0x70, 0x0C, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x18, - 0x07, 0x00, 0xC0, 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x0C, 0x01, 0xFF, 0xC6, - 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1F, 0xFE, 0x04, 0x03, - 0x01, 0xE0, 0xFC, 0x7B, 0x9C, 0x7E, 0x1F, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, - 0xCE, 0x73, 0x3F, 0x07, 0xF8, 0x00, 0xC0, 0x0C, 0x1F, 0xC7, 0xFC, 0x60, - 0xCC, 0x0C, 0xC1, 0xCF, 0xFF, 0x3F, 0xF0, 0xF0, 0x07, 0x80, 0x0C, 0x00, - 0x60, 0x03, 0x7C, 0x1F, 0xF8, 0xF1, 0xC7, 0x07, 0x30, 0x19, 0x80, 0xCC, - 0x06, 0x60, 0x73, 0xC7, 0x7F, 0xFB, 0xDF, 0x00, 0x1F, 0xB3, 0xFF, 0x70, - 0xFE, 0x07, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0x70, 0x77, 0xFF, 0x1F, - 0xC0, 0x01, 0xE0, 0x0F, 0x00, 0x18, 0x00, 0xC1, 0xF6, 0x3F, 0xF1, 0xC7, - 0x9C, 0x1C, 0xC0, 0x66, 0x03, 0x30, 0x19, 0x81, 0xC7, 0x1E, 0x3F, 0xFC, - 0x7D, 0xE0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, - 0x0E, 0x00, 0x70, 0x73, 0xFF, 0x1F, 0xC0, 0x07, 0xC3, 0xFC, 0x60, 0x0C, - 0x0F, 0xFD, 0xFF, 0x86, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, - 0x81, 0xFF, 0xBF, 0xF0, 0x1F, 0x79, 0xFF, 0xDC, 0x79, 0x81, 0xCC, 0x06, - 0x60, 0x33, 0x01, 0x9C, 0x1C, 0x71, 0xE1, 0xFF, 0x07, 0xD8, 0x00, 0xC0, - 0x06, 0x00, 0x70, 0x7F, 0x03, 0xF0, 0xF0, 0x03, 0xC0, 0x03, 0x00, 0x0C, - 0x00, 0x37, 0xC0, 0xFF, 0x83, 0xC7, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, - 0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF3, 0xFF, 0xCF, 0xC0, 0x06, 0x00, 0xC0, - 0x00, 0x3F, 0x07, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, - 0x03, 0x0F, 0xFF, 0xFF, 0xC0, 0x06, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xFC, - 0xF0, 0x07, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x3F, 0x19, 0xF8, 0xDE, 0x07, - 0xE0, 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x6F, 0x03, 0x1C, 0x78, 0xFF, 0xC7, - 0xE0, 0x7E, 0x0F, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, - 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x61, 0xFF, 0xFF, 0xF8, 0xFE, 0xF1, - 0xFF, 0xF1, 0xCE, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, - 0x8C, 0x63, 0x19, 0xF7, 0xBF, 0xEF, 0x78, 0x77, 0xC1, 0xFF, 0x83, 0xC7, - 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF1, - 0xFF, 0xC7, 0xC0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xC0, 0x3C, 0x03, - 0xC0, 0x3E, 0x07, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xF7, 0xE3, 0xFF, 0xC3, - 0xC3, 0x8E, 0x07, 0x30, 0x0C, 0xC0, 0x33, 0x00, 0xCE, 0x07, 0x3C, 0x38, - 0xFF, 0xC3, 0x7E, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, - 0x1F, 0xBC, 0xFF, 0xF7, 0x0F, 0x38, 0x1C, 0xC0, 0x33, 0x00, 0xCC, 0x03, - 0x38, 0x1C, 0x70, 0xF0, 0xFF, 0xC1, 0xFB, 0x00, 0x0C, 0x00, 0x30, 0x00, - 0xC0, 0x1F, 0xC0, 0x7F, 0x79, 0xE7, 0xFF, 0x1F, 0x31, 0xC0, 0x18, 0x01, - 0x80, 0x18, 0x01, 0x80, 0x18, 0x0F, 0xFC, 0xFF, 0xC0, 0x3F, 0x9F, 0xFE, - 0x1F, 0x82, 0xFE, 0x1F, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xF0, 0x30, - 0x06, 0x00, 0xC0, 0x7F, 0xEF, 0xFC, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, - 0x00, 0xC0, 0x18, 0x71, 0xFE, 0x1F, 0x00, 0xF1, 0xF7, 0x8F, 0x8C, 0x0C, - 0x60, 0x63, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x38, 0xF0, 0xFF, 0xC3, - 0xEE, 0xFC, 0xFF, 0xF3, 0xF3, 0x87, 0x0E, 0x1C, 0x1C, 0x60, 0x73, 0x80, - 0xEC, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xF8, 0x7F, 0xE1, - 0xF7, 0x39, 0x8C, 0xE6, 0x37, 0xB0, 0xFF, 0xC3, 0xFF, 0x07, 0xBC, 0x1C, - 0xF0, 0x73, 0x81, 0x86, 0x00, 0x7C, 0xF9, 0xF3, 0xE3, 0xCF, 0x07, 0xF8, - 0x0F, 0xC0, 0x1E, 0x00, 0xFC, 0x07, 0x38, 0x38, 0x73, 0xF3, 0xFF, 0xCF, - 0xC0, 0xF9, 0xFF, 0x9F, 0x70, 0xE3, 0x0C, 0x39, 0xC1, 0x98, 0x19, 0x81, - 0xF8, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0xFF, 0x0F, - 0xF0, 0x7F, 0xCF, 0xF9, 0x8E, 0x33, 0x80, 0x70, 0x1C, 0x07, 0x01, 0xC6, - 0x70, 0xFF, 0xFF, 0xFF, 0x80, 0x0E, 0x3C, 0x60, 0xC1, 0x83, 0x06, 0x0C, - 0x39, 0xE3, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x3C, 0x38, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0xE1, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x3C, - 0x79, 0x83, 0x06, 0x0C, 0x18, 0x31, 0xE3, 0x80, 0x3C, 0x37, 0xE7, 0x67, - 0xE6, 0x1C}; - -const GFXglyph FreeMonoBold12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 14, 0, 1}, // 0x20 ' ' - {0, 4, 15, 14, 5, -14}, // 0x21 '!' - {8, 8, 7, 14, 3, -13}, // 0x22 '"' - {15, 11, 18, 14, 2, -15}, // 0x23 '#' - {40, 10, 20, 14, 2, -16}, // 0x24 '$' - {65, 10, 15, 14, 2, -14}, // 0x25 '%' - {84, 10, 13, 14, 2, -12}, // 0x26 '&' - {101, 3, 7, 14, 5, -13}, // 0x27 ''' - {104, 5, 19, 14, 6, -14}, // 0x28 '(' - {116, 5, 19, 14, 3, -14}, // 0x29 ')' - {128, 10, 10, 14, 2, -14}, // 0x2A '*' - {141, 12, 13, 14, 1, -12}, // 0x2B '+' - {161, 5, 7, 14, 4, -2}, // 0x2C ',' - {166, 12, 2, 14, 1, -7}, // 0x2D '-' - {169, 3, 3, 14, 5, -2}, // 0x2E '.' - {171, 10, 20, 14, 2, -16}, // 0x2F '/' - {196, 10, 15, 14, 2, -14}, // 0x30 '0' - {215, 10, 15, 14, 2, -14}, // 0x31 '1' - {234, 10, 15, 14, 2, -14}, // 0x32 '2' - {253, 11, 15, 14, 1, -14}, // 0x33 '3' - {274, 9, 14, 14, 2, -13}, // 0x34 '4' - {290, 10, 15, 14, 2, -14}, // 0x35 '5' - {309, 10, 15, 14, 2, -14}, // 0x36 '6' - {328, 10, 15, 14, 2, -14}, // 0x37 '7' - {347, 10, 15, 14, 2, -14}, // 0x38 '8' - {366, 10, 15, 14, 3, -14}, // 0x39 '9' - {385, 3, 11, 14, 5, -10}, // 0x3A ':' - {390, 4, 15, 14, 4, -10}, // 0x3B ';' - {398, 12, 11, 14, 1, -11}, // 0x3C '<' - {415, 12, 7, 14, 1, -9}, // 0x3D '=' - {426, 12, 11, 14, 1, -11}, // 0x3E '>' - {443, 9, 14, 14, 3, -13}, // 0x3F '?' - {459, 11, 19, 14, 2, -14}, // 0x40 '@' - {486, 15, 14, 14, -1, -13}, // 0x41 'A' - {513, 13, 14, 14, 0, -13}, // 0x42 'B' - {536, 12, 14, 14, 1, -13}, // 0x43 'C' - {557, 12, 14, 14, 1, -13}, // 0x44 'D' - {578, 13, 14, 14, 0, -13}, // 0x45 'E' - {601, 13, 14, 14, 0, -13}, // 0x46 'F' - {624, 13, 14, 14, 1, -13}, // 0x47 'G' - {647, 14, 14, 14, 0, -13}, // 0x48 'H' - {672, 10, 14, 14, 2, -13}, // 0x49 'I' - {690, 13, 14, 14, 1, -13}, // 0x4A 'J' - {713, 14, 14, 14, 0, -13}, // 0x4B 'K' - {738, 12, 14, 14, 1, -13}, // 0x4C 'L' - {759, 14, 14, 14, 0, -13}, // 0x4D 'M' - {784, 13, 14, 14, 0, -13}, // 0x4E 'N' - {807, 12, 14, 14, 1, -13}, // 0x4F 'O' - {828, 12, 14, 14, 0, -13}, // 0x50 'P' - {849, 12, 17, 14, 1, -13}, // 0x51 'Q' - {875, 14, 14, 14, 0, -13}, // 0x52 'R' - {900, 10, 14, 14, 2, -13}, // 0x53 'S' - {918, 12, 14, 14, 1, -13}, // 0x54 'T' - {939, 12, 14, 14, 1, -13}, // 0x55 'U' - {960, 16, 14, 14, -1, -13}, // 0x56 'V' - {988, 14, 14, 14, 0, -13}, // 0x57 'W' - {1013, 14, 14, 14, 0, -13}, // 0x58 'X' - {1038, 12, 14, 14, 1, -13}, // 0x59 'Y' - {1059, 10, 14, 14, 2, -13}, // 0x5A 'Z' - {1077, 5, 19, 14, 6, -14}, // 0x5B '[' - {1089, 10, 20, 14, 2, -16}, // 0x5C '\' - {1114, 5, 19, 14, 3, -14}, // 0x5D ']' - {1126, 10, 8, 14, 2, -15}, // 0x5E '^' - {1136, 14, 2, 14, 0, 4}, // 0x5F '_' - {1140, 4, 4, 14, 4, -15}, // 0x60 '`' - {1142, 12, 11, 14, 1, -10}, // 0x61 'a' - {1159, 13, 15, 14, 0, -14}, // 0x62 'b' - {1184, 12, 11, 14, 1, -10}, // 0x63 'c' - {1201, 13, 15, 14, 1, -14}, // 0x64 'd' - {1226, 12, 11, 14, 1, -10}, // 0x65 'e' - {1243, 11, 15, 14, 2, -14}, // 0x66 'f' - {1264, 13, 16, 14, 1, -10}, // 0x67 'g' - {1290, 14, 15, 14, 0, -14}, // 0x68 'h' - {1317, 11, 14, 14, 1, -13}, // 0x69 'i' - {1337, 8, 19, 15, 3, -13}, // 0x6A 'j' - {1356, 13, 15, 14, 1, -14}, // 0x6B 'k' - {1381, 11, 15, 14, 1, -14}, // 0x6C 'l' - {1402, 15, 11, 14, 0, -10}, // 0x6D 'm' - {1423, 14, 11, 14, 0, -10}, // 0x6E 'n' - {1443, 12, 11, 14, 1, -10}, // 0x6F 'o' - {1460, 14, 16, 14, 0, -10}, // 0x70 'p' - {1488, 14, 16, 14, 0, -10}, // 0x71 'q' - {1516, 12, 11, 14, 1, -10}, // 0x72 'r' - {1533, 10, 11, 14, 2, -10}, // 0x73 's' - {1547, 11, 14, 14, 1, -13}, // 0x74 't' - {1567, 13, 11, 14, 0, -10}, // 0x75 'u' - {1585, 14, 11, 14, 0, -10}, // 0x76 'v' - {1605, 14, 11, 14, 0, -10}, // 0x77 'w' - {1625, 14, 11, 14, 0, -10}, // 0x78 'x' - {1645, 12, 16, 14, 1, -10}, // 0x79 'y' - {1669, 11, 11, 14, 1, -10}, // 0x7A 'z' - {1685, 7, 19, 14, 3, -14}, // 0x7B '{' - {1702, 2, 19, 14, 6, -14}, // 0x7C '|' - {1707, 7, 19, 14, 4, -14}, // 0x7D '}' - {1724, 12, 4, 14, 1, -7}}; // 0x7E '~' - -const GFXfont FreeMonoBold12pt7b PROGMEM = { - (uint8_t *)FreeMonoBold12pt7bBitmaps, (GFXglyph *)FreeMonoBold12pt7bGlyphs, - 0x20, 0x7E, 24}; - -// Approx. 2402 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold18pt7b.h deleted file mode 100644 index 36664c1..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold18pt7b.h +++ /dev/null @@ -1,425 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBold18pt7bBitmaps[] PROGMEM = { - 0x77, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x9C, 0xE7, 0x39, 0xC4, 0x03, 0xBF, - 0xFF, 0xB8, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1E, 0xC1, 0x98, 0x33, - 0x06, 0x60, 0xCC, 0x18, 0x0E, 0x1C, 0x0F, 0x3C, 0x1F, 0x3C, 0x1E, 0x3C, - 0x1E, 0x3C, 0x1E, 0x78, 0x1E, 0x78, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x1E, 0x78, 0x1E, 0x78, 0x1E, 0x78, 0x7F, 0xFE, 0x7F, 0xFE, - 0x7F, 0xFE, 0x7F, 0xFE, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0xF0, - 0x3C, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x03, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xE0, 0x1F, 0xF1, 0xFF, 0xE7, 0xFF, 0xBE, 0x1E, 0xF0, 0x3B, 0xC0, 0xCF, - 0xE0, 0x3F, 0xF8, 0x7F, 0xF0, 0x7F, 0xE0, 0x1F, 0xF0, 0x0F, 0xE0, 0x3F, - 0x80, 0xFF, 0x87, 0xFF, 0xFE, 0xFF, 0xF3, 0x7F, 0x80, 0x78, 0x01, 0xE0, - 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xC0, 0x1E, 0x00, 0xFF, 0x03, 0x86, - 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x18, 0x38, 0x70, 0x3F, 0xC2, 0x1E, 0x3E, - 0x03, 0xF8, 0x3F, 0x83, 0xF8, 0x0F, 0x8F, 0x18, 0x7F, 0x01, 0xC7, 0x03, - 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x1C, 0x70, 0x1F, 0xC0, 0x0F, 0x00, 0x03, - 0xD0, 0x1F, 0xF0, 0x7F, 0xE1, 0xFF, 0xC3, 0xE6, 0x07, 0x80, 0x0F, 0x00, - 0x0F, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0xFE, 0x03, 0xFE, 0xFF, 0xBD, 0xFE, - 0x3F, 0xFC, 0x3F, 0x7C, 0x7C, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0x7E, - 0xF0, 0xFF, 0xFF, 0xF6, 0x66, 0x66, 0x07, 0x0F, 0x1F, 0x1E, 0x3E, 0x3C, - 0x78, 0x78, 0x78, 0x70, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0x78, 0x78, 0x78, 0x3C, 0x3C, 0x1E, 0x1F, 0x0F, 0x07, 0xE0, 0xF0, 0xF8, - 0x78, 0x7C, 0x3C, 0x3E, 0x1E, 0x1E, 0x1E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0E, 0x1E, 0x1E, 0x1E, 0x3C, 0x3C, 0x78, 0xF8, 0xF0, 0xE0, - 0x01, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, - 0xFF, 0xFF, 0x7F, 0xFE, 0x1F, 0xF8, 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, - 0x1E, 0x78, 0x1C, 0x38, 0x18, 0x18, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x3E, 0x78, 0xF3, 0xC7, - 0x8E, 0x1C, 0x70, 0xE1, 0x80, 0x7F, 0xFF, 0xDF, 0xFF, 0xF9, 0xFF, 0xFF, - 0x3F, 0xFF, 0xE0, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x0E, 0x00, 0x3C, 0x00, - 0x78, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xF0, - 0x01, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x78, 0x01, 0xE0, 0x03, - 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x80, - 0x1E, 0x00, 0x3C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0x80, 0x03, 0x00, 0x00, - 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x3F, 0xFC, 0x7C, 0x3E, 0x78, 0x1E, - 0xF8, 0x1F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, - 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF8, 0x1F, 0x78, 0x1E, - 0x7C, 0x3E, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, 0x07, 0xC0, - 0x1F, 0x80, 0xFF, 0x03, 0xFE, 0x0F, 0xBC, 0x0C, 0x78, 0x00, 0xF0, 0x01, - 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, - 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x81, 0xFF, 0xFB, 0xFF, 0xF7, - 0xFF, 0xE7, 0xFF, 0x80, 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xFF, 0xEF, - 0x87, 0xDE, 0x07, 0xF8, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x7C, 0x01, - 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, - 0x78, 0x03, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x0F, 0xC0, 0x7F, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC, 0x70, 0x3E, 0x00, 0x1E, - 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, 0x03, 0xFC, 0x03, 0xF0, 0x03, 0xF0, - 0x03, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, - 0xE0, 0x3F, 0xFF, 0xFE, 0xFF, 0xFC, 0x7F, 0xF8, 0x1F, 0xE0, 0x00, 0xF8, - 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x77, 0x80, 0xEF, 0x03, 0x9E, 0x0F, - 0x3C, 0x1C, 0x78, 0x70, 0xF1, 0xE1, 0xE3, 0x83, 0xCF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x78, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, - 0x1F, 0xC0, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xC0, - 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x7B, 0xE0, 0x3F, 0xFC, 0x1F, 0xFF, 0x0F, - 0xFF, 0xC3, 0x83, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, - 0x00, 0x0F, 0xB8, 0x0F, 0xBF, 0xFF, 0xCF, 0xFF, 0xC3, 0xFF, 0xC0, 0x7F, - 0x80, 0x00, 0xFC, 0x07, 0xFC, 0x3F, 0xF8, 0xFF, 0xF1, 0xF8, 0x07, 0xC0, - 0x1F, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xE7, 0xC3, 0xDF, 0xC7, 0x7F, 0xCF, - 0xFF, 0xDF, 0x8F, 0xFC, 0x07, 0xF0, 0x0F, 0xF0, 0x1F, 0xE0, 0x3D, 0xE0, - 0xFB, 0xFF, 0xE3, 0xFF, 0xC3, 0xFF, 0x01, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x1E, - 0x00, 0x38, 0x00, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, - 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x38, - 0x00, 0x70, 0x00, 0x07, 0xC0, 0x3F, 0xE0, 0xFF, 0xE3, 0xFF, 0xEF, 0x83, - 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF0, 0x1E, 0xF0, 0x78, 0xFF, 0xE0, - 0xFF, 0x81, 0xFF, 0x0F, 0xFF, 0x9E, 0x0F, 0x78, 0x0F, 0xF0, 0x1F, 0xE0, - 0x3F, 0xE0, 0xFB, 0xFF, 0xE7, 0xFF, 0xC7, 0xFF, 0x03, 0xF8, 0x00, 0x0F, - 0xC0, 0x3F, 0xE0, 0xFF, 0xE3, 0xFF, 0xEF, 0xC3, 0xDF, 0x03, 0xBC, 0x07, - 0xF8, 0x0F, 0xF0, 0x1F, 0xF0, 0x3D, 0xF1, 0xFB, 0xFF, 0xF3, 0xFE, 0xE3, - 0xFB, 0xC3, 0xE7, 0x80, 0x1E, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xE7, 0xFF, - 0x8F, 0xFE, 0x1F, 0xF0, 0x1F, 0x80, 0x00, 0x77, 0xFF, 0xF7, 0x00, 0x00, - 0x00, 0x00, 0xEF, 0xFF, 0xEE, 0x1C, 0x7C, 0xF9, 0xF1, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF3, 0xC7, 0x8E, 0x3C, 0x70, 0xE1, 0x87, 0x0C, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0xFE, - 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7C, 0x00, - 0x07, 0x7F, 0xFF, 0xDF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF7, 0xFF, 0xFE, 0x7F, 0xFF, 0xCF, 0xFF, - 0xF8, 0x00, 0x00, 0x3C, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xC0, - 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x3F, 0x80, 0x3F, 0x80, 0x3F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x03, 0x80, - 0x00, 0x1F, 0xC0, 0xFF, 0xE3, 0xFF, 0xF7, 0xFF, 0xEF, 0x07, 0xFE, 0x03, - 0xDC, 0x07, 0x80, 0x0F, 0x00, 0x7C, 0x03, 0xF8, 0x1F, 0xC0, 0x1E, 0x00, - 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x3E, - 0x00, 0x7C, 0x00, 0x70, 0x00, 0x07, 0xE0, 0x1F, 0xE0, 0x7F, 0xE1, 0xE1, - 0xC7, 0x83, 0xCE, 0x03, 0xBC, 0x07, 0x70, 0x0E, 0xE0, 0x7D, 0xC3, 0xFB, - 0x8F, 0xF7, 0x3C, 0xEE, 0x71, 0xDC, 0xE3, 0xB9, 0xC7, 0x73, 0xCE, 0xE3, - 0xFF, 0xC3, 0xFF, 0x83, 0xFF, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1E, 0x02, - 0x1E, 0x1E, 0x3F, 0xFC, 0x1F, 0xF0, 0x1F, 0x80, 0x0F, 0xF8, 0x00, 0x7F, - 0xF0, 0x01, 0xFF, 0xC0, 0x03, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xF8, - 0x00, 0x1C, 0xF0, 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x1E, 0x1E, 0x00, - 0x78, 0x78, 0x03, 0xC0, 0xF0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x01, 0xFF, - 0xFE, 0x07, 0xFF, 0xF8, 0x3C, 0x00, 0xF3, 0xFC, 0x1F, 0xEF, 0xF8, 0x7F, - 0xFF, 0xE1, 0xFF, 0x7F, 0x03, 0xF8, 0x7F, 0xFC, 0x0F, 0xFF, 0xF0, 0xFF, - 0xFF, 0x8F, 0xFF, 0xF8, 0x3C, 0x07, 0xC3, 0xC0, 0x3C, 0x3C, 0x03, 0xC3, - 0xC0, 0x7C, 0x3F, 0xFF, 0x83, 0xFF, 0xF0, 0x3F, 0xFF, 0x83, 0xFF, 0xFE, - 0x3C, 0x03, 0xE3, 0xC0, 0x1F, 0x3C, 0x00, 0xF3, 0xC0, 0x0F, 0x3C, 0x01, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFC, 0x7F, 0xFF, 0x00, 0x01, - 0xF8, 0xC1, 0xFF, 0xFC, 0x7F, 0xFF, 0x9F, 0xFF, 0xF7, 0xE0, 0x7E, 0xF8, - 0x07, 0xFE, 0x00, 0x7F, 0x80, 0x0E, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, - 0x07, 0x7F, 0x03, 0xE7, 0xFF, 0xFC, 0x7F, 0xFF, 0x03, 0xFF, 0xC0, 0x1F, - 0xE0, 0xFF, 0xF0, 0x3F, 0xFF, 0x0F, 0xFF, 0xE3, 0xFF, 0xFC, 0x78, 0x1F, - 0x9E, 0x03, 0xE7, 0x80, 0x79, 0xE0, 0x0F, 0x78, 0x03, 0xDE, 0x00, 0xF7, - 0x80, 0x3D, 0xE0, 0x0F, 0x78, 0x03, 0xDE, 0x00, 0xF7, 0x80, 0x7D, 0xE0, - 0x1E, 0x78, 0x1F, 0xBF, 0xFF, 0xCF, 0xFF, 0xF3, 0xFF, 0xF0, 0x7F, 0xF0, - 0x00, 0x7F, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xC0, - 0x3C, 0x78, 0x07, 0x8F, 0x1C, 0xF1, 0xE3, 0xCC, 0x3F, 0xF8, 0x07, 0xFF, - 0x00, 0xFF, 0xE0, 0x1F, 0xFC, 0x03, 0xC7, 0x80, 0x78, 0xF1, 0x8F, 0x0C, - 0x79, 0xE0, 0x0F, 0x3C, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF7, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0xC0, 0x1E, 0x78, 0x63, 0xCF, 0x1E, 0x79, 0xE3, 0xC6, 0x3F, 0xF8, - 0x07, 0xFF, 0x00, 0xFF, 0xE0, 0x1F, 0xFC, 0x03, 0xC7, 0x80, 0x78, 0xE0, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x1F, 0xFC, 0x03, 0xFF, 0x80, - 0x7F, 0xF0, 0x07, 0xFC, 0x00, 0x01, 0xFC, 0xE0, 0x7F, 0xFE, 0x1F, 0xFF, - 0xE3, 0xFF, 0xFE, 0x7F, 0x03, 0xE7, 0xC0, 0x1E, 0xF8, 0x00, 0xEF, 0x00, - 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, - 0x3F, 0xFF, 0x03, 0xFF, 0xF8, 0x3F, 0xF7, 0x80, 0x1E, 0x7E, 0x01, 0xE3, - 0xFF, 0xFE, 0x1F, 0xFF, 0xE0, 0xFF, 0xF8, 0x01, 0xFE, 0x00, 0x7F, 0x0F, - 0xE3, 0xFC, 0x7F, 0x9F, 0xE3, 0xFC, 0x7F, 0x1F, 0xC1, 0xE0, 0x3C, 0x0F, - 0x01, 0xE0, 0x78, 0x0F, 0x03, 0xC0, 0x78, 0x1E, 0x03, 0xC0, 0xFF, 0xFE, - 0x07, 0xFF, 0xF0, 0x3F, 0xFF, 0x81, 0xFF, 0xFC, 0x0F, 0x01, 0xE0, 0x78, - 0x0F, 0x03, 0xC0, 0x78, 0x1E, 0x03, 0xC3, 0xFC, 0x7F, 0xBF, 0xE3, 0xFF, - 0xFF, 0x1F, 0xF7, 0xF0, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, - 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x83, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0x01, 0xFF, 0xE0, 0x3F, 0xFC, - 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x38, 0x07, 0x8F, - 0x00, 0xF1, 0xE0, 0x1E, 0x3C, 0x03, 0xC7, 0x80, 0xF8, 0xF8, 0x3F, 0x1F, - 0xFF, 0xC3, 0xFF, 0xF0, 0x1F, 0xFC, 0x00, 0x7E, 0x00, 0xFF, 0x0F, 0xCF, - 0xF9, 0xFE, 0xFF, 0x9F, 0xEF, 0xF8, 0xFC, 0x3C, 0x1F, 0x03, 0xC3, 0xE0, - 0x3C, 0x7C, 0x03, 0xCF, 0x80, 0x3D, 0xF0, 0x03, 0xFE, 0x00, 0x3F, 0xF8, - 0x03, 0xFF, 0x80, 0x3E, 0x7C, 0x03, 0xC3, 0xE0, 0x3C, 0x1E, 0x03, 0xC0, - 0xF0, 0x3C, 0x0F, 0x0F, 0xF8, 0x7E, 0xFF, 0x87, 0xFF, 0xF8, 0x7F, 0x7F, - 0x03, 0xE0, 0xFF, 0xC0, 0x3F, 0xF0, 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0x1E, - 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, - 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x01, 0x87, 0x80, 0xF1, 0xE0, 0x3C, - 0x78, 0x0F, 0x1E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, - 0xFF, 0xC0, 0x3E, 0x00, 0xF8, 0xFC, 0x01, 0xF9, 0xFC, 0x07, 0xF3, 0xF8, - 0x0F, 0xE3, 0xF8, 0x3F, 0x87, 0xF0, 0x7F, 0x0F, 0xF1, 0xFE, 0x1F, 0xE3, - 0xFC, 0x3D, 0xE7, 0x78, 0x7B, 0xDE, 0xF0, 0xF7, 0xBD, 0xE1, 0xE7, 0xF3, - 0xC3, 0xCF, 0xE7, 0x87, 0x8F, 0x8F, 0x0F, 0x1F, 0x1E, 0x1E, 0x1E, 0x3C, - 0x3C, 0x00, 0x79, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xF7, - 0xF0, 0x1F, 0xC0, 0xFC, 0x1F, 0xEF, 0xE1, 0xFF, 0xFE, 0x1F, 0xFF, 0xF1, - 0xFF, 0x3F, 0x83, 0xC3, 0xF8, 0x3C, 0x3F, 0xC3, 0xC3, 0xFC, 0x3C, 0x3D, - 0xE3, 0xC3, 0xDE, 0x3C, 0x3C, 0xF3, 0xC3, 0xC7, 0xBC, 0x3C, 0x7B, 0xC3, - 0xC3, 0xFC, 0x3C, 0x3F, 0xC3, 0xC1, 0xFC, 0x3C, 0x1F, 0xCF, 0xF8, 0xFC, - 0xFF, 0x87, 0xCF, 0xF8, 0x7C, 0x7F, 0x03, 0xC0, 0x01, 0xF8, 0x00, 0x7F, - 0xE0, 0x0F, 0xFF, 0x81, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xC0, 0x3E, 0x78, - 0x01, 0xEF, 0x80, 0x1F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x1F, 0x78, 0x01, 0xE7, 0xC0, 0x3E, - 0x3F, 0x0F, 0xC1, 0xFF, 0xF8, 0x1F, 0xFF, 0x00, 0x7F, 0xE0, 0x01, 0xF8, - 0x00, 0x7F, 0xF8, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0x3C, 0x0F, - 0xCF, 0x00, 0xF3, 0xC0, 0x3C, 0xF0, 0x0F, 0x3C, 0x03, 0xCF, 0x03, 0xF3, - 0xFF, 0xF8, 0xFF, 0xFC, 0x3F, 0xFE, 0x0F, 0xFE, 0x03, 0xC0, 0x00, 0xF0, - 0x00, 0x3C, 0x00, 0x3F, 0xF8, 0x0F, 0xFE, 0x03, 0xFF, 0x80, 0x7F, 0xC0, - 0x00, 0x01, 0xF8, 0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x3F, - 0x0F, 0xC7, 0xC0, 0x3E, 0x78, 0x01, 0xEF, 0x80, 0x1F, 0xF0, 0x00, 0xFF, - 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x1F, - 0x78, 0x01, 0xE7, 0xC0, 0x3E, 0x3F, 0x0F, 0xC1, 0xFF, 0xF8, 0x0F, 0xFF, - 0x00, 0x7F, 0xE0, 0x03, 0xF8, 0x00, 0x3F, 0x8E, 0x07, 0xFF, 0xF0, 0xFF, - 0xFF, 0x0F, 0xFF, 0xE0, 0x60, 0x78, 0x7F, 0xF8, 0x07, 0xFF, 0xF0, 0x3F, - 0xFF, 0xE0, 0xFF, 0xFF, 0x01, 0xE0, 0x7C, 0x0F, 0x01, 0xE0, 0x78, 0x0F, - 0x03, 0xC0, 0x78, 0x1E, 0x0F, 0xC0, 0xFF, 0xFC, 0x07, 0xFF, 0xC0, 0x3F, - 0xF8, 0x01, 0xFF, 0xE0, 0x0F, 0x0F, 0x80, 0x78, 0x3C, 0x03, 0xC0, 0xF0, - 0x1E, 0x07, 0xC3, 0xFE, 0x1F, 0xBF, 0xF0, 0x7F, 0xFF, 0x83, 0xF7, 0xF8, - 0x0F, 0x00, 0x07, 0xE7, 0x07, 0xFF, 0x8F, 0xFF, 0xC7, 0xFF, 0xE7, 0xC1, - 0xF3, 0xC0, 0x79, 0xE0, 0x3C, 0xF8, 0x00, 0x7F, 0x80, 0x1F, 0xFC, 0x07, - 0xFF, 0x81, 0xFF, 0xE0, 0x0F, 0xFB, 0x00, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, - 0xFC, 0x1F, 0xFF, 0xFF, 0xBF, 0xFF, 0x8D, 0xFF, 0x80, 0x3F, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x1F, 0xE1, - 0xE3, 0xFC, 0x3C, 0x7F, 0x87, 0x8F, 0x60, 0xF0, 0xC0, 0x1E, 0x00, 0x03, - 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, - 0x80, 0x00, 0xF0, 0x01, 0xFF, 0xE0, 0x3F, 0xFC, 0x07, 0xFF, 0x80, 0x7F, - 0xE0, 0xFF, 0x0F, 0xF7, 0xFC, 0x7F, 0xFF, 0xE3, 0xFE, 0xFF, 0x1F, 0xF3, - 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x07, 0x87, 0x80, 0x3C, 0x3C, 0x01, - 0xE1, 0xE0, 0x0F, 0x0F, 0x00, 0x78, 0x78, 0x03, 0xC3, 0xC0, 0x1E, 0x1E, - 0x00, 0xF0, 0xF0, 0x07, 0x87, 0xC0, 0x7C, 0x1F, 0x07, 0xC0, 0xFF, 0xFE, - 0x03, 0xFF, 0xE0, 0x0F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0x03, 0xFD, - 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFB, 0xF8, 0x1F, 0xE1, 0xC0, 0x07, 0x03, - 0xC0, 0x1E, 0x07, 0x80, 0x3C, 0x07, 0x80, 0xF0, 0x0F, 0x01, 0xE0, 0x0F, - 0x03, 0x80, 0x1E, 0x0F, 0x00, 0x3E, 0x1E, 0x00, 0x3C, 0x78, 0x00, 0x78, - 0xF0, 0x00, 0x7B, 0xC0, 0x00, 0xF7, 0x80, 0x01, 0xFF, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0xFF, 0x0F, - 0xF7, 0xFC, 0x7F, 0xFF, 0xE3, 0xFF, 0xFE, 0x0F, 0xF7, 0x80, 0x0F, 0x3C, - 0x38, 0x78, 0xE3, 0xE3, 0x87, 0x1F, 0x1C, 0x38, 0xF8, 0xE1, 0xEF, 0xE7, - 0x0F, 0x7F, 0x78, 0x7B, 0xBB, 0xC3, 0xFD, 0xFE, 0x0F, 0xEF, 0xF0, 0x7E, - 0x3F, 0x03, 0xF1, 0xF8, 0x1F, 0x8F, 0xC0, 0xFC, 0x3E, 0x07, 0xC1, 0xF0, - 0x3E, 0x0F, 0x81, 0xF0, 0x7C, 0x00, 0x7E, 0x0F, 0xDF, 0xE3, 0xFF, 0xFC, - 0x7F, 0xBF, 0x07, 0xE1, 0xE0, 0xF8, 0x3E, 0x3E, 0x03, 0xEF, 0x80, 0x3D, - 0xE0, 0x03, 0xF8, 0x00, 0x3E, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x3F, - 0x80, 0x0F, 0x78, 0x03, 0xC7, 0x80, 0xF8, 0x78, 0x3E, 0x0F, 0x8F, 0xE3, - 0xFF, 0xFC, 0x7F, 0xFF, 0x8F, 0xF7, 0xE0, 0xFC, 0x7E, 0x07, 0xEF, 0xF0, - 0xFF, 0xFF, 0x0F, 0xF7, 0xE0, 0x7E, 0x1E, 0x07, 0x81, 0xF0, 0xF8, 0x0F, - 0x0F, 0x00, 0x79, 0xE0, 0x07, 0xFE, 0x00, 0x3F, 0xC0, 0x01, 0xF8, 0x00, - 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, - 0x00, 0xF0, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x07, 0xFE, - 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF0, 0x3C, 0xF0, - 0x78, 0xF0, 0xF0, 0x70, 0xE0, 0x01, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, - 0x00, 0x0F, 0x00, 0x1E, 0x0E, 0x1C, 0x0F, 0x38, 0x0F, 0x78, 0x0F, 0x7F, - 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFE, 0xFF, 0xFF, 0xFE, 0xE0, 0x01, - 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x0E, - 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, - 0x00, 0xF0, 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0x80, - 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x3C, 0x00, - 0x38, 0x00, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x07, 0x00, 0x1F, 0x00, - 0x7F, 0x00, 0xFE, 0x03, 0xDE, 0x0F, 0x1E, 0x3E, 0x3E, 0xF8, 0x3F, 0xE0, - 0x3F, 0x80, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0xC3, 0x87, 0x0E, 0x1C, 0x30, 0x01, 0xFC, 0x01, 0xFF, 0xC0, - 0x3F, 0xFC, 0x07, 0xFF, 0xC0, 0x00, 0x78, 0x0F, 0xFF, 0x07, 0xFF, 0xE1, - 0xFF, 0xFC, 0x7F, 0xFF, 0x9F, 0x80, 0xF3, 0xC0, 0x1E, 0x78, 0x0F, 0xCF, - 0xFF, 0xFE, 0xFF, 0xFF, 0xCF, 0xFF, 0xF8, 0x7F, 0x3E, 0x7C, 0x00, 0x1F, - 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x3F, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0x87, 0xFF, 0xF0, 0xFC, 0x1F, 0x1F, - 0x01, 0xF3, 0xC0, 0x1E, 0x78, 0x03, 0xCF, 0x00, 0x79, 0xE0, 0x0F, 0x3E, - 0x03, 0xE7, 0xE0, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xCF, 0xFF, 0xF0, 0xF9, - 0xF8, 0x00, 0x03, 0xF3, 0x87, 0xFF, 0xCF, 0xFF, 0xEF, 0xFF, 0xF7, 0xE0, - 0xFF, 0xC0, 0x3F, 0xC0, 0x0F, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3E, - 0x00, 0x4F, 0x80, 0xF7, 0xFF, 0xF9, 0xFF, 0xF8, 0x7F, 0xF8, 0x0F, 0xF0, - 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x03, - 0xC0, 0x00, 0x3C, 0x03, 0xF3, 0xC0, 0xFF, 0xBC, 0x1F, 0xFF, 0xC3, 0xFF, - 0xFC, 0x7E, 0x0F, 0xC7, 0x80, 0x7C, 0xF0, 0x03, 0xCF, 0x00, 0x3C, 0xF0, - 0x03, 0xCF, 0x00, 0x3C, 0xF8, 0x07, 0xC7, 0xE0, 0xFC, 0x7F, 0xFF, 0xF3, - 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0x3F, 0x3E, 0x03, 0xF0, 0x03, 0xFF, 0x01, - 0xFF, 0xE0, 0xFF, 0xFC, 0x7E, 0x0F, 0x9E, 0x01, 0xEF, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x7F, 0xFF, - 0xCF, 0xFF, 0xF1, 0xFF, 0xF8, 0x0F, 0xF0, 0x03, 0xFC, 0x07, 0xFF, 0x0F, - 0xFF, 0x1F, 0xFF, 0x1E, 0x00, 0x1E, 0x00, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, - 0xFC, 0xFF, 0xF8, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, - 0xF8, 0xFF, 0xF8, 0x07, 0xE7, 0xC3, 0xFF, 0xFC, 0xFF, 0xFF, 0xBF, 0xFF, - 0xF7, 0xC1, 0xF9, 0xF0, 0x1F, 0x3C, 0x01, 0xE7, 0x80, 0x3C, 0xF0, 0x07, - 0x9E, 0x00, 0xF3, 0xE0, 0x3E, 0x3E, 0x0F, 0xC7, 0xFF, 0xF8, 0x7F, 0xFF, - 0x07, 0xFD, 0xE0, 0x3F, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x3E, - 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x0F, 0xFC, 0x00, 0xFE, 0x00, 0x3E, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x01, 0xE0, 0x00, 0x0F, - 0x00, 0x00, 0x78, 0xF8, 0x03, 0xDF, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0xFE, - 0x07, 0xE1, 0xF0, 0x3E, 0x07, 0x81, 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, - 0x0F, 0x03, 0xC0, 0x78, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x1F, 0xC1, 0xFD, - 0xFE, 0x0F, 0xFF, 0xF0, 0x7F, 0xBF, 0x01, 0xF8, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x3F, 0xC0, - 0x3F, 0xC0, 0x3F, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFE, 0xFF, 0xFF, - 0xFF, 0xFF, 0x7F, 0xFE, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, - 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, - 0x0F, 0x00, 0xF0, 0x0F, 0x01, 0xFF, 0xFE, 0xFF, 0xEF, 0xFC, 0x7F, 0x00, - 0x7C, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x3C, 0x00, 0x0F, - 0x00, 0x03, 0xC7, 0xF0, 0xF3, 0xFC, 0x3C, 0xFF, 0x0F, 0x3F, 0x83, 0xDF, - 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x0F, 0xE0, 0x03, 0xFC, 0x00, 0xF7, 0x80, - 0x3C, 0xF0, 0x0F, 0x1F, 0x0F, 0xC3, 0xFB, 0xF1, 0xFF, 0xFC, 0x7F, 0xDF, - 0x0F, 0xE0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0x3D, 0xE3, - 0xC1, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xFF, 0xFE, 0x3E, 0x3C, 0x78, - 0xF0, 0xF1, 0xE3, 0xC3, 0xC7, 0x8F, 0x0F, 0x1E, 0x3C, 0x3C, 0x78, 0xF0, - 0xF1, 0xE3, 0xC3, 0xC7, 0x8F, 0x0F, 0x1E, 0xFE, 0x3E, 0x7F, 0xF8, 0xF9, - 0xFF, 0xE3, 0xE7, 0xDF, 0x0F, 0x1E, 0x1E, 0x7C, 0x03, 0xEF, 0xF0, 0x3F, - 0xFF, 0x83, 0xFF, 0xFC, 0x1F, 0x87, 0xC1, 0xE0, 0x3C, 0x1E, 0x03, 0xC1, - 0xE0, 0x3C, 0x1E, 0x03, 0xC1, 0xE0, 0x3C, 0x1E, 0x03, 0xC1, 0xE0, 0x3C, - 0x7F, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xF7, 0xE0, 0x7E, 0x03, 0xF8, - 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC7, 0xE0, 0xFD, 0xF0, 0x07, - 0xFC, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xE0, 0x0F, - 0xBF, 0x07, 0xE3, 0xFF, 0xF8, 0x3F, 0xFE, 0x03, 0xFF, 0x80, 0x1F, 0xC0, - 0x3E, 0x7E, 0x03, 0xF7, 0xFC, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC1, 0xF8, - 0x3F, 0x0F, 0x80, 0x7C, 0x78, 0x01, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x78, - 0xF0, 0x03, 0xC7, 0xC0, 0x3E, 0x3F, 0x07, 0xE1, 0xFF, 0xFE, 0x0F, 0xFF, - 0xE0, 0x7B, 0xFE, 0x03, 0xCF, 0xC0, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, - 0x80, 0x00, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x01, 0xFE, 0x00, - 0x00, 0x03, 0xF3, 0xE0, 0x7F, 0xDF, 0x87, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, - 0xE0, 0xFC, 0x7C, 0x03, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x78, 0xF0, 0x03, - 0xC7, 0x80, 0x1E, 0x3E, 0x01, 0xF0, 0xFC, 0x1F, 0x83, 0xFF, 0xFC, 0x1F, - 0xFF, 0xE0, 0x3F, 0xEF, 0x00, 0x7E, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, - 0x3F, 0xC0, 0x7E, 0x1E, 0x7F, 0x3F, 0xFF, 0xBF, 0xFF, 0xFF, 0xF1, 0xFE, - 0x00, 0xFC, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, - 0x80, 0x03, 0xC0, 0x0F, 0xFF, 0x87, 0xFF, 0xC3, 0xFF, 0xE1, 0xFF, 0xE0, - 0x07, 0xE6, 0x1F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x78, 0x1E, 0x78, 0x0E, - 0x7F, 0xE0, 0x3F, 0xFC, 0x03, 0xFE, 0x60, 0x1F, 0xE0, 0x0F, 0xF8, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFC, 0x07, 0xE0, 0x0C, 0x00, 0x0F, 0x00, - 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x07, 0xFF, 0xF3, 0xFF, 0xF9, 0xFF, - 0xFC, 0xFF, 0xFC, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x07, 0x8F, 0xFF, 0xC3, 0xFF, - 0xC1, 0xFF, 0xC0, 0x3F, 0x80, 0xFC, 0x1F, 0xBF, 0x0F, 0xEF, 0xC3, 0xFB, - 0xF0, 0xFE, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, 0xF0, 0x1E, 0x3C, - 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, 0xF8, 0x7E, 0x3F, 0xFF, 0xC7, 0xFF, - 0xF0, 0xFF, 0x7C, 0x0F, 0x9E, 0x7F, 0x07, 0xF7, 0xFC, 0x7F, 0xFF, 0xE3, - 0xFE, 0xFE, 0x0F, 0xE1, 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x3C, 0x1E, 0x01, - 0xE0, 0xF0, 0x07, 0x8F, 0x00, 0x3E, 0x78, 0x00, 0xF7, 0x80, 0x07, 0xFC, - 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x7E, - 0x03, 0xF7, 0xF8, 0x3F, 0xFF, 0xC1, 0xFE, 0xFC, 0x07, 0xF3, 0xC7, 0x0F, - 0x1E, 0x7C, 0xF0, 0x73, 0xE7, 0x83, 0x9F, 0x7C, 0x1F, 0xFF, 0xC0, 0xFF, - 0xFE, 0x03, 0xF7, 0xF0, 0x1F, 0xBF, 0x80, 0xFC, 0xF8, 0x07, 0xC7, 0xC0, - 0x1E, 0x3E, 0x00, 0xE0, 0xE0, 0x7E, 0x0F, 0xDF, 0xE3, 0xFF, 0xFC, 0x7F, - 0xBF, 0x07, 0xE1, 0xF1, 0xF0, 0x1F, 0xFC, 0x01, 0xFF, 0x00, 0x1F, 0xC0, - 0x07, 0xF8, 0x01, 0xFF, 0xC0, 0x7E, 0xFC, 0x1F, 0x8F, 0xC7, 0xE0, 0xFD, - 0xFE, 0x3F, 0xFF, 0xC7, 0xFF, 0xF0, 0x7F, 0x7E, 0x0F, 0xDF, 0xE3, 0xFF, - 0xFC, 0x7F, 0xBF, 0x07, 0xE3, 0xC0, 0x78, 0x3C, 0x0E, 0x07, 0x83, 0xC0, - 0x78, 0x70, 0x0F, 0x1E, 0x00, 0xE3, 0x80, 0x1E, 0xF0, 0x01, 0xDC, 0x00, - 0x3F, 0x80, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x01, 0xE0, 0x00, - 0x38, 0x00, 0x0F, 0x00, 0x3F, 0xF0, 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x1F, - 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF9, 0xC7, - 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x78, 0x03, 0xC0, 0x1E, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x81, 0xF0, 0xFC, 0x7E, 0x1F, - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0xF8, 0xFC, 0x3E, 0x0F, - 0x83, 0xF0, 0x3E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xF0, 0x7E, - 0x0F, 0xC3, 0xF0, 0x38, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x70, 0x3E, 0x0F, 0xC1, 0xF8, 0x3E, - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x7C, 0x0F, 0xC1, 0xF0, - 0x7C, 0x3F, 0x1F, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x83, 0xE1, 0xF8, - 0xFC, 0x3F, 0x07, 0x00, 0x1E, 0x00, 0x1F, 0xC0, 0x1F, 0xF0, 0xDF, 0xFC, - 0xFF, 0x3F, 0xFB, 0x0F, 0xF8, 0x03, 0xF8, 0x00, 0x78}; - -const GFXglyph FreeMonoBold18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 21, 0, 1}, // 0x20 ' ' - {0, 5, 22, 21, 8, -21}, // 0x21 '!' - {14, 11, 10, 21, 5, -20}, // 0x22 '"' - {28, 16, 25, 21, 3, -22}, // 0x23 '#' - {78, 14, 28, 21, 4, -23}, // 0x24 '$' - {127, 15, 21, 21, 3, -20}, // 0x25 '%' - {167, 15, 20, 21, 3, -19}, // 0x26 '&' - {205, 4, 10, 21, 8, -20}, // 0x27 ''' - {210, 8, 27, 21, 9, -21}, // 0x28 '(' - {237, 8, 27, 21, 4, -21}, // 0x29 ')' - {264, 16, 15, 21, 3, -21}, // 0x2A '*' - {294, 16, 19, 21, 3, -18}, // 0x2B '+' - {332, 7, 10, 21, 5, -3}, // 0x2C ',' - {341, 19, 4, 21, 1, -11}, // 0x2D '-' - {351, 5, 5, 21, 8, -4}, // 0x2E '.' - {355, 15, 28, 21, 3, -23}, // 0x2F '/' - {408, 16, 23, 21, 3, -22}, // 0x30 '0' - {454, 15, 22, 21, 3, -21}, // 0x31 '1' - {496, 15, 23, 21, 3, -22}, // 0x32 '2' - {540, 16, 23, 21, 3, -22}, // 0x33 '3' - {586, 15, 21, 21, 3, -20}, // 0x34 '4' - {626, 17, 22, 21, 2, -21}, // 0x35 '5' - {673, 15, 23, 21, 4, -22}, // 0x36 '6' - {717, 15, 22, 21, 3, -21}, // 0x37 '7' - {759, 15, 23, 21, 3, -22}, // 0x38 '8' - {803, 15, 23, 21, 4, -22}, // 0x39 '9' - {847, 5, 16, 21, 8, -15}, // 0x3A ':' - {857, 7, 22, 21, 5, -15}, // 0x3B ';' - {877, 18, 16, 21, 1, -17}, // 0x3C '<' - {913, 19, 10, 21, 1, -14}, // 0x3D '=' - {937, 18, 16, 21, 2, -17}, // 0x3E '>' - {973, 15, 21, 21, 4, -20}, // 0x3F '?' - {1013, 15, 27, 21, 3, -21}, // 0x40 '@' - {1064, 22, 21, 21, -1, -20}, // 0x41 'A' - {1122, 20, 21, 21, 1, -20}, // 0x42 'B' - {1175, 19, 21, 21, 1, -20}, // 0x43 'C' - {1225, 18, 21, 21, 2, -20}, // 0x44 'D' - {1273, 19, 21, 21, 1, -20}, // 0x45 'E' - {1323, 19, 21, 21, 1, -20}, // 0x46 'F' - {1373, 20, 21, 21, 1, -20}, // 0x47 'G' - {1426, 21, 21, 21, 0, -20}, // 0x48 'H' - {1482, 14, 21, 21, 4, -20}, // 0x49 'I' - {1519, 19, 21, 21, 2, -20}, // 0x4A 'J' - {1569, 20, 21, 21, 1, -20}, // 0x4B 'K' - {1622, 18, 21, 21, 2, -20}, // 0x4C 'L' - {1670, 23, 21, 21, -1, -20}, // 0x4D 'M' - {1731, 20, 21, 21, 1, -20}, // 0x4E 'N' - {1784, 20, 21, 21, 1, -20}, // 0x4F 'O' - {1837, 18, 21, 21, 1, -20}, // 0x50 'P' - {1885, 20, 26, 21, 1, -20}, // 0x51 'Q' - {1950, 21, 21, 21, 0, -20}, // 0x52 'R' - {2006, 17, 21, 21, 2, -20}, // 0x53 'S' - {2051, 19, 21, 21, 1, -20}, // 0x54 'T' - {2101, 21, 21, 21, 0, -20}, // 0x55 'U' - {2157, 23, 21, 21, -1, -20}, // 0x56 'V' - {2218, 21, 21, 21, 0, -20}, // 0x57 'W' - {2274, 19, 21, 21, 1, -20}, // 0x58 'X' - {2324, 20, 21, 21, 1, -20}, // 0x59 'Y' - {2377, 16, 21, 21, 3, -20}, // 0x5A 'Z' - {2419, 8, 27, 21, 9, -21}, // 0x5B '[' - {2446, 15, 28, 21, 3, -23}, // 0x5C '\' - {2499, 8, 27, 21, 4, -21}, // 0x5D ']' - {2526, 15, 11, 21, 3, -21}, // 0x5E '^' - {2547, 21, 4, 21, 0, 4}, // 0x5F '_' - {2558, 6, 6, 21, 6, -22}, // 0x60 '`' - {2563, 19, 16, 21, 1, -15}, // 0x61 'a' - {2601, 19, 22, 21, 1, -21}, // 0x62 'b' - {2654, 17, 16, 21, 2, -15}, // 0x63 'c' - {2688, 20, 22, 21, 1, -21}, // 0x64 'd' - {2743, 18, 16, 21, 1, -15}, // 0x65 'e' - {2779, 16, 22, 21, 4, -21}, // 0x66 'f' - {2823, 19, 23, 21, 1, -15}, // 0x67 'g' - {2878, 21, 22, 21, 0, -21}, // 0x68 'h' - {2936, 16, 22, 21, 3, -21}, // 0x69 'i' - {2980, 12, 29, 21, 5, -21}, // 0x6A 'j' - {3024, 18, 22, 21, 2, -21}, // 0x6B 'k' - {3074, 16, 22, 21, 3, -21}, // 0x6C 'l' - {3118, 22, 16, 21, -1, -15}, // 0x6D 'm' - {3162, 20, 16, 21, 0, -15}, // 0x6E 'n' - {3202, 19, 16, 21, 1, -15}, // 0x6F 'o' - {3240, 21, 23, 21, 0, -15}, // 0x70 'p' - {3301, 21, 23, 22, 1, -15}, // 0x71 'q' - {3362, 17, 16, 21, 3, -15}, // 0x72 'r' - {3396, 16, 16, 21, 3, -15}, // 0x73 's' - {3428, 17, 21, 21, 1, -20}, // 0x74 't' - {3473, 18, 16, 21, 1, -15}, // 0x75 'u' - {3509, 21, 16, 21, 0, -15}, // 0x76 'v' - {3551, 21, 16, 21, 0, -15}, // 0x77 'w' - {3593, 19, 16, 21, 1, -15}, // 0x78 'x' - {3631, 19, 23, 21, 1, -15}, // 0x79 'y' - {3686, 14, 16, 21, 3, -15}, // 0x7A 'z' - {3714, 10, 27, 21, 6, -21}, // 0x7B '{' - {3748, 4, 27, 21, 9, -21}, // 0x7C '|' - {3762, 10, 27, 21, 6, -21}, // 0x7D '}' - {3796, 17, 8, 21, 2, -13}}; // 0x7E '~' - -const GFXfont FreeMonoBold18pt7b PROGMEM = { - (uint8_t *)FreeMonoBold18pt7bBitmaps, (GFXglyph *)FreeMonoBold18pt7bGlyphs, - 0x20, 0x7E, 35}; - -// Approx. 4485 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold24pt7b.h deleted file mode 100644 index eb79d6e..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold24pt7b.h +++ /dev/null @@ -1,674 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBold24pt7bBitmaps[] PROGMEM = { - 0x38, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF3, 0xE7, 0xCF, - 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE3, 0x82, 0x00, 0x00, 0x00, 0x71, 0xF7, - 0xFF, 0xEF, 0x9E, 0x00, 0xFC, 0x7E, 0xF8, 0x7D, 0xF0, 0xFB, 0xE1, 0xF7, - 0xC3, 0xEF, 0x87, 0xDF, 0x0F, 0xBE, 0x1F, 0x38, 0x1C, 0x70, 0x38, 0xE0, - 0x71, 0xC0, 0xE3, 0x81, 0xC7, 0x03, 0x80, 0x01, 0xC1, 0xC0, 0x0F, 0x8F, - 0x80, 0x3E, 0x3E, 0x00, 0xF8, 0xF8, 0x03, 0xE3, 0xE0, 0x0F, 0x8F, 0x80, - 0x7E, 0x3E, 0x01, 0xF0, 0xF8, 0x07, 0xC7, 0xC0, 0x1F, 0x1F, 0x03, 0xFF, - 0xFF, 0x9F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, - 0x81, 0xF1, 0xF0, 0x07, 0xC7, 0xC0, 0x1F, 0x1F, 0x00, 0x7C, 0x7C, 0x1F, - 0xFF, 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x9F, 0xFF, - 0xFC, 0x0F, 0x8F, 0x80, 0x3E, 0x3E, 0x00, 0xF8, 0xF8, 0x03, 0xE3, 0xE0, - 0x0F, 0x8F, 0x80, 0x3E, 0x3E, 0x00, 0xF8, 0xF8, 0x03, 0xE3, 0xE0, 0x0F, - 0x8F, 0x80, 0x3C, 0x3C, 0x00, 0x00, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x1F, 0xFF, 0x07, 0xFF, 0xF1, 0xFF, 0xFE, - 0x7F, 0xFF, 0xDF, 0xC1, 0xFB, 0xF0, 0x1F, 0x7C, 0x01, 0xEF, 0x80, 0x39, - 0xF8, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, - 0x0F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x07, 0xF8, 0x00, 0xFF, - 0x80, 0x1F, 0xF8, 0x07, 0xFF, 0x81, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xCF, - 0xFF, 0xF1, 0xDF, 0xFC, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, - 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x01, 0xC0, 0x00, - 0x0F, 0x80, 0x00, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0xF0, 0xE0, 0x0F, 0x07, - 0x80, 0x70, 0x1C, 0x03, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0xF0, 0x78, 0x03, - 0xC3, 0x80, 0x1F, 0xFC, 0x00, 0x7F, 0xC1, 0xF0, 0xF8, 0x7F, 0x00, 0x3F, - 0xF0, 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x07, 0xE0, 0xF8, 0x38, - 0x1F, 0xE0, 0x01, 0xFF, 0x80, 0x0F, 0x1E, 0x00, 0xF0, 0x78, 0x07, 0x01, - 0xC0, 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x0F, 0x07, 0x80, 0x38, 0x78, 0x01, - 0xFF, 0xC0, 0x07, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0xFC, - 0x01, 0xFF, 0xE0, 0x1F, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xC7, 0x00, 0x7C, - 0x10, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xC7, 0xCF, 0xFF, - 0x3F, 0x7E, 0xFF, 0xFF, 0xE7, 0xFF, 0xBE, 0x1F, 0xF9, 0xF0, 0x7F, 0x8F, - 0x83, 0xFC, 0x7C, 0x0F, 0xE3, 0xF0, 0x7F, 0xCF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xF9, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x0F, 0xE0, 0x00, 0xFD, 0xF7, 0xDF, - 0x7D, 0xF7, 0xDF, 0x38, 0xE3, 0x8E, 0x38, 0xE0, 0x01, 0x80, 0xF0, 0x7C, - 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0xFC, 0x3E, 0x0F, 0x87, 0xC1, 0xF0, 0x7C, - 0x1F, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, - 0x81, 0xF0, 0x7C, 0x1F, 0x07, 0xC0, 0xF8, 0x3E, 0x0F, 0xC1, 0xF0, 0x7E, - 0x0F, 0x83, 0xF0, 0x7C, 0x1F, 0x03, 0xC0, 0x60, 0x3C, 0x0F, 0x83, 0xF0, - 0xFC, 0x1F, 0x83, 0xE0, 0xFC, 0x1F, 0x07, 0xC1, 0xF8, 0x3E, 0x0F, 0x83, - 0xE0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, - 0x1E, 0x0F, 0x83, 0xE0, 0xF8, 0x7C, 0x1F, 0x0F, 0xC3, 0xE1, 0xF8, 0x7C, - 0x3F, 0x0F, 0x83, 0xE0, 0xF0, 0x00, 0x00, 0x70, 0x00, 0x07, 0xC0, 0x00, - 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x10, 0x7C, 0x11, 0xF3, 0xE7, - 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x87, 0xFF, 0xF0, 0x07, - 0xFC, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0x80, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, - 0x1F, 0x8F, 0xC0, 0xF8, 0x3E, 0x03, 0x80, 0xE0, 0x00, 0x38, 0x00, 0x00, - 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, - 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, - 0x01, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xDF, 0xFF, 0xFF, 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, 0x7C, 0x00, 0x00, 0x70, 0x00, 0x1F, - 0x8F, 0x87, 0xC7, 0xC3, 0xE1, 0xE1, 0xF0, 0xF0, 0x78, 0x38, 0x3C, 0x1C, - 0x0E, 0x06, 0x00, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0x7D, 0xFF, 0xFF, 0xFF, 0xEF, 0x80, - 0x00, 0x00, 0x60, 0x00, 0x0F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, - 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, - 0xF8, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, - 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0xC0, 0x00, 0xF8, 0x00, - 0x1F, 0x80, 0x01, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, - 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, - 0x00, 0xFC, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0xFF, 0x83, 0xFF, 0xFE, - 0x1F, 0x83, 0xF1, 0xF8, 0x0F, 0xCF, 0x80, 0x3E, 0x7C, 0x01, 0xF7, 0xC0, - 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, - 0xE0, 0x03, 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC0, 0x07, 0xFE, 0x00, - 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7D, 0xF0, 0x07, 0xCF, - 0x80, 0x3E, 0x7E, 0x03, 0xF1, 0xF8, 0x3F, 0x0F, 0xFF, 0xF8, 0x3F, 0xFF, - 0x80, 0xFF, 0xF8, 0x03, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, - 0x3F, 0x80, 0x0F, 0xF8, 0x01, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xEF, 0x80, - 0xFC, 0xF8, 0x07, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, - 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, - 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, - 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x3F, 0xFF, 0xE7, - 0xFF, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0x01, 0xFC, - 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF, 0x3F, - 0x03, 0xFB, 0xF0, 0x07, 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0xFB, 0x80, 0x07, - 0xC0, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, - 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xE0, - 0x0E, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xF8, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, - 0xE0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x7E, 0x03, 0xF1, 0xC0, 0x0F, 0xC0, - 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x0F, - 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, - 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x01, 0xFF, 0xC0, - 0x3F, 0xBF, 0xFF, 0xFD, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, - 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x07, - 0xF8, 0x00, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xEF, 0x80, 0x3E, 0xF8, 0x03, - 0xCF, 0x80, 0x7C, 0xF8, 0x0F, 0x8F, 0x80, 0xF0, 0xF8, 0x1F, 0x0F, 0x81, - 0xE0, 0xF8, 0x3E, 0x0F, 0x87, 0xC0, 0xF8, 0x78, 0x0F, 0x8F, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, - 0x80, 0x07, 0xFE, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x07, - 0xFE, 0x3F, 0xFF, 0xC1, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8, 0x7F, 0xFF, 0xC3, - 0xFF, 0xFC, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, - 0x01, 0xF0, 0x00, 0x0F, 0xBF, 0x00, 0x7F, 0xFF, 0x03, 0xFF, 0xFC, 0x1F, - 0xFF, 0xF0, 0xFF, 0xFF, 0x83, 0xC0, 0xFE, 0x00, 0x01, 0xF0, 0x00, 0x0F, - 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, - 0x03, 0xE0, 0x00, 0x3F, 0xF0, 0x03, 0xF7, 0xE0, 0x3F, 0xBF, 0xFF, 0xF9, - 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xC0, 0x0F, 0xFF, 0x01, 0xFF, 0xF0, 0x7F, 0xFF, 0x0F, 0xFF, 0xE1, - 0xFF, 0x00, 0x1F, 0xC0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, - 0x7C, 0x00, 0x0F, 0x8F, 0xC0, 0xF9, 0xFF, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, - 0xCF, 0xFF, 0xFC, 0xFF, 0x0F, 0xEF, 0xE0, 0x3E, 0xFC, 0x03, 0xFF, 0x80, - 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xF7, 0xC0, 0x3F, 0x7E, - 0x03, 0xF3, 0xF0, 0x7E, 0x3F, 0xFF, 0xE1, 0xFF, 0xFC, 0x0F, 0xFF, 0x80, - 0x7F, 0xF0, 0x01, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xF0, 0x03, 0xE0, 0x00, - 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, - 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, - 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, - 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x06, 0x00, 0x01, 0xF8, 0x00, 0xFF, - 0xF0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xE0, 0x7E, 0xFC, - 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xF7, - 0xC0, 0x3E, 0x7E, 0x07, 0xE3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, - 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0x0F, 0xE7, 0xC0, 0x3E, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x03, 0xF7, 0xE0, - 0x7E, 0x7F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x03, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xF8, - 0x7F, 0xFF, 0xC7, 0xE0, 0xFE, 0xFC, 0x03, 0xEF, 0x80, 0x3E, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x3F, 0xFC, 0x07, 0xF7, 0xE0, - 0xFF, 0x7F, 0xFF, 0xF3, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0, 0xFF, 0x9F, 0x03, - 0xF1, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, - 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x0F, 0xF0, 0x7F, 0xFE, 0x0F, 0xFF, 0xC0, - 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0x80, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, - 0xEF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xFF, - 0xFF, 0xFF, 0xEF, 0x80, 0x0F, 0x87, 0xF1, 0xFC, 0x7F, 0x1F, 0xC3, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x1F, 0x87, 0xE1, 0xF0, 0xFC, 0x3E, 0x0F, 0x03, 0xC1, 0xE0, 0x78, 0x1C, - 0x07, 0x01, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x7F, - 0x00, 0x01, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, - 0x01, 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0xE0, 0x00, - 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, - 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1E, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x07, - 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x7F, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x3F, 0xF0, 0x01, - 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, - 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x01, 0xFF, 0xF0, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFC, 0xFF, 0xFF, 0xEF, 0xC0, 0x7E, 0xF8, 0x03, 0xFF, 0x80, 0x1F, - 0x70, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x3F, - 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, - 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, - 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0xFF, 0x80, 0x3F, 0xF8, - 0x0F, 0xFF, 0x83, 0xE0, 0xF8, 0x78, 0x07, 0x1E, 0x00, 0xF3, 0x80, 0x0E, - 0x70, 0x01, 0xDE, 0x00, 0x3B, 0x80, 0x3F, 0x70, 0x1F, 0xEE, 0x07, 0xFD, - 0xC1, 0xFF, 0xB8, 0x7E, 0x77, 0x0F, 0x0E, 0xE3, 0xC1, 0xDC, 0x70, 0x3B, - 0x8E, 0x07, 0x71, 0xC0, 0xEE, 0x3C, 0x1D, 0xC3, 0xC3, 0xB8, 0x7F, 0xF7, - 0x07, 0xFF, 0xE0, 0x7F, 0xFC, 0x03, 0xFB, 0xC0, 0x00, 0x38, 0x00, 0x07, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x61, 0xF0, 0x3E, 0x1F, 0xFF, 0xC3, - 0xFF, 0xF0, 0x1F, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7F, - 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x0F, 0xBE, 0x00, - 0x00, 0x7D, 0xF8, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x3E, 0x3E, 0x00, 0x03, - 0xE0, 0xF8, 0x00, 0x1F, 0x07, 0xC0, 0x00, 0xF0, 0x3F, 0x00, 0x0F, 0x80, - 0xF8, 0x00, 0x7F, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, - 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0x00, 0xF8, 0x00, 0xF8, 0x0F, - 0x80, 0x03, 0xE1, 0xFF, 0x80, 0xFF, 0xDF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, - 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xDF, 0xF8, 0x0F, 0xFC, 0x7F, 0xFF, 0xC0, - 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, - 0xFE, 0x07, 0xC0, 0x1F, 0xC1, 0xF0, 0x01, 0xF0, 0x7C, 0x00, 0x7C, 0x1F, - 0x00, 0x1F, 0x07, 0xC0, 0x0F, 0xC1, 0xF0, 0x07, 0xE0, 0x7F, 0xFF, 0xF0, - 0x1F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, - 0xFC, 0x1F, 0x00, 0x3F, 0x87, 0xC0, 0x03, 0xF1, 0xF0, 0x00, 0x7C, 0x7C, - 0x00, 0x1F, 0x1F, 0x00, 0x07, 0xC7, 0xC0, 0x03, 0xF7, 0xFF, 0xFF, 0xFB, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0xE7, 0x01, 0xFF, 0xFF, 0xC1, 0xFF, - 0xFF, 0xE1, 0xFF, 0xFF, 0xF1, 0xFE, 0x07, 0xF8, 0xFC, 0x01, 0xFC, 0xFC, - 0x00, 0x7E, 0x7C, 0x00, 0x1F, 0x7E, 0x00, 0x0F, 0xBE, 0x00, 0x03, 0x9F, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x39, 0xFC, 0x00, - 0x7C, 0x7F, 0x80, 0xFF, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x81, 0xFF, - 0xFF, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, - 0xFF, 0xF0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, - 0xF0, 0x0F, 0xF0, 0xF8, 0x01, 0xF8, 0x7C, 0x00, 0x7E, 0x3E, 0x00, 0x1F, - 0x1F, 0x00, 0x0F, 0xCF, 0x80, 0x03, 0xE7, 0xC0, 0x01, 0xF3, 0xE0, 0x00, - 0xF9, 0xF0, 0x00, 0x7C, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x3E, 0x00, - 0x0F, 0x9F, 0x00, 0x07, 0xCF, 0x80, 0x07, 0xE7, 0xC0, 0x03, 0xE3, 0xE0, - 0x03, 0xF1, 0xF0, 0x07, 0xF1, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, - 0xF0, 0xF8, 0x00, 0xF8, 0x7C, 0x00, 0x7C, 0x3E, 0x0E, 0x3E, 0x1F, 0x0F, - 0x9F, 0x0F, 0x87, 0xC7, 0x07, 0xC3, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, - 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x3F, 0xFF, 0x00, 0x1F, - 0x0F, 0x80, 0x0F, 0x87, 0xC3, 0x87, 0xC1, 0xC3, 0xE3, 0xE0, 0x01, 0xF1, - 0xF0, 0x00, 0xF8, 0xF8, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, - 0xFF, 0xF8, 0xF8, 0x00, 0x7C, 0x7C, 0x00, 0x3E, 0x3E, 0x00, 0x1F, 0x1F, - 0x07, 0x0F, 0x8F, 0x87, 0xC3, 0x87, 0xC3, 0xE0, 0x03, 0xFF, 0xF0, 0x01, - 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x3F, 0xFF, 0x00, - 0x1F, 0x0F, 0x80, 0x0F, 0x87, 0xC0, 0x07, 0xC3, 0xE0, 0x03, 0xE0, 0xE0, - 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, - 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x7F, 0x8E, 0x00, 0xFF, 0xF7, 0x81, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xE1, - 0xFF, 0xFF, 0xF1, 0xFE, 0x03, 0xF8, 0xFC, 0x00, 0xFC, 0xFC, 0x00, 0x3E, - 0x7C, 0x00, 0x1F, 0x7E, 0x00, 0x07, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x0F, - 0xFE, 0xF8, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, - 0xFF, 0xFF, 0xC0, 0x01, 0xF3, 0xF0, 0x00, 0xF9, 0xFC, 0x00, 0x7C, 0x7F, - 0x80, 0xFE, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x80, - 0x7F, 0xFF, 0x00, 0x07, 0xFC, 0x00, 0x3F, 0xE1, 0xFF, 0x1F, 0xFC, 0xFF, - 0xE7, 0xFF, 0x3F, 0xF9, 0xFF, 0xCF, 0xFE, 0x3F, 0xE1, 0xFF, 0x07, 0xC0, - 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0xF8, 0x1F, 0x00, 0x3E, 0x07, - 0xC0, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, - 0x07, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xF8, 0x1F, 0x00, - 0x3E, 0x07, 0xC0, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0xF8, 0x1F, - 0x00, 0x3E, 0x07, 0xC0, 0x0F, 0x87, 0xFE, 0x1F, 0xFB, 0xFF, 0xCF, 0xFF, - 0xFF, 0xF3, 0xFF, 0xFF, 0xFC, 0xFF, 0xF7, 0xFE, 0x1F, 0xF8, 0x7F, 0xFF, - 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFC, 0x03, 0xE0, - 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x1F, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, - 0xE0, 0x3F, 0xFF, 0xF0, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x07, - 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x07, 0xC0, 0xE0, 0x03, 0xE0, 0xF8, 0x01, 0xF0, 0x7C, 0x00, 0xF8, 0x3E, - 0x00, 0x7C, 0x1F, 0x00, 0x3E, 0x0F, 0x80, 0x1F, 0x07, 0xC0, 0x1F, 0x83, - 0xF8, 0x3F, 0x81, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xC0, - 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xE0, 0xFF, 0x9F, 0xFE, - 0x3F, 0xFB, 0xFF, 0xC7, 0xFF, 0x7F, 0xF8, 0xFF, 0xE7, 0xFE, 0x0F, 0xF8, - 0x3E, 0x01, 0xF8, 0x07, 0xC0, 0xFE, 0x00, 0xF8, 0x3F, 0x80, 0x1F, 0x0F, - 0xE0, 0x03, 0xE3, 0xF8, 0x00, 0x7D, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0xFE, 0x7F, - 0x00, 0x1F, 0x87, 0xF0, 0x03, 0xE0, 0x7E, 0x00, 0x7C, 0x07, 0xE0, 0x0F, - 0x80, 0x7E, 0x01, 0xF0, 0x0F, 0xC0, 0x3E, 0x00, 0xF8, 0x1F, 0xF8, 0x1F, - 0xF7, 0xFF, 0x81, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFE, 0x07, 0xFD, 0xFF, - 0x80, 0x7F, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0x80, - 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 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, 0x3E, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x0F, 0x80, 0x0E, 0x07, 0xC0, 0x0F, 0x83, 0xE0, 0x07, 0xC1, - 0xF0, 0x03, 0xE0, 0xF8, 0x01, 0xF0, 0x7C, 0x00, 0xF8, 0x3E, 0x00, 0x7D, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xDF, 0xFF, 0xFF, 0xE0, 0x3F, 0x80, 0x03, 0xF8, 0xFF, 0x80, 0x0F, 0xF9, - 0xFF, 0x00, 0x1F, 0xF3, 0xFF, 0x00, 0x7F, 0xE3, 0xFE, 0x00, 0xFF, 0x83, - 0xFE, 0x03, 0xFE, 0x07, 0xFC, 0x07, 0xFC, 0x0F, 0xFC, 0x1F, 0xF8, 0x1F, - 0xF8, 0x3F, 0xF0, 0x3F, 0xF0, 0x7F, 0xE0, 0x7D, 0xF1, 0xF7, 0xC0, 0xFB, - 0xE3, 0xEF, 0x81, 0xF7, 0xEF, 0xDF, 0x03, 0xE7, 0xDF, 0x3E, 0x07, 0xCF, - 0xFE, 0x7C, 0x0F, 0x8F, 0xF8, 0xF8, 0x1F, 0x1F, 0xF1, 0xF0, 0x3E, 0x1F, - 0xE3, 0xE0, 0x7C, 0x3F, 0x87, 0xC0, 0xF8, 0x3F, 0x0F, 0x81, 0xF0, 0x00, - 0x1F, 0x03, 0xE0, 0x00, 0x3E, 0x1F, 0xF8, 0x03, 0xFF, 0x7F, 0xF8, 0x0F, - 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFD, 0xFF, 0x80, 0x3F, - 0xF0, 0x7F, 0x00, 0x7F, 0xEF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, - 0xFC, 0x0F, 0xFF, 0x7F, 0xE0, 0x7F, 0xE1, 0xFF, 0x00, 0xF8, 0x1F, 0xF0, - 0x0F, 0x81, 0xFF, 0x80, 0xF8, 0x1F, 0xFC, 0x0F, 0x81, 0xFF, 0xC0, 0xF8, - 0x1F, 0x7E, 0x0F, 0x81, 0xF3, 0xF0, 0xF8, 0x1F, 0x3F, 0x0F, 0x81, 0xF1, - 0xF8, 0xF8, 0x1F, 0x0F, 0xCF, 0x81, 0xF0, 0xFC, 0xF8, 0x1F, 0x07, 0xEF, - 0x81, 0xF0, 0x3F, 0xF8, 0x1F, 0x03, 0xFF, 0x81, 0xF0, 0x1F, 0xF8, 0x1F, - 0x00, 0xFF, 0x81, 0xF0, 0x0F, 0xF8, 0x7F, 0xE0, 0x7F, 0x8F, 0xFF, 0x03, - 0xF8, 0xFF, 0xF0, 0x3F, 0x8F, 0xFF, 0x01, 0xF8, 0x7F, 0xE0, 0x0F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, - 0xFE, 0x00, 0xFF, 0xFF, 0xE0, 0x3F, 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE1, - 0xF8, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xCF, 0x80, 0x00, 0xFB, 0xF0, 0x00, - 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x1F, 0xBE, 0x00, 0x03, 0xE7, 0xE0, 0x00, 0xFC, 0x7E, - 0x00, 0x3F, 0x0F, 0xE0, 0x0F, 0xE0, 0xFF, 0x07, 0xF8, 0x0F, 0xFF, 0xFE, - 0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xF8, 0x00, 0x03, - 0xF8, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xFC, 0x7F, 0xFF, 0xFE, 0x1F, 0x00, 0xFE, 0x1F, 0x00, 0x3F, 0x1F, - 0x00, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, - 0x00, 0x3F, 0x1F, 0x00, 0x7E, 0x1F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x1F, - 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0x80, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0xFF, - 0xFE, 0x00, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, 0xFE, - 0x00, 0xFF, 0xFF, 0xE0, 0x3F, 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE1, 0xF8, - 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xCF, 0x80, 0x00, 0xFB, 0xF0, 0x00, 0x1F, - 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x00, 0xFD, - 0xF0, 0x00, 0x1F, 0x3F, 0x00, 0x07, 0xE7, 0xF0, 0x01, 0xF8, 0x7F, 0x00, - 0x7F, 0x07, 0xF8, 0x3F, 0xC0, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, - 0x7F, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x03, 0xFF, 0x87, 0x80, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x07, - 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x0F, 0x01, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x0F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, - 0x7F, 0xFF, 0xFE, 0x00, 0xF8, 0x07, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0xF8, - 0x01, 0xF0, 0x0F, 0x80, 0x1F, 0x00, 0xF8, 0x01, 0xF0, 0x0F, 0x80, 0x3F, - 0x00, 0xF8, 0x0F, 0xE0, 0x0F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x0F, - 0xFF, 0xF0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xF8, 0x3F, - 0x80, 0x0F, 0x81, 0xFC, 0x00, 0xF8, 0x0F, 0xE0, 0x0F, 0x80, 0x7E, 0x00, - 0xF8, 0x03, 0xF0, 0x7F, 0xF0, 0x1F, 0xEF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, - 0x0F, 0xFF, 0xFF, 0x80, 0x7F, 0x7F, 0xF0, 0x07, 0xE0, 0x01, 0xFC, 0x70, - 0x1F, 0xFD, 0xE0, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0xFC, - 0x0F, 0xE7, 0xE0, 0x1F, 0x9F, 0x00, 0x3E, 0x7C, 0x00, 0xF9, 0xF0, 0x01, - 0xC7, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, - 0xFF, 0xFF, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xDC, 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0xC0, 0x0F, - 0xFF, 0xC0, 0xFE, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0x1C, - 0xFF, 0xF0, 0x00, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xF0, 0x7F, - 0xE0, 0xF8, 0x3F, 0xF0, 0x7C, 0x1F, 0xF8, 0x3E, 0x0F, 0xFC, 0x1F, 0x07, - 0xFE, 0x0F, 0x83, 0xEE, 0x07, 0xC0, 0xE0, 0x03, 0xE0, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, - 0xF0, 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0xF0, 0x03, - 0xFF, 0xF8, 0x00, 0xFF, 0xF8, 0x00, 0x7F, 0xE0, 0x7F, 0xEF, 0xFF, 0x0F, - 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x7F, 0xE0, 0x7F, 0xE1, - 0xF0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF8, 0x1F, 0x00, - 0x0F, 0x81, 0xF0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF8, - 0x1F, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x81, 0xF0, - 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, - 0x81, 0xF0, 0x00, 0xF8, 0x1F, 0x80, 0x1F, 0x80, 0xF8, 0x01, 0xF0, 0x0F, - 0xE0, 0x7F, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x7F, 0xE0, 0x1F, 0xFB, - 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0x7F, - 0xE0, 0x1F, 0xF8, 0x7C, 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x7C, 0x03, 0xE0, - 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, - 0xF8, 0x00, 0xF8, 0x07, 0xC0, 0x03, 0xF0, 0x1F, 0x00, 0x07, 0xC0, 0xF8, - 0x00, 0x1F, 0x03, 0xE0, 0x00, 0x7E, 0x1F, 0x00, 0x00, 0xF8, 0x7C, 0x00, - 0x03, 0xF3, 0xF0, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, - 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, - 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0xE0, 0x7F, 0xEF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, - 0xFF, 0xFF, 0x0F, 0xFF, 0x7F, 0xE0, 0x7F, 0xE3, 0xE0, 0x00, 0x3C, 0x3E, - 0x0F, 0x83, 0xC3, 0xE1, 0xF8, 0x3C, 0x3E, 0x1F, 0x87, 0xC3, 0xE1, 0xFC, - 0x7C, 0x3E, 0x3F, 0xC7, 0xC1, 0xE3, 0xFC, 0x7C, 0x1F, 0x3F, 0xE7, 0xC1, - 0xF7, 0xFE, 0x78, 0x1F, 0x7F, 0xE7, 0x81, 0xF7, 0x9F, 0xF8, 0x1F, 0xF9, - 0xFF, 0x81, 0xFF, 0x9F, 0xF8, 0x0F, 0xF9, 0xFF, 0x80, 0xFF, 0x0F, 0xF8, - 0x0F, 0xF0, 0xFF, 0x80, 0xFF, 0x0F, 0xF0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x07, 0xF0, 0x0F, 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xC0, 0x3F, - 0x00, 0x7F, 0x80, 0xFF, 0x3F, 0xF0, 0x7F, 0xEF, 0xFC, 0x1F, 0xFB, 0xFF, - 0x07, 0xFE, 0x7F, 0x80, 0xFF, 0x07, 0xE0, 0x3F, 0x00, 0xFC, 0x0F, 0x80, - 0x1F, 0x87, 0xC0, 0x03, 0xF3, 0xE0, 0x00, 0xFF, 0xF8, 0x00, 0x1F, 0xFC, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, - 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFC, 0xF8, 0x00, - 0x7E, 0x3F, 0x00, 0x3F, 0x07, 0xE0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x1F, - 0x07, 0xFC, 0x0F, 0xFB, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF8, - 0x7F, 0xF7, 0xFC, 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0xBF, 0xF0, 0x3F, 0xFF, - 0xFC, 0x0F, 0xFF, 0xFF, 0x03, 0xFF, 0x7F, 0x80, 0x7F, 0x87, 0xE0, 0x1F, - 0x80, 0xFC, 0x07, 0xC0, 0x1F, 0x03, 0xE0, 0x03, 0xE1, 0xF8, 0x00, 0xFC, - 0x7C, 0x00, 0x1F, 0xBE, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x00, - 0x1F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0xE0, 0x03, - 0xFF, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0x00, 0x7F, 0xFF, 0xF3, - 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x3E, 0x03, - 0xF1, 0xF0, 0x1F, 0x8F, 0x81, 0xF8, 0x7C, 0x1F, 0x83, 0xE1, 0xF8, 0x0E, - 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, - 0x00, 0xFC, 0x00, 0x0F, 0xE0, 0x70, 0x7E, 0x07, 0xC7, 0xE0, 0x3E, 0x7E, - 0x01, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xBF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xBE, 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, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, - 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x60, 0x00, 0x0F, 0x00, 0x00, - 0xF8, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, - 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x03, - 0xE0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, - 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xF0, - 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x07, - 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, - 0x1F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, - 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, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0x00, 0x40, 0x00, 0x06, 0x00, 0x00, 0xF0, - 0x00, 0x1F, 0x80, 0x03, 0xFC, 0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0x00, 0xFF, - 0xF8, 0x1F, 0x9F, 0x83, 0xF0, 0xFC, 0x7E, 0x07, 0xEF, 0xC0, 0x3F, 0xF8, - 0x01, 0xFF, 0x80, 0x0F, 0x70, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xE0, 0x78, 0x3E, 0x0F, 0xC3, 0xF0, 0x7C, 0x1E, 0x06, 0x01, 0xFF, - 0x00, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF0, 0x0F, 0xFF, - 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x01, 0xFF, - 0xF8, 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x7F, 0xFF, - 0xF8, 0x7F, 0x00, 0xF8, 0xFC, 0x00, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x03, - 0xF8, 0xFC, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, - 0xFF, 0x1F, 0xFE, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x0F, - 0xE0, 0x03, 0xEF, 0xFF, 0x00, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0x81, - 0xFF, 0xFF, 0xF8, 0x3F, 0xE0, 0x7F, 0x07, 0xF0, 0x03, 0xF0, 0xFC, 0x00, - 0x3E, 0x1F, 0x80, 0x07, 0xE3, 0xE0, 0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F, - 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xE0, 0x01, - 0xF8, 0xFC, 0x00, 0x3E, 0x1F, 0xC0, 0x0F, 0xCF, 0xFE, 0x07, 0xF3, 0xFF, - 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE0, 0xFE, 0x7F, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFF, 0x18, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0x81, 0xFC, 0x7E, 0x00, - 0x7C, 0x7C, 0x00, 0x7C, 0xFC, 0x00, 0x3C, 0xF8, 0x00, 0x38, 0xF8, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x7C, 0x00, 0x06, 0x7E, 0x00, 0x1F, 0x7F, 0x80, 0x7F, 0x3F, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x00, 0xFF, - 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0xF8, 0x00, 0xFE, 0x3E, 0x00, 0xFF, 0xEF, 0x80, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, 0x87, 0xE0, - 0x0F, 0xE1, 0xF0, 0x01, 0xF8, 0xFC, 0x00, 0x7E, 0x3E, 0x00, 0x0F, 0x8F, - 0x80, 0x03, 0xE3, 0xE0, 0x00, 0xF8, 0xF8, 0x00, 0x3E, 0x3E, 0x00, 0x0F, - 0x8F, 0xC0, 0x07, 0xE1, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0xFE, 0x0F, 0xE0, - 0x7F, 0xE3, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, - 0xFF, 0xEF, 0xE0, 0x0F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xC0, - 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x7F, 0x81, 0xFC, - 0x7E, 0x00, 0x7E, 0xFC, 0x00, 0x3E, 0xF8, 0x00, 0x3E, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x80, 0x7E, - 0x3F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x07, 0xFF, 0xF8, - 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xE0, 0x1F, 0xFF, 0xC0, - 0xFF, 0xFF, 0x07, 0xFF, 0xF8, 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x01, 0xF0, - 0x00, 0x07, 0xC0, 0x01, 0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, - 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x07, - 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, - 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x01, - 0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xFF, 0xBF, 0x83, 0xFF, 0xFF, 0xE3, - 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFB, 0xFC, 0x3F, 0xF9, 0xF8, 0x07, 0xF0, - 0xF8, 0x01, 0xF8, 0xFC, 0x00, 0xFC, 0x7C, 0x00, 0x3E, 0x3E, 0x00, 0x1F, - 0x1F, 0x00, 0x0F, 0x8F, 0x80, 0x07, 0xC7, 0xC0, 0x03, 0xE3, 0xF0, 0x03, - 0xF0, 0xF8, 0x01, 0xF8, 0x7E, 0x01, 0xFC, 0x3F, 0xC3, 0xFE, 0x0F, 0xFF, - 0xFF, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xC0, 0x3F, 0xFB, 0xE0, 0x07, - 0xF1, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x00, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFE, 0x00, - 0x0F, 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x0F, 0xC0, 0x07, 0xCF, 0xFC, 0x01, - 0xF7, 0xFF, 0x80, 0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x07, 0xFC, 0x1F, - 0x81, 0xFC, 0x03, 0xE0, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x3E, 0x07, 0xC0, - 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0xF8, 0x1F, 0x00, 0x3E, 0x07, - 0xC0, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0xF8, 0x1F, 0x00, 0x3E, - 0x1F, 0xF0, 0x3F, 0xEF, 0xFE, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, - 0xFF, 0xDF, 0xF0, 0x3F, 0xE0, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, - 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0, - 0x01, 0xFF, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, - 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, - 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x7F, 0xFF, 0xF7, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x00, 0x00, 0x7C, - 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, - 0xFF, 0xF8, 0x00, 0x7C, 0x00, 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, 0x3F, 0x00, 0x3F, 0xBF, 0xFF, 0xBF, 0xFF, - 0x9F, 0xFF, 0xCF, 0xFF, 0x83, 0xFF, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, - 0x87, 0xFC, 0x07, 0xC7, 0xFF, 0x03, 0xE3, 0xFF, 0x81, 0xF1, 0xFF, 0xC0, - 0xF8, 0x7F, 0xC0, 0x7C, 0xFE, 0x00, 0x3E, 0xFE, 0x00, 0x1F, 0xFE, 0x00, - 0x0F, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xE0, - 0x00, 0xFF, 0xF8, 0x00, 0x7C, 0xFE, 0x00, 0x3E, 0x3F, 0x80, 0x1F, 0x0F, - 0xE0, 0x3F, 0x81, 0xFF, 0xBF, 0xC1, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, - 0x7F, 0xFB, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xFE, - 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, - 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, - 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, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x03, 0xFF, - 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xF8, - 0x00, 0x3C, 0x1F, 0x00, 0xFD, 0xFC, 0xFF, 0x07, 0xFF, 0xFF, 0xFE, 0x1F, - 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, 0x1F, 0x87, 0xC1, 0xF8, - 0x7E, 0x1F, 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, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, - 0x1F, 0x07, 0xC1, 0xF1, 0xFE, 0x1F, 0x87, 0xEF, 0xFC, 0x7F, 0x1F, 0xFF, - 0xF1, 0xFC, 0x7F, 0xFF, 0xC7, 0xF1, 0xFD, 0xFE, 0x1F, 0x87, 0xE0, 0x00, - 0x1F, 0x80, 0x1F, 0x9F, 0xF8, 0x1F, 0xDF, 0xFE, 0x0F, 0xFF, 0xFF, 0x87, - 0xFF, 0xFF, 0xC1, 0xFF, 0x07, 0xF0, 0x7F, 0x01, 0xF8, 0x3F, 0x00, 0x7C, - 0x1F, 0x00, 0x3E, 0x0F, 0x80, 0x1F, 0x07, 0xC0, 0x0F, 0x83, 0xE0, 0x07, - 0xC1, 0xF0, 0x03, 0xE0, 0xF8, 0x01, 0xF0, 0x7C, 0x00, 0xF8, 0x3E, 0x00, - 0x7C, 0x1F, 0x00, 0x3E, 0x3F, 0xE0, 0x7F, 0xBF, 0xF8, 0x7F, 0xFF, 0xFC, - 0x3F, 0xFF, 0xFE, 0x1F, 0xFB, 0xFE, 0x07, 0xF8, 0x00, 0x7F, 0x00, 0x01, - 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xC1, - 0xFE, 0x0F, 0xF1, 0xFC, 0x01, 0xFC, 0xFC, 0x00, 0x7E, 0xFC, 0x00, 0x1F, - 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x7E, 0xF8, 0x00, 0x7E, 0x7F, 0x00, - 0x7F, 0x1F, 0xC0, 0xFF, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x80, 0x7F, - 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x03, - 0xF9, 0xFF, 0xC0, 0x7F, 0xBF, 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, - 0xFF, 0xC3, 0xFF, 0x83, 0xFC, 0x0F, 0xE0, 0x0F, 0xE0, 0xFC, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xF0, 0xF8, - 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xF0, 0xF8, 0x00, 0x3F, 0x0F, 0xC0, 0x03, - 0xF0, 0xFE, 0x00, 0x7E, 0x0F, 0xF8, 0x1F, 0xE0, 0xFF, 0xFF, 0xFC, 0x0F, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0x9F, 0xFC, 0x00, 0xF8, 0x7F, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, - 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x3F, 0xF9, 0xFC, 0x0F, 0xFF, 0xDF, 0xE1, 0xFF, 0xFF, 0xFE, 0x3F, - 0xFF, 0xFF, 0xE3, 0xF8, 0x1F, 0xFC, 0x7F, 0x00, 0x7F, 0x07, 0xC0, 0x03, - 0xF0, 0xFC, 0x00, 0x3F, 0x0F, 0x80, 0x01, 0xF0, 0xF8, 0x00, 0x1F, 0x0F, - 0x80, 0x01, 0xF0, 0xF8, 0x00, 0x1F, 0x0F, 0xC0, 0x01, 0xF0, 0xFC, 0x00, - 0x3F, 0x07, 0xE0, 0x07, 0xF0, 0x7F, 0x81, 0xFF, 0x03, 0xFF, 0xFF, 0xF0, - 0x1F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x9F, 0x00, 0x0F, - 0xE1, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x01, - 0xF0, 0x3F, 0xC7, 0xFC, 0x7F, 0xCF, 0xFE, 0x7F, 0xDF, 0xFF, 0x7F, 0xFF, - 0xFF, 0x3F, 0xFF, 0x0E, 0x07, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF0, - 0x00, 0x07, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0x00, 0x07, 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0x00, 0x7F, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xC0, 0x03, 0xFC, 0x60, 0x7F, 0xFF, 0x87, 0xFF, 0xFC, - 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0x01, 0xF9, 0xF0, 0x07, 0xCF, 0xC0, - 0x1C, 0x7F, 0xF0, 0x03, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x3F, 0xFF, 0xC0, - 0x3F, 0xFF, 0x00, 0x0F, 0xFD, 0xC0, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x00, - 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0x3F, - 0xFF, 0xC0, 0x07, 0xF8, 0x00, 0x07, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0xFF, - 0xF8, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, - 0x80, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, - 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x03, 0x83, 0xF0, 0x1F, 0x87, - 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x03, - 0xFC, 0x00, 0x7F, 0x01, 0xFE, 0x7F, 0x81, 0xFF, 0x3F, 0xC0, 0xFF, 0x9F, - 0xE0, 0x7F, 0xC7, 0xF0, 0x1F, 0xE0, 0xF8, 0x01, 0xF0, 0x7C, 0x00, 0xF8, - 0x3E, 0x00, 0x7C, 0x1F, 0x00, 0x3E, 0x0F, 0x80, 0x1F, 0x07, 0xC0, 0x0F, - 0x83, 0xE0, 0x07, 0xC1, 0xF0, 0x03, 0xE0, 0xF8, 0x01, 0xF0, 0x7C, 0x01, - 0xF8, 0x3F, 0x01, 0xFC, 0x1F, 0xC1, 0xFF, 0x07, 0xFF, 0xFF, 0xC3, 0xFF, - 0xFF, 0xE0, 0xFF, 0xF7, 0xF0, 0x3F, 0xF3, 0xF0, 0x03, 0xF0, 0x00, 0x7F, - 0xE0, 0x7F, 0xEF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFF, 0x7F, 0xE0, 0x7F, 0xE0, 0xF8, 0x01, 0xF0, 0x0F, 0xC0, 0x1F, 0x00, - 0x7C, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xF0, - 0x7C, 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xF8, 0xF8, 0x00, 0x0F, 0x9F, 0x00, - 0x00, 0xFD, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x7F, 0x80, 0x1F, 0xEF, 0xFC, 0x03, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, - 0xFC, 0x03, 0xFF, 0x7F, 0x80, 0x1F, 0xE1, 0xF0, 0xF8, 0x7C, 0x1F, 0x1F, - 0x87, 0xC1, 0xF1, 0xF8, 0xFC, 0x1F, 0x1F, 0xCF, 0x80, 0xFB, 0xFC, 0xF8, - 0x0F, 0xBF, 0xDF, 0x80, 0xFB, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x00, 0x7F, - 0xDF, 0xF0, 0x07, 0xF9, 0xFF, 0x00, 0x7F, 0x9F, 0xE0, 0x07, 0xF0, 0xFE, - 0x00, 0x3F, 0x0F, 0xE0, 0x03, 0xF0, 0x7E, 0x00, 0x3E, 0x07, 0xC0, 0x03, - 0xE0, 0x3C, 0x00, 0x3F, 0xC0, 0xFF, 0x1F, 0xF8, 0x7F, 0xE7, 0xFE, 0x1F, - 0xF9, 0xFF, 0x87, 0xFE, 0x3F, 0xC0, 0xFF, 0x03, 0xF8, 0x7F, 0x00, 0x7F, - 0x3F, 0x80, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, - 0x07, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0xFE, - 0x00, 0xFE, 0x1F, 0xC0, 0x7F, 0x03, 0xF8, 0x7F, 0xC0, 0xFF, 0xBF, 0xF8, - 0x7F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0x7F, 0xC0, 0xFF, 0x80, - 0x7F, 0x80, 0x7F, 0xBF, 0xF0, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x03, - 0xFF, 0x7F, 0x80, 0x7F, 0x8F, 0xC0, 0x07, 0x81, 0xF0, 0x03, 0xE0, 0x7E, - 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xF0, 0x3E, 0x00, 0x7C, 0x0F, 0x80, - 0x0F, 0x87, 0xC0, 0x03, 0xE1, 0xF0, 0x00, 0x7C, 0xF8, 0x00, 0x1F, 0xFE, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x07, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0xFF, 0x80, - 0x0F, 0xFF, 0xF0, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, - 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x3F, 0xBE, 0x0F, 0xC3, 0x83, 0xF0, 0x00, 0xFC, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, - 0xC0, 0x3B, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x78, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0x07, - 0xF8, 0x1F, 0x80, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, - 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x0F, 0x81, 0xFE, 0x0F, - 0xF0, 0x3F, 0x80, 0xFF, 0x01, 0xFE, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xC0, - 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF8, - 0x07, 0xF8, 0x0F, 0xF0, 0x3F, 0xC0, 0x7F, 0x00, 0x78, 0x77, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE0, 0x78, 0x03, 0xF0, 0x0F, - 0xE0, 0x3F, 0xC0, 0x7F, 0x00, 0x7E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, - 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, - 0x07, 0xC0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x03, 0xFC, 0x1F, 0xE0, 0xFC, - 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, - 0x00, 0xF8, 0x07, 0xE0, 0x7F, 0x83, 0xFC, 0x0F, 0xF0, 0x3F, 0x80, 0x78, - 0x00, 0x07, 0x80, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0x03, 0x9F, 0xFE, 0x1F, - 0xFF, 0xFC, 0xFF, 0xF3, 0xFF, 0xFF, 0x87, 0xFF, 0x9C, 0x0F, 0xFC, 0x00, - 0x0F, 0xE0, 0x00, 0x1F, 0x00}; - -const GFXglyph FreeMonoBold24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 28, 0, 1}, // 0x20 ' ' - {0, 7, 31, 28, 10, -29}, // 0x21 '!' - {28, 15, 14, 28, 6, -28}, // 0x22 '"' - {55, 22, 34, 28, 3, -30}, // 0x23 '#' - {149, 19, 38, 28, 5, -31}, // 0x24 '$' - {240, 21, 30, 28, 4, -28}, // 0x25 '%' - {319, 21, 28, 28, 4, -26}, // 0x26 '&' - {393, 6, 14, 28, 11, -28}, // 0x27 ''' - {404, 10, 37, 28, 12, -29}, // 0x28 '(' - {451, 10, 37, 28, 6, -29}, // 0x29 ')' - {498, 21, 19, 28, 4, -28}, // 0x2A '*' - {548, 23, 26, 28, 3, -25}, // 0x2B '+' - {623, 9, 14, 28, 7, -6}, // 0x2C ',' - {639, 24, 5, 28, 2, -15}, // 0x2D '-' - {654, 7, 6, 28, 11, -4}, // 0x2E '.' - {660, 20, 38, 28, 4, -32}, // 0x2F '/' - {755, 21, 31, 28, 4, -29}, // 0x30 '0' - {837, 20, 29, 28, 4, -28}, // 0x31 '1' - {910, 21, 30, 28, 3, -29}, // 0x32 '2' - {989, 21, 31, 28, 4, -29}, // 0x33 '3' - {1071, 20, 28, 28, 4, -27}, // 0x34 '4' - {1141, 21, 31, 28, 4, -29}, // 0x35 '5' - {1223, 20, 31, 28, 5, -29}, // 0x36 '6' - {1301, 20, 30, 28, 4, -29}, // 0x37 '7' - {1376, 20, 31, 28, 4, -29}, // 0x38 '8' - {1454, 20, 31, 28, 5, -29}, // 0x39 '9' - {1532, 7, 22, 28, 11, -20}, // 0x3A ':' - {1552, 10, 28, 28, 6, -20}, // 0x3B ';' - {1587, 24, 21, 28, 2, -23}, // 0x3C '<' - {1650, 24, 14, 28, 2, -19}, // 0x3D '=' - {1692, 23, 22, 28, 3, -23}, // 0x3E '>' - {1756, 20, 29, 28, 5, -27}, // 0x3F '?' - {1829, 19, 36, 28, 4, -28}, // 0x40 '@' - {1915, 29, 27, 28, -1, -26}, // 0x41 'A' - {2013, 26, 27, 28, 1, -26}, // 0x42 'B' - {2101, 25, 29, 28, 2, -27}, // 0x43 'C' - {2192, 25, 27, 28, 1, -26}, // 0x44 'D' - {2277, 25, 27, 28, 1, -26}, // 0x45 'E' - {2362, 25, 27, 28, 1, -26}, // 0x46 'F' - {2447, 25, 29, 28, 2, -27}, // 0x47 'G' - {2538, 26, 27, 28, 1, -26}, // 0x48 'H' - {2626, 19, 27, 28, 5, -26}, // 0x49 'I' - {2691, 25, 28, 28, 3, -26}, // 0x4A 'J' - {2779, 27, 27, 28, 1, -26}, // 0x4B 'K' - {2871, 25, 27, 28, 2, -26}, // 0x4C 'L' - {2956, 31, 27, 28, -1, -26}, // 0x4D 'M' - {3061, 28, 27, 28, 0, -26}, // 0x4E 'N' - {3156, 27, 29, 28, 1, -27}, // 0x4F 'O' - {3254, 24, 27, 28, 1, -26}, // 0x50 'P' - {3335, 27, 35, 28, 1, -27}, // 0x51 'Q' - {3454, 28, 27, 28, 0, -26}, // 0x52 'R' - {3549, 22, 29, 28, 3, -27}, // 0x53 'S' - {3629, 25, 27, 28, 2, -26}, // 0x54 'T' - {3714, 28, 28, 28, 0, -26}, // 0x55 'U' - {3812, 30, 27, 28, -1, -26}, // 0x56 'V' - {3914, 28, 27, 28, 0, -26}, // 0x57 'W' - {4009, 26, 27, 28, 1, -26}, // 0x58 'X' - {4097, 26, 27, 28, 1, -26}, // 0x59 'Y' - {4185, 21, 27, 28, 4, -26}, // 0x5A 'Z' - {4256, 10, 37, 28, 12, -29}, // 0x5B '[' - {4303, 20, 38, 28, 4, -32}, // 0x5C '\' - {4398, 10, 37, 28, 6, -29}, // 0x5D ']' - {4445, 20, 15, 28, 4, -29}, // 0x5E '^' - {4483, 28, 5, 28, 0, 5}, // 0x5F '_' - {4501, 9, 8, 28, 8, -30}, // 0x60 '`' - {4510, 24, 23, 28, 2, -21}, // 0x61 'a' - {4579, 27, 31, 28, 0, -29}, // 0x62 'b' - {4684, 24, 23, 28, 3, -21}, // 0x63 'c' - {4753, 26, 31, 28, 2, -29}, // 0x64 'd' - {4854, 24, 23, 28, 2, -21}, // 0x65 'e' - {4923, 22, 30, 28, 4, -29}, // 0x66 'f' - {5006, 25, 31, 28, 2, -21}, // 0x67 'g' - {5103, 26, 30, 28, 1, -29}, // 0x68 'h' - {5201, 21, 29, 28, 4, -28}, // 0x69 'i' - {5278, 17, 38, 28, 5, -28}, // 0x6A 'j' - {5359, 25, 30, 28, 2, -29}, // 0x6B 'k' - {5453, 21, 30, 28, 4, -29}, // 0x6C 'l' - {5532, 30, 22, 28, -1, -21}, // 0x6D 'm' - {5615, 25, 22, 28, 1, -21}, // 0x6E 'n' - {5684, 25, 23, 28, 2, -21}, // 0x6F 'o' - {5756, 28, 31, 28, 0, -21}, // 0x70 'p' - {5865, 28, 31, 28, 1, -21}, // 0x71 'q' - {5974, 24, 22, 28, 3, -21}, // 0x72 'r' - {6040, 21, 23, 28, 4, -21}, // 0x73 's' - {6101, 23, 28, 28, 1, -26}, // 0x74 't' - {6182, 25, 22, 28, 1, -20}, // 0x75 'u' - {6251, 28, 21, 28, 0, -20}, // 0x76 'v' - {6325, 28, 21, 28, 0, -20}, // 0x77 'w' - {6399, 26, 21, 28, 1, -20}, // 0x78 'x' - {6468, 26, 30, 28, 1, -20}, // 0x79 'y' - {6566, 19, 21, 28, 5, -20}, // 0x7A 'z' - {6616, 14, 37, 28, 7, -29}, // 0x7B '{' - {6681, 5, 36, 28, 12, -28}, // 0x7C '|' - {6704, 14, 37, 28, 8, -29}, // 0x7D '}' - {6769, 22, 10, 28, 3, -17}}; // 0x7E '~' - -const GFXfont FreeMonoBold24pt7b PROGMEM = { - (uint8_t *)FreeMonoBold24pt7bBitmaps, (GFXglyph *)FreeMonoBold24pt7bGlyphs, - 0x20, 0x7E, 47}; - -// Approx. 7469 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold9pt7b.h deleted file mode 100644 index 44320f8..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBold9pt7b.h +++ /dev/null @@ -1,191 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBold9pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xD2, 0x1F, 0x80, 0xEC, 0x89, 0x12, 0x24, 0x40, 0x36, 0x36, - 0x36, 0x7F, 0x7F, 0x36, 0xFF, 0xFF, 0x3C, 0x3C, 0x3C, 0x00, 0x18, 0xFF, - 0xFE, 0x3C, 0x1F, 0x1F, 0x83, 0x46, 0x8D, 0xF0, 0xC1, 0x83, 0x00, 0x61, - 0x22, 0x44, 0x86, 0x67, 0x37, 0x11, 0x22, 0x4C, 0x70, 0x3C, 0x7E, 0x60, - 0x60, 0x30, 0x7B, 0xDF, 0xCE, 0xFF, 0x7F, 0xC9, 0x24, 0x37, 0x66, 0xCC, - 0xCC, 0xCC, 0x66, 0x31, 0xCE, 0x66, 0x33, 0x33, 0x33, 0x66, 0xC8, 0x18, - 0x18, 0xFF, 0xFF, 0x3C, 0x3C, 0x66, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, - 0x18, 0x18, 0x18, 0x6B, 0x48, 0xFF, 0xFF, 0xC0, 0xF0, 0x02, 0x0C, 0x18, - 0x60, 0xC3, 0x06, 0x0C, 0x30, 0x61, 0x83, 0x0C, 0x18, 0x20, 0x00, 0x38, - 0xFB, 0xBE, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0xDD, 0xF1, 0xC0, 0x38, 0xF3, - 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0xFD, 0xF8, 0x3C, 0xFE, 0xC7, 0x03, - 0x03, 0x06, 0x0C, 0x18, 0x70, 0xE3, 0xFF, 0xFF, 0x7C, 0xFE, 0x03, 0x03, - 0x03, 0x1E, 0x1E, 0x07, 0x03, 0x03, 0xFE, 0x7C, 0x1C, 0x38, 0xB1, 0x64, - 0xD9, 0xBF, 0xFF, 0x3E, 0x7C, 0x7E, 0x3F, 0x18, 0x0F, 0xC7, 0xF3, 0x1C, - 0x06, 0x03, 0xC3, 0xFF, 0x9F, 0x80, 0x0F, 0x3F, 0x30, 0x60, 0x60, 0xDC, - 0xFE, 0xE3, 0xC3, 0x63, 0x7E, 0x3C, 0xFF, 0xFF, 0xC3, 0x03, 0x06, 0x06, - 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x38, 0xFB, 0x1E, 0x3C, 0x6F, 0x9F, 0x63, - 0xC7, 0x8F, 0xF1, 0xC0, 0x3C, 0x7E, 0xE6, 0xC3, 0xC3, 0xE7, 0x7F, 0x3B, - 0x06, 0x0E, 0xFC, 0xF0, 0xF0, 0x0F, 0x6C, 0x00, 0x1A, 0xD2, 0x00, 0x01, - 0x83, 0x87, 0x0E, 0x0F, 0x80, 0xE0, 0x1C, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x0F, 0xFF, 0xFC, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0xF9, 0xE3, 0xC1, 0x80, - 0x7C, 0xFE, 0xC7, 0x03, 0x0E, 0x1C, 0x00, 0x00, 0x00, 0x30, 0x30, 0x1E, - 0x1F, 0x1C, 0xDC, 0x6C, 0x76, 0x7B, 0x6D, 0xB6, 0xDB, 0x6F, 0xF3, 0xFC, - 0x06, 0x33, 0xF8, 0x78, 0x3C, 0x07, 0xC0, 0x38, 0x05, 0x81, 0xB0, 0x36, - 0x0F, 0xE1, 0xFC, 0x71, 0xDF, 0x7F, 0xEF, 0x80, 0xFF, 0x3F, 0xE6, 0x19, - 0x86, 0x7F, 0x1F, 0xE6, 0x1D, 0x83, 0x60, 0xFF, 0xFF, 0xF0, 0x1F, 0xBF, - 0xD8, 0xF8, 0x3C, 0x06, 0x03, 0x01, 0x80, 0x61, 0xBF, 0xC7, 0xC0, 0xFE, - 0x3F, 0xE6, 0x19, 0x83, 0x60, 0xD8, 0x36, 0x0D, 0x83, 0x61, 0xBF, 0xEF, - 0xE0, 0xFF, 0xFF, 0xD8, 0x6D, 0xB7, 0xC3, 0xE1, 0xB0, 0xC3, 0x61, 0xFF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xD8, 0x6D, 0xB7, 0xC3, 0xE1, 0xB0, 0xC0, 0x60, - 0x7C, 0x3E, 0x00, 0x1F, 0x9F, 0xE6, 0x1B, 0x06, 0xC0, 0x30, 0x0C, 0x7F, - 0x1F, 0xE1, 0x9F, 0xE3, 0xF0, 0xF7, 0xFB, 0xD8, 0xCC, 0x66, 0x33, 0xF9, - 0xFC, 0xC6, 0x63, 0x7B, 0xFD, 0xE0, 0xFF, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, - 0x33, 0xFF, 0xC0, 0x1F, 0xC7, 0xF0, 0x30, 0x0C, 0x03, 0x00, 0xCC, 0x33, - 0x0C, 0xC7, 0x3F, 0x87, 0xC0, 0xF7, 0xBD, 0xE6, 0x61, 0xB0, 0x78, 0x1F, - 0x06, 0xE1, 0x98, 0x63, 0x3C, 0xFF, 0x3C, 0xFC, 0x7E, 0x0C, 0x06, 0x03, - 0x01, 0x80, 0xC6, 0x63, 0x31, 0xFF, 0xFF, 0xE0, 0xE0, 0xFE, 0x3D, 0xC7, - 0x3D, 0xE7, 0xBC, 0xD7, 0x9B, 0xB3, 0x76, 0x60, 0xDE, 0x3F, 0xC7, 0x80, - 0xE1, 0xFE, 0x3D, 0xE3, 0x3C, 0x66, 0xCC, 0xDD, 0x99, 0xB3, 0x1E, 0x63, - 0xDE, 0x3B, 0xC3, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, - 0xF0, 0x1F, 0x07, 0x71, 0xC7, 0xF0, 0x7C, 0x00, 0xFE, 0x7F, 0x98, 0x6C, - 0x36, 0x1B, 0xF9, 0xF8, 0xC0, 0x60, 0x7C, 0x3E, 0x00, 0x1F, 0x07, 0xF1, - 0xC7, 0x70, 0x7C, 0x07, 0x80, 0xF0, 0x1F, 0x07, 0x71, 0xC7, 0xF0, 0x7C, - 0x0C, 0x33, 0xFE, 0x7F, 0x80, 0xFC, 0x7F, 0x18, 0xCC, 0x66, 0x73, 0xF1, - 0xF0, 0xCC, 0x63, 0x7D, 0xFE, 0x60, 0x3F, 0xBF, 0xF0, 0x78, 0x0F, 0x03, - 0xF8, 0x3F, 0x83, 0xC3, 0xFF, 0xBF, 0x80, 0xFF, 0xFF, 0xF6, 0x7B, 0x3D, - 0x98, 0xC0, 0x60, 0x30, 0x18, 0x3F, 0x1F, 0x80, 0xF1, 0xFE, 0x3D, 0x83, - 0x30, 0x66, 0x0C, 0xC1, 0x98, 0x33, 0x06, 0x60, 0xC7, 0xF0, 0x7C, 0x00, - 0xFB, 0xFF, 0x7D, 0xC3, 0x18, 0xC3, 0x18, 0x36, 0x06, 0xC0, 0x50, 0x0E, - 0x01, 0xC0, 0x10, 0x00, 0xFB, 0xFE, 0xF6, 0x0D, 0x93, 0x6E, 0xDB, 0xB7, - 0xAD, 0xEE, 0x7B, 0x8E, 0xE3, 0x18, 0xF3, 0xFC, 0xF7, 0x38, 0xFC, 0x1E, - 0x03, 0x01, 0xE0, 0xCC, 0x73, 0xBC, 0xFF, 0x3C, 0xF3, 0xFC, 0xF7, 0x38, - 0xCC, 0x1E, 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x0F, 0xC3, 0xF0, 0xFE, 0xFE, - 0xC6, 0xCC, 0x18, 0x18, 0x30, 0x63, 0xC3, 0xFF, 0xFF, 0xFF, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xFF, 0x01, 0x03, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x18, - 0x30, 0x30, 0x60, 0x60, 0xC0, 0x80, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, - 0xFF, 0x10, 0x71, 0xE3, 0x6C, 0x70, 0x40, 0xFF, 0xFF, 0xFC, 0x88, 0x80, - 0x7E, 0x3F, 0x8F, 0xCF, 0xEE, 0x36, 0x1B, 0xFE, 0xFF, 0xE0, 0x38, 0x06, - 0x01, 0xBC, 0x7F, 0x9C, 0x76, 0x0D, 0x83, 0x71, 0xFF, 0xEE, 0xF0, 0x3F, - 0xBF, 0xF8, 0x78, 0x3C, 0x07, 0x05, 0xFE, 0x7E, 0x03, 0x80, 0xE0, 0x18, - 0xF6, 0x7F, 0xB8, 0xEC, 0x1B, 0x06, 0xE3, 0x9F, 0xF3, 0xFC, 0x3E, 0x3F, - 0xB0, 0xFF, 0xFF, 0xFE, 0x01, 0xFE, 0x7E, 0x1F, 0x3F, 0x30, 0x7E, 0x7E, - 0x30, 0x30, 0x30, 0x30, 0xFE, 0xFE, 0x3F, 0xBF, 0xF9, 0xD8, 0x6C, 0x37, - 0x39, 0xFC, 0x76, 0x03, 0x01, 0x8F, 0xC7, 0xC0, 0xE0, 0x70, 0x18, 0x0D, - 0xC7, 0xF3, 0x99, 0x8C, 0xC6, 0x63, 0x7B, 0xFD, 0xE0, 0x18, 0x18, 0x00, - 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x60, 0x3F, 0xFC, - 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0xFF, 0x80, 0xE0, 0x70, 0x18, 0x0D, - 0xE6, 0xF3, 0xE1, 0xE0, 0xF8, 0x6E, 0x73, 0xF9, 0xE0, 0x78, 0x78, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0xFD, 0x9F, 0xF9, 0x9B, - 0x33, 0x66, 0x6C, 0xCD, 0xBD, 0xFF, 0xBF, 0xEE, 0x7F, 0x98, 0xCC, 0x66, - 0x33, 0x1B, 0xDF, 0xEF, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x1F, 0x1D, 0xFC, - 0x7C, 0xEF, 0x1F, 0xF9, 0xC3, 0xB0, 0x36, 0x06, 0xE1, 0xDF, 0xF3, 0x78, - 0x60, 0x0C, 0x03, 0xE0, 0x7C, 0x00, 0x1E, 0xEF, 0xFF, 0x87, 0x60, 0x6C, - 0x0D, 0xC3, 0x9F, 0xF0, 0xF6, 0x00, 0xC0, 0x18, 0x0F, 0x81, 0xF0, 0x77, - 0xBF, 0xCF, 0x06, 0x03, 0x01, 0x83, 0xF9, 0xFC, 0x3F, 0xFF, 0xC3, 0xFC, - 0x3F, 0xC3, 0xFF, 0xFC, 0x60, 0x60, 0x60, 0xFE, 0xFE, 0x60, 0x60, 0x60, - 0x61, 0x7F, 0x3E, 0xE7, 0x73, 0x98, 0xCC, 0x66, 0x33, 0x19, 0xFE, 0x7F, - 0xFB, 0xFF, 0x7C, 0xC6, 0x18, 0xC1, 0xB0, 0x36, 0x03, 0x80, 0x70, 0xF1, - 0xFE, 0x3D, 0xBB, 0x37, 0x63, 0xF8, 0x77, 0x0E, 0xE1, 0x8C, 0xF7, 0xFB, - 0xCD, 0x83, 0x83, 0xC3, 0xBB, 0xDF, 0xEF, 0xF3, 0xFC, 0xF6, 0x18, 0xCC, - 0x33, 0x07, 0x81, 0xE0, 0x30, 0x0C, 0x06, 0x0F, 0xC3, 0xF0, 0xFF, 0xFF, - 0x30, 0xC3, 0x0C, 0x7F, 0xFF, 0x37, 0x66, 0x66, 0xCC, 0x66, 0x66, 0x73, - 0xFF, 0xFF, 0xFF, 0xF0, 0xCE, 0x66, 0x66, 0x33, 0x66, 0x66, 0xEC, 0x70, - 0x7C, 0xF3, 0xC0, 0xC0}; - -const GFXglyph FreeMonoBold9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 11, 0, 1}, // 0x20 ' ' - {0, 3, 11, 11, 4, -10}, // 0x21 '!' - {5, 7, 5, 11, 2, -10}, // 0x22 '"' - {10, 8, 12, 11, 1, -10}, // 0x23 '#' - {22, 7, 14, 11, 2, -11}, // 0x24 '$' - {35, 7, 11, 11, 2, -10}, // 0x25 '%' - {45, 8, 10, 11, 1, -9}, // 0x26 '&' - {55, 3, 5, 11, 4, -10}, // 0x27 ''' - {57, 4, 14, 11, 5, -10}, // 0x28 '(' - {64, 4, 14, 11, 2, -10}, // 0x29 ')' - {71, 8, 7, 11, 2, -10}, // 0x2A '*' - {78, 8, 9, 11, 2, -8}, // 0x2B '+' - {87, 3, 5, 11, 3, -1}, // 0x2C ',' - {89, 9, 2, 11, 1, -5}, // 0x2D '-' - {92, 2, 2, 11, 4, -1}, // 0x2E '.' - {93, 7, 15, 11, 2, -12}, // 0x2F '/' - {107, 7, 12, 11, 2, -11}, // 0x30 '0' - {118, 7, 11, 11, 2, -10}, // 0x31 '1' - {128, 8, 12, 11, 1, -11}, // 0x32 '2' - {140, 8, 12, 11, 2, -11}, // 0x33 '3' - {152, 7, 10, 11, 2, -9}, // 0x34 '4' - {161, 9, 11, 11, 1, -10}, // 0x35 '5' - {174, 8, 12, 11, 2, -11}, // 0x36 '6' - {186, 8, 11, 11, 1, -10}, // 0x37 '7' - {197, 7, 12, 11, 2, -11}, // 0x38 '8' - {208, 8, 12, 11, 2, -11}, // 0x39 '9' - {220, 2, 8, 11, 4, -7}, // 0x3A ':' - {222, 3, 11, 11, 3, -7}, // 0x3B ';' - {227, 9, 8, 11, 1, -8}, // 0x3C '<' - {236, 9, 6, 11, 1, -7}, // 0x3D '=' - {243, 9, 8, 11, 1, -8}, // 0x3E '>' - {252, 8, 11, 11, 2, -10}, // 0x3F '?' - {263, 9, 15, 11, 1, -11}, // 0x40 '@' - {280, 11, 11, 11, 0, -10}, // 0x41 'A' - {296, 10, 11, 11, 1, -10}, // 0x42 'B' - {310, 9, 11, 11, 1, -10}, // 0x43 'C' - {323, 10, 11, 11, 0, -10}, // 0x44 'D' - {337, 9, 11, 11, 1, -10}, // 0x45 'E' - {350, 9, 11, 11, 1, -10}, // 0x46 'F' - {363, 10, 11, 11, 1, -10}, // 0x47 'G' - {377, 9, 11, 11, 1, -10}, // 0x48 'H' - {390, 6, 11, 11, 3, -10}, // 0x49 'I' - {399, 10, 11, 11, 1, -10}, // 0x4A 'J' - {413, 10, 11, 11, 1, -10}, // 0x4B 'K' - {427, 9, 11, 11, 1, -10}, // 0x4C 'L' - {440, 11, 11, 11, 0, -10}, // 0x4D 'M' - {456, 11, 11, 11, 0, -10}, // 0x4E 'N' - {472, 11, 11, 11, 0, -10}, // 0x4F 'O' - {488, 9, 11, 11, 1, -10}, // 0x50 'P' - {501, 11, 14, 11, 0, -10}, // 0x51 'Q' - {521, 9, 11, 11, 1, -10}, // 0x52 'R' - {534, 9, 11, 11, 1, -10}, // 0x53 'S' - {547, 9, 11, 11, 1, -10}, // 0x54 'T' - {560, 11, 11, 11, 0, -10}, // 0x55 'U' - {576, 11, 11, 11, 0, -10}, // 0x56 'V' - {592, 10, 11, 11, 0, -10}, // 0x57 'W' - {606, 10, 11, 11, 0, -10}, // 0x58 'X' - {620, 10, 11, 11, 0, -10}, // 0x59 'Y' - {634, 8, 11, 11, 2, -10}, // 0x5A 'Z' - {645, 4, 14, 11, 5, -10}, // 0x5B '[' - {652, 7, 15, 11, 2, -12}, // 0x5C '\' - {666, 4, 14, 11, 2, -10}, // 0x5D ']' - {673, 7, 6, 11, 2, -11}, // 0x5E '^' - {679, 11, 2, 11, 0, 3}, // 0x5F '_' - {682, 3, 3, 11, 3, -11}, // 0x60 '`' - {684, 9, 8, 11, 1, -7}, // 0x61 'a' - {693, 10, 11, 11, 0, -10}, // 0x62 'b' - {707, 9, 8, 11, 1, -7}, // 0x63 'c' - {716, 10, 11, 11, 1, -10}, // 0x64 'd' - {730, 9, 8, 11, 1, -7}, // 0x65 'e' - {739, 8, 11, 11, 2, -10}, // 0x66 'f' - {750, 9, 12, 11, 1, -7}, // 0x67 'g' - {764, 9, 11, 11, 1, -10}, // 0x68 'h' - {777, 8, 11, 11, 2, -10}, // 0x69 'i' - {788, 6, 15, 11, 2, -10}, // 0x6A 'j' - {800, 9, 11, 11, 1, -10}, // 0x6B 'k' - {813, 8, 11, 11, 2, -10}, // 0x6C 'l' - {824, 11, 8, 11, 0, -7}, // 0x6D 'm' - {835, 9, 8, 11, 1, -7}, // 0x6E 'n' - {844, 9, 8, 11, 1, -7}, // 0x6F 'o' - {853, 11, 12, 11, 0, -7}, // 0x70 'p' - {870, 11, 12, 11, 0, -7}, // 0x71 'q' - {887, 9, 8, 11, 1, -7}, // 0x72 'r' - {896, 8, 8, 11, 2, -7}, // 0x73 's' - {904, 8, 11, 11, 1, -10}, // 0x74 't' - {915, 9, 8, 11, 1, -7}, // 0x75 'u' - {924, 11, 8, 11, 0, -7}, // 0x76 'v' - {935, 11, 8, 11, 0, -7}, // 0x77 'w' - {946, 9, 8, 11, 1, -7}, // 0x78 'x' - {955, 10, 12, 11, 0, -7}, // 0x79 'y' - {970, 7, 8, 11, 2, -7}, // 0x7A 'z' - {977, 4, 14, 11, 3, -10}, // 0x7B '{' - {984, 2, 14, 11, 5, -10}, // 0x7C '|' - {988, 4, 14, 11, 4, -10}, // 0x7D '}' - {995, 9, 4, 11, 1, -6}}; // 0x7E '~' - -const GFXfont FreeMonoBold9pt7b PROGMEM = {(uint8_t *)FreeMonoBold9pt7bBitmaps, - (GFXglyph *)FreeMonoBold9pt7bGlyphs, - 0x20, 0x7E, 18}; - -// Approx. 1672 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique12pt7b.h deleted file mode 100644 index 095fdd3..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique12pt7b.h +++ /dev/null @@ -1,271 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBoldOblique12pt7bBitmaps[] PROGMEM = { - 0x1C, 0xF3, 0xCE, 0x38, 0xE7, 0x1C, 0x61, 0x86, 0x00, 0x63, 0x8C, 0x00, - 0xE7, 0xE7, 0xE6, 0xC6, 0xC6, 0xC4, 0x84, 0x03, 0x30, 0x19, 0x81, 0xDC, - 0x0C, 0xE0, 0x66, 0x1F, 0xFC, 0xFF, 0xE1, 0x98, 0x0C, 0xC0, 0xEE, 0x06, - 0x70, 0xFF, 0xCF, 0xFE, 0x1D, 0xC0, 0xCC, 0x06, 0x60, 0x77, 0x03, 0x30, - 0x00, 0x01, 0x00, 0x70, 0x0C, 0x07, 0xF1, 0xFE, 0x71, 0xCC, 0x11, 0x80, - 0x3F, 0x03, 0xF0, 0x0F, 0x20, 0x6E, 0x0D, 0xC3, 0x3F, 0xE7, 0xF8, 0x1C, - 0x03, 0x00, 0x60, 0x0C, 0x00, 0x0E, 0x03, 0xE0, 0xC4, 0x10, 0x82, 0x30, - 0x7C, 0x07, 0x78, 0x7C, 0x7F, 0x19, 0xF0, 0x62, 0x08, 0x41, 0x18, 0x3E, - 0x03, 0x80, 0x07, 0xC1, 0xF8, 0x62, 0x0C, 0x01, 0x80, 0x38, 0x0F, 0x03, - 0xF7, 0x6F, 0xD8, 0xF3, 0x1E, 0x7F, 0xE7, 0xF8, 0xFF, 0x6D, 0x20, 0x06, - 0x1C, 0x70, 0xC3, 0x06, 0x18, 0x30, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, - 0x70, 0x60, 0xC1, 0x00, 0x0C, 0x18, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x06, - 0x0C, 0x30, 0x61, 0xC3, 0x0E, 0x38, 0x61, 0xC2, 0x00, 0x06, 0x00, 0xC0, - 0x18, 0x3F, 0x7F, 0xFE, 0xFF, 0x07, 0x81, 0xF8, 0x77, 0x0C, 0x60, 0x03, - 0x00, 0x70, 0x07, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0xE0, 0x0C, - 0x00, 0xC0, 0x0C, 0x01, 0xC0, 0x18, 0x00, 0x1C, 0xE3, 0x1C, 0x63, 0x08, - 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x7F, 0x00, 0x00, 0x08, 0x00, 0x70, 0x01, - 0x80, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x0C, 0x00, 0x70, 0x03, 0x80, 0x0C, - 0x00, 0x70, 0x03, 0x80, 0x0C, 0x00, 0x70, 0x03, 0x80, 0x0C, 0x00, 0x70, - 0x03, 0x80, 0x0C, 0x00, 0x20, 0x00, 0x07, 0x83, 0xF8, 0xE3, 0x98, 0x37, - 0x06, 0xC0, 0xD8, 0x1B, 0x03, 0xE0, 0xF8, 0x1B, 0x03, 0x60, 0xEE, 0x38, - 0xFE, 0x0F, 0x00, 0x03, 0xC1, 0xF0, 0x7E, 0x0C, 0xC0, 0x38, 0x07, 0x00, - 0xC0, 0x18, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, 0x61, 0xFF, 0xFF, 0xF0, - 0x03, 0xE0, 0x3F, 0x83, 0x8E, 0x38, 0x31, 0x81, 0x80, 0x18, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x38, 0x03, 0x80, 0x38, 0x47, 0x87, 0x3F, 0xF3, 0xFF, - 0x80, 0x07, 0xC1, 0xFF, 0x18, 0x70, 0x03, 0x00, 0x30, 0x06, 0x07, 0xC0, - 0x7C, 0x00, 0xE0, 0x06, 0x00, 0x60, 0x06, 0xC1, 0xCF, 0xF8, 0x7E, 0x00, - 0x01, 0xE0, 0x3C, 0x0F, 0x03, 0x60, 0xCC, 0x3B, 0x8E, 0x63, 0x8C, 0x61, - 0x9F, 0xFB, 0xFF, 0x01, 0x81, 0xF8, 0x3F, 0x00, 0x0F, 0xF1, 0xFE, 0x18, - 0x01, 0x80, 0x18, 0x03, 0xF8, 0x3F, 0xC3, 0x8E, 0x00, 0x60, 0x06, 0x00, - 0x60, 0x0C, 0xC1, 0xCF, 0xF8, 0x7E, 0x00, 0x03, 0xE1, 0xFC, 0x70, 0x1C, - 0x03, 0x00, 0xC0, 0x1B, 0xC7, 0xFC, 0xF3, 0x98, 0x33, 0x06, 0x60, 0xCE, - 0x30, 0xFC, 0x0F, 0x00, 0xFF, 0xFF, 0xFB, 0x07, 0x60, 0xC0, 0x38, 0x06, - 0x01, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x70, 0x1C, 0x03, 0x80, 0x60, 0x08, - 0x00, 0x07, 0x83, 0xF8, 0xE3, 0xB0, 0x36, 0x06, 0xC0, 0xDC, 0x31, 0xFC, - 0x3F, 0x8C, 0x3B, 0x03, 0x60, 0x6C, 0x39, 0xFE, 0x1F, 0x00, 0x07, 0x81, - 0xF8, 0x63, 0x98, 0x33, 0x06, 0x60, 0xCE, 0x79, 0xFF, 0x1E, 0xC0, 0x18, - 0x06, 0x01, 0xC0, 0x71, 0xFC, 0x3E, 0x00, 0x19, 0xCC, 0x00, 0x00, 0x00, - 0x67, 0x30, 0x06, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x38, 0x71, 0xC3, - 0x0E, 0x18, 0x20, 0x00, 0x00, 0x18, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, - 0x3E, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0x80, 0x08, 0x7F, 0xFB, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, 0x30, 0x01, - 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x7C, 0x1F, 0x03, 0xE0, 0x7C, - 0x07, 0x80, 0x20, 0x00, 0x3E, 0x7F, 0xB0, 0xF8, 0x30, 0x18, 0x1C, 0x1C, - 0x3C, 0x38, 0x18, 0x00, 0x06, 0x07, 0x03, 0x00, 0x03, 0xC0, 0x7E, 0x0C, - 0x71, 0x83, 0x30, 0x33, 0x0F, 0x33, 0xE6, 0x76, 0x6C, 0x66, 0xC6, 0x6C, - 0x6C, 0xFC, 0xC7, 0xEC, 0x00, 0xC0, 0x0C, 0x00, 0xE3, 0x07, 0xF0, 0x3C, - 0x00, 0x07, 0xF0, 0x1F, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0x3B, 0x00, 0xE7, - 0x01, 0x8E, 0x07, 0x1C, 0x1F, 0xF8, 0x3F, 0xF0, 0xE0, 0x71, 0x80, 0xEF, - 0xC7, 0xFF, 0x8F, 0xC0, 0x3F, 0xF1, 0xFF, 0xC3, 0x06, 0x38, 0x31, 0xC1, - 0x8C, 0x18, 0x7F, 0xC3, 0xFE, 0x38, 0x39, 0xC0, 0xCC, 0x06, 0x60, 0x6F, - 0xFF, 0x7F, 0xE0, 0x03, 0xEC, 0x3F, 0xF1, 0xC3, 0x8C, 0x06, 0x60, 0x19, - 0x80, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x03, 0x3C, 0x1C, - 0x7F, 0xE0, 0x7E, 0x00, 0x3F, 0xE1, 0xFF, 0x87, 0x0C, 0x30, 0x31, 0x81, - 0x8C, 0x0C, 0xE0, 0x67, 0x03, 0x30, 0x31, 0x81, 0x8C, 0x0C, 0xE1, 0xCF, - 0xFC, 0x7F, 0x80, 0x1F, 0xFE, 0x3F, 0xFC, 0x38, 0x38, 0x70, 0x70, 0xCC, - 0xC1, 0x98, 0x03, 0xF0, 0x0F, 0xE0, 0x1D, 0x80, 0x31, 0x18, 0x60, 0x70, - 0xC0, 0xE7, 0xFF, 0x9F, 0xFF, 0x00, 0x1F, 0xFF, 0x1F, 0xFE, 0x0E, 0x06, - 0x0C, 0x0E, 0x0C, 0xC4, 0x0C, 0xC0, 0x1F, 0xC0, 0x1F, 0xC0, 0x19, 0xC0, - 0x19, 0x80, 0x18, 0x00, 0x38, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x07, 0xEC, - 0x7F, 0xF3, 0x83, 0x9C, 0x06, 0x60, 0x19, 0x80, 0x0C, 0x00, 0x30, 0xFE, - 0xC3, 0xFB, 0x01, 0xCC, 0x07, 0x3C, 0x38, 0x7F, 0xE0, 0x7E, 0x00, 0x0F, - 0xBF, 0x1F, 0xBE, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0x0C, 0x1C, 0x1F, - 0xF8, 0x1F, 0xF8, 0x18, 0x18, 0x18, 0x38, 0x18, 0x38, 0x38, 0x30, 0x7C, - 0xFC, 0xFC, 0xF8, 0x3F, 0xF3, 0xFF, 0x03, 0x00, 0x70, 0x07, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xC0, 0xFF, 0xCF, 0xFC, - 0x03, 0xFF, 0x03, 0xFF, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x70, 0x20, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE1, 0xC0, - 0xFF, 0x80, 0x3F, 0x00, 0x1F, 0x9F, 0x1F, 0x9E, 0x0E, 0x38, 0x0C, 0x70, - 0x0C, 0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x1F, 0xE0, 0x1C, 0xE0, 0x18, 0x60, - 0x18, 0x70, 0x38, 0x70, 0xFE, 0x3C, 0xFC, 0x3C, 0x3F, 0xC1, 0xFE, 0x01, - 0x80, 0x1C, 0x00, 0xE0, 0x06, 0x00, 0x30, 0x01, 0x80, 0x1C, 0x18, 0xE0, - 0xC6, 0x06, 0x30, 0x7F, 0xFF, 0xFF, 0xF8, 0x1E, 0x07, 0x87, 0x81, 0xE0, - 0xF0, 0xF0, 0x7C, 0x7C, 0x1F, 0x1F, 0x06, 0xCF, 0x81, 0xBF, 0x60, 0xEF, - 0x98, 0x3B, 0xEE, 0x0C, 0x73, 0x83, 0x1C, 0xC0, 0xC0, 0x30, 0xFC, 0x7E, - 0x3F, 0x1F, 0x80, 0x3C, 0x3F, 0x3E, 0x3F, 0x1E, 0x0C, 0x1F, 0x1C, 0x1F, - 0x1C, 0x1B, 0x98, 0x3B, 0x98, 0x3B, 0x98, 0x31, 0xF8, 0x31, 0xF8, 0x30, - 0xF0, 0x70, 0xF0, 0xFC, 0x70, 0xF8, 0x70, 0x03, 0xE0, 0x3F, 0xE1, 0xC3, - 0x8C, 0x07, 0x60, 0x0D, 0x80, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1B, 0x00, - 0x6E, 0x03, 0x1C, 0x38, 0x7F, 0xC0, 0x7C, 0x00, 0x3F, 0xE1, 0xFF, 0x83, - 0x0E, 0x38, 0x31, 0xC1, 0x8C, 0x0C, 0x60, 0xC3, 0xFC, 0x3F, 0xC1, 0xC0, - 0x0C, 0x00, 0x60, 0x0F, 0xF0, 0x7F, 0x80, 0x03, 0xE0, 0x3F, 0xE1, 0xC3, - 0x8C, 0x07, 0x60, 0x0D, 0x80, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1B, 0x00, - 0x6E, 0x03, 0x1C, 0x38, 0x7F, 0xC0, 0xFC, 0x03, 0x02, 0x1F, 0xFC, 0xFF, - 0xE0, 0x1F, 0xF0, 0x3F, 0xF0, 0x38, 0x70, 0x60, 0x60, 0xC0, 0xC1, 0x87, - 0x07, 0xFC, 0x0F, 0xF0, 0x18, 0xF0, 0x30, 0xE0, 0x60, 0xC1, 0xC1, 0xCF, - 0xE1, 0xFF, 0xC3, 0xC0, 0x0F, 0xB1, 0xFF, 0x30, 0xE6, 0x06, 0x60, 0x67, - 0x80, 0x7F, 0x01, 0xFC, 0x01, 0xC4, 0x0C, 0xC0, 0xCE, 0x18, 0xFF, 0x8B, - 0xE0, 0x7F, 0xFB, 0xFF, 0xD9, 0xCF, 0xCE, 0x7C, 0x63, 0x63, 0x18, 0x18, - 0x01, 0xC0, 0x0E, 0x00, 0x60, 0x03, 0x00, 0x18, 0x0F, 0xF8, 0x7F, 0xC0, - 0x7E, 0xFF, 0xF3, 0xF3, 0x03, 0x1C, 0x0C, 0x60, 0x31, 0x81, 0xC6, 0x06, - 0x38, 0x18, 0xE0, 0x63, 0x03, 0x8C, 0x0C, 0x30, 0x70, 0x7F, 0x80, 0xF8, - 0x00, 0xFC, 0x7F, 0xF8, 0xFD, 0xC0, 0x61, 0x81, 0xC3, 0x87, 0x07, 0x0C, - 0x0E, 0x38, 0x0C, 0x60, 0x19, 0xC0, 0x3F, 0x00, 0x7C, 0x00, 0xF8, 0x00, - 0xE0, 0x01, 0x80, 0x00, 0x7E, 0x7E, 0xFC, 0xFD, 0xC0, 0x73, 0x9C, 0xE7, - 0x79, 0x8E, 0xF7, 0x1B, 0xEE, 0x36, 0xD8, 0x7D, 0xF0, 0xF3, 0xE1, 0xE7, - 0x83, 0x8F, 0x07, 0x1E, 0x1C, 0x38, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, - 0x1C, 0x07, 0x38, 0x07, 0x70, 0x03, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x07, - 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x70, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, - 0xFF, 0xC7, 0xCC, 0x38, 0x73, 0x83, 0x9C, 0x0F, 0xC0, 0x7C, 0x01, 0xC0, - 0x0C, 0x00, 0x60, 0x03, 0x00, 0x38, 0x0F, 0xF8, 0x7F, 0x80, 0x0F, 0xF8, - 0x7F, 0xE1, 0xC7, 0x86, 0x1C, 0x18, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, - 0x0E, 0x00, 0x70, 0xC3, 0x83, 0x1C, 0x1C, 0x7F, 0xF3, 0xFF, 0x80, 0x0F, - 0x87, 0xC3, 0x03, 0x81, 0xC0, 0xC0, 0x60, 0x30, 0x38, 0x1C, 0x0C, 0x06, - 0x03, 0x03, 0x81, 0xC0, 0xC0, 0x60, 0x3E, 0x3F, 0x00, 0x41, 0xC3, 0x83, - 0x07, 0x0E, 0x1C, 0x18, 0x38, 0x70, 0xE0, 0xC1, 0xC3, 0x83, 0x06, 0x0E, - 0x1C, 0x18, 0x20, 0x1F, 0x0F, 0x80, 0xC0, 0xE0, 0x70, 0x30, 0x18, 0x0C, - 0x0E, 0x07, 0x03, 0x01, 0x80, 0xC0, 0xE0, 0x70, 0x30, 0x18, 0x7C, 0x3E, - 0x00, 0x02, 0x01, 0x80, 0xF0, 0x7E, 0x3B, 0x9C, 0x7E, 0x1F, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0xCE, 0x73, 0x1F, 0xC3, 0xFE, 0x00, 0x60, 0x06, 0x0F, - 0xE3, 0xFE, 0x70, 0xCC, 0x0C, 0xC3, 0xCF, 0xFF, 0x7F, 0xF0, 0x1E, 0x00, - 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xDF, 0x81, 0xFF, 0x83, 0xC3, 0x8F, - 0x03, 0x1C, 0x06, 0x38, 0x0C, 0x70, 0x18, 0xE0, 0x63, 0xE1, 0x9F, 0xFE, - 0x3D, 0xF8, 0x00, 0x0F, 0xF3, 0xFF, 0x30, 0x76, 0x07, 0xE0, 0x6C, 0x00, - 0xC0, 0x0C, 0x00, 0xE0, 0x67, 0xFE, 0x3F, 0x80, 0x00, 0x3C, 0x00, 0xF0, - 0x01, 0xC0, 0x06, 0x07, 0xD8, 0x7F, 0xE3, 0x0F, 0x98, 0x1E, 0x60, 0x73, - 0x01, 0xCC, 0x07, 0x30, 0x3C, 0xE1, 0xF1, 0xFF, 0xE3, 0xF7, 0x80, 0x0F, - 0xC1, 0xFE, 0x78, 0x76, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x0C, 0x00, 0xE0, - 0xE7, 0xFE, 0x1F, 0x80, 0x00, 0xFC, 0x07, 0xF8, 0x0C, 0x00, 0x38, 0x01, - 0xFF, 0x07, 0xFE, 0x01, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x30, - 0x00, 0x60, 0x01, 0xC0, 0x1F, 0xF8, 0x3F, 0xF0, 0x00, 0x0F, 0xBC, 0x7F, - 0xF3, 0x0F, 0x18, 0x1C, 0xC0, 0x73, 0x01, 0x8C, 0x0E, 0x30, 0x38, 0xE3, - 0xE1, 0xFF, 0x83, 0xEC, 0x00, 0x30, 0x01, 0xC0, 0x06, 0x07, 0xF0, 0x1F, - 0x80, 0x1E, 0x01, 0xF0, 0x03, 0x00, 0x18, 0x00, 0xDE, 0x0F, 0xF8, 0x78, - 0xC3, 0x86, 0x18, 0x30, 0xC1, 0x8E, 0x1C, 0x70, 0xE3, 0x06, 0x7E, 0xFF, - 0xE7, 0xE0, 0x03, 0x80, 0x70, 0x00, 0x0F, 0xC1, 0xF0, 0x06, 0x00, 0xC0, - 0x38, 0x07, 0x00, 0xC0, 0x18, 0x03, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x70, - 0x07, 0x00, 0x00, 0xFF, 0x1F, 0xF0, 0x07, 0x00, 0x70, 0x06, 0x00, 0x60, - 0x06, 0x00, 0xE0, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x1C, 0x03, 0x87, - 0xF0, 0xFE, 0x00, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x03, 0x80, 0x0C, 0xFC, - 0x33, 0xE0, 0xDE, 0x07, 0xE0, 0x1F, 0x00, 0x7C, 0x01, 0xF8, 0x06, 0xF0, - 0x39, 0xC3, 0xE7, 0xEF, 0x1F, 0x80, 0x0F, 0x81, 0xF0, 0x06, 0x01, 0xC0, - 0x38, 0x06, 0x00, 0xC0, 0x18, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, 0x61, - 0xFF, 0xFF, 0xF8, 0x3F, 0xBC, 0x7F, 0xFC, 0xF3, 0x98, 0xC6, 0x33, 0x9C, - 0xE7, 0x39, 0xCC, 0x63, 0x18, 0xC6, 0x31, 0x8D, 0xF7, 0xBF, 0xEF, 0x78, - 0x3D, 0xE1, 0xFF, 0x8F, 0x8C, 0x38, 0x61, 0x83, 0x0C, 0x18, 0xE1, 0xC7, - 0x0E, 0x30, 0x67, 0xEF, 0xFE, 0x7E, 0x07, 0xC1, 0xFE, 0x38, 0x76, 0x03, - 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x06, 0xE1, 0xC7, 0xF8, 0x3E, 0x00, 0x1E, - 0xFC, 0x1F, 0xFE, 0x0F, 0x87, 0x0F, 0x03, 0x0E, 0x03, 0x0E, 0x03, 0x0E, - 0x07, 0x0E, 0x06, 0x1F, 0x0C, 0x1F, 0xF8, 0x19, 0xF0, 0x18, 0x00, 0x18, - 0x00, 0x38, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x0F, 0xDE, 0x3F, 0xFC, 0xC3, - 0xE3, 0x03, 0x84, 0x07, 0x18, 0x0E, 0x30, 0x1C, 0x60, 0x78, 0xE1, 0xE0, - 0xFF, 0xC0, 0xF9, 0x80, 0x03, 0x00, 0x0E, 0x00, 0x1C, 0x01, 0xFC, 0x03, - 0xF8, 0x1E, 0x78, 0x7F, 0xF0, 0x7C, 0xC3, 0xC0, 0x0E, 0x00, 0x30, 0x00, - 0xC0, 0x03, 0x00, 0x1C, 0x03, 0xFF, 0x0F, 0xFC, 0x00, 0x07, 0xF1, 0xFF, - 0x30, 0x73, 0x86, 0x3F, 0x81, 0xFE, 0x03, 0xE6, 0x06, 0xE0, 0xEF, 0xFC, - 0xFF, 0x00, 0x0C, 0x07, 0x01, 0x83, 0xFF, 0xFF, 0xCE, 0x03, 0x00, 0xC0, - 0x30, 0x1C, 0x07, 0x01, 0x83, 0x7F, 0xCF, 0xC0, 0xF0, 0xFF, 0x1F, 0x60, - 0x76, 0x07, 0x60, 0x76, 0x06, 0x60, 0x66, 0x0E, 0x61, 0xE7, 0xFF, 0x3E, - 0xF0, 0x7E, 0x7E, 0xFC, 0xFC, 0xE0, 0xC0, 0xC3, 0x81, 0x86, 0x03, 0x98, - 0x07, 0x70, 0x06, 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x38, 0x00, 0xF8, 0x7F, - 0xE3, 0xE6, 0x63, 0x1B, 0xDC, 0x6F, 0x61, 0xFF, 0x87, 0xFC, 0x1E, 0xF0, - 0x73, 0x81, 0xCE, 0x06, 0x38, 0x00, 0x3E, 0x7C, 0xF9, 0xF1, 0xE7, 0x03, - 0xF8, 0x07, 0xC0, 0x1F, 0x01, 0xFC, 0x0F, 0x38, 0x78, 0xFB, 0xF7, 0xEF, - 0x9F, 0x80, 0x1F, 0x1F, 0x3E, 0x1F, 0x1C, 0x1C, 0x0C, 0x18, 0x0E, 0x38, - 0x0E, 0x70, 0x06, 0x60, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x07, 0x00, 0x0E, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0xF1, - 0xFF, 0x38, 0xE3, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC6, 0x38, 0x67, - 0xFE, 0x7F, 0xE0, 0x01, 0xC0, 0xF0, 0x70, 0x18, 0x06, 0x03, 0x80, 0xE0, - 0x30, 0x1C, 0x3E, 0x0F, 0x00, 0x60, 0x18, 0x06, 0x03, 0x80, 0xC0, 0x30, - 0x0F, 0x01, 0xC0, 0x0C, 0x71, 0xC7, 0x18, 0x63, 0x8E, 0x30, 0xC3, 0x1C, - 0x71, 0x86, 0x38, 0xE3, 0x04, 0x00, 0x0E, 0x07, 0x80, 0xC0, 0x60, 0x70, - 0x30, 0x18, 0x0C, 0x06, 0x01, 0xC1, 0xE1, 0xC0, 0xC0, 0xE0, 0x70, 0x30, - 0x38, 0x78, 0x38, 0x00, 0x3C, 0x27, 0xE6, 0xEF, 0xCC, 0x38}; - -const GFXglyph FreeMonoBoldOblique12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 14, 0, 1}, // 0x20 ' ' - {0, 6, 15, 14, 6, -14}, // 0x21 '!' - {12, 8, 7, 14, 6, -13}, // 0x22 '"' - {19, 13, 18, 14, 2, -15}, // 0x23 '#' - {49, 11, 20, 14, 3, -16}, // 0x24 '$' - {77, 11, 15, 14, 3, -14}, // 0x25 '%' - {98, 11, 13, 14, 2, -12}, // 0x26 '&' - {116, 3, 7, 14, 8, -13}, // 0x27 ''' - {119, 7, 19, 14, 7, -14}, // 0x28 '(' - {136, 7, 19, 14, 2, -14}, // 0x29 ')' - {153, 11, 10, 14, 4, -14}, // 0x2A '*' - {167, 12, 13, 14, 3, -12}, // 0x2B '+' - {187, 6, 7, 14, 3, -2}, // 0x2C ',' - {193, 13, 2, 14, 2, -7}, // 0x2D '-' - {197, 3, 3, 14, 6, -2}, // 0x2E '.' - {199, 14, 20, 14, 2, -16}, // 0x2F '/' - {234, 11, 15, 14, 3, -14}, // 0x30 '0' - {255, 11, 15, 14, 2, -14}, // 0x31 '1' - {276, 13, 15, 14, 1, -14}, // 0x32 '2' - {301, 12, 15, 14, 2, -14}, // 0x33 '3' - {324, 11, 14, 14, 3, -13}, // 0x34 '4' - {344, 12, 15, 14, 2, -14}, // 0x35 '5' - {367, 11, 15, 14, 4, -14}, // 0x36 '6' - {388, 11, 15, 14, 4, -14}, // 0x37 '7' - {409, 11, 15, 14, 3, -14}, // 0x38 '8' - {430, 11, 15, 14, 3, -14}, // 0x39 '9' - {451, 5, 11, 14, 5, -10}, // 0x3A ':' - {458, 7, 15, 14, 3, -10}, // 0x3B ';' - {472, 13, 11, 14, 2, -11}, // 0x3C '<' - {490, 13, 7, 14, 2, -9}, // 0x3D '=' - {502, 13, 11, 14, 2, -11}, // 0x3E '>' - {520, 9, 14, 14, 5, -13}, // 0x3F '?' - {536, 12, 19, 14, 2, -14}, // 0x40 '@' - {565, 15, 14, 14, 0, -13}, // 0x41 'A' - {592, 13, 14, 14, 1, -13}, // 0x42 'B' - {615, 14, 14, 14, 2, -13}, // 0x43 'C' - {640, 13, 14, 14, 1, -13}, // 0x44 'D' - {663, 15, 14, 14, 0, -13}, // 0x45 'E' - {690, 16, 14, 14, 0, -13}, // 0x46 'F' - {718, 14, 14, 14, 1, -13}, // 0x47 'G' - {743, 16, 14, 14, 0, -13}, // 0x48 'H' - {771, 12, 14, 14, 2, -13}, // 0x49 'I' - {792, 16, 14, 14, 0, -13}, // 0x4A 'J' - {820, 16, 14, 14, 0, -13}, // 0x4B 'K' - {848, 13, 14, 14, 1, -13}, // 0x4C 'L' - {871, 18, 14, 14, 0, -13}, // 0x4D 'M' - {903, 16, 14, 14, 1, -13}, // 0x4E 'N' - {931, 14, 14, 14, 1, -13}, // 0x4F 'O' - {956, 13, 14, 14, 1, -13}, // 0x50 'P' - {979, 14, 17, 14, 1, -13}, // 0x51 'Q' - {1009, 15, 14, 14, 0, -13}, // 0x52 'R' - {1036, 12, 14, 14, 3, -13}, // 0x53 'S' - {1057, 13, 14, 14, 2, -13}, // 0x54 'T' - {1080, 14, 14, 14, 2, -13}, // 0x55 'U' - {1105, 15, 14, 14, 1, -13}, // 0x56 'V' - {1132, 15, 14, 14, 1, -13}, // 0x57 'W' - {1159, 16, 14, 14, 0, -13}, // 0x58 'X' - {1187, 13, 14, 14, 2, -13}, // 0x59 'Y' - {1210, 14, 14, 14, 1, -13}, // 0x5A 'Z' - {1235, 9, 19, 14, 5, -14}, // 0x5B '[' - {1257, 7, 20, 14, 5, -16}, // 0x5C '\' - {1275, 9, 19, 14, 3, -14}, // 0x5D ']' - {1297, 10, 8, 14, 4, -15}, // 0x5E '^' - {1307, 15, 2, 14, -1, 4}, // 0x5F '_' - {1311, 4, 4, 14, 7, -15}, // 0x60 '`' - {1313, 12, 11, 14, 2, -10}, // 0x61 'a' - {1330, 15, 15, 14, -1, -14}, // 0x62 'b' - {1359, 12, 11, 14, 2, -10}, // 0x63 'c' - {1376, 14, 15, 14, 2, -14}, // 0x64 'd' - {1403, 12, 11, 14, 2, -10}, // 0x65 'e' - {1420, 15, 15, 14, 2, -14}, // 0x66 'f' - {1449, 14, 16, 14, 2, -10}, // 0x67 'g' - {1477, 13, 15, 14, 1, -14}, // 0x68 'h' - {1502, 11, 14, 14, 2, -13}, // 0x69 'i' - {1522, 12, 19, 14, 1, -13}, // 0x6A 'j' - {1551, 14, 15, 14, 1, -14}, // 0x6B 'k' - {1578, 11, 15, 14, 2, -14}, // 0x6C 'l' - {1599, 15, 11, 14, 0, -10}, // 0x6D 'm' - {1620, 13, 11, 14, 1, -10}, // 0x6E 'n' - {1638, 12, 11, 14, 2, -10}, // 0x6F 'o' - {1655, 16, 16, 14, -1, -10}, // 0x70 'p' - {1687, 15, 16, 14, 1, -10}, // 0x71 'q' - {1717, 14, 11, 14, 1, -10}, // 0x72 'r' - {1737, 12, 11, 14, 2, -10}, // 0x73 's' - {1754, 10, 14, 14, 2, -13}, // 0x74 't' - {1772, 12, 11, 14, 2, -10}, // 0x75 'u' - {1789, 15, 11, 14, 1, -10}, // 0x76 'v' - {1810, 14, 11, 14, 2, -10}, // 0x77 'w' - {1830, 14, 11, 14, 1, -10}, // 0x78 'x' - {1850, 16, 16, 14, 0, -10}, // 0x79 'y' - {1882, 12, 11, 14, 2, -10}, // 0x7A 'z' - {1899, 10, 19, 14, 4, -14}, // 0x7B '{' - {1923, 6, 19, 14, 5, -14}, // 0x7C '|' - {1938, 9, 19, 14, 3, -14}, // 0x7D '}' - {1960, 12, 4, 14, 3, -7}}; // 0x7E '~' - -const GFXfont FreeMonoBoldOblique12pt7b PROGMEM = { - (uint8_t *)FreeMonoBoldOblique12pt7bBitmaps, - (GFXglyph *)FreeMonoBoldOblique12pt7bGlyphs, 0x20, 0x7E, 24}; - -// Approx. 2638 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique18pt7b.h deleted file mode 100644 index 0400f25..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique18pt7b.h +++ /dev/null @@ -1,462 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBoldOblique18pt7bBitmaps[] PROGMEM = { - 0x0F, 0x07, 0xC7, 0xE3, 0xF1, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x1F, 0x0F, - 0x07, 0x87, 0xC3, 0xC1, 0xE0, 0x60, 0x00, 0x38, 0x3E, 0x1F, 0x0F, 0x83, - 0x80, 0xF8, 0xFF, 0x0E, 0xF1, 0xEF, 0x1E, 0xE1, 0xCE, 0x1C, 0xC1, 0xCC, - 0x18, 0xC1, 0x88, 0x18, 0x00, 0xE3, 0x80, 0x79, 0xE0, 0x1C, 0x70, 0x07, - 0x1C, 0x03, 0xCF, 0x00, 0xF3, 0xC0, 0x38, 0xE0, 0x7F, 0xFF, 0x3F, 0xFF, - 0xCF, 0xFF, 0xF3, 0xFF, 0xF8, 0x3C, 0xF0, 0x0F, 0x3C, 0x03, 0x8E, 0x0F, - 0xFF, 0xE3, 0xFF, 0xFC, 0xFF, 0xFF, 0x3F, 0xFF, 0x83, 0xCF, 0x00, 0xF3, - 0xC0, 0x38, 0xE0, 0x1E, 0x78, 0x07, 0x9E, 0x01, 0xC7, 0x00, 0x71, 0xC0, - 0x00, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xF0, 0x03, 0xFF, - 0x81, 0xFF, 0xF0, 0xFF, 0xF8, 0x3C, 0x1E, 0x1E, 0x07, 0x87, 0x80, 0x01, - 0xF0, 0x00, 0x7F, 0xC0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x07, 0xF0, 0x00, - 0x3C, 0x70, 0x0F, 0x3C, 0x03, 0xCF, 0x83, 0xE3, 0xFF, 0xF8, 0xFF, 0xFC, - 0x3F, 0xFE, 0x0C, 0xFE, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x18, 0x00, 0x03, 0xC0, 0x0F, 0xE0, 0x1C, 0x70, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x70, 0x38, 0xE0, 0x1F, 0xC3, 0x0F, 0x1F, 0x01, 0xFC, - 0x0F, 0xE0, 0x7F, 0x00, 0xF8, 0xF0, 0x83, 0xF8, 0x07, 0x1C, 0x0E, 0x0C, - 0x0C, 0x0C, 0x0C, 0x1C, 0x0E, 0x38, 0x07, 0xF0, 0x03, 0xC0, 0x00, 0x7A, - 0x01, 0xFF, 0x03, 0xFF, 0x07, 0xFE, 0x0F, 0x9C, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x07, 0x80, 0x1F, 0x80, 0x3F, 0xC0, 0x7F, 0xCF, 0x79, 0xFF, - 0xF1, 0xFE, 0xF1, 0xFC, 0xF0, 0xF8, 0xFF, 0xFE, 0xFF, 0xFE, 0x7F, 0xFE, - 0x1F, 0xBC, 0x7B, 0xFD, 0xEF, 0x73, 0x9C, 0xC6, 0x00, 0x01, 0xC0, 0xF0, - 0x3C, 0x1E, 0x0F, 0x03, 0xC1, 0xE0, 0x70, 0x3C, 0x0F, 0x07, 0x81, 0xE0, - 0x78, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3E, - 0x07, 0x81, 0xE0, 0x7C, 0x1F, 0x03, 0x80, 0x07, 0x03, 0xC0, 0xF8, 0x3E, - 0x07, 0x81, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, - 0xF0, 0x78, 0x1E, 0x07, 0x81, 0xC0, 0xF0, 0x3C, 0x1E, 0x07, 0x83, 0xC1, - 0xE0, 0x78, 0x3C, 0x0E, 0x00, 0x00, 0xC0, 0x03, 0xC0, 0x07, 0x00, 0x0E, - 0x02, 0x3C, 0x0F, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0x1F, 0xF0, 0x1F, 0x80, - 0x7F, 0x81, 0xEF, 0x07, 0x8F, 0x0F, 0x1E, 0x08, 0x10, 0x00, 0x00, 0x70, - 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x38, 0x00, - 0x1E, 0x03, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, - 0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x07, 0x80, - 0x01, 0xC0, 0x00, 0x70, 0x00, 0x0F, 0x87, 0x87, 0x83, 0x83, 0xC1, 0xC1, - 0xC0, 0xC0, 0xE0, 0x60, 0x00, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0, - 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, - 0x78, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, - 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0xF0, - 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, - 0xC0, 0x00, 0x3C, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x01, 0xFF, - 0x01, 0xFF, 0xC1, 0xFF, 0xE1, 0xF1, 0xF9, 0xE0, 0x7C, 0xF0, 0x1E, 0xF0, - 0x0F, 0x78, 0x07, 0xB8, 0x03, 0x9C, 0x03, 0xDE, 0x01, 0xCF, 0x00, 0xE7, - 0x00, 0x73, 0xC0, 0x79, 0xE0, 0x3C, 0xF0, 0x1C, 0x78, 0x1E, 0x3E, 0x1E, - 0x0F, 0xFF, 0x07, 0xFF, 0x01, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x03, - 0xF8, 0x0F, 0xE0, 0x7F, 0xC0, 0xF7, 0x81, 0x8F, 0x00, 0x1C, 0x00, 0x38, - 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x3C, 0x00, - 0x78, 0x00, 0xF0, 0x01, 0xC0, 0x03, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xC0, 0x00, 0x1F, 0x00, 0x07, 0xFC, 0x00, 0xFF, 0xE0, 0x1F, - 0xFF, 0x03, 0xC1, 0xF0, 0x78, 0x0F, 0x07, 0x80, 0xF0, 0x70, 0x0F, 0x00, - 0x01, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, - 0x3F, 0x03, 0x87, 0xFF, 0xF8, 0x7F, 0xFF, 0x87, 0xFF, 0xF8, 0xFF, 0xFF, - 0x00, 0x00, 0xFE, 0x00, 0xFF, 0xC0, 0x7F, 0xF8, 0x3F, 0xFF, 0x0E, 0x07, - 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x1F, 0xC0, - 0x0F, 0xE0, 0x03, 0xF0, 0x00, 0xFF, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, - 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xF1, 0xFF, 0xF8, 0xFF, 0xFC, - 0x3F, 0xFE, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x7F, 0x00, - 0xFE, 0x00, 0xFE, 0x01, 0xEE, 0x03, 0xDE, 0x07, 0x9E, 0x0F, 0x1C, 0x1E, - 0x1C, 0x3C, 0x3C, 0x78, 0x3C, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, - 0xFC, 0x00, 0x70, 0x03, 0xFC, 0x07, 0xFC, 0x07, 0xFC, 0x07, 0xF8, 0x07, - 0xFF, 0xC1, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0xFE, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xE0, 0x00, 0x3B, 0xE0, 0x1F, 0xFE, 0x07, 0xFF, 0xC1, 0xFF, 0xF8, - 0x78, 0x3E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, - 0x0F, 0x18, 0x0F, 0xCF, 0xFF, 0xE3, 0xFF, 0xF0, 0x7F, 0xF8, 0x07, 0xF0, - 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xFC, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0x7F, - 0x00, 0x1F, 0x80, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x9F, - 0x01, 0xEF, 0xF0, 0x3F, 0xFF, 0x0F, 0xFF, 0xF1, 0xFC, 0x3E, 0x3E, 0x03, - 0xC7, 0x80, 0x78, 0xF0, 0x0F, 0x1E, 0x03, 0xC3, 0xE0, 0xF8, 0x7F, 0xFE, - 0x07, 0xFF, 0x80, 0x7F, 0xE0, 0x07, 0xF0, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0E, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x3C, - 0x00, 0x78, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xC0, - 0x03, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1E, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x00, 0x3F, 0xF0, 0x0F, 0xFF, 0x03, - 0xFF, 0xF0, 0xF8, 0x3E, 0x3E, 0x03, 0xC7, 0x80, 0x78, 0xF0, 0x0F, 0x1E, - 0x03, 0xC3, 0xE0, 0xF0, 0x3F, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xE0, 0x7F, - 0xFE, 0x1F, 0x83, 0xE3, 0xC0, 0x3C, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xE0, - 0x7C, 0x7F, 0xFF, 0x87, 0xFF, 0xE0, 0x7F, 0xF0, 0x03, 0xF8, 0x00, 0x00, - 0x7E, 0x00, 0x7F, 0xC0, 0x3F, 0xF8, 0x1F, 0xFE, 0x0F, 0x87, 0xC3, 0xC0, - 0xF1, 0xE0, 0x3C, 0x78, 0x0F, 0x1E, 0x03, 0xC7, 0x81, 0xF1, 0xF1, 0xFC, - 0x7F, 0xFE, 0x0F, 0xFF, 0x81, 0xFD, 0xE0, 0x3E, 0xF0, 0x00, 0x7C, 0x00, - 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x81, 0xFF, 0xC0, 0xFF, 0xE0, 0x3F, 0xE0, - 0x07, 0xE0, 0x00, 0x1C, 0x7C, 0xF9, 0xF1, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x8F, 0x9F, 0x3E, 0x38, 0x01, 0xC0, 0x7C, 0x0F, 0x81, 0xF0, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0xF0, 0x1E, - 0x07, 0x80, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, - 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xF0, 0x00, 0x38, - 0x3F, 0xFF, 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x9F, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xF0, - 0x00, 0x00, 0x03, 0x80, 0x00, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, - 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x0F, 0xE0, - 0x07, 0xF0, 0x07, 0xF8, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0x3E, 0x00, 0x07, - 0x00, 0x00, 0x07, 0xE0, 0xFF, 0xC7, 0xFF, 0xBF, 0xFF, 0xF0, 0x7F, 0x80, - 0xFE, 0x03, 0xC0, 0x0F, 0x00, 0x78, 0x0F, 0xE1, 0xFE, 0x0F, 0xF0, 0x7E, - 0x01, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x70, 0x03, 0xE0, 0x0F, 0x80, 0x3E, - 0x00, 0x70, 0x00, 0x00, 0x3E, 0x00, 0x3F, 0xE0, 0x1F, 0xF8, 0x0F, 0x0F, - 0x07, 0x01, 0xC3, 0x80, 0x71, 0xE0, 0x1C, 0x70, 0x0E, 0x18, 0x0F, 0x8E, - 0x1F, 0xE3, 0x8F, 0xF0, 0xE7, 0x9C, 0x33, 0xC7, 0x1C, 0xE1, 0xC7, 0x38, - 0x71, 0xCF, 0x18, 0x73, 0xFE, 0x38, 0x7F, 0xCE, 0x0F, 0xF3, 0x80, 0x00, - 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0xC0, 0x7F, 0xF0, 0x0F, - 0xF8, 0x01, 0xF8, 0x00, 0x01, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x1F, 0xF8, - 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xBC, 0x00, - 0x1C, 0xF0, 0x00, 0xF3, 0xC0, 0x07, 0x87, 0x80, 0x1E, 0x1E, 0x00, 0xF0, - 0x78, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, - 0x1E, 0x00, 0xF1, 0xFE, 0x1F, 0xFF, 0xF8, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF, - 0x07, 0xF8, 0x0F, 0xFF, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFC, 0x1F, 0xFF, - 0xF0, 0x38, 0x0F, 0x81, 0xC0, 0x3C, 0x1E, 0x01, 0xE0, 0xF0, 0x3E, 0x07, - 0xFF, 0xE0, 0x3F, 0xFE, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0xE0, 0x1F, - 0x87, 0x00, 0x3C, 0x38, 0x01, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0xF3, 0xFF, - 0xFF, 0xBF, 0xFF, 0xF9, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0x00, 0x00, 0x7F, - 0x30, 0x0F, 0xFF, 0xC1, 0xFF, 0xFE, 0x1F, 0xFF, 0xF1, 0xF8, 0x3F, 0x1F, - 0x00, 0x78, 0xF0, 0x03, 0xCF, 0x80, 0x1C, 0x78, 0x00, 0x03, 0xC0, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, - 0x00, 0x1F, 0x00, 0x38, 0x7E, 0x07, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, - 0x3F, 0xFC, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x7F, 0xFE, 0x07, - 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0x78, 0x1F, 0x03, 0x80, 0x7C, 0x1C, 0x01, - 0xE1, 0xE0, 0x0F, 0x0F, 0x00, 0x78, 0x70, 0x03, 0xC3, 0x80, 0x1E, 0x1C, - 0x00, 0xF1, 0xE0, 0x0F, 0x0F, 0x00, 0x78, 0x70, 0x07, 0xC3, 0x80, 0x7C, - 0x3C, 0x07, 0xC3, 0xFF, 0xFC, 0x3F, 0xFF, 0xC1, 0xFF, 0xFC, 0x0F, 0xFF, - 0x80, 0x00, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC3, 0xFF, - 0xFF, 0x03, 0xC0, 0x3C, 0x0F, 0x00, 0xE0, 0x3C, 0x73, 0x80, 0xE3, 0xCC, - 0x03, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x80, 0x07, - 0x1E, 0x00, 0x3C, 0x70, 0x00, 0xF0, 0x07, 0x03, 0xC0, 0x1C, 0x0E, 0x00, - 0xF1, 0xFF, 0xFF, 0xC7, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0x7F, 0xFF, 0xE0, - 0x07, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, - 0x3C, 0x01, 0xC0, 0x70, 0x07, 0x80, 0xE1, 0x8E, 0x03, 0xC7, 0x1C, 0x07, - 0xFE, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0xF1, - 0xC0, 0x01, 0xE3, 0x80, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x0F, 0xFE, 0x00, - 0x00, 0x00, 0x3F, 0x18, 0x0F, 0xFF, 0xC0, 0xFF, 0xFE, 0x0F, 0xFF, 0xF0, - 0xFC, 0x0F, 0x0F, 0x80, 0x38, 0xF8, 0x01, 0x87, 0x80, 0x00, 0x78, 0x00, - 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x7F, 0xEF, 0x07, 0xFF, 0x78, - 0x3F, 0xFB, 0xC0, 0xFF, 0x9E, 0x00, 0x38, 0xFC, 0x03, 0xC3, 0xFF, 0xFE, - 0x1F, 0xFF, 0xE0, 0x3F, 0xFC, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0xFE, - 0x0F, 0xF3, 0xFC, 0x1F, 0xE7, 0xF8, 0x3F, 0x8F, 0xE0, 0x3C, 0x07, 0x80, - 0x70, 0x0E, 0x00, 0xE0, 0x1C, 0x03, 0xC0, 0x78, 0x07, 0x80, 0xF0, 0x0F, - 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0xFF, 0xFE, 0x01, 0xE0, - 0x3C, 0x03, 0x80, 0x70, 0x07, 0x00, 0xE0, 0x1E, 0x03, 0xC0, 0xFF, 0x1F, - 0xE1, 0xFE, 0x7F, 0xC7, 0xFC, 0xFF, 0x87, 0xF1, 0xFE, 0x00, 0x07, 0xFF, - 0xE1, 0xFF, 0xFC, 0x3F, 0xFF, 0x87, 0xFF, 0xE0, 0x07, 0x80, 0x00, 0xE0, - 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0x80, - 0x00, 0x70, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0E, 0x00, - 0x01, 0xC0, 0x0F, 0xFF, 0xC3, 0xFF, 0xF8, 0x7F, 0xFF, 0x07, 0xFF, 0xE0, - 0x00, 0x3F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, - 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x80, 0x1C, 0x03, 0x80, - 0x78, 0x0F, 0x00, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x80, 0x70, 0x1F, - 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0xFC, 0x00, - 0x00, 0x07, 0xF8, 0xFC, 0x1F, 0xFB, 0xFC, 0x3F, 0xE7, 0xF0, 0x7F, 0xCF, - 0xE0, 0x3C, 0x1E, 0x00, 0x70, 0xF8, 0x00, 0xE3, 0xE0, 0x03, 0xCF, 0x00, - 0x07, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xF0, 0x00, - 0xF9, 0xF0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xE0, 0x07, 0x03, 0xC0, 0x1E, - 0x07, 0x80, 0xFF, 0x8F, 0xE3, 0xFF, 0x0F, 0xC7, 0xFE, 0x1F, 0x8F, 0xF8, - 0x3E, 0x00, 0x0F, 0xFE, 0x00, 0xFF, 0xF0, 0x1F, 0xFE, 0x00, 0xFF, 0xE0, - 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0xC0, - 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x80, 0x60, 0x78, - 0x0F, 0x07, 0x80, 0xF0, 0x70, 0x0E, 0x07, 0x00, 0xE7, 0xFF, 0xFE, 0xFF, - 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xC0, 0x0F, 0xC0, 0x1F, 0x87, 0xE0, - 0x0F, 0xC7, 0xF8, 0x0F, 0xE1, 0xFC, 0x0F, 0xE0, 0x7E, 0x07, 0xE0, 0x3F, - 0x07, 0xF0, 0x3F, 0xC7, 0xF8, 0x1F, 0xE3, 0xF8, 0x0E, 0xF3, 0xDC, 0x07, - 0x7B, 0xDE, 0x03, 0x9F, 0xEF, 0x03, 0xCF, 0xE7, 0x81, 0xE7, 0xE3, 0x80, - 0xE3, 0xF1, 0xC0, 0x70, 0xF1, 0xE0, 0x38, 0x70, 0xF0, 0x3C, 0x00, 0x70, - 0x3F, 0xC1, 0xFE, 0x3F, 0xE1, 0xFF, 0x1F, 0xF0, 0xFF, 0x8F, 0xF0, 0x7F, - 0x80, 0x0F, 0xC1, 0xFE, 0x1F, 0xC1, 0xFF, 0x1F, 0xC3, 0xFE, 0x1F, 0xE1, - 0xFE, 0x07, 0xE0, 0x38, 0x07, 0xF0, 0x78, 0x07, 0xF0, 0x78, 0x0F, 0xF8, - 0x70, 0x0F, 0x78, 0x70, 0x0E, 0x78, 0xF0, 0x0E, 0x7C, 0xF0, 0x1E, 0x3C, - 0xF0, 0x1E, 0x3E, 0xE0, 0x1E, 0x1E, 0xE0, 0x1C, 0x1F, 0xE0, 0x1C, 0x0F, - 0xE0, 0x3C, 0x0F, 0xE0, 0x7F, 0x87, 0xC0, 0xFF, 0x87, 0xC0, 0xFF, 0x87, - 0xC0, 0xFF, 0x03, 0xC0, 0x00, 0x7E, 0x00, 0x1F, 0xF8, 0x07, 0xFF, 0xC0, - 0xFF, 0xFE, 0x1F, 0x87, 0xE3, 0xE0, 0x1F, 0x3C, 0x01, 0xF7, 0xC0, 0x0F, - 0x78, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x01, - 0xEF, 0x00, 0x3E, 0xF8, 0x03, 0xCF, 0x80, 0x7C, 0x7C, 0x1F, 0x87, 0xFF, - 0xF0, 0x3F, 0xFE, 0x01, 0xFF, 0x80, 0x07, 0xE0, 0x00, 0x0F, 0xFF, 0x80, - 0x7F, 0xFF, 0x07, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x38, 0x0F, 0x81, 0xC0, - 0x3C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, 0x07, 0x00, 0xF0, 0x38, 0x0F, 0x83, - 0xFF, 0xF8, 0x1F, 0xFF, 0x80, 0xFF, 0xF8, 0x07, 0xFF, 0x00, 0x38, 0x00, - 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x03, 0xFF, 0x80, 0x3F, 0xFC, 0x01, 0xFF, - 0xE0, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x1F, 0xF8, 0x07, 0xFF, - 0xC0, 0xFF, 0xFE, 0x1F, 0x87, 0xE3, 0xE0, 0x1F, 0x3C, 0x01, 0xF7, 0xC0, - 0x0F, 0x78, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x01, 0xEF, 0x00, 0x3E, 0xF8, 0x03, 0xCF, 0x80, 0x7C, 0x7C, 0x1F, 0x87, - 0xFF, 0xF0, 0x3F, 0xFE, 0x01, 0xFF, 0x80, 0x07, 0xE0, 0x01, 0xFE, 0x30, - 0x3F, 0xFF, 0x87, 0xFF, 0xF0, 0x7F, 0xFF, 0x07, 0x83, 0xC0, 0x07, 0xFF, - 0x80, 0x3F, 0xFF, 0x80, 0xFF, 0xFF, 0x03, 0xFF, 0xFE, 0x03, 0xC0, 0xF8, - 0x0E, 0x01, 0xE0, 0x38, 0x07, 0x81, 0xE0, 0x3E, 0x07, 0x83, 0xF0, 0x1F, - 0xFF, 0x80, 0x7F, 0xFC, 0x01, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x3C, 0x3E, - 0x00, 0xE0, 0x7C, 0x03, 0x80, 0xF0, 0x1E, 0x03, 0xE1, 0xFF, 0x07, 0xFF, - 0xFC, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0x80, 0xF8, 0x00, 0x7C, 0xE0, 0x7F, - 0xFC, 0x1F, 0xFF, 0x87, 0xFF, 0xE0, 0xF8, 0x7C, 0x3C, 0x07, 0x87, 0x80, - 0xE0, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0xF8, 0x03, 0xFF, - 0x80, 0x07, 0xF8, 0x40, 0x1F, 0x3C, 0x01, 0xE7, 0x80, 0x3C, 0xFC, 0x1F, - 0x1F, 0xFF, 0xE3, 0xFF, 0xF8, 0x7F, 0xFE, 0x00, 0x7E, 0x00, 0x7F, 0xFF, - 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0x0E, 0x1F, 0xE1, 0xC3, - 0xBC, 0x78, 0x77, 0x0F, 0x1E, 0xE1, 0xC1, 0x80, 0x38, 0x00, 0x0F, 0x00, - 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x3C, 0x00, - 0x07, 0x80, 0x0F, 0xFE, 0x03, 0xFF, 0xE0, 0x7F, 0xFC, 0x0F, 0xFF, 0x00, - 0x7F, 0x8F, 0xF3, 0xFE, 0x7F, 0xDF, 0xF7, 0xFC, 0xFF, 0x1F, 0xE3, 0xC0, - 0x3C, 0x1C, 0x01, 0xE0, 0xE0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x03, 0x83, - 0xC0, 0x3C, 0x1C, 0x01, 0xE0, 0xE0, 0x0E, 0x0F, 0x00, 0x70, 0x78, 0x03, - 0x83, 0xC0, 0x3C, 0x1F, 0x01, 0xC0, 0xFC, 0x3E, 0x03, 0xFF, 0xE0, 0x1F, - 0xFE, 0x00, 0x7F, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x81, 0xFE, 0xFF, - 0x87, 0xFF, 0xFF, 0x0F, 0xFB, 0xFC, 0x1F, 0xE1, 0xC0, 0x0F, 0x03, 0xC0, - 0x1C, 0x07, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x1E, 0x03, 0x80, 0x1E, 0x0F, - 0x00, 0x3C, 0x3C, 0x00, 0x78, 0x70, 0x00, 0xF1, 0xE0, 0x01, 0xE7, 0x80, - 0x01, 0xEF, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, - 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x87, 0xFF, - 0xFF, 0x1F, 0xFF, 0xF8, 0x7F, 0xFF, 0xE1, 0xFE, 0x78, 0x00, 0xF1, 0xE3, - 0xC3, 0x87, 0x8F, 0x0E, 0x1E, 0x7C, 0x78, 0x79, 0xF9, 0xC1, 0xEF, 0xEF, - 0x07, 0xBF, 0xBC, 0x1D, 0xFE, 0xE0, 0x77, 0x7F, 0x81, 0xFD, 0xFE, 0x07, - 0xE3, 0xF0, 0x3F, 0x8F, 0xC0, 0xFC, 0x3F, 0x03, 0xF0, 0xF8, 0x0F, 0x83, - 0xE0, 0x3E, 0x0F, 0x80, 0xF0, 0x3C, 0x00, 0x07, 0xE0, 0x7E, 0x0F, 0xF0, - 0xFF, 0x0F, 0xF0, 0xFE, 0x0F, 0xE0, 0xFE, 0x03, 0xC0, 0xF8, 0x01, 0xE1, - 0xE0, 0x01, 0xF3, 0xC0, 0x00, 0xF7, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xEF, - 0x00, 0x07, 0xCF, 0x80, 0x0F, 0x87, 0xC0, 0x1F, 0x03, 0xC0, 0x7F, 0x07, - 0xF0, 0xFF, 0x8F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xE0, 0x7E, 0x0F, - 0xEF, 0xF0, 0xFF, 0xFF, 0x0F, 0xEF, 0xE0, 0xFE, 0x3C, 0x0F, 0x01, 0xE1, - 0xE0, 0x1E, 0x3E, 0x00, 0xF7, 0xC0, 0x0F, 0xF8, 0x00, 0x7F, 0x00, 0x07, - 0xE0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, - 0x78, 0x00, 0x07, 0x00, 0x07, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xE0, 0xFF, 0xFC, 0x3F, 0xFF, 0x87, 0xFF, - 0xF0, 0xF0, 0x7C, 0x1C, 0x1F, 0x03, 0x87, 0xC0, 0x61, 0xF0, 0x00, 0x7C, - 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x07, - 0x07, 0xC0, 0xE1, 0xF0, 0x3C, 0x7C, 0x07, 0x9F, 0xFF, 0xF3, 0xFF, 0xFC, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF0, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xE0, - 0x70, 0x07, 0x80, 0x3C, 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x3C, - 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x01, 0xC0, 0x0E, 0x00, - 0xF0, 0x07, 0x80, 0x38, 0x01, 0xC0, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, - 0x80, 0xE0, 0x38, 0x0F, 0x03, 0xC0, 0xF0, 0x1C, 0x07, 0x81, 0xE0, 0x78, - 0x0E, 0x03, 0xC0, 0xF0, 0x3C, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x03, 0x80, - 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C, 0x06, - 0x07, 0xF8, 0x3F, 0xC1, 0xFC, 0x0F, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, - 0x1C, 0x00, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0x80, 0x1C, 0x01, 0xE0, 0x0F, - 0x00, 0x78, 0x03, 0x80, 0x1C, 0x01, 0xE0, 0x0F, 0x00, 0x70, 0x03, 0x80, - 0x1C, 0x0F, 0xE0, 0xFF, 0x07, 0xF0, 0x3F, 0x80, 0x00, 0x40, 0x01, 0x80, - 0x07, 0x80, 0x3F, 0x80, 0xFF, 0x03, 0xFF, 0x0F, 0x9F, 0x3E, 0x1E, 0xF8, - 0x3F, 0xE0, 0x3F, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xC3, 0xC7, 0x0E, 0x3C, 0x30, 0x00, 0xFE, 0x00, - 0x7F, 0xF0, 0x1F, 0xFF, 0x03, 0xFF, 0xE0, 0x00, 0x3C, 0x07, 0xFF, 0x83, - 0xFF, 0xF0, 0xFF, 0xFC, 0x3F, 0xFF, 0x8F, 0x80, 0xF3, 0xE0, 0x1E, 0x78, - 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xF8, 0xFE, 0x7E, 0x07, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xC0, - 0x00, 0x0F, 0x00, 0x00, 0x3C, 0xFC, 0x00, 0xEF, 0xFC, 0x03, 0xFF, 0xF8, - 0x1F, 0xFF, 0xE0, 0x7E, 0x0F, 0xC1, 0xE0, 0x1F, 0x07, 0x00, 0x3C, 0x1C, - 0x00, 0xF0, 0xE0, 0x03, 0xC3, 0x80, 0x1E, 0x0F, 0x00, 0xF8, 0x3E, 0x07, - 0xC7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0x81, 0xF1, 0xF8, 0x00, - 0x00, 0xFE, 0x60, 0xFF, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, 0xF0, 0x3C, - 0xF8, 0x03, 0x9E, 0x00, 0x67, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, - 0xC0, 0x00, 0x7E, 0x01, 0xC7, 0xFF, 0xF8, 0xFF, 0xFE, 0x0F, 0xFF, 0x80, - 0x7F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x70, 0x07, 0xE3, 0x80, 0xFF, 0xDC, 0x0F, - 0xFF, 0xE0, 0xFF, 0xFF, 0x0F, 0xC1, 0xF0, 0xF8, 0x07, 0x87, 0x80, 0x1C, - 0x78, 0x00, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x70, 0xF0, 0x07, 0x87, 0xE0, - 0xFC, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xC3, 0xFF, 0xFE, 0x07, 0xE3, 0xE0, - 0x00, 0xFC, 0x01, 0xFF, 0xC0, 0xFF, 0xF8, 0x7F, 0xFE, 0x3E, 0x0F, 0xCE, - 0x00, 0xF7, 0x00, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x1E, 0xFF, 0xFF, 0x9F, 0xFF, 0xE3, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0xC0, 0x1F, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x3F, 0xFF, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, - 0xFF, 0xFC, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x01, 0xC0, - 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x1F, - 0xFF, 0x81, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x7F, 0xFE, 0x00, 0x01, 0xF9, - 0xF8, 0x3F, 0xFF, 0xC3, 0xFF, 0xFE, 0x7F, 0xFF, 0xE3, 0xE0, 0xFC, 0x3E, - 0x03, 0xE1, 0xE0, 0x0E, 0x1E, 0x00, 0x70, 0xF0, 0x03, 0x87, 0x80, 0x3C, - 0x3E, 0x03, 0xE1, 0xF8, 0x7E, 0x07, 0xFF, 0xF0, 0x3F, 0xFF, 0x80, 0xFF, - 0xFC, 0x01, 0xF9, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, - 0x7F, 0xF8, 0x07, 0xFF, 0x80, 0x3F, 0xF8, 0x00, 0xFF, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x03, 0xC0, 0x00, - 0x38, 0x00, 0x03, 0x9F, 0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xC0, 0x7F, 0xFE, - 0x07, 0xC3, 0xE0, 0x70, 0x1E, 0x0F, 0x01, 0xC0, 0xF0, 0x1C, 0x0E, 0x03, - 0xC0, 0xE0, 0x3C, 0x1E, 0x03, 0x81, 0xE0, 0x38, 0x7F, 0x0F, 0xFF, 0xF8, - 0xFF, 0xFF, 0x8F, 0xF7, 0xF0, 0xFE, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, - 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, 0x1F, 0xF0, - 0x0F, 0xF0, 0x00, 0xF0, 0x00, 0xE0, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xE0, - 0x01, 0xE0, 0x01, 0xC0, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x3F, 0xFE, 0x0F, 0xFF, 0x81, 0xFF, - 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, - 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x78, 0x00, - 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x1F, 0xFE, - 0x0F, 0xFF, 0x03, 0xFF, 0x80, 0x7F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0xFE, - 0x00, 0x0F, 0xE0, 0x00, 0x7C, 0x00, 0x01, 0xC0, 0x00, 0x3C, 0x00, 0x03, - 0xCF, 0xF0, 0x3C, 0xFF, 0x03, 0x9F, 0xF0, 0x38, 0xFE, 0x07, 0xBF, 0x00, - 0x7F, 0xC0, 0x07, 0xF8, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0xFF, 0xC0, - 0x0F, 0x7E, 0x00, 0xE3, 0xF0, 0x7E, 0x1F, 0xE7, 0xE1, 0xFE, 0xFE, 0x3F, - 0xE7, 0xE1, 0xFC, 0x03, 0xFC, 0x07, 0xFC, 0x07, 0xF8, 0x07, 0xF8, 0x00, - 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x70, 0x00, 0x70, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xE0, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, - 0xC0, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, - 0x7C, 0x78, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF0, 0xF1, - 0xF1, 0xE1, 0xC3, 0x83, 0xC7, 0x87, 0x07, 0x8F, 0x0E, 0x0E, 0x1C, 0x3C, - 0x1C, 0x38, 0x78, 0x78, 0x70, 0xE0, 0xF1, 0xE1, 0xC1, 0xC7, 0xE3, 0xC3, - 0xFF, 0xCF, 0xC7, 0xFF, 0x9F, 0x9F, 0xFF, 0x3E, 0x3E, 0x0F, 0x8F, 0x80, - 0xFD, 0xFF, 0x07, 0xFF, 0xF8, 0x3F, 0xFF, 0xE0, 0x7E, 0x1F, 0x07, 0xC0, - 0x78, 0x3C, 0x03, 0x81, 0xE0, 0x1C, 0x0E, 0x01, 0xE0, 0x70, 0x0F, 0x07, - 0x80, 0x70, 0x3C, 0x03, 0x87, 0xF0, 0x3F, 0x7F, 0xC3, 0xFF, 0xFE, 0x1F, - 0xEF, 0xE0, 0xFE, 0x01, 0xFC, 0x01, 0xFF, 0x80, 0xFF, 0xF8, 0x7F, 0xFE, - 0x3E, 0x0F, 0xDF, 0x01, 0xF7, 0x80, 0x3F, 0xC0, 0x0F, 0xF0, 0x03, 0xFC, - 0x01, 0xEF, 0x80, 0xFB, 0xF0, 0x7C, 0x7F, 0xFF, 0x1F, 0xFF, 0x03, 0xFF, - 0x80, 0x3F, 0x80, 0x07, 0xC7, 0xE0, 0x1F, 0xBF, 0xF0, 0x3F, 0xFF, 0xF0, - 0x7F, 0xFF, 0xE0, 0x3F, 0x07, 0xE0, 0x78, 0x03, 0xC0, 0xE0, 0x07, 0x81, - 0xC0, 0x0F, 0x07, 0x00, 0x1E, 0x0F, 0x00, 0x78, 0x1E, 0x01, 0xF0, 0x3E, - 0x07, 0xC0, 0xFF, 0xFF, 0x81, 0xFF, 0xFE, 0x03, 0xDF, 0xF0, 0x07, 0x1F, - 0x80, 0x0E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x03, 0xFE, 0x00, - 0x0F, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, 0xF8, - 0xF8, 0x1F, 0xFF, 0xF1, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0x3E, 0x07, 0xC1, - 0xF0, 0x0F, 0x07, 0x80, 0x1C, 0x3C, 0x00, 0x70, 0xF0, 0x03, 0x83, 0xC0, - 0x0E, 0x0F, 0x80, 0x78, 0x3F, 0x07, 0xE0, 0x7F, 0xFF, 0x81, 0xFF, 0xFC, - 0x03, 0xFF, 0x70, 0x03, 0xF3, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0xE0, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xC0, 0x07, 0xFF, 0x00, 0x1F, - 0xF8, 0x00, 0x0F, 0xC3, 0xC1, 0xFC, 0xFF, 0x1F, 0xFF, 0xF1, 0xFF, 0xFE, - 0x03, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x07, 0x80, - 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0xFF, 0xFC, 0x0F, 0xFF, - 0xE0, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0x03, 0xF3, 0x0F, 0xFF, 0x3F, 0xFF, - 0x3F, 0xFF, 0x7C, 0x0E, 0x78, 0x00, 0x7F, 0xE0, 0x3F, 0xFC, 0x1F, 0xFF, - 0x00, 0x3F, 0x70, 0x0F, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, - 0x0F, 0xE0, 0x06, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x0E, 0x00, - 0x7F, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFC, 0x1C, 0x00, 0x3C, 0x00, - 0x3C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x78, 0x00, 0x7C, 0x0E, - 0x7F, 0xFF, 0x7F, 0xFE, 0x3F, 0xFC, 0x0F, 0xE0, 0x7C, 0x0F, 0xFF, 0x07, - 0xFF, 0x81, 0xFF, 0xE0, 0x7E, 0x78, 0x03, 0x9E, 0x00, 0xE7, 0x80, 0x79, - 0xE0, 0x1E, 0x78, 0x07, 0x1E, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0xFC, 0x7F, - 0xFF, 0x9F, 0xFF, 0xE3, 0xFF, 0xF8, 0x3E, 0x7C, 0x7F, 0x87, 0xFF, 0xFC, - 0x7F, 0xFF, 0xE3, 0xFF, 0xFF, 0x1F, 0xE1, 0xE0, 0x3C, 0x0F, 0x03, 0xC0, - 0x78, 0x3C, 0x01, 0xE1, 0xC0, 0x0F, 0x1E, 0x00, 0x79, 0xE0, 0x03, 0xCE, - 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0x80, 0x00, - 0x78, 0x00, 0x7E, 0x03, 0xF7, 0xF0, 0x3F, 0xFF, 0x81, 0xFD, 0xF8, 0x0F, - 0xE7, 0x8E, 0x1C, 0x3C, 0xF9, 0xE1, 0xE7, 0xCE, 0x0F, 0x7E, 0xF0, 0x7B, - 0xF7, 0x03, 0xFF, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0xFC, 0x07, 0xE7, 0xE0, - 0x3E, 0x3E, 0x01, 0xF1, 0xF0, 0x0F, 0x07, 0x00, 0x0F, 0xE3, 0xF8, 0xFF, - 0x1F, 0xC7, 0xF9, 0xFE, 0x1F, 0x87, 0xF0, 0x7E, 0x7C, 0x01, 0xFF, 0xC0, - 0x07, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x1F, 0xF0, 0x01, 0xF7, - 0xC0, 0x1F, 0x1F, 0x03, 0xF0, 0x7C, 0x7F, 0xCF, 0xFB, 0xFE, 0x7F, 0xDF, - 0xE3, 0xFC, 0x07, 0xF0, 0x7F, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x07, - 0xE0, 0xFE, 0x03, 0xC0, 0x78, 0x03, 0xC0, 0x78, 0x03, 0xC0, 0xF0, 0x01, - 0xE1, 0xE0, 0x01, 0xE1, 0xC0, 0x01, 0xE3, 0xC0, 0x00, 0xF7, 0x80, 0x00, - 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x7F, - 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x1F, - 0xFF, 0xC7, 0xFF, 0xF1, 0xFF, 0xF8, 0xFF, 0xFE, 0x3C, 0x1F, 0x0E, 0x1F, - 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, - 0xF8, 0x3C, 0xFF, 0xFF, 0x3F, 0xFF, 0xCF, 0xFF, 0xE3, 0xFF, 0xF8, 0x00, - 0xF0, 0x1F, 0x03, 0xF0, 0x7E, 0x07, 0x80, 0x70, 0x0F, 0x00, 0xF0, 0x0E, - 0x00, 0xE0, 0x1E, 0x01, 0xC0, 0xFC, 0x0F, 0x80, 0xF8, 0x0F, 0xC0, 0x3C, - 0x03, 0xC0, 0x38, 0x03, 0x80, 0x78, 0x07, 0x80, 0x78, 0x07, 0xE0, 0x7E, - 0x03, 0xE0, 0x1C, 0x00, 0x02, 0x07, 0x07, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, - 0x1E, 0x1E, 0x1C, 0x1C, 0x1C, 0x3C, 0x3C, 0x38, 0x38, 0x38, 0x78, 0x78, - 0x70, 0x70, 0x70, 0xF0, 0xF0, 0xE0, 0xE0, 0x01, 0xC0, 0x1F, 0x00, 0xFC, - 0x07, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x00, 0xE0, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1F, 0x80, 0x7C, 0x03, 0xE0, 0x3F, 0x03, 0xC0, 0x1C, - 0x00, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x0F, 0xE0, 0x7E, 0x07, - 0xE0, 0x1E, 0x00, 0x0F, 0x00, 0x1F, 0xC0, 0x1F, 0xF0, 0xFF, 0xFC, 0xFF, - 0x3F, 0xFF, 0x0F, 0xF8, 0x03, 0xF8, 0x00, 0xF0}; - -const GFXglyph FreeMonoBoldOblique18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 21, 0, 1}, // 0x20 ' ' - {0, 9, 22, 21, 9, -21}, // 0x21 '!' - {25, 12, 10, 21, 9, -20}, // 0x22 '"' - {40, 18, 25, 21, 4, -22}, // 0x23 '#' - {97, 18, 28, 21, 4, -23}, // 0x24 '$' - {160, 16, 21, 21, 5, -20}, // 0x25 '%' - {202, 16, 20, 21, 4, -19}, // 0x26 '&' - {242, 5, 10, 21, 12, -20}, // 0x27 ''' - {249, 10, 27, 21, 11, -21}, // 0x28 '(' - {283, 10, 27, 21, 4, -21}, // 0x29 ')' - {317, 15, 15, 21, 6, -21}, // 0x2A '*' - {346, 18, 19, 21, 4, -18}, // 0x2B '+' - {389, 9, 10, 21, 4, -3}, // 0x2C ',' - {401, 18, 4, 21, 4, -11}, // 0x2D '-' - {410, 5, 5, 21, 8, -4}, // 0x2E '.' - {414, 21, 28, 21, 2, -23}, // 0x2F '/' - {488, 17, 23, 21, 5, -22}, // 0x30 '0' - {537, 15, 22, 21, 3, -21}, // 0x31 '1' - {579, 20, 23, 21, 2, -22}, // 0x32 '2' - {637, 18, 23, 21, 3, -22}, // 0x33 '3' - {689, 16, 21, 21, 4, -20}, // 0x34 '4' - {731, 18, 22, 21, 4, -21}, // 0x35 '5' - {781, 19, 23, 21, 5, -22}, // 0x36 '6' - {836, 16, 22, 21, 6, -21}, // 0x37 '7' - {880, 19, 23, 21, 3, -22}, // 0x38 '8' - {935, 18, 23, 21, 4, -22}, // 0x39 '9' - {987, 7, 16, 21, 9, -15}, // 0x3A ':' - {1001, 11, 22, 21, 4, -15}, // 0x3B ';' - {1032, 18, 16, 21, 4, -17}, // 0x3C '<' - {1068, 19, 10, 21, 3, -14}, // 0x3D '=' - {1092, 19, 16, 21, 3, -17}, // 0x3E '>' - {1130, 14, 21, 21, 8, -20}, // 0x3F '?' - {1167, 18, 27, 21, 3, -21}, // 0x40 '@' - {1228, 22, 21, 21, 0, -20}, // 0x41 'A' - {1286, 21, 21, 21, 1, -20}, // 0x42 'B' - {1342, 21, 21, 21, 2, -20}, // 0x43 'C' - {1398, 21, 21, 21, 1, -20}, // 0x44 'D' - {1454, 22, 21, 21, 0, -20}, // 0x45 'E' - {1512, 23, 21, 21, 0, -20}, // 0x46 'F' - {1573, 21, 21, 21, 2, -20}, // 0x47 'G' - {1629, 23, 21, 21, 0, -20}, // 0x48 'H' - {1690, 19, 21, 21, 2, -20}, // 0x49 'I' - {1740, 23, 21, 21, 0, -20}, // 0x4A 'J' - {1801, 23, 21, 21, 0, -20}, // 0x4B 'K' - {1862, 20, 21, 21, 1, -20}, // 0x4C 'L' - {1915, 25, 21, 21, 0, -20}, // 0x4D 'M' - {1981, 24, 21, 21, 1, -20}, // 0x4E 'N' - {2044, 20, 21, 21, 2, -20}, // 0x4F 'O' - {2097, 21, 21, 21, 1, -20}, // 0x50 'P' - {2153, 20, 26, 21, 2, -20}, // 0x51 'Q' - {2218, 22, 21, 21, 0, -20}, // 0x52 'R' - {2276, 19, 21, 21, 3, -20}, // 0x53 'S' - {2326, 19, 21, 21, 3, -20}, // 0x54 'T' - {2376, 21, 21, 21, 3, -20}, // 0x55 'U' - {2432, 23, 21, 21, 1, -20}, // 0x56 'V' - {2493, 22, 21, 21, 2, -20}, // 0x57 'W' - {2551, 24, 21, 21, 0, -20}, // 0x58 'X' - {2614, 20, 21, 21, 3, -20}, // 0x59 'Y' - {2667, 19, 21, 21, 2, -20}, // 0x5A 'Z' - {2717, 13, 27, 21, 8, -21}, // 0x5B '[' - {2761, 10, 28, 21, 8, -23}, // 0x5C '\' - {2796, 13, 27, 21, 4, -21}, // 0x5D ']' - {2840, 15, 11, 21, 6, -21}, // 0x5E '^' - {2861, 21, 4, 21, -1, 4}, // 0x5F '_' - {2872, 6, 6, 21, 10, -22}, // 0x60 '`' - {2877, 19, 16, 21, 2, -15}, // 0x61 'a' - {2915, 22, 22, 21, 0, -21}, // 0x62 'b' - {2976, 19, 16, 21, 3, -15}, // 0x63 'c' - {3014, 21, 22, 21, 3, -21}, // 0x64 'd' - {3072, 18, 16, 21, 3, -15}, // 0x65 'e' - {3108, 21, 22, 21, 3, -21}, // 0x66 'f' - {3166, 21, 23, 21, 2, -15}, // 0x67 'g' - {3227, 20, 22, 21, 1, -21}, // 0x68 'h' - {3282, 16, 22, 21, 3, -21}, // 0x69 'i' - {3326, 18, 29, 21, 2, -21}, // 0x6A 'j' - {3392, 20, 22, 21, 1, -21}, // 0x6B 'k' - {3447, 16, 22, 21, 3, -21}, // 0x6C 'l' - {3491, 23, 16, 21, 0, -15}, // 0x6D 'm' - {3537, 21, 16, 21, 1, -15}, // 0x6E 'n' - {3579, 18, 16, 21, 3, -15}, // 0x6F 'o' - {3615, 23, 23, 21, -1, -15}, // 0x70 'p' - {3682, 22, 23, 21, 2, -15}, // 0x71 'q' - {3746, 20, 16, 21, 2, -15}, // 0x72 'r' - {3786, 16, 16, 21, 4, -15}, // 0x73 's' - {3818, 16, 21, 21, 4, -20}, // 0x74 't' - {3860, 18, 16, 21, 3, -15}, // 0x75 'u' - {3896, 21, 16, 21, 2, -15}, // 0x76 'v' - {3938, 21, 16, 21, 3, -15}, // 0x77 'w' - {3980, 21, 16, 21, 1, -15}, // 0x78 'x' - {4022, 24, 23, 21, -1, -15}, // 0x79 'y' - {4091, 18, 16, 21, 3, -15}, // 0x7A 'z' - {4127, 12, 27, 21, 8, -21}, // 0x7B '{' - {4168, 8, 27, 21, 8, -21}, // 0x7C '|' - {4195, 13, 27, 21, 4, -21}, // 0x7D '}' - {4239, 17, 8, 21, 4, -13}}; // 0x7E '~' - -const GFXfont FreeMonoBoldOblique18pt7b PROGMEM = { - (uint8_t *)FreeMonoBoldOblique18pt7bBitmaps, - (GFXglyph *)FreeMonoBoldOblique18pt7bGlyphs, 0x20, 0x7E, 35}; - -// Approx. 4928 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique24pt7b.h deleted file mode 100644 index ac923bf..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique24pt7b.h +++ /dev/null @@ -1,744 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBoldOblique24pt7bBitmaps[] PROGMEM = { - 0x01, 0xE0, 0x3F, 0x07, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xE0, 0xFE, - 0x0F, 0xE0, 0xFE, 0x0F, 0xC0, 0xFC, 0x1F, 0xC1, 0xF8, 0x1F, 0x81, 0xF8, - 0x1F, 0x81, 0xF0, 0x1F, 0x01, 0xF0, 0x1E, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xC0, 0x7E, 0x0F, 0xE0, 0xFE, 0x0F, 0xC0, 0x78, 0x00, 0x7E, - 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xCF, 0x83, 0xE7, 0xC1, 0xF3, 0xE0, 0xF1, - 0xE0, 0xF8, 0xF0, 0x7C, 0x78, 0x3C, 0x38, 0x1E, 0x1C, 0x0F, 0x0E, 0x07, - 0x0E, 0x03, 0x83, 0x01, 0x80, 0x00, 0x1C, 0x1C, 0x00, 0x3E, 0x3E, 0x00, - 0x3E, 0x3E, 0x00, 0x3C, 0x3C, 0x00, 0x7C, 0x7C, 0x00, 0x7C, 0x7C, 0x00, - 0x7C, 0x7C, 0x00, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x0F, - 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFE, 0x03, 0xE3, 0xE0, 0x03, 0xE3, 0xE0, 0x03, 0xC3, 0xC0, 0x07, - 0xC7, 0xC0, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xF0, 0x0F, 0x0F, 0x00, 0x1F, 0x1F, 0x00, 0x1F, - 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x3E, 0x1E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, - 0x3E, 0x00, 0x3C, 0x3C, 0x00, 0x7C, 0x7C, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x00, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0xFF, 0x00, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0x01, 0xFF, 0xFF, 0x81, 0xFC, 0x1F, 0xC1, 0xF8, 0x03, 0xC0, 0xF8, 0x01, - 0xE0, 0x7C, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xFF, - 0x80, 0x03, 0xFF, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x7F, 0xC0, 0x00, 0x07, 0xE0, 0xE0, 0x01, 0xF0, 0xF0, 0x00, 0xF8, 0xF8, - 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x3F, 0x81, 0xFE, 0x1F, 0xFF, 0xFE, 0x0F, - 0xFF, 0xFE, 0x0F, 0xFF, 0xFE, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xF0, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xE0, 0x03, 0xC3, 0xC0, 0x0E, 0x07, 0x00, - 0x70, 0x1C, 0x01, 0xC0, 0x70, 0x07, 0x01, 0xC0, 0x1C, 0x0E, 0x00, 0x78, - 0x78, 0x00, 0xFF, 0xC0, 0x03, 0xFE, 0x1F, 0x03, 0xE3, 0xFC, 0x00, 0x7F, - 0xC0, 0x0F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, 0x7C, 0x0F, - 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x01, 0xE1, 0xE0, 0x07, 0x03, 0x80, 0x38, - 0x0E, 0x00, 0xE0, 0x38, 0x03, 0x80, 0xE0, 0x0E, 0x07, 0x00, 0x3C, 0x3C, - 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, - 0x01, 0xFF, 0x80, 0x3F, 0xFC, 0x03, 0xFF, 0xE0, 0x1F, 0xFE, 0x01, 0xF1, - 0xE0, 0x1F, 0x04, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, - 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0xE3, - 0xE7, 0xFF, 0x3F, 0x7E, 0xFF, 0xFB, 0xE7, 0xFF, 0x9E, 0x1F, 0xF1, 0xF0, - 0xFF, 0x8F, 0x83, 0xF8, 0x7C, 0x1F, 0xC3, 0xF0, 0xFF, 0x9F, 0xFF, 0xFC, - 0x7F, 0xFF, 0xE3, 0xFF, 0xFF, 0x0F, 0xFD, 0xF0, 0x1F, 0x80, 0x00, 0x7E, - 0xFD, 0xF3, 0xE7, 0xCF, 0x3E, 0x7C, 0xF1, 0xE3, 0xC7, 0x0E, 0x18, 0x00, - 0x00, 0x18, 0x00, 0xF0, 0x07, 0xC0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x3E, - 0x01, 0xF8, 0x07, 0xC0, 0x3E, 0x00, 0xF8, 0x07, 0xC0, 0x1F, 0x00, 0xF8, - 0x03, 0xE0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x3E, 0x00, 0xF8, - 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, - 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, - 0xF0, 0x07, 0xC0, 0x1E, 0x00, 0x00, 0xC0, 0x07, 0x80, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xF0, 0x07, - 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, - 0xF0, 0x07, 0xC0, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x1F, 0x00, 0x7C, 0x01, - 0xF0, 0x0F, 0x80, 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, - 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF0, 0x00, 0x00, 0x3C, - 0x00, 0x01, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x08, - 0x3C, 0x09, 0xF9, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, - 0x87, 0xFF, 0xE0, 0x07, 0xF8, 0x00, 0x7F, 0xC0, 0x07, 0xFF, 0x00, 0x7F, - 0xF8, 0x07, 0xE7, 0xE0, 0x3E, 0x3F, 0x01, 0xE0, 0xF8, 0x0E, 0x07, 0x80, - 0x00, 0x07, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7C, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xF0, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0xE0, 0x00, 0x03, 0xF0, 0x7E, 0x07, 0xC0, 0xFC, - 0x0F, 0x81, 0xF0, 0x1E, 0x03, 0xE0, 0x3C, 0x07, 0x80, 0x78, 0x0F, 0x00, - 0xE0, 0x0C, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x1F, 0xFF, - 0xE0, 0x7F, 0xFF, 0xC0, 0xFC, 0x1F, 0x83, 0xF0, 0x1F, 0x8F, 0xC0, 0x1F, - 0x1F, 0x00, 0x3E, 0x7C, 0x00, 0x7C, 0xF8, 0x00, 0xF9, 0xF0, 0x01, 0xF3, - 0xC0, 0x07, 0xCF, 0x80, 0x0F, 0x9F, 0x00, 0x1E, 0x3E, 0x00, 0x3C, 0x78, - 0x00, 0xF8, 0xF0, 0x01, 0xF3, 0xE0, 0x03, 0xE7, 0xC0, 0x07, 0x8F, 0x80, - 0x1F, 0x1F, 0x00, 0x3E, 0x3E, 0x00, 0xF8, 0x7C, 0x01, 0xF0, 0xFC, 0x07, - 0xC1, 0xFC, 0x3F, 0x81, 0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, - 0x03, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7E, - 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x03, 0xFB, 0xE0, 0x1F, - 0x9E, 0x00, 0xF1, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, - 0x00, 0x1E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03, - 0xC0, 0x00, 0x1E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, - 0x03, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, - 0x01, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, - 0xFF, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x03, 0xFF, 0xF0, - 0x01, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x80, 0x7F, 0x07, 0xF0, 0x1F, 0x00, - 0xFC, 0x0F, 0x80, 0x1F, 0x03, 0xE0, 0x07, 0xC0, 0xF0, 0x01, 0xF0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, - 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x70, 0x3F, 0x80, 0x3E, 0x1F, - 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, - 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x1F, - 0xFF, 0x80, 0x1F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x0F, 0x81, 0xFC, 0x07, - 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x0F, 0xC0, - 0x00, 0x07, 0xC0, 0x00, 0x0F, 0xC0, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, - 0x00, 0xFF, 0x80, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x3C, 0x01, - 0xFC, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, - 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, - 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xE0, 0x03, 0xFF, - 0x80, 0x1F, 0xBE, 0x00, 0x7C, 0xF0, 0x03, 0xE7, 0xC0, 0x1F, 0x1F, 0x00, - 0xF8, 0x7C, 0x07, 0xE1, 0xE0, 0x3F, 0x07, 0x81, 0xF8, 0x3E, 0x07, 0xC0, - 0xF8, 0x3E, 0x03, 0xC1, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x3F, 0xF8, 0x01, - 0xFF, 0xE0, 0x07, 0xFF, 0x80, 0x1F, 0xFE, 0x00, 0x7F, 0xF0, 0x01, 0xFF, - 0xFF, 0x00, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xC0, 0x3F, 0xFF, 0xE0, 0x3F, - 0xFF, 0xE0, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, - 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x00, - 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF0, 0x0F, 0x01, 0xFC, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, - 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0xF8, 0x3C, 0x03, 0xFC, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, - 0xFC, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x1F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, - 0xFF, 0xFE, 0x01, 0xFE, 0x1C, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, - 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x3E, - 0xFF, 0x80, 0x7D, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x7F, 0xFF, 0xE0, 0x7F, - 0x87, 0xF0, 0xFF, 0x03, 0xF0, 0xFC, 0x01, 0xF0, 0xF8, 0x01, 0xF0, 0xF8, - 0x01, 0xF0, 0xF8, 0x01, 0xF0, 0xF8, 0x03, 0xE0, 0xF8, 0x03, 0xE0, 0xFC, - 0x07, 0xC0, 0xFE, 0x0F, 0xC0, 0x7F, 0xFF, 0x80, 0x7F, 0xFF, 0x00, 0x3F, - 0xFE, 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFF, 0xFD, 0xFF, - 0xFF, 0xE7, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFB, 0xE0, 0x07, - 0xCF, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, - 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x01, - 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, - 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x00, - 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, - 0x00, 0x1F, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFF, - 0xE0, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x7F, 0xFF, 0xC0, 0xFC, 0x1F, - 0xC3, 0xF0, 0x1F, 0x8F, 0xC0, 0x1F, 0x1F, 0x00, 0x3E, 0x3E, 0x00, 0x7C, - 0x7C, 0x01, 0xF0, 0xFC, 0x07, 0xE0, 0xFC, 0x1F, 0x81, 0xFF, 0xFE, 0x01, - 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x3F, 0xFF, 0xE0, 0xFE, - 0x0F, 0xC3, 0xF0, 0x0F, 0xC7, 0xC0, 0x0F, 0x9F, 0x00, 0x1F, 0x3E, 0x00, - 0x3E, 0x7C, 0x00, 0xFC, 0xFC, 0x03, 0xF1, 0xFC, 0x1F, 0xE3, 0xFF, 0xFF, - 0x83, 0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xFC, 0x01, 0xFF, - 0xFE, 0x03, 0xFF, 0xFE, 0x03, 0xF0, 0x7F, 0x07, 0xE0, 0x3F, 0x07, 0xC0, - 0x1F, 0x0F, 0xC0, 0x1F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, - 0x3F, 0x0F, 0xC0, 0x7F, 0x0F, 0xE1, 0xFF, 0x07, 0xFF, 0xFE, 0x07, 0xFF, - 0xFE, 0x03, 0xFF, 0xBE, 0x01, 0xFF, 0x7C, 0x00, 0xFC, 0x7C, 0x00, 0x00, - 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, - 0xE0, 0x00, 0x1F, 0xC0, 0x38, 0x7F, 0x80, 0x7F, 0xFF, 0x00, 0xFF, 0xFE, - 0x00, 0xFF, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0x07, 0x83, - 0xF1, 0xFC, 0x7F, 0x1F, 0x83, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x1F, 0x8F, 0xE3, 0xF8, 0xFC, - 0x1E, 0x00, 0x00, 0x3C, 0x00, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xC0, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x03, 0xE0, 0x0F, 0xC0, - 0x1F, 0x00, 0x7C, 0x00, 0xF0, 0x03, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x38, - 0x00, 0xF0, 0x01, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x03, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x00, - 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x0F, - 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0x80, 0x1F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x7F, - 0xE0, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x07, 0xFC, - 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x01, 0xFF, - 0xE1, 0xFF, 0xFE, 0x3F, 0xFF, 0xE7, 0xFF, 0xFF, 0xF8, 0x1F, 0xFE, 0x00, - 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x0F, - 0xE0, 0x07, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xC0, 0x0F, 0xE0, - 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, - 0x3F, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xF0, 0x01, - 0xFF, 0xF0, 0x0F, 0xFF, 0xE0, 0x3F, 0x07, 0xE0, 0x7C, 0x07, 0xC1, 0xE0, - 0x07, 0x87, 0xC0, 0x0F, 0x0F, 0x00, 0x1C, 0x3C, 0x00, 0x78, 0x78, 0x07, - 0xF1, 0xE0, 0x3F, 0xE3, 0xC1, 0xFF, 0x87, 0x87, 0xFF, 0x0E, 0x1F, 0x9E, - 0x3C, 0x7C, 0x3C, 0x78, 0xF0, 0x78, 0xF3, 0xC0, 0xE1, 0xC7, 0x83, 0xC3, - 0x8F, 0x07, 0x8F, 0x1E, 0x0F, 0x1E, 0x3E, 0x1C, 0x3C, 0x7F, 0xFC, 0x78, - 0x7F, 0xFC, 0xF0, 0x7F, 0xF1, 0xE0, 0x3F, 0xE3, 0xC0, 0x00, 0x07, 0x80, - 0x00, 0x0F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3F, 0x01, - 0xC0, 0x7F, 0xFF, 0x80, 0x7F, 0xFE, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xE7, 0xC0, 0x00, 0x0F, 0x9F, 0x00, 0x00, - 0x7C, 0x7C, 0x00, 0x01, 0xE1, 0xF8, 0x00, 0x0F, 0x87, 0xE0, 0x00, 0x7C, - 0x0F, 0x80, 0x01, 0xF0, 0x3E, 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x3F, 0xFF, - 0xF0, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFC, - 0x01, 0xFF, 0xFF, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3E, 0x00, 0x0F, 0x87, - 0xFF, 0x03, 0xFF, 0xBF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, - 0xC1, 0xFF, 0xEF, 0xFE, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x3F, - 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, - 0xFF, 0x80, 0x7C, 0x00, 0xFC, 0x03, 0xE0, 0x03, 0xE0, 0x1E, 0x00, 0x1F, - 0x01, 0xF0, 0x00, 0xF8, 0x0F, 0x80, 0x0F, 0x80, 0x7C, 0x01, 0xF8, 0x03, - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, - 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0x03, 0xC0, 0x0F, 0xF0, 0x3E, 0x00, 0x1F, - 0x81, 0xF0, 0x00, 0x7C, 0x0F, 0x80, 0x03, 0xE0, 0x78, 0x00, 0x1F, 0x03, - 0xC0, 0x03, 0xF1, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, - 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xFF, 0xE6, 0x00, 0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x03, - 0xFF, 0xFF, 0xF0, 0x7F, 0x81, 0xFF, 0x0F, 0xE0, 0x07, 0xE1, 0xF8, 0x00, - 0x3E, 0x1F, 0x00, 0x03, 0xE3, 0xF0, 0x00, 0x3C, 0x3E, 0x00, 0x03, 0xC7, - 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x70, 0x7E, 0x00, 0x1F, 0x07, 0xF8, 0x07, 0xF0, 0x3F, 0xFF, 0xFF, - 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF0, 0x07, 0xFF, - 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0x00, 0xFE, - 0x01, 0xF0, 0x07, 0xE0, 0x1E, 0x00, 0x3F, 0x01, 0xE0, 0x01, 0xF0, 0x3E, - 0x00, 0x1F, 0x03, 0xE0, 0x01, 0xF0, 0x3E, 0x00, 0x1F, 0x03, 0xC0, 0x01, - 0xF0, 0x7C, 0x00, 0x1F, 0x07, 0xC0, 0x03, 0xF0, 0x7C, 0x00, 0x3E, 0x07, - 0x80, 0x03, 0xE0, 0x78, 0x00, 0x7E, 0x0F, 0x80, 0x07, 0xC0, 0xF8, 0x00, - 0xFC, 0x0F, 0x80, 0x1F, 0x80, 0xF0, 0x07, 0xF0, 0x7F, 0xFF, 0xFE, 0x07, - 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, - 0xFE, 0x1F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x00, 0x78, 0x00, 0xF8, - 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x3E, 0x01, 0xF0, 0xF1, 0xE0, 0x0F, - 0x0F, 0x8E, 0x00, 0x78, 0x7C, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xFE, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0xFF, 0xFC, 0x00, - 0x07, 0xC3, 0xC0, 0x00, 0x3E, 0x1E, 0x1E, 0x01, 0xE0, 0xE0, 0xF0, 0x0F, - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x7C, 0x07, 0xC0, 0x03, 0xE1, 0xFF, 0xFF, - 0xFE, 0x1F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFC, - 0x3F, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF8, - 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xC0, - 0x1F, 0x00, 0x0F, 0x80, 0x3E, 0x00, 0x1E, 0x00, 0x78, 0x00, 0x7C, 0x00, - 0xF0, 0x70, 0xF8, 0x03, 0xE1, 0xF0, 0xE0, 0x07, 0xC3, 0xC0, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xC3, 0xE0, 0x00, 0x07, 0x87, - 0xC0, 0x00, 0x1F, 0x07, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0x80, - 0x00, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x07, 0xF8, 0x60, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xF0, - 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0x80, 0xFE, 0x0F, 0xE0, - 0x03, 0xE0, 0xF8, 0x00, 0x3C, 0x1F, 0x00, 0x03, 0xC3, 0xF0, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x7F, 0xFC, 0xF8, 0x0F, 0xFF, - 0xEF, 0x80, 0xFF, 0xFE, 0xF8, 0x0F, 0xFF, 0xCF, 0x80, 0x7F, 0xF8, 0xF8, - 0x00, 0x1F, 0x0F, 0xC0, 0x01, 0xF0, 0xFE, 0x00, 0x1F, 0x07, 0xF8, 0x07, - 0xE0, 0x7F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFC, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x0F, - 0xFC, 0x7F, 0xF0, 0x7F, 0xF1, 0xFF, 0xC1, 0xFF, 0xC7, 0xFE, 0x03, 0xFE, - 0x1F, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3C, 0x00, 0x78, 0x00, - 0xF0, 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, - 0x00, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x00, - 0x7F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0x80, 0x1F, 0x00, 0x1E, - 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, - 0x1E, 0x00, 0x3C, 0x00, 0xF8, 0x07, 0xFE, 0x1F, 0xF8, 0x3F, 0xF8, 0xFF, - 0xF0, 0xFF, 0xE3, 0xFF, 0xC3, 0xFF, 0x8F, 0xFE, 0x0F, 0xFC, 0x3F, 0xF8, - 0x00, 0x03, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xF0, 0x7F, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, - 0x03, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x07, 0x80, 0x00, 0x07, 0xC0, 0x01, 0xFF, 0xFF, - 0xC1, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, - 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, - 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x0F, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x07, 0x00, 0x0F, 0x80, - 0x1F, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x78, 0x00, 0x78, 0x01, - 0xF0, 0x01, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x0F, - 0x80, 0x3F, 0x00, 0x1F, 0xC0, 0xFC, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0xFF, - 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xC3, 0xFE, 0x0F, 0xFF, 0x8F, 0xFC, 0x1F, - 0xFF, 0x3F, 0xF8, 0x3F, 0xFE, 0x7F, 0xF0, 0x7F, 0xF8, 0x7F, 0xC0, 0x1F, - 0x01, 0xFC, 0x00, 0x3E, 0x07, 0xF0, 0x00, 0x78, 0x3F, 0x80, 0x01, 0xF0, - 0xFE, 0x00, 0x03, 0xE3, 0xF0, 0x00, 0x07, 0xDF, 0xC0, 0x00, 0x0F, 0xFE, - 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0xFE, - 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xE0, 0xFC, 0x00, 0x0F, 0x81, 0xF8, - 0x00, 0x1F, 0x01, 0xF8, 0x00, 0x3E, 0x03, 0xF0, 0x00, 0x78, 0x03, 0xE0, - 0x00, 0xF0, 0x07, 0xE0, 0x1F, 0xFE, 0x0F, 0xF8, 0x7F, 0xFC, 0x1F, 0xF8, - 0xFF, 0xF8, 0x1F, 0xF1, 0xFF, 0xF0, 0x3F, 0xE1, 0xFF, 0xC0, 0x7F, 0x80, - 0x03, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0x03, 0xFF, - 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x0E, 0x00, 0xF0, 0x01, 0xE0, 0x3E, 0x00, - 0x7C, 0x07, 0xC0, 0x0F, 0x80, 0xF8, 0x01, 0xF0, 0x1E, 0x00, 0x7C, 0x07, - 0xC0, 0x0F, 0x9F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, - 0x9F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x3F, - 0xC1, 0xFF, 0x00, 0x1F, 0xF0, 0x7F, 0xC0, 0x07, 0xFC, 0x1F, 0xF0, 0x03, - 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xE0, - 0x3F, 0xE0, 0x0F, 0xF8, 0x1F, 0xF0, 0x03, 0xFF, 0x0F, 0xFC, 0x00, 0xF7, - 0xC3, 0xFF, 0x00, 0x7D, 0xF1, 0xF7, 0xC0, 0x1F, 0x7C, 0xFD, 0xF0, 0x07, - 0xDF, 0xBE, 0x78, 0x01, 0xE3, 0xFF, 0x3E, 0x00, 0x78, 0xFF, 0xCF, 0x80, - 0x3E, 0x3F, 0xE3, 0xE0, 0x0F, 0x87, 0xF0, 0xF8, 0x03, 0xE1, 0xFC, 0x3C, - 0x00, 0xF0, 0x7E, 0x1F, 0x00, 0x7C, 0x1F, 0x07, 0xC0, 0x1F, 0x00, 0x01, - 0xF0, 0x07, 0xC0, 0x00, 0x78, 0x07, 0xFE, 0x01, 0xFF, 0x83, 0xFF, 0xC0, - 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xFE, 0x0F, 0xFC, - 0x03, 0xFF, 0x00, 0x07, 0xF8, 0x07, 0xFF, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, - 0xFC, 0x0F, 0xFF, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFE, 0x0F, 0xFE, 0x01, - 0xFE, 0x00, 0xF8, 0x01, 0xFF, 0x00, 0xF0, 0x01, 0xFF, 0x01, 0xF0, 0x03, - 0xFF, 0x81, 0xF0, 0x03, 0xFF, 0x81, 0xF0, 0x03, 0xEF, 0xC1, 0xF0, 0x03, - 0xCF, 0xC1, 0xE0, 0x07, 0xC7, 0xE3, 0xE0, 0x07, 0xC7, 0xE3, 0xE0, 0x07, - 0xC3, 0xF3, 0xE0, 0x07, 0xC3, 0xF3, 0xC0, 0x07, 0x81, 0xF7, 0xC0, 0x0F, - 0x81, 0xFF, 0xC0, 0x0F, 0x80, 0xFF, 0xC0, 0x0F, 0x80, 0xFF, 0xC0, 0x0F, - 0x00, 0xFF, 0x80, 0x0F, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x7F, 0x80, 0xFF, - 0xF0, 0x3F, 0x80, 0xFF, 0xF0, 0x3F, 0x00, 0xFF, 0xF0, 0x1F, 0x00, 0x7F, - 0xE0, 0x1F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x01, 0xFF, - 0xF8, 0x00, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF8, 0x0F, 0xF0, 0x7F, 0x83, - 0xF8, 0x03, 0xF0, 0xFC, 0x00, 0x7E, 0x1F, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x7C, 0xF8, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x3E, 0xF0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x3E, 0xF8, 0x00, 0x07, - 0xDF, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0xCF, 0xC0, - 0x01, 0xF0, 0xF8, 0x00, 0x7E, 0x1F, 0x80, 0x3F, 0x83, 0xFC, 0x1F, 0xE0, - 0x3F, 0xFF, 0xF8, 0x03, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0x7F, 0x00, 0xF8, 0x01, 0xF0, 0x0F, 0x00, 0x1F, 0x01, 0xF0, 0x01, - 0xF0, 0x1F, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xE0, 0x1E, 0x00, 0x7E, 0x01, - 0xE0, 0x0F, 0xC0, 0x3F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, - 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7F, 0xFF, - 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x03, - 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF8, 0x0F, 0xF0, 0x7F, - 0x83, 0xF8, 0x03, 0xF0, 0xFC, 0x00, 0x3F, 0x1F, 0x00, 0x07, 0xE7, 0xC0, - 0x00, 0x7D, 0xF8, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x3F, - 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x3E, 0xF8, 0x00, - 0x07, 0xDF, 0x00, 0x01, 0xFB, 0xE0, 0x00, 0x3E, 0x7E, 0x00, 0x0F, 0x8F, - 0xC0, 0x03, 0xF0, 0xFC, 0x01, 0xFC, 0x1F, 0xE0, 0xFF, 0x01, 0xFF, 0xFF, - 0xC0, 0x1F, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1F, 0xF8, 0x38, 0x0F, 0xFF, 0xFF, - 0x81, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x00, 0xF0, - 0x1F, 0x80, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x01, 0xFF, - 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0x00, 0x7C, 0x03, - 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x1E, 0x00, 0x3E, 0x00, 0xF0, 0x01, 0xF0, - 0x0F, 0x80, 0x1F, 0x80, 0x7C, 0x01, 0xF8, 0x03, 0xE0, 0x3F, 0x80, 0x1F, - 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x1E, 0x07, 0xF0, 0x01, 0xF0, 0x1F, 0xC0, - 0x0F, 0x80, 0x7E, 0x00, 0x7C, 0x03, 0xF8, 0x03, 0xC0, 0x0F, 0xC0, 0xFF, - 0xE0, 0x7F, 0xCF, 0xFF, 0x01, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, - 0x3F, 0xDF, 0xFC, 0x01, 0xFC, 0x00, 0x0F, 0xE1, 0x80, 0x0F, 0xFF, 0xF0, - 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xC1, 0xFC, 0x0F, - 0xE0, 0x7C, 0x01, 0xF8, 0x3E, 0x00, 0x3E, 0x0F, 0x80, 0x0F, 0x03, 0xE0, - 0x03, 0xC0, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x01, - 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xE1, 0xE0, 0x00, 0xF8, 0xF8, 0x00, - 0x3E, 0x3E, 0x00, 0x1F, 0x8F, 0xC0, 0x0F, 0xC3, 0xFC, 0x0F, 0xF0, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x03, 0x9F, 0xFE, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF7, 0xFF, - 0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0x9F, 0x07, 0x83, 0xE7, - 0x83, 0xE0, 0xFB, 0xE0, 0xF8, 0x3E, 0xF8, 0x3E, 0x0F, 0x3E, 0x0F, 0x07, - 0xCF, 0x07, 0xC1, 0xF3, 0x81, 0xF0, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x7C, 0x00, 0x07, 0xFF, 0xF8, 0x01, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, - 0x80, 0x3F, 0xFF, 0xE0, 0x07, 0xFF, 0xF0, 0x00, 0x3F, 0xF0, 0x7F, 0xE7, - 0xFF, 0x8F, 0xFF, 0x7F, 0xF9, 0xFF, 0xF7, 0xFF, 0x1F, 0xFE, 0x7F, 0xF0, - 0xFF, 0xC1, 0xE0, 0x01, 0xF0, 0x1E, 0x00, 0x1F, 0x03, 0xE0, 0x01, 0xF0, - 0x3E, 0x00, 0x1F, 0x03, 0xE0, 0x01, 0xE0, 0x3C, 0x00, 0x3E, 0x07, 0xC0, - 0x03, 0xE0, 0x7C, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xC0, 0x7C, 0x00, 0x3C, - 0x07, 0x80, 0x07, 0xC0, 0xF8, 0x00, 0x7C, 0x0F, 0x80, 0x07, 0xC0, 0xF8, - 0x00, 0x78, 0x0F, 0x80, 0x0F, 0x80, 0xFC, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, - 0x00, 0xFF, 0x07, 0xE0, 0x07, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xC0, 0x03, - 0xFF, 0xF0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7F, 0xF0, - 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFC, 0x0F, - 0xFF, 0x7F, 0xE0, 0x3F, 0xF8, 0x7C, 0x00, 0x1F, 0x01, 0xF0, 0x00, 0xF8, - 0x07, 0xC0, 0x03, 0xE0, 0x1F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x00, - 0xF8, 0x03, 0xE0, 0x03, 0xE0, 0x1F, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0x7C, 0x1F, 0x00, 0x01, 0xF0, 0xFC, 0x00, 0x07, 0xC3, - 0xE0, 0x00, 0x1F, 0x9F, 0x00, 0x00, 0x3E, 0xFC, 0x00, 0x00, 0xFB, 0xE0, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x3F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0x1E, 0x00, - 0x01, 0xE0, 0xF0, 0x7C, 0x1F, 0x0F, 0x87, 0xE0, 0xF0, 0x7C, 0x3F, 0x0F, - 0x83, 0xE3, 0xF8, 0x7C, 0x1F, 0x1F, 0xE3, 0xC0, 0xF9, 0xFF, 0x3E, 0x07, - 0xCF, 0xF9, 0xF0, 0x3E, 0xFF, 0xCF, 0x01, 0xF7, 0xBE, 0xF8, 0x0F, 0xFD, - 0xF7, 0xC0, 0x7B, 0xCF, 0xFC, 0x03, 0xFE, 0x7F, 0xE0, 0x3F, 0xE3, 0xFF, - 0x01, 0xFF, 0x0F, 0xF0, 0x0F, 0xF0, 0x7F, 0x80, 0x7F, 0x83, 0xFC, 0x03, - 0xF8, 0x1F, 0xC0, 0x1F, 0xC0, 0xFE, 0x00, 0xFC, 0x07, 0xF0, 0x07, 0xE0, - 0x3F, 0x00, 0x3E, 0x01, 0xF8, 0x00, 0x01, 0xFE, 0x03, 0xFE, 0x03, 0xFF, - 0x07, 0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x07, 0xFE, 0x07, 0xFE, 0x03, 0xFC, - 0x03, 0xFC, 0x00, 0xFC, 0x03, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x00, 0x7E, - 0x1F, 0xC0, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x03, 0xF0, - 0x7E, 0x00, 0x07, 0xE0, 0x3F, 0x00, 0x0F, 0xC0, 0x1F, 0x80, 0x7F, 0xE0, - 0x7F, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, - 0xFF, 0xE0, 0x7F, 0xC0, 0xFF, 0xC0, 0x7F, 0xC0, 0x7F, 0xFF, 0xF0, 0x3F, - 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x03, 0xFF, 0x7F, 0x80, 0xFF, 0x87, 0xC0, - 0x1F, 0x01, 0xF8, 0x0F, 0x80, 0x3E, 0x07, 0xC0, 0x0F, 0xC3, 0xE0, 0x01, - 0xF1, 0xF0, 0x00, 0x7E, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF0, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x78, 0x00, 0x07, 0xFF, 0xF0, 0x03, 0xFF, 0xFE, 0x00, - 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x00, 0x01, 0xFF, - 0xFF, 0xC0, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xE0, - 0x3F, 0xFF, 0xFC, 0x07, 0xC0, 0x3F, 0x00, 0xF8, 0x0F, 0xC0, 0x1F, 0x03, - 0xF0, 0x03, 0xC0, 0xFC, 0x00, 0xF8, 0x3F, 0x00, 0x0E, 0x0F, 0xC0, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x0E, 0x00, 0x7E, 0x03, 0xE0, 0x1F, - 0x80, 0x7C, 0x07, 0xE0, 0x0F, 0x01, 0xF8, 0x03, 0xE0, 0x7E, 0x00, 0x7C, - 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFC, 0x0F, 0xFF, - 0xFF, 0x81, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x3F, 0xF0, 0x0F, - 0xFC, 0x07, 0xFF, 0x01, 0xFF, 0x80, 0x7C, 0x00, 0x1E, 0x00, 0x07, 0x80, - 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x01, - 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, - 0x80, 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, - 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x00, 0x20, 0x03, 0xC0, 0x3E, 0x01, 0xF0, - 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x3E, 0x01, 0xF0, 0x0F, 0x80, - 0x7C, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x0F, 0x80, 0x7C, 0x03, - 0xE0, 0x1F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0x7C, 0x03, 0xE0, 0x1F, - 0x00, 0xF8, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x1F, 0x00, 0xF8, - 0x07, 0xC0, 0x3E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x00, 0xFF, 0xC0, 0x7F, - 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x03, 0xE0, 0x00, 0xF0, - 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xE0, 0x00, 0x78, 0x00, - 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, - 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x7F, 0xE0, 0x3F, 0xF8, - 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x01, - 0xC0, 0x00, 0x3C, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0x1F, 0xF0, 0x03, - 0xFF, 0x80, 0xFF, 0xF8, 0x1F, 0xCF, 0xC3, 0xF8, 0xFE, 0x7E, 0x07, 0xEF, - 0xC0, 0x3F, 0xF8, 0x03, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0xE0, 0x7F, 0xFF, - 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, - 0x06, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFC, 0x07, 0xFF, - 0xFE, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x3E, 0x00, 0x7F, 0xFE, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, - 0xFC, 0x3F, 0xFF, 0xFC, 0x7F, 0x00, 0x78, 0x7C, 0x00, 0x78, 0xF8, 0x00, - 0xF8, 0xF8, 0x03, 0xF8, 0xFC, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0x7F, 0xFF, 0xFF, 0x3F, 0xFD, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0x00, 0x0F, 0xBF, 0xFC, 0x00, 0x7F, - 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0xFF, 0x03, - 0xF8, 0x0F, 0xE0, 0x07, 0xE0, 0x7E, 0x00, 0x3F, 0x03, 0xE0, 0x00, 0xF8, - 0x1F, 0x00, 0x07, 0xC0, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xF0, 0x7C, - 0x00, 0x1F, 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0xC0, 0xFC, 0x00, - 0x7C, 0x0F, 0xE0, 0x07, 0xE3, 0xFF, 0xC0, 0xFE, 0x3F, 0xFF, 0xFF, 0xE1, - 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x7F, 0x9F, 0xFC, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xE3, 0x80, 0x7F, 0xFF, 0xC0, 0x7F, 0xFF, - 0xE0, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFF, 0x01, 0xFC, 0x7E, 0x00, - 0x7C, 0x7E, 0x00, 0x3E, 0x3E, 0x00, 0x0E, 0x3E, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x0C, 0x7F, 0x80, 0x3F, 0x1F, - 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x7C, 0x00, 0x3F, 0x87, 0xC0, 0x0F, - 0xFF, 0x7C, 0x03, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0x81, 0xFC, 0x0F, 0xF8, 0x3F, 0x00, 0x3F, 0x83, 0xE0, 0x01, 0xF0, 0x7C, - 0x00, 0x1F, 0x07, 0xC0, 0x01, 0xF0, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x01, - 0xF0, 0xF8, 0x00, 0x1E, 0x0F, 0x80, 0x03, 0xE0, 0xF8, 0x00, 0x3E, 0x0F, - 0xC0, 0x07, 0xE0, 0xFC, 0x00, 0xFE, 0x07, 0xF0, 0x3F, 0xF8, 0x7F, 0xFF, - 0xFF, 0xC3, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0xFF, 0xE7, 0xF8, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0xF0, 0x03, 0xFF, - 0xF8, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x1F, 0xE0, 0x7E, 0x3F, 0x80, - 0x1F, 0x3F, 0x00, 0x0F, 0x7E, 0x00, 0x0F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x1C, 0x7F, 0x01, 0xFE, 0x7F, 0xFF, - 0xFE, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x03, 0xFF, - 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0x01, 0xF0, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0xFF, 0xF0, - 0x0F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xE0, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x0F, - 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x0F, 0xFE, 0xFF, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, - 0x0F, 0xFF, 0xFF, 0xF1, 0xFC, 0x1F, 0xFE, 0x3F, 0x80, 0x7F, 0x03, 0xE0, - 0x03, 0xF0, 0x7E, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xE0, 0xF8, 0x00, 0x3E, - 0x0F, 0x80, 0x03, 0xE0, 0xF8, 0x00, 0x3E, 0x0F, 0x80, 0x03, 0xC0, 0xF8, - 0x00, 0x7C, 0x0F, 0xC0, 0x0F, 0xC0, 0xFC, 0x01, 0xFC, 0x07, 0xF0, 0x7F, - 0x80, 0x7F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF8, 0x00, - 0xFF, 0xEF, 0x80, 0x03, 0xF0, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x1F, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x00, - 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x01, 0xF1, 0xF8, 0x00, 0x79, 0xFF, 0x80, 0x1E, 0xFF, 0xF0, 0x0F, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0x07, 0xE0, 0x3F, 0x00, 0xF8, - 0x1F, 0x80, 0x3E, 0x07, 0xC0, 0x0F, 0x81, 0xF0, 0x03, 0xC0, 0x7C, 0x00, - 0xF0, 0x1E, 0x00, 0x7C, 0x0F, 0x80, 0x1F, 0x03, 0xE0, 0x07, 0xC0, 0xF8, - 0x01, 0xE0, 0x3C, 0x00, 0xF8, 0x0F, 0x00, 0x3E, 0x1F, 0xF8, 0x3F, 0xEF, - 0xFE, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF0, 0x3F, - 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x1F, 0xFC, 0x00, - 0x3F, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, - 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x01, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x3F, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, - 0x3F, 0xFF, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF8, 0x00, 0x01, - 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0xC0, - 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0x0F, - 0xFC, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3C, 0x3F, 0xF0, - 0x1F, 0x1F, 0xFC, 0x07, 0xC7, 0xFF, 0x01, 0xF1, 0xFF, 0xC0, 0x78, 0x7F, - 0xE0, 0x1E, 0x7F, 0x80, 0x0F, 0xBF, 0x80, 0x03, 0xFF, 0xC0, 0x00, 0xFF, - 0xC0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x01, - 0xF7, 0xF0, 0x00, 0x7C, 0xFE, 0x00, 0x1E, 0x1F, 0xC0, 0x0F, 0x83, 0xF8, - 0x1F, 0xE0, 0xFF, 0xEF, 0xF8, 0x3F, 0xFB, 0xFE, 0x1F, 0xFE, 0xFF, 0x07, - 0xFF, 0x9F, 0xC0, 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0xC0, 0x03, - 0xFF, 0x80, 0x07, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, - 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0xF8, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, - 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x7F, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0x81, 0xE0, - 0x3F, 0xBF, 0x9F, 0xE1, 0xFF, 0xFE, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0xFC, 0x7F, 0xC7, 0xF1, 0xF0, 0x7E, 0x1F, 0x87, 0xC1, 0xF0, - 0x7C, 0x1F, 0x07, 0x81, 0xE0, 0x7C, 0x1E, 0x0F, 0x81, 0xE0, 0xF8, 0x3E, - 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3C, 0x0F, 0x03, - 0xC1, 0xF0, 0x7C, 0x0F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF1, - 0xFE, 0x1F, 0x87, 0xEF, 0xFC, 0x7F, 0x1F, 0xFF, 0xF3, 0xFC, 0x7F, 0xFF, - 0xCF, 0xF3, 0xFF, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x01, 0xF8, 0x01, 0xF9, - 0xFF, 0x80, 0xFE, 0xFF, 0xF0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x83, - 0xFF, 0x07, 0xE0, 0x3F, 0x00, 0xF8, 0x1F, 0x80, 0x3E, 0x07, 0xC0, 0x0F, - 0x81, 0xF0, 0x03, 0xC0, 0x7C, 0x00, 0xF0, 0x1E, 0x00, 0x7C, 0x0F, 0x80, - 0x1F, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x01, 0xE0, 0x3C, 0x00, 0xF8, 0x0F, - 0x00, 0x3E, 0x1F, 0xF8, 0x3F, 0xEF, 0xFE, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, - 0xFF, 0xE1, 0xFF, 0xFF, 0xF0, 0x3F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, - 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0xFF, - 0x03, 0xF8, 0xFE, 0x00, 0xFE, 0x7C, 0x00, 0x3F, 0x7C, 0x00, 0x0F, 0xBE, - 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, - 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0xFD, 0xF8, 0x00, 0x7C, 0xFE, 0x00, 0xFE, - 0x3F, 0x81, 0xFE, 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x01, 0xFF, 0xFC, - 0x00, 0x7F, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x07, - 0xF9, 0xFF, 0xC0, 0x1F, 0xF7, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xC0, 0x7F, - 0xFF, 0xFF, 0xC0, 0x7F, 0xF0, 0x3F, 0x80, 0x3F, 0x80, 0x1F, 0x80, 0x7E, - 0x00, 0x3F, 0x00, 0xF8, 0x00, 0x3E, 0x01, 0xF0, 0x00, 0x7C, 0x03, 0xC0, - 0x00, 0xF8, 0x0F, 0x80, 0x01, 0xF0, 0x1F, 0x00, 0x07, 0xE0, 0x3E, 0x00, - 0x0F, 0x80, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xFE, 0x07, - 0xF8, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0x80, 0x1E, 0xFF, 0xFC, - 0x00, 0x7C, 0xFF, 0xF0, 0x00, 0xF8, 0x7F, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x1F, - 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x07, 0xFF, 0x3F, 0xC0, 0xFF, 0xFD, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, - 0xFF, 0xFF, 0x8F, 0xE0, 0x7F, 0xF8, 0xFC, 0x00, 0xFE, 0x07, 0xC0, 0x03, - 0xE0, 0x7C, 0x00, 0x1F, 0x03, 0xE0, 0x00, 0xF8, 0x1E, 0x00, 0x07, 0xC1, - 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x7C, 0x00, 0x1F, 0x03, 0xF0, - 0x01, 0xF8, 0x1F, 0x80, 0x1F, 0xC0, 0xFF, 0x03, 0xFC, 0x03, 0xFF, 0xFF, - 0xE0, 0x1F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0xFF, 0xE7, 0xC0, - 0x01, 0xFC, 0x3C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7F, - 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x0F, 0x80, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0xFF, 0xE0, - 0x7F, 0xDF, 0xFF, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0x1C, 0x00, 0x7F, - 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xCE, 0x03, 0xFF, 0xFC, - 0x0F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC3, 0xF8, 0x0F, 0x87, - 0xC0, 0x0E, 0x0F, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xFF, 0x80, 0x3F, - 0xFF, 0xC0, 0x3F, 0xFF, 0xC0, 0x1F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, - 0x3F, 0x1C, 0x00, 0x3E, 0x7C, 0x00, 0x7C, 0xFC, 0x03, 0xF3, 0xFF, 0xFF, - 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x1F, 0xFF, 0xF0, 0x00, 0xFF, 0x00, - 0x00, 0x03, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, - 0x80, 0x00, 0x78, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xE0, 0x00, - 0x1E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3C, 0x00, - 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0xF7, 0xFF, - 0xFF, 0x7F, 0xFF, 0xF3, 0xFF, 0xFE, 0x1F, 0xFF, 0x80, 0x7F, 0x80, 0x7F, - 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xE0, - 0x3F, 0xC7, 0xC0, 0x07, 0x8F, 0x80, 0x1F, 0x3E, 0x00, 0x3E, 0x7C, 0x00, - 0x7C, 0xF8, 0x00, 0xF1, 0xF0, 0x03, 0xE3, 0xE0, 0x07, 0xC7, 0xC0, 0x0F, - 0x8F, 0x80, 0x1F, 0x1F, 0x00, 0x7C, 0x3E, 0x01, 0xF8, 0x7E, 0x0F, 0xFC, - 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF1, 0xFF, 0xEF, 0xE1, 0xFF, 0xBF, 0x80, - 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xE1, 0xF8, 0x03, 0xE0, - 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0xFC, - 0x1F, 0x80, 0x07, 0xC1, 0xF0, 0x00, 0x7C, 0x3E, 0x00, 0x07, 0xE7, 0xE0, - 0x00, 0x3E, 0x7C, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xEF, 0xFC, 0x03, 0xFF, - 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x07, 0xFE, 0x7F, 0x80, 0x3F, 0xC3, 0xE1, - 0xF0, 0xF8, 0x3E, 0x3F, 0x0F, 0x03, 0xE3, 0xF1, 0xF0, 0x3E, 0x7F, 0x1E, - 0x03, 0xE7, 0xF3, 0xE0, 0x3E, 0xFF, 0xBC, 0x03, 0xFF, 0xFF, 0xC0, 0x3F, - 0xFF, 0xFC, 0x03, 0xFE, 0xFF, 0x80, 0x3F, 0xEF, 0xF8, 0x03, 0xFC, 0xFF, - 0x00, 0x3F, 0x8F, 0xF0, 0x03, 0xF8, 0x7E, 0x00, 0x3F, 0x07, 0xE0, 0x01, - 0xF0, 0x7C, 0x00, 0x1E, 0x07, 0xC0, 0x00, 0x03, 0xFE, 0x0F, 0xF8, 0x3F, - 0xF0, 0xFF, 0xC1, 0xFF, 0x8F, 0xFE, 0x0F, 0xFC, 0x7F, 0xF0, 0x7F, 0xC1, - 0xFF, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xFF, 0xC0, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xE3, - 0xF8, 0x00, 0xFE, 0x0F, 0xE0, 0x3F, 0xE0, 0x7F, 0xC3, 0xFF, 0x87, 0xFF, - 0x3F, 0xFC, 0x7F, 0xF9, 0xFF, 0xE3, 0xFF, 0x87, 0xFE, 0x0F, 0xF8, 0x00, - 0x01, 0xFE, 0x03, 0xFE, 0x03, 0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x07, 0xFF, - 0x07, 0xFF, 0x07, 0xFE, 0x03, 0xFC, 0x03, 0xFC, 0x01, 0xF8, 0x01, 0xF0, - 0x00, 0xF8, 0x03, 0xF0, 0x00, 0xF8, 0x03, 0xE0, 0x00, 0xFC, 0x07, 0xC0, - 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x7E, 0x1F, 0x00, - 0x00, 0x7E, 0x3E, 0x00, 0x00, 0x3E, 0x7C, 0x00, 0x00, 0x3E, 0x7C, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x07, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, - 0xE0, 0xFF, 0xFF, 0xE0, 0x7C, 0x0F, 0xE0, 0x3C, 0x0F, 0xE0, 0x1E, 0x0F, - 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, - 0x80, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0xF0, 0x3F, - 0x00, 0xF8, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFE, 0x0F, - 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x00, 0x1F, 0xC0, 0x1F, - 0xE0, 0x1F, 0xF0, 0x0F, 0xE0, 0x0F, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, - 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x3F, 0x80, 0x3F, 0xC0, 0x1F, 0xC0, - 0x0F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, - 0x80, 0x07, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x00, 0x78, - 0x00, 0x01, 0xE0, 0x3C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0x80, 0xF0, 0x3E, - 0x07, 0xC0, 0xF0, 0x1E, 0x03, 0xC0, 0xF8, 0x1F, 0x03, 0xC0, 0x78, 0x0F, - 0x03, 0xE0, 0x7C, 0x0F, 0x01, 0xE0, 0x3C, 0x0F, 0x81, 0xF0, 0x3C, 0x07, - 0x80, 0xF0, 0x3E, 0x07, 0xC0, 0xF0, 0x1E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, - 0xC0, 0x70, 0x00, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0x3F, 0xC0, - 0x0F, 0xE0, 0x03, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, - 0x00, 0x0F, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, - 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xF8, - 0x07, 0xF8, 0x03, 0xE0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF0, 0x00, 0x78, - 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x1F, 0x80, 0x7F, - 0xC0, 0x7F, 0xC0, 0x3F, 0xC0, 0x1F, 0xC0, 0x07, 0x80, 0x00, 0x03, 0xE0, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xE0, 0x39, 0xFF, 0xE0, 0xF7, 0xFF, 0xE7, - 0xFF, 0xCF, 0xFF, 0xFE, 0x0F, 0xFF, 0x38, 0x0F, 0xFC, 0x00, 0x0F, 0xE0, - 0x00, 0x0F, 0x80}; - -const GFXglyph FreeMonoBoldOblique24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 28, 0, 1}, // 0x20 ' ' - {0, 12, 31, 28, 12, -29}, // 0x21 '!' - {47, 17, 14, 28, 11, -28}, // 0x22 '"' - {77, 24, 34, 28, 5, -30}, // 0x23 '#' - {179, 25, 38, 28, 4, -31}, // 0x24 '$' - {298, 22, 30, 28, 6, -28}, // 0x25 '%' - {381, 21, 28, 28, 5, -26}, // 0x26 '&' - {455, 7, 14, 28, 16, -28}, // 0x27 ''' - {468, 14, 37, 28, 14, -29}, // 0x28 '(' - {533, 14, 37, 28, 5, -29}, // 0x29 ')' - {598, 21, 19, 28, 8, -28}, // 0x2A '*' - {648, 24, 26, 28, 5, -25}, // 0x2B '+' - {726, 12, 14, 28, 6, -6}, // 0x2C ',' - {747, 24, 5, 28, 5, -15}, // 0x2D '-' - {762, 7, 6, 28, 11, -4}, // 0x2E '.' - {768, 28, 38, 28, 3, -32}, // 0x2F '/' - {901, 23, 31, 28, 6, -29}, // 0x30 '0' - {991, 21, 30, 28, 4, -29}, // 0x31 '1' - {1070, 26, 30, 28, 3, -29}, // 0x32 '2' - {1168, 25, 31, 28, 4, -29}, // 0x33 '3' - {1265, 22, 28, 28, 5, -27}, // 0x34 '4' - {1342, 25, 31, 28, 4, -29}, // 0x35 '5' - {1439, 24, 31, 28, 7, -29}, // 0x36 '6' - {1532, 22, 30, 28, 9, -29}, // 0x37 '7' - {1615, 23, 31, 28, 6, -29}, // 0x38 '8' - {1705, 24, 31, 28, 5, -29}, // 0x39 '9' - {1798, 10, 22, 28, 11, -20}, // 0x3A ':' - {1826, 15, 28, 28, 5, -20}, // 0x3B ';' - {1879, 25, 21, 28, 5, -23}, // 0x3C '<' - {1945, 26, 14, 28, 4, -19}, // 0x3D '=' - {1991, 25, 22, 28, 4, -23}, // 0x3E '>' - {2060, 19, 29, 28, 10, -27}, // 0x3F '?' - {2129, 23, 36, 28, 5, -28}, // 0x40 '@' - {2233, 30, 27, 28, 0, -26}, // 0x41 'A' - {2335, 29, 27, 28, 1, -26}, // 0x42 'B' - {2433, 28, 29, 28, 3, -27}, // 0x43 'C' - {2535, 28, 27, 28, 1, -26}, // 0x44 'D' - {2630, 29, 27, 28, 1, -26}, // 0x45 'E' - {2728, 31, 27, 28, 0, -26}, // 0x46 'F' - {2833, 28, 29, 28, 3, -27}, // 0x47 'G' - {2935, 30, 27, 28, 1, -26}, // 0x48 'H' - {3037, 25, 27, 28, 3, -26}, // 0x49 'I' - {3122, 31, 28, 28, 0, -26}, // 0x4A 'J' - {3231, 31, 27, 28, 0, -26}, // 0x4B 'K' - {3336, 27, 27, 28, 1, -26}, // 0x4C 'L' - {3428, 34, 27, 28, 0, -26}, // 0x4D 'M' - {3543, 32, 27, 28, 1, -26}, // 0x4E 'N' - {3651, 27, 29, 28, 3, -27}, // 0x4F 'O' - {3749, 28, 27, 28, 1, -26}, // 0x50 'P' - {3844, 27, 35, 28, 3, -27}, // 0x51 'Q' - {3963, 29, 27, 28, 0, -26}, // 0x52 'R' - {4061, 26, 29, 28, 3, -27}, // 0x53 'S' - {4156, 26, 27, 28, 4, -26}, // 0x54 'T' - {4244, 28, 28, 28, 4, -26}, // 0x55 'U' - {4342, 30, 27, 28, 2, -26}, // 0x56 'V' - {4444, 29, 27, 28, 3, -26}, // 0x57 'W' - {4542, 32, 27, 28, 0, -26}, // 0x58 'X' - {4650, 26, 27, 28, 4, -26}, // 0x59 'Y' - {4738, 27, 27, 28, 2, -26}, // 0x5A 'Z' - {4830, 18, 37, 28, 10, -29}, // 0x5B '[' - {4914, 13, 38, 28, 10, -32}, // 0x5C '\' - {4976, 18, 37, 28, 5, -29}, // 0x5D ']' - {5060, 20, 15, 28, 8, -29}, // 0x5E '^' - {5098, 29, 5, 28, -2, 5}, // 0x5F '_' - {5117, 8, 8, 28, 13, -30}, // 0x60 '`' - {5125, 24, 23, 28, 3, -21}, // 0x61 'a' - {5194, 29, 31, 28, 0, -29}, // 0x62 'b' - {5307, 25, 23, 28, 3, -21}, // 0x63 'c' - {5379, 28, 31, 28, 3, -29}, // 0x64 'd' - {5488, 24, 23, 28, 3, -21}, // 0x65 'e' - {5557, 28, 30, 28, 4, -29}, // 0x66 'f' - {5662, 28, 31, 28, 3, -21}, // 0x67 'g' - {5771, 26, 30, 28, 2, -29}, // 0x68 'h' - {5869, 23, 29, 28, 3, -28}, // 0x69 'i' - {5953, 23, 38, 28, 3, -28}, // 0x6A 'j' - {6063, 26, 30, 28, 2, -29}, // 0x6B 'k' - {6161, 23, 30, 28, 3, -29}, // 0x6C 'l' - {6248, 30, 22, 28, 0, -21}, // 0x6D 'm' - {6331, 26, 22, 28, 2, -21}, // 0x6E 'n' - {6403, 25, 23, 28, 3, -21}, // 0x6F 'o' - {6475, 31, 31, 28, -1, -21}, // 0x70 'p' - {6596, 29, 31, 28, 2, -21}, // 0x71 'q' - {6709, 28, 22, 28, 2, -21}, // 0x72 'r' - {6786, 23, 23, 28, 4, -21}, // 0x73 's' - {6853, 20, 28, 28, 5, -26}, // 0x74 't' - {6923, 23, 22, 28, 5, -20}, // 0x75 'u' - {6987, 28, 21, 28, 3, -20}, // 0x76 'v' - {7061, 28, 21, 28, 3, -20}, // 0x77 'w' - {7135, 29, 21, 28, 1, -20}, // 0x78 'x' - {7212, 32, 30, 28, -1, -20}, // 0x79 'y' - {7332, 25, 21, 28, 4, -20}, // 0x7A 'z' - {7398, 17, 37, 28, 10, -29}, // 0x7B '{' - {7477, 11, 36, 28, 11, -28}, // 0x7C '|' - {7527, 17, 37, 28, 6, -29}, // 0x7D '}' - {7606, 23, 10, 28, 5, -17}}; // 0x7E '~' - -const GFXfont FreeMonoBoldOblique24pt7b PROGMEM = { - (uint8_t *)FreeMonoBoldOblique24pt7bBitmaps, - (GFXglyph *)FreeMonoBoldOblique24pt7bGlyphs, 0x20, 0x7E, 47}; - -// Approx. 8307 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique9pt7b.h deleted file mode 100644 index 86d3e9c..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoBoldOblique9pt7b.h +++ /dev/null @@ -1,205 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoBoldOblique9pt7bBitmaps[] PROGMEM = { - 0x39, 0xCC, 0x67, 0x31, 0x8C, 0x07, 0x38, 0x6C, 0xD9, 0x36, 0x48, 0x80, - 0x09, 0x0D, 0x86, 0xCF, 0xF7, 0xF9, 0xB3, 0xFD, 0xFE, 0x6C, 0x36, 0x1B, - 0x00, 0x00, 0x06, 0x07, 0x07, 0xE6, 0x33, 0x01, 0xE0, 0x7C, 0x06, 0x43, - 0x33, 0xBF, 0x83, 0x03, 0x00, 0x80, 0x1C, 0x11, 0x10, 0x88, 0x83, 0xB8, - 0xF3, 0xB8, 0x22, 0x21, 0x11, 0x07, 0x00, 0x0F, 0x1F, 0x30, 0x30, 0x38, - 0x7B, 0xDF, 0xCE, 0xFF, 0x7E, 0xFA, 0x80, 0x19, 0x8C, 0xC6, 0x63, 0x18, - 0xC6, 0x31, 0xC6, 0x30, 0x31, 0xC6, 0x31, 0x8C, 0x63, 0x31, 0x98, 0xCC, - 0x40, 0x08, 0x08, 0xFF, 0xFF, 0x38, 0x6C, 0x6C, 0x0C, 0x06, 0x03, 0x1F, - 0xFF, 0xF8, 0xC0, 0x60, 0x30, 0x10, 0x00, 0x36, 0x4C, 0x80, 0xFF, 0xFF, - 0xC0, 0xFC, 0x00, 0x00, 0x0C, 0x03, 0x00, 0xC0, 0x18, 0x06, 0x01, 0x80, - 0x30, 0x0C, 0x03, 0x00, 0x60, 0x18, 0x06, 0x00, 0xC0, 0x30, 0x00, 0x0F, - 0x0F, 0xCC, 0x6C, 0x36, 0x1B, 0x0D, 0x05, 0x86, 0xC3, 0x63, 0x3F, 0x8F, - 0x00, 0x06, 0x1C, 0x3C, 0x6C, 0x0C, 0x0C, 0x08, 0x18, 0x18, 0x18, 0xFE, - 0xFE, 0x07, 0x83, 0xF1, 0x8C, 0x43, 0x00, 0xC0, 0xE0, 0x70, 0x38, 0x38, - 0x1C, 0x6F, 0xF3, 0xFC, 0x1F, 0x1F, 0xC0, 0x60, 0x30, 0x30, 0x70, 0x38, - 0x06, 0x03, 0x03, 0xBF, 0x9F, 0x80, 0x03, 0x07, 0x0B, 0x1B, 0x32, 0x66, - 0xFF, 0xFF, 0x1E, 0x1E, 0x3F, 0x9F, 0x98, 0x0F, 0xC7, 0xF3, 0x18, 0x0C, - 0x06, 0x06, 0x7F, 0x1E, 0x00, 0x07, 0x87, 0xCE, 0x06, 0x06, 0x03, 0xF3, - 0xFD, 0xC6, 0xC3, 0x63, 0xBF, 0x8F, 0x80, 0xFF, 0xFF, 0xC3, 0x06, 0x06, - 0x0C, 0x18, 0x18, 0x30, 0x30, 0x60, 0x1F, 0x1F, 0xDC, 0x6C, 0x36, 0x31, - 0xF1, 0xF8, 0xC6, 0xC3, 0x63, 0xBF, 0x8F, 0x80, 0x1E, 0x3F, 0x33, 0x63, - 0x63, 0x67, 0x7F, 0x3E, 0x06, 0x1C, 0xF8, 0xF0, 0x77, 0x00, 0x00, 0xEE, - 0x1C, 0x70, 0x00, 0x00, 0x03, 0x0C, 0x61, 0x08, 0x00, 0x00, 0xC1, 0xE1, - 0xE1, 0xE0, 0xF0, 0x07, 0x00, 0xF0, 0x0C, 0x7F, 0xDF, 0xF0, 0x00, 0x00, - 0x7F, 0xFF, 0xF0, 0x30, 0x0F, 0x00, 0xE0, 0x1E, 0x07, 0xC7, 0x87, 0x83, - 0x00, 0x7D, 0xFF, 0x18, 0x30, 0xE3, 0x9C, 0x30, 0x01, 0xC3, 0x80, 0x0F, - 0x0F, 0xCC, 0x6C, 0x36, 0x72, 0x79, 0x7D, 0xB6, 0xDA, 0x6F, 0xB3, 0xD8, - 0x0C, 0x07, 0xE1, 0xE0, 0x0F, 0x83, 0xF0, 0x1E, 0x03, 0xC0, 0xD8, 0x31, - 0x87, 0xF1, 0xFE, 0x30, 0xDF, 0x3F, 0xC7, 0x80, 0x3F, 0xC7, 0xFC, 0x61, - 0x8C, 0x31, 0xFC, 0x3F, 0x84, 0x19, 0x83, 0x30, 0x6F, 0xFB, 0xFE, 0x00, - 0x0F, 0xF1, 0xFF, 0x30, 0x66, 0x06, 0x60, 0x0C, 0x00, 0xC0, 0x0C, 0x00, - 0xE0, 0xC7, 0xF8, 0x3F, 0x00, 0x3F, 0x87, 0xF8, 0x63, 0x8C, 0x31, 0x06, - 0x60, 0xCC, 0x19, 0x86, 0x31, 0xCF, 0xF3, 0xF8, 0x00, 0x3F, 0xE3, 0xFE, - 0x18, 0x61, 0xB6, 0x1F, 0x01, 0xF0, 0x32, 0x03, 0x00, 0x30, 0x4F, 0xFC, - 0xFF, 0xC0, 0x3F, 0xF3, 0xFE, 0x18, 0x61, 0xB6, 0x1F, 0x03, 0xF0, 0x32, - 0x03, 0x00, 0x30, 0x0F, 0xC0, 0xFC, 0x00, 0x0F, 0xE3, 0xFC, 0xC1, 0x30, - 0x06, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE1, 0x9F, 0xF0, 0xF8, 0x00, 0x1E, - 0xF3, 0xCF, 0x18, 0x61, 0x84, 0x10, 0xC3, 0xFC, 0x3F, 0xC3, 0x08, 0x31, - 0x8F, 0xBC, 0xFB, 0xC0, 0x3F, 0xCF, 0xF0, 0x60, 0x10, 0x0C, 0x03, 0x00, - 0xC0, 0x20, 0x18, 0x3F, 0xCF, 0xF0, 0x07, 0xF0, 0x7F, 0x00, 0x80, 0x18, - 0x01, 0x80, 0x18, 0x61, 0x84, 0x10, 0xC3, 0x0F, 0xE0, 0x7C, 0x00, 0x3E, - 0xE7, 0xFC, 0x66, 0x0D, 0x81, 0x60, 0x7C, 0x0E, 0xC1, 0x98, 0x31, 0x1F, - 0x3B, 0xE7, 0x00, 0x3F, 0x07, 0xE0, 0x30, 0x06, 0x00, 0xC0, 0x10, 0x06, - 0x00, 0xC3, 0x18, 0x6F, 0xFB, 0xFF, 0x00, 0x38, 0x39, 0xC3, 0xC7, 0x3C, - 0x79, 0xE3, 0xDA, 0x1F, 0xF0, 0x9D, 0x8C, 0xCC, 0x60, 0x67, 0xCF, 0x3C, - 0x78, 0x3C, 0xF9, 0xE7, 0x87, 0x18, 0x3C, 0xC1, 0x66, 0x1B, 0xB0, 0xCD, - 0x06, 0x78, 0x31, 0xC3, 0xCE, 0x3E, 0x30, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, - 0xC0, 0xF0, 0x3C, 0x0F, 0x06, 0xE3, 0x9F, 0xC3, 0xC0, 0x3F, 0xC7, 0xFC, - 0x61, 0x8C, 0x31, 0x8E, 0x3F, 0x87, 0xE1, 0x80, 0x30, 0x0F, 0xC3, 0xF0, - 0x00, 0x0F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x06, 0xE3, - 0x1F, 0xC3, 0xC0, 0x80, 0x7F, 0x3F, 0xC0, 0x3F, 0xC3, 0xFE, 0x18, 0x61, - 0x86, 0x10, 0xE3, 0xFC, 0x3F, 0x83, 0x18, 0x31, 0xCF, 0x8F, 0xF8, 0x70, - 0x1E, 0xCF, 0xF7, 0x19, 0x80, 0x70, 0x1F, 0x81, 0xF3, 0x0C, 0xC3, 0x3F, - 0x8B, 0xC0, 0x7F, 0xCF, 0xF9, 0x93, 0x66, 0x60, 0xC0, 0x18, 0x02, 0x00, - 0xC0, 0x18, 0x0F, 0xC1, 0xF8, 0x00, 0xF9, 0xFF, 0x7D, 0x83, 0x30, 0x64, - 0x09, 0x83, 0x30, 0x66, 0x0C, 0xE3, 0x0F, 0xC0, 0xF0, 0x00, 0xF9, 0xFE, - 0x3D, 0x83, 0x30, 0xC6, 0x30, 0xE6, 0x0D, 0x81, 0xB0, 0x3C, 0x07, 0x00, - 0x60, 0x00, 0xF9, 0xFF, 0x3D, 0x83, 0x36, 0x64, 0xC8, 0xBF, 0x35, 0xE7, - 0xB8, 0xE7, 0x1C, 0xE3, 0x18, 0x00, 0x3C, 0xF3, 0xCF, 0x1C, 0xC0, 0xD8, - 0x0F, 0x00, 0x60, 0x0F, 0x01, 0xB8, 0x31, 0x8F, 0x3C, 0xF3, 0xC0, 0x79, - 0xEE, 0x38, 0xC6, 0x19, 0x81, 0xE0, 0x38, 0x06, 0x00, 0xC0, 0x18, 0x0F, - 0xC3, 0xF8, 0x00, 0x3F, 0xCF, 0xF3, 0x18, 0xCC, 0x06, 0x03, 0x01, 0x80, - 0xC6, 0x61, 0xBF, 0xCF, 0xF0, 0x1E, 0x3C, 0xC1, 0x83, 0x06, 0x08, 0x30, - 0x60, 0xC1, 0x06, 0x0F, 0x1E, 0x00, 0x06, 0x31, 0x86, 0x31, 0x8C, 0x31, - 0x8C, 0x61, 0x8C, 0x60, 0x1E, 0x78, 0x30, 0x60, 0xC1, 0x86, 0x0C, 0x18, - 0x30, 0x41, 0x8F, 0x1E, 0x00, 0x08, 0x1C, 0x3C, 0x76, 0xE7, 0xC3, 0x7F, - 0xFF, 0xFC, 0x88, 0x80, 0x0F, 0x07, 0xE1, 0xF9, 0xFE, 0xE3, 0x30, 0xCF, - 0xFD, 0xFF, 0x38, 0x07, 0x00, 0x60, 0x0F, 0xC1, 0xFC, 0x71, 0xCC, 0x19, - 0x83, 0x30, 0xDF, 0xFB, 0xBC, 0x00, 0x1F, 0xCF, 0xF6, 0x1B, 0x00, 0xC0, - 0x30, 0x0F, 0xF1, 0xF8, 0x01, 0xE0, 0x38, 0x03, 0x0F, 0x63, 0xFC, 0xC3, - 0x30, 0x66, 0x0C, 0xC3, 0x9F, 0xF9, 0xF7, 0x00, 0x1F, 0x1F, 0xD8, 0x3F, - 0xFF, 0xFE, 0x1B, 0xFC, 0xF8, 0x07, 0xC3, 0xF1, 0x81, 0xFE, 0x7F, 0x84, - 0x03, 0x00, 0xC0, 0x30, 0x3F, 0x8F, 0xE0, 0x1E, 0xE7, 0xFD, 0x86, 0x60, - 0xCC, 0x19, 0xC6, 0x3F, 0xC1, 0xD8, 0x03, 0x00, 0xE1, 0xF8, 0x3E, 0x00, - 0x38, 0x1E, 0x01, 0x00, 0xDC, 0x3F, 0x8C, 0x62, 0x19, 0x84, 0x63, 0x3D, - 0xFF, 0x7C, 0x06, 0x03, 0x00, 0x03, 0xC3, 0xE0, 0x20, 0x30, 0x18, 0x0C, - 0x3F, 0xFF, 0xE0, 0x01, 0x81, 0x80, 0x07, 0xF3, 0xF8, 0x0C, 0x04, 0x06, - 0x03, 0x01, 0x80, 0xC0, 0x40, 0x67, 0xE3, 0xE0, 0x38, 0x0E, 0x01, 0x80, - 0x4F, 0x37, 0xCF, 0x83, 0xC0, 0xF0, 0x26, 0x39, 0xEE, 0x78, 0x1F, 0x0F, - 0x01, 0x80, 0xC0, 0x60, 0x20, 0x30, 0x18, 0x0C, 0x3F, 0xFF, 0xE0, 0x7E, - 0xE7, 0xFF, 0x33, 0x32, 0x63, 0x66, 0x36, 0x62, 0xF7, 0x7F, 0x67, 0x77, - 0x8F, 0xF8, 0xC3, 0x10, 0x66, 0x08, 0xC3, 0x3C, 0x7F, 0x8F, 0x1F, 0x0F, - 0xE6, 0x1F, 0x03, 0xC0, 0xF8, 0x67, 0xF0, 0xF8, 0x3F, 0xE3, 0xFF, 0x1C, - 0x31, 0x83, 0x18, 0x31, 0x86, 0x3F, 0xE3, 0x78, 0x30, 0x03, 0x00, 0xFC, - 0x0F, 0x80, 0x1E, 0xEF, 0xFD, 0x86, 0x60, 0xCC, 0x19, 0xC7, 0x3F, 0xE1, - 0xE8, 0x03, 0x00, 0x60, 0x3E, 0x07, 0xC0, 0x39, 0xDF, 0xF1, 0xC0, 0x60, - 0x10, 0x0C, 0x0F, 0xF3, 0xF8, 0x1F, 0x7F, 0x63, 0x7E, 0x1F, 0xC3, 0xFE, - 0xFC, 0x10, 0x08, 0x0C, 0x1F, 0xEF, 0xF1, 0x80, 0x80, 0xC0, 0x60, 0x3F, - 0x8F, 0x80, 0xF3, 0xFC, 0xF6, 0x09, 0x86, 0x61, 0x98, 0xE7, 0xF8, 0xFE, - 0xFB, 0xFF, 0x7C, 0xC6, 0x19, 0x83, 0x60, 0x6C, 0x07, 0x00, 0xC0, 0xF1, - 0xFE, 0x3D, 0xB3, 0x37, 0xC7, 0xF8, 0xEE, 0x1D, 0xC3, 0x30, 0x79, 0xEF, - 0x38, 0xEE, 0x0F, 0x01, 0xE0, 0x6E, 0x3C, 0xE7, 0xBC, 0x3C, 0xF3, 0x8F, - 0x18, 0xC1, 0x9C, 0x19, 0x81, 0xF0, 0x0E, 0x00, 0xE0, 0x0C, 0x01, 0x80, - 0xFC, 0x0F, 0xC0, 0x7F, 0xBF, 0xD9, 0xC1, 0x83, 0x83, 0x1B, 0xFD, 0xFE, - 0x06, 0x1C, 0x60, 0xC1, 0x86, 0x3C, 0x70, 0x30, 0x41, 0x83, 0x07, 0x06, - 0x00, 0x33, 0x32, 0x26, 0x66, 0x44, 0xCC, 0xC8, 0x0C, 0x0E, 0x04, 0x0C, - 0x0C, 0x0C, 0x0F, 0x0F, 0x18, 0x18, 0x10, 0x30, 0xF0, 0xE0, 0x38, 0x7C, - 0xF7, 0xC1, 0xC0}; - -const GFXglyph FreeMonoBoldOblique9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 11, 0, 1}, // 0x20 ' ' - {0, 5, 11, 11, 4, -10}, // 0x21 '!' - {7, 7, 5, 11, 4, -10}, // 0x22 '"' - {12, 9, 12, 11, 2, -10}, // 0x23 '#' - {26, 9, 14, 11, 2, -11}, // 0x24 '$' - {42, 9, 11, 11, 2, -10}, // 0x25 '%' - {55, 8, 10, 11, 2, -9}, // 0x26 '&' - {65, 2, 5, 11, 6, -10}, // 0x27 ''' - {67, 5, 14, 11, 5, -10}, // 0x28 '(' - {76, 5, 14, 11, 2, -10}, // 0x29 ')' - {85, 8, 7, 11, 3, -10}, // 0x2A '*' - {92, 9, 9, 11, 2, -8}, // 0x2B '+' - {103, 4, 5, 11, 2, -1}, // 0x2C ',' - {106, 9, 2, 11, 2, -5}, // 0x2D '-' - {109, 3, 2, 11, 4, -1}, // 0x2E '.' - {110, 11, 15, 11, 1, -12}, // 0x2F '/' - {131, 9, 12, 11, 2, -11}, // 0x30 '0' - {145, 8, 12, 11, 2, -11}, // 0x31 '1' - {157, 10, 12, 11, 1, -11}, // 0x32 '2' - {172, 9, 12, 11, 2, -11}, // 0x33 '3' - {186, 8, 10, 11, 2, -9}, // 0x34 '4' - {196, 9, 11, 11, 3, -10}, // 0x35 '5' - {209, 9, 12, 11, 3, -11}, // 0x36 '6' - {223, 8, 11, 11, 3, -10}, // 0x37 '7' - {234, 9, 12, 11, 2, -11}, // 0x38 '8' - {248, 8, 12, 11, 3, -11}, // 0x39 '9' - {260, 4, 8, 11, 4, -7}, // 0x3A ':' - {264, 6, 11, 11, 2, -7}, // 0x3B ';' - {273, 10, 8, 11, 2, -8}, // 0x3C '<' - {283, 10, 6, 11, 1, -7}, // 0x3D '=' - {291, 10, 8, 11, 1, -8}, // 0x3E '>' - {301, 7, 11, 11, 4, -10}, // 0x3F '?' - {311, 9, 15, 11, 2, -11}, // 0x40 '@' - {328, 11, 11, 11, 0, -10}, // 0x41 'A' - {344, 11, 11, 11, 0, -10}, // 0x42 'B' - {360, 12, 11, 11, 1, -10}, // 0x43 'C' - {377, 11, 11, 11, 0, -10}, // 0x44 'D' - {393, 12, 11, 11, 0, -10}, // 0x45 'E' - {410, 12, 11, 11, 0, -10}, // 0x46 'F' - {427, 11, 11, 11, 1, -10}, // 0x47 'G' - {443, 12, 11, 11, 0, -10}, // 0x48 'H' - {460, 10, 11, 11, 1, -10}, // 0x49 'I' - {474, 12, 11, 11, 0, -10}, // 0x4A 'J' - {491, 11, 11, 11, 0, -10}, // 0x4B 'K' - {507, 11, 11, 11, 0, -10}, // 0x4C 'L' - {523, 13, 11, 11, 0, -10}, // 0x4D 'M' - {541, 13, 11, 11, 0, -10}, // 0x4E 'N' - {559, 10, 11, 11, 1, -10}, // 0x4F 'O' - {573, 11, 11, 11, 0, -10}, // 0x50 'P' - {589, 10, 14, 11, 1, -10}, // 0x51 'Q' - {607, 12, 11, 11, 0, -10}, // 0x52 'R' - {624, 10, 11, 11, 2, -10}, // 0x53 'S' - {638, 11, 11, 11, 1, -10}, // 0x54 'T' - {654, 11, 11, 11, 1, -10}, // 0x55 'U' - {670, 11, 11, 11, 1, -10}, // 0x56 'V' - {686, 11, 11, 11, 1, -10}, // 0x57 'W' - {702, 12, 11, 11, 0, -10}, // 0x58 'X' - {719, 11, 11, 11, 1, -10}, // 0x59 'Y' - {735, 10, 11, 11, 1, -10}, // 0x5A 'Z' - {749, 7, 14, 11, 4, -10}, // 0x5B '[' - {762, 5, 15, 11, 4, -12}, // 0x5C '\' - {772, 7, 14, 11, 2, -10}, // 0x5D ']' - {785, 8, 6, 11, 3, -11}, // 0x5E '^' - {791, 11, 2, 11, -1, 3}, // 0x5F '_' - {794, 3, 3, 11, 5, -11}, // 0x60 '`' - {796, 10, 8, 11, 1, -7}, // 0x61 'a' - {806, 11, 11, 11, 0, -10}, // 0x62 'b' - {822, 10, 8, 11, 1, -7}, // 0x63 'c' - {832, 11, 11, 11, 1, -10}, // 0x64 'd' - {848, 9, 8, 11, 1, -7}, // 0x65 'e' - {857, 10, 11, 11, 2, -10}, // 0x66 'f' - {871, 11, 12, 11, 1, -7}, // 0x67 'g' - {888, 10, 11, 11, 1, -10}, // 0x68 'h' - {902, 9, 11, 11, 1, -10}, // 0x69 'i' - {915, 9, 15, 11, 1, -10}, // 0x6A 'j' - {932, 10, 11, 11, 1, -10}, // 0x6B 'k' - {946, 9, 11, 11, 1, -10}, // 0x6C 'l' - {959, 12, 8, 11, 0, -7}, // 0x6D 'm' - {971, 11, 8, 11, 1, -7}, // 0x6E 'n' - {982, 10, 8, 11, 1, -7}, // 0x6F 'o' - {992, 12, 12, 11, -1, -7}, // 0x70 'p' - {1010, 11, 12, 11, 1, -7}, // 0x71 'q' - {1027, 10, 8, 11, 1, -7}, // 0x72 'r' - {1037, 8, 8, 11, 2, -7}, // 0x73 's' - {1045, 9, 11, 11, 1, -10}, // 0x74 't' - {1058, 10, 8, 11, 1, -7}, // 0x75 'u' - {1068, 11, 8, 11, 1, -7}, // 0x76 'v' - {1079, 11, 8, 11, 1, -7}, // 0x77 'w' - {1090, 11, 8, 11, 1, -7}, // 0x78 'x' - {1101, 12, 12, 11, 0, -7}, // 0x79 'y' - {1119, 9, 8, 11, 2, -7}, // 0x7A 'z' - {1128, 7, 14, 11, 3, -10}, // 0x7B '{' - {1141, 4, 14, 11, 4, -10}, // 0x7C '|' - {1148, 8, 14, 11, 2, -10}, // 0x7D '}' - {1162, 9, 4, 11, 2, -6}}; // 0x7E '~' - -const GFXfont FreeMonoBoldOblique9pt7b PROGMEM = { - (uint8_t *)FreeMonoBoldOblique9pt7bBitmaps, - (GFXglyph *)FreeMonoBoldOblique9pt7bGlyphs, 0x20, 0x7E, 18}; - -// Approx. 1839 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique12pt7b.h deleted file mode 100644 index 0617603..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique12pt7b.h +++ /dev/null @@ -1,250 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoOblique12pt7bBitmaps[] PROGMEM = { - 0x11, 0x11, 0x12, 0x22, 0x22, 0x00, 0x0E, 0xE0, 0xE7, 0xE7, 0xC6, 0xC6, - 0xC6, 0x84, 0x84, 0x02, 0x40, 0x88, 0x12, 0x02, 0x40, 0x48, 0x7F, 0xC2, - 0x40, 0x48, 0x11, 0x1F, 0xF8, 0x48, 0x09, 0x02, 0x40, 0x48, 0x09, 0x02, - 0x20, 0x02, 0x01, 0x00, 0xF4, 0xC3, 0x60, 0x50, 0x04, 0x00, 0xC0, 0x0F, - 0x00, 0x60, 0x0A, 0x02, 0x81, 0x30, 0xC7, 0xC0, 0x80, 0x20, 0x08, 0x00, - 0x0E, 0x02, 0x20, 0x84, 0x10, 0x82, 0x20, 0x38, 0x00, 0x38, 0x38, 0x38, - 0x08, 0xE0, 0x22, 0x08, 0x41, 0x08, 0x22, 0x03, 0x80, 0x07, 0x84, 0x04, - 0x02, 0x01, 0x00, 0xC1, 0xA2, 0x8A, 0x85, 0x43, 0x31, 0x8F, 0x60, 0xFF, - 0x6D, 0x20, 0x00, 0x44, 0x42, 0x21, 0x08, 0x84, 0x21, 0x08, 0x42, 0x10, - 0x42, 0x00, 0x00, 0x84, 0x10, 0x84, 0x21, 0x08, 0x46, 0x21, 0x10, 0x88, - 0x44, 0x00, 0x04, 0x02, 0x02, 0x1D, 0x13, 0xF0, 0x40, 0x50, 0x48, 0x44, - 0x00, 0x02, 0x00, 0x40, 0x08, 0x02, 0x00, 0x41, 0xFF, 0xC1, 0x00, 0x20, - 0x08, 0x01, 0x00, 0x20, 0x00, 0x1C, 0xE3, 0x18, 0x63, 0x08, 0x00, 0xFF, - 0xE0, 0x7F, 0x00, 0x00, 0x08, 0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, - 0x60, 0x02, 0x00, 0x20, 0x03, 0x00, 0x10, 0x01, 0x00, 0x18, 0x00, 0x80, - 0x08, 0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x00, 0x07, 0x06, 0x23, - 0x04, 0x81, 0x40, 0x50, 0x14, 0x06, 0x02, 0x80, 0xA0, 0x28, 0x0A, 0x04, - 0x83, 0x11, 0x83, 0x80, 0x03, 0x03, 0x83, 0x83, 0x43, 0x20, 0x10, 0x08, - 0x08, 0x04, 0x02, 0x01, 0x01, 0x00, 0x80, 0x43, 0xFE, 0x01, 0xC0, 0x62, - 0x0C, 0x10, 0x81, 0x00, 0x10, 0x02, 0x00, 0x60, 0x0C, 0x01, 0x00, 0x20, - 0x0C, 0x01, 0x80, 0x20, 0x04, 0x04, 0xFF, 0xC0, 0x07, 0xC3, 0x0C, 0x00, - 0x80, 0x10, 0x06, 0x01, 0x81, 0xC0, 0x0C, 0x00, 0x40, 0x08, 0x01, 0x00, - 0x20, 0x09, 0x86, 0x0F, 0x00, 0x00, 0xC0, 0x50, 0x24, 0x12, 0x04, 0x82, - 0x21, 0x08, 0x82, 0x21, 0x10, 0x4F, 0xF8, 0x04, 0x01, 0x00, 0x80, 0xF8, - 0x0F, 0xE2, 0x00, 0x40, 0x08, 0x01, 0x00, 0x4E, 0x0E, 0x20, 0x02, 0x00, - 0x40, 0x08, 0x01, 0x00, 0x40, 0x19, 0x06, 0x1F, 0x00, 0x01, 0xE0, 0xC0, - 0x60, 0x18, 0x02, 0x00, 0x80, 0x13, 0xC5, 0x88, 0xE0, 0x98, 0x12, 0x02, - 0x40, 0x48, 0x10, 0x84, 0x0F, 0x00, 0xFF, 0xA0, 0x20, 0x08, 0x04, 0x01, - 0x00, 0x80, 0x20, 0x10, 0x04, 0x02, 0x00, 0x80, 0x40, 0x10, 0x08, 0x02, - 0x00, 0x07, 0x81, 0x08, 0x40, 0x90, 0x12, 0x02, 0x40, 0x84, 0x20, 0x78, - 0x30, 0x88, 0x0A, 0x01, 0x40, 0x28, 0x08, 0x82, 0x0F, 0x80, 0x07, 0x81, - 0x08, 0x40, 0x90, 0x12, 0x02, 0x40, 0xC8, 0x39, 0x8D, 0x1E, 0x40, 0x08, - 0x02, 0x00, 0xC0, 0x30, 0x18, 0x3E, 0x00, 0x19, 0xCC, 0x00, 0x00, 0x0C, - 0xE6, 0x00, 0x06, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x1C, 0x30, 0xE1, 0x86, - 0x08, 0x00, 0x00, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x06, 0x00, 0x30, - 0x00, 0xC0, 0x06, 0x00, 0x18, 0x00, 0xC0, 0x7F, 0xF8, 0x00, 0x00, 0x01, - 0xFF, 0xE0, 0x18, 0x00, 0xC0, 0x03, 0x00, 0x18, 0x00, 0x60, 0x03, 0x00, - 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x3E, 0xC3, 0x81, 0x01, 0x03, - 0x06, 0x18, 0x20, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x07, 0x82, 0x31, - 0x04, 0x81, 0x20, 0x48, 0x74, 0x65, 0x21, 0x48, 0x92, 0x28, 0x7A, 0x00, - 0x80, 0x20, 0x04, 0x00, 0xF8, 0x07, 0xE0, 0x02, 0x80, 0x0A, 0x00, 0x48, - 0x01, 0x20, 0x08, 0x40, 0x41, 0x01, 0x04, 0x0F, 0xF0, 0x20, 0x41, 0x01, - 0x04, 0x02, 0x20, 0x0B, 0xE1, 0xF0, 0x1F, 0xF0, 0x40, 0xC2, 0x02, 0x10, - 0x10, 0x81, 0x84, 0x18, 0x7F, 0x82, 0x02, 0x10, 0x08, 0x80, 0x44, 0x02, - 0x60, 0x22, 0x03, 0x7F, 0xE0, 0x07, 0x91, 0x87, 0x20, 0x34, 0x02, 0x40, - 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x04, 0x04, 0x61, - 0x81, 0xE0, 0x1F, 0xE0, 0x41, 0x82, 0x06, 0x10, 0x11, 0x00, 0x88, 0x04, - 0x40, 0x22, 0x01, 0x10, 0x11, 0x00, 0x88, 0x08, 0x40, 0xC2, 0x0C, 0x7F, - 0x80, 0x1F, 0xFC, 0x20, 0x10, 0x80, 0x82, 0x00, 0x08, 0x00, 0x22, 0x01, - 0xF8, 0x04, 0x20, 0x10, 0x00, 0x40, 0x01, 0x01, 0x0C, 0x04, 0x20, 0x13, - 0xFF, 0xC0, 0x1F, 0xFC, 0x20, 0x10, 0x80, 0x42, 0x01, 0x08, 0x00, 0x22, - 0x01, 0xF8, 0x04, 0x20, 0x10, 0x00, 0x40, 0x01, 0x00, 0x0C, 0x00, 0x20, - 0x03, 0xF8, 0x00, 0x07, 0xD0, 0x83, 0x30, 0x12, 0x00, 0x40, 0x04, 0x00, - 0x80, 0x08, 0x00, 0x83, 0xE8, 0x04, 0x80, 0x4C, 0x04, 0x60, 0x41, 0xF8, - 0x0F, 0x3C, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x81, 0x01, 0x02, 0x03, - 0xFC, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40, 0x80, 0x81, 0x02, 0x02, - 0x1F, 0x1E, 0x00, 0x3F, 0xE0, 0x40, 0x08, 0x01, 0x00, 0x20, 0x08, 0x01, - 0x00, 0x20, 0x04, 0x00, 0x80, 0x20, 0x04, 0x00, 0x81, 0xFF, 0x00, 0x03, - 0xFE, 0x00, 0x20, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, - 0x00, 0x20, 0x40, 0x40, 0x80, 0x81, 0x01, 0x02, 0x04, 0x06, 0x10, 0x07, - 0xC0, 0x00, 0x1F, 0x1E, 0x10, 0x10, 0x20, 0xC0, 0x43, 0x00, 0x88, 0x01, - 0x20, 0x07, 0xC0, 0x0C, 0x40, 0x10, 0x40, 0x20, 0x80, 0x41, 0x01, 0x81, - 0x02, 0x02, 0x1F, 0x87, 0x00, 0x3F, 0x80, 0x40, 0x04, 0x00, 0x40, 0x08, - 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, 0x01, 0x01, 0x10, 0x11, 0x02, 0x10, - 0x2F, 0xFE, 0x1C, 0x03, 0x85, 0x03, 0x02, 0x82, 0x81, 0x41, 0x40, 0xA1, - 0x20, 0x89, 0x30, 0x44, 0x90, 0x22, 0x88, 0x11, 0x44, 0x08, 0x42, 0x08, - 0x03, 0x04, 0x01, 0x02, 0x00, 0x87, 0xC3, 0xE0, 0x3C, 0x3E, 0x18, 0x08, - 0x38, 0x20, 0x50, 0x41, 0x20, 0x82, 0x61, 0x04, 0x42, 0x08, 0x88, 0x10, - 0x90, 0x41, 0x20, 0x83, 0x41, 0x02, 0x82, 0x06, 0x1F, 0x04, 0x00, 0x03, - 0xC0, 0x61, 0x84, 0x04, 0x40, 0x14, 0x00, 0xA0, 0x06, 0x00, 0x30, 0x01, - 0x80, 0x14, 0x00, 0xA0, 0x08, 0x80, 0x86, 0x18, 0x0F, 0x00, 0x1F, 0xE0, - 0x40, 0x82, 0x02, 0x10, 0x10, 0x80, 0x84, 0x08, 0x40, 0x83, 0xF8, 0x10, - 0x00, 0x80, 0x04, 0x00, 0x60, 0x02, 0x00, 0x7F, 0x00, 0x03, 0xC0, 0x61, - 0x84, 0x04, 0x40, 0x14, 0x00, 0xA0, 0x06, 0x00, 0x30, 0x01, 0x80, 0x14, - 0x00, 0xA0, 0x08, 0x80, 0x86, 0x18, 0x1F, 0x00, 0x40, 0x0F, 0xC4, 0x41, - 0xC0, 0x1F, 0xE0, 0x40, 0x82, 0x02, 0x10, 0x10, 0x80, 0x84, 0x08, 0x60, - 0x83, 0xF8, 0x10, 0xC0, 0x82, 0x04, 0x08, 0x40, 0x42, 0x03, 0x7E, 0x0C, - 0x07, 0xA3, 0x0C, 0x40, 0x90, 0x12, 0x00, 0x40, 0x06, 0x00, 0x3C, 0x00, - 0x40, 0x0A, 0x01, 0x40, 0x4C, 0x11, 0x7C, 0x00, 0xFF, 0xE8, 0x42, 0x84, - 0x20, 0x40, 0x04, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x10, - 0x01, 0x00, 0x10, 0x0F, 0xE0, 0xF8, 0xF9, 0x00, 0x88, 0x08, 0x80, 0x44, - 0x02, 0x20, 0x11, 0x01, 0x08, 0x08, 0x80, 0x44, 0x02, 0x20, 0x31, 0x01, - 0x04, 0x30, 0x1E, 0x00, 0xF8, 0x7D, 0x00, 0x42, 0x01, 0x08, 0x08, 0x20, - 0x40, 0x81, 0x02, 0x08, 0x08, 0x20, 0x11, 0x00, 0x48, 0x01, 0x20, 0x05, - 0x00, 0x14, 0x00, 0x60, 0x00, 0xF8, 0x7D, 0x00, 0x44, 0x01, 0x11, 0x84, - 0x46, 0x21, 0x18, 0x84, 0xA2, 0x12, 0x90, 0x91, 0x42, 0x45, 0x0A, 0x14, - 0x28, 0x60, 0xC1, 0x83, 0x06, 0x00, 0x1E, 0x1E, 0x10, 0x10, 0x10, 0x40, - 0x21, 0x00, 0x24, 0x00, 0x78, 0x00, 0x60, 0x01, 0xC0, 0x06, 0x80, 0x09, - 0x80, 0x21, 0x00, 0x81, 0x02, 0x02, 0x1E, 0x1F, 0x00, 0xF0, 0xF4, 0x04, - 0x20, 0x82, 0x18, 0x11, 0x01, 0x20, 0x1C, 0x00, 0x80, 0x08, 0x00, 0x80, - 0x10, 0x01, 0x00, 0x10, 0x0F, 0xE0, 0x0F, 0xF1, 0x01, 0x10, 0x21, 0x04, - 0x00, 0x80, 0x10, 0x02, 0x00, 0x40, 0x0C, 0x01, 0x82, 0x10, 0x22, 0x04, - 0x40, 0x47, 0xFC, 0x0E, 0x20, 0x40, 0x81, 0x02, 0x08, 0x10, 0x20, 0x40, - 0x82, 0x04, 0x08, 0x10, 0x20, 0x81, 0xE0, 0x84, 0x20, 0x84, 0x20, 0x84, - 0x21, 0x04, 0x21, 0x08, 0x21, 0x08, 0x40, 0x1E, 0x04, 0x08, 0x20, 0x40, - 0x81, 0x02, 0x04, 0x10, 0x20, 0x40, 0x81, 0x02, 0x08, 0x11, 0xE0, 0x04, - 0x06, 0x04, 0x84, 0x44, 0x14, 0x0C, 0xFF, 0xFE, 0x99, 0x90, 0x1F, 0xC0, - 0x06, 0x00, 0x20, 0x02, 0x1F, 0xE6, 0x04, 0xC0, 0x48, 0x04, 0x81, 0xC7, - 0xEF, 0x18, 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x09, 0xF0, 0x50, - 0xC3, 0x03, 0x10, 0x08, 0x80, 0x48, 0x02, 0x40, 0x23, 0x03, 0x1C, 0x33, - 0xBE, 0x00, 0x0F, 0xD3, 0x07, 0x60, 0x24, 0x02, 0x80, 0x08, 0x00, 0x80, - 0x08, 0x06, 0x41, 0xC3, 0xF0, 0x00, 0x38, 0x00, 0x40, 0x02, 0x00, 0x20, - 0x01, 0x07, 0xC8, 0x43, 0x44, 0x0E, 0x40, 0x24, 0x01, 0x20, 0x09, 0x00, - 0xC8, 0x0E, 0x20, 0xE0, 0xF9, 0xC0, 0x0F, 0x86, 0x09, 0x00, 0xA0, 0x1F, - 0xFF, 0x00, 0x20, 0x06, 0x00, 0x60, 0xC7, 0xE0, 0x01, 0xF8, 0x10, 0x01, - 0x00, 0x08, 0x00, 0x40, 0x1F, 0xF0, 0x20, 0x01, 0x00, 0x08, 0x00, 0x40, - 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x03, 0xFE, 0x00, 0x0F, 0x31, 0x86, - 0x10, 0x10, 0x80, 0x88, 0x04, 0x40, 0x22, 0x02, 0x10, 0x10, 0x43, 0x81, - 0xE4, 0x00, 0x40, 0x02, 0x00, 0x20, 0x3E, 0x00, 0x1C, 0x00, 0x20, 0x03, - 0x00, 0x10, 0x00, 0x80, 0x05, 0xF0, 0x30, 0xC3, 0x02, 0x10, 0x10, 0x80, - 0x84, 0x0C, 0x20, 0x63, 0x02, 0x10, 0x13, 0xE3, 0xE0, 0x01, 0x80, 0x40, - 0x10, 0x00, 0x00, 0x07, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x10, - 0x04, 0x01, 0x0F, 0xFC, 0x00, 0x40, 0x10, 0x0C, 0x00, 0x00, 0x07, 0xF0, - 0x04, 0x01, 0x00, 0x40, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x10, 0x04, - 0x01, 0x00, 0x8F, 0xC0, 0x18, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, 0x01, - 0x1F, 0x10, 0x81, 0x30, 0x14, 0x01, 0xC0, 0x26, 0x02, 0x20, 0x21, 0x02, - 0x08, 0xE1, 0xE0, 0x0F, 0x80, 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, 0x20, - 0x08, 0x02, 0x00, 0x80, 0x20, 0x10, 0x04, 0x01, 0x0F, 0xFC, 0x3B, 0xB8, - 0x33, 0x91, 0x08, 0x44, 0x21, 0x10, 0x84, 0x42, 0x12, 0x10, 0x48, 0x42, - 0x21, 0x0B, 0xC6, 0x30, 0x19, 0xE0, 0xE3, 0x08, 0x11, 0x01, 0x10, 0x11, - 0x02, 0x10, 0x21, 0x02, 0x20, 0x2F, 0x87, 0x0F, 0x86, 0x19, 0x80, 0xA0, - 0x18, 0x03, 0x00, 0x60, 0x14, 0x06, 0x61, 0x87, 0xC0, 0x19, 0xF0, 0x28, - 0x20, 0xC0, 0x42, 0x01, 0x10, 0x04, 0x40, 0x11, 0x00, 0x86, 0x06, 0x14, - 0x30, 0xCF, 0x02, 0x00, 0x08, 0x00, 0x20, 0x03, 0xF0, 0x00, 0x0F, 0x39, - 0x85, 0x18, 0x18, 0x80, 0x88, 0x04, 0x40, 0x22, 0x01, 0x18, 0x18, 0x63, - 0x81, 0xE4, 0x00, 0x20, 0x01, 0x00, 0x10, 0x07, 0xE0, 0x1C, 0x78, 0x2C, - 0x01, 0x80, 0x18, 0x00, 0x80, 0x04, 0x00, 0x20, 0x02, 0x00, 0x10, 0x07, - 0xFC, 0x00, 0x0F, 0x44, 0x32, 0x04, 0x80, 0x1E, 0x00, 0x60, 0x0A, 0x02, - 0xC1, 0x2F, 0x80, 0x10, 0x08, 0x04, 0x02, 0x0F, 0xF9, 0x00, 0x80, 0x40, - 0x20, 0x20, 0x10, 0x08, 0x04, 0x19, 0xF0, 0xE0, 0xF2, 0x02, 0x40, 0x24, - 0x02, 0x40, 0x24, 0x06, 0x40, 0x44, 0x04, 0x41, 0xC3, 0xE6, 0xF8, 0xFA, - 0x01, 0x08, 0x10, 0x41, 0x02, 0x08, 0x10, 0x80, 0x48, 0x02, 0x40, 0x14, - 0x00, 0xC0, 0x00, 0xE0, 0x7A, 0x01, 0x10, 0x08, 0x8C, 0x84, 0xA4, 0x25, - 0x21, 0x4A, 0x0A, 0x50, 0x63, 0x02, 0x18, 0x00, 0x1E, 0x3C, 0x20, 0x40, - 0x46, 0x00, 0xB0, 0x03, 0x00, 0x0E, 0x00, 0xC8, 0x06, 0x10, 0x20, 0x23, - 0xE3, 0xC0, 0x3C, 0x3C, 0x40, 0x20, 0x81, 0x02, 0x08, 0x08, 0x20, 0x31, - 0x00, 0x48, 0x01, 0x40, 0x05, 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, 0x08, - 0x03, 0xF0, 0x00, 0x3F, 0xC4, 0x18, 0x06, 0x01, 0x80, 0x60, 0x10, 0x04, - 0x01, 0x00, 0x40, 0x9F, 0xF0, 0x06, 0x10, 0x20, 0x41, 0x02, 0x04, 0x08, - 0x21, 0x80, 0x81, 0x02, 0x08, 0x10, 0x20, 0x40, 0xC0, 0x01, 0x11, 0x12, - 0x22, 0x24, 0x44, 0x44, 0x88, 0x80, 0x0C, 0x08, 0x10, 0x20, 0x40, 0x82, - 0x04, 0x08, 0x0C, 0x20, 0x81, 0x02, 0x04, 0x08, 0x21, 0x80, 0x38, 0x28, - 0x88, 0x0E, 0x00}; - -const GFXglyph FreeMonoOblique12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 14, 0, 1}, // 0x20 ' ' - {0, 4, 15, 14, 6, -14}, // 0x21 '!' - {8, 8, 7, 14, 5, -14}, // 0x22 '"' - {15, 11, 16, 14, 3, -14}, // 0x23 '#' - {37, 10, 18, 14, 4, -15}, // 0x24 '$' - {60, 11, 15, 14, 3, -14}, // 0x25 '%' - {81, 9, 12, 14, 3, -11}, // 0x26 '&' - {95, 3, 7, 14, 8, -14}, // 0x27 ''' - {98, 5, 18, 14, 8, -14}, // 0x28 '(' - {110, 5, 18, 14, 4, -14}, // 0x29 ')' - {122, 9, 9, 14, 5, -14}, // 0x2A '*' - {133, 11, 11, 14, 3, -11}, // 0x2B '+' - {149, 6, 7, 14, 3, -3}, // 0x2C ',' - {155, 11, 1, 14, 3, -6}, // 0x2D '-' - {157, 3, 3, 14, 6, -2}, // 0x2E '.' - {159, 13, 18, 14, 2, -15}, // 0x2F '/' - {189, 10, 15, 14, 4, -14}, // 0x30 '0' - {208, 9, 15, 14, 3, -14}, // 0x31 '1' - {225, 12, 15, 14, 2, -14}, // 0x32 '2' - {248, 11, 15, 14, 3, -14}, // 0x33 '3' - {269, 10, 15, 14, 3, -14}, // 0x34 '4' - {288, 11, 15, 14, 3, -14}, // 0x35 '5' - {309, 11, 15, 14, 4, -14}, // 0x36 '6' - {330, 10, 15, 14, 5, -14}, // 0x37 '7' - {349, 11, 15, 14, 3, -14}, // 0x38 '8' - {370, 11, 15, 14, 3, -14}, // 0x39 '9' - {391, 5, 10, 14, 5, -9}, // 0x3A ':' - {398, 7, 13, 14, 3, -9}, // 0x3B ';' - {410, 12, 11, 14, 3, -11}, // 0x3C '<' - {427, 13, 4, 14, 2, -8}, // 0x3D '=' - {434, 12, 11, 14, 2, -11}, // 0x3E '>' - {451, 8, 14, 14, 6, -13}, // 0x3F '?' - {465, 10, 16, 14, 3, -14}, // 0x40 '@' - {485, 14, 14, 14, 0, -13}, // 0x41 'A' - {510, 13, 14, 14, 1, -13}, // 0x42 'B' - {533, 12, 14, 14, 3, -13}, // 0x43 'C' - {554, 13, 14, 14, 1, -13}, // 0x44 'D' - {577, 14, 14, 14, 1, -13}, // 0x45 'E' - {602, 14, 14, 14, 1, -13}, // 0x46 'F' - {627, 12, 14, 14, 3, -13}, // 0x47 'G' - {648, 15, 14, 14, 1, -13}, // 0x48 'H' - {675, 11, 14, 14, 3, -13}, // 0x49 'I' - {695, 15, 14, 14, 2, -13}, // 0x4A 'J' - {722, 15, 14, 14, 1, -13}, // 0x4B 'K' - {749, 12, 14, 14, 2, -13}, // 0x4C 'L' - {770, 17, 14, 14, 0, -13}, // 0x4D 'M' - {800, 15, 14, 14, 1, -13}, // 0x4E 'N' - {827, 13, 14, 14, 2, -13}, // 0x4F 'O' - {850, 13, 14, 14, 1, -13}, // 0x50 'P' - {873, 13, 17, 14, 2, -13}, // 0x51 'Q' - {901, 13, 14, 14, 1, -13}, // 0x52 'R' - {924, 11, 14, 14, 3, -13}, // 0x53 'S' - {944, 12, 14, 14, 4, -13}, // 0x54 'T' - {965, 13, 14, 14, 3, -13}, // 0x55 'U' - {988, 14, 14, 14, 3, -13}, // 0x56 'V' - {1013, 14, 14, 14, 3, -13}, // 0x57 'W' - {1038, 15, 14, 14, 1, -13}, // 0x58 'X' - {1065, 12, 14, 14, 4, -13}, // 0x59 'Y' - {1086, 12, 14, 14, 2, -13}, // 0x5A 'Z' - {1107, 7, 18, 14, 6, -14}, // 0x5B '[' - {1123, 5, 18, 14, 6, -15}, // 0x5C '\' - {1135, 7, 18, 14, 3, -14}, // 0x5D ']' - {1151, 9, 6, 14, 5, -14}, // 0x5E '^' - {1158, 15, 1, 14, -1, 3}, // 0x5F '_' - {1160, 3, 4, 14, 6, -15}, // 0x60 '`' - {1162, 12, 10, 14, 2, -9}, // 0x61 'a' - {1177, 13, 15, 14, 1, -14}, // 0x62 'b' - {1202, 12, 10, 14, 3, -9}, // 0x63 'c' - {1217, 13, 15, 14, 2, -14}, // 0x64 'd' - {1242, 11, 10, 14, 3, -9}, // 0x65 'e' - {1256, 13, 15, 14, 3, -14}, // 0x66 'f' - {1281, 13, 14, 14, 3, -9}, // 0x67 'g' - {1304, 13, 15, 14, 1, -14}, // 0x68 'h' - {1329, 10, 15, 14, 2, -14}, // 0x69 'i' - {1348, 10, 19, 14, 2, -14}, // 0x6A 'j' - {1372, 12, 15, 14, 2, -14}, // 0x6B 'k' - {1395, 10, 15, 14, 2, -14}, // 0x6C 'l' - {1414, 14, 10, 14, 0, -9}, // 0x6D 'm' - {1432, 12, 10, 14, 1, -9}, // 0x6E 'n' - {1447, 11, 10, 14, 3, -9}, // 0x6F 'o' - {1461, 14, 14, 14, 0, -9}, // 0x70 'p' - {1486, 13, 14, 14, 3, -9}, // 0x71 'q' - {1509, 13, 10, 14, 2, -9}, // 0x72 'r' - {1526, 10, 10, 14, 3, -9}, // 0x73 's' - {1539, 9, 14, 14, 3, -13}, // 0x74 't' - {1555, 12, 10, 14, 2, -9}, // 0x75 'u' - {1570, 13, 10, 14, 3, -9}, // 0x76 'v' - {1587, 13, 10, 14, 3, -9}, // 0x77 'w' - {1604, 14, 10, 14, 1, -9}, // 0x78 'x' - {1622, 14, 14, 14, 1, -9}, // 0x79 'y' - {1647, 11, 10, 14, 3, -9}, // 0x7A 'z' - {1661, 7, 18, 14, 5, -14}, // 0x7B '{' - {1677, 4, 17, 14, 6, -13}, // 0x7C '|' - {1686, 7, 18, 14, 4, -14}, // 0x7D '}' - {1702, 11, 3, 14, 3, -7}}; // 0x7E '~' - -const GFXfont FreeMonoOblique12pt7b PROGMEM = { - (uint8_t *)FreeMonoOblique12pt7bBitmaps, - (GFXglyph *)FreeMonoOblique12pt7bGlyphs, 0x20, 0x7E, 24}; - -// Approx. 2379 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique18pt7b.h deleted file mode 100644 index c12ae08..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique18pt7b.h +++ /dev/null @@ -1,400 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoOblique18pt7bBitmaps[] PROGMEM = { - 0x00, 0x1C, 0x38, 0x70, 0xC1, 0x83, 0x06, 0x18, 0x30, 0x60, 0xC1, 0x02, - 0x04, 0x00, 0x00, 0x01, 0xC7, 0x8F, 0x1C, 0x00, 0x78, 0x7B, 0xC3, 0xFC, - 0x3D, 0xE1, 0xEF, 0x0F, 0x70, 0x73, 0x83, 0x98, 0x18, 0xC0, 0xC6, 0x06, - 0x00, 0x00, 0x8C, 0x01, 0x18, 0x06, 0x20, 0x08, 0x40, 0x11, 0x80, 0x62, - 0x00, 0xC4, 0x01, 0x18, 0x02, 0x30, 0x7F, 0xFC, 0x10, 0x80, 0x23, 0x00, - 0xC4, 0x01, 0x88, 0x3F, 0xFF, 0x04, 0x60, 0x18, 0x80, 0x21, 0x00, 0x46, - 0x01, 0x88, 0x03, 0x10, 0x04, 0x60, 0x08, 0xC0, 0x31, 0x00, 0x00, 0x30, - 0x00, 0x20, 0x00, 0x20, 0x00, 0xF9, 0x03, 0x0F, 0x06, 0x03, 0x04, 0x03, - 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x40, 0x04, 0x40, 0x08, 0x40, 0x18, - 0xF0, 0x60, 0x9F, 0x80, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x03, 0xC0, 0x0C, 0x60, 0x08, 0x20, 0x10, 0x20, 0x10, 0x20, - 0x10, 0x40, 0x18, 0x80, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x78, 0x07, 0xC0, - 0x3C, 0x00, 0xE0, 0x00, 0x01, 0xE0, 0x02, 0x18, 0x04, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x10, 0x0C, 0x20, 0x07, 0xC0, 0x01, 0xF0, 0x11, 0x81, - 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x80, 0x04, 0x00, 0xF0, - 0x09, 0x86, 0x84, 0x48, 0x32, 0x40, 0xA2, 0x07, 0x10, 0x30, 0x43, 0x81, - 0xE7, 0x80, 0x7B, 0xFD, 0xEF, 0x73, 0x98, 0xC6, 0x00, 0x01, 0x02, 0x06, - 0x0C, 0x0C, 0x18, 0x10, 0x30, 0x30, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x40, 0x60, 0x60, 0x20, 0x04, 0x06, - 0x06, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, - 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x40, 0xC0, 0x01, - 0x00, 0x04, 0x00, 0x10, 0x00, 0xC6, 0xE3, 0xF8, 0x7E, 0x00, 0x70, 0x03, - 0x40, 0x19, 0x80, 0xC2, 0x06, 0x0C, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0xFF, 0xFE, - 0x02, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x02, - 0x00, 0x04, 0x00, 0x0F, 0x87, 0x87, 0x83, 0x83, 0xC1, 0xC1, 0xC0, 0xC0, - 0xE0, 0x60, 0x00, 0xFF, 0xFF, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x60, - 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x04, 0x00, - 0x01, 0x80, 0x00, 0x60, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, - 0x10, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x20, 0x00, 0x0C, 0x00, 0x03, - 0x00, 0x00, 0x40, 0x00, 0x18, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x20, - 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x01, - 0xF0, 0x18, 0x60, 0x80, 0x86, 0x01, 0x10, 0x04, 0x80, 0x12, 0x00, 0x50, - 0x01, 0x40, 0x0D, 0x00, 0x24, 0x00, 0xA0, 0x02, 0x80, 0x1A, 0x00, 0x48, - 0x01, 0x20, 0x0C, 0x80, 0x22, 0x01, 0x84, 0x0C, 0x18, 0x60, 0x3E, 0x00, - 0x00, 0x60, 0x07, 0x00, 0x68, 0x06, 0x40, 0xE4, 0x04, 0x20, 0x01, 0x00, - 0x08, 0x00, 0x40, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, 0x80, 0x04, - 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, 0x80, 0x04, 0x0F, 0xFF, 0x80, 0x00, - 0x3C, 0x00, 0x61, 0x80, 0x40, 0x40, 0x40, 0x10, 0x60, 0x08, 0x00, 0x04, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x07, - 0x00, 0x06, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x0C, - 0x00, 0x1C, 0x01, 0x1C, 0x00, 0x8F, 0xFF, 0xC0, 0x00, 0xFC, 0x03, 0x06, - 0x06, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x0C, 0x00, 0xF0, 0x00, 0x18, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x40, 0x18, 0x70, 0x30, - 0x0F, 0xC0, 0x00, 0x1C, 0x00, 0xD0, 0x06, 0x80, 0x32, 0x00, 0x88, 0x04, - 0x20, 0x30, 0x81, 0x84, 0x04, 0x10, 0x20, 0x41, 0x81, 0x0C, 0x08, 0x60, - 0x21, 0x00, 0x8F, 0xFF, 0x80, 0x18, 0x00, 0x40, 0x01, 0x00, 0x04, 0x00, - 0x10, 0x07, 0xE0, 0x03, 0xFF, 0x03, 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, - 0x40, 0x00, 0x20, 0x00, 0x30, 0x00, 0x1B, 0xE0, 0x0E, 0x0C, 0x00, 0x02, - 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, - 0x08, 0x00, 0x04, 0x60, 0x04, 0x18, 0x04, 0x06, 0x0C, 0x00, 0xF8, 0x00, - 0x00, 0x3F, 0x00, 0xC0, 0x03, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, - 0x30, 0x00, 0x20, 0x00, 0x40, 0x00, 0x43, 0xE0, 0x4C, 0x30, 0xB0, 0x18, - 0xE0, 0x08, 0xC0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x10, 0xC0, 0x10, - 0x40, 0x20, 0x20, 0xC0, 0x1F, 0x00, 0xFF, 0xFC, 0x00, 0xE0, 0x04, 0x00, - 0x60, 0x02, 0x00, 0x30, 0x01, 0x00, 0x18, 0x00, 0x80, 0x0C, 0x00, 0x40, - 0x06, 0x00, 0x20, 0x03, 0x00, 0x10, 0x01, 0x80, 0x08, 0x00, 0xC0, 0x04, - 0x00, 0x60, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x06, 0x18, 0x10, 0x18, 0x40, - 0x11, 0x00, 0x22, 0x00, 0x44, 0x00, 0x88, 0x02, 0x18, 0x08, 0x18, 0x60, - 0x1F, 0x80, 0xC1, 0x82, 0x01, 0x88, 0x01, 0x20, 0x02, 0x40, 0x04, 0x80, - 0x09, 0x00, 0x23, 0x00, 0x83, 0x06, 0x01, 0xF0, 0x00, 0x00, 0xF0, 0x06, - 0x18, 0x10, 0x10, 0x40, 0x30, 0x80, 0x22, 0x00, 0x44, 0x00, 0x88, 0x03, - 0x10, 0x0E, 0x30, 0x34, 0x30, 0xD0, 0x3E, 0x20, 0x00, 0x40, 0x01, 0x00, - 0x02, 0x00, 0x08, 0x00, 0x20, 0x00, 0xC0, 0x02, 0x00, 0x18, 0x0F, 0xC0, - 0x00, 0x1C, 0x7C, 0xF9, 0xF1, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xC7, 0xCF, - 0x9F, 0x1C, 0x00, 0x01, 0xC0, 0x7C, 0x0F, 0x81, 0xF0, 0x1C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x07, 0x81, 0xE0, 0x3C, 0x0F, 0x01, - 0xC0, 0x70, 0x0E, 0x03, 0x80, 0x60, 0x00, 0x00, 0x01, 0x80, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x07, - 0x00, 0x00, 0xE0, 0x00, 0x38, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x18, 0x00, 0x03, 0x80, - 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x00, 0xE0, - 0x00, 0x0E, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, - 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x1F, 0xCE, 0x06, 0x80, - 0x38, 0x01, 0x80, 0x10, 0x01, 0x00, 0x20, 0x04, 0x01, 0x80, 0xF0, 0x18, - 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x80, 0xF8, - 0x07, 0x00, 0x01, 0xF0, 0x0C, 0x30, 0x30, 0x30, 0x40, 0x21, 0x00, 0x44, - 0x00, 0x88, 0x01, 0x10, 0x1E, 0x40, 0xC4, 0x86, 0x11, 0x08, 0x22, 0x20, - 0x48, 0x40, 0x90, 0x82, 0x21, 0x84, 0x40, 0xFC, 0x80, 0x01, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x04, 0x00, 0x0C, 0x18, 0x07, 0xC0, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x68, 0x00, 0x06, 0x40, 0x00, 0x32, 0x00, 0x03, 0x10, 0x00, - 0x10, 0x80, 0x01, 0x84, 0x00, 0x18, 0x10, 0x00, 0xC0, 0x80, 0x0C, 0x04, - 0x00, 0x60, 0x20, 0x06, 0x01, 0x00, 0x3F, 0xFC, 0x02, 0x00, 0x20, 0x10, - 0x01, 0x01, 0x00, 0x08, 0x08, 0x00, 0x40, 0x80, 0x02, 0x0C, 0x00, 0x09, - 0xFC, 0x07, 0xF0, 0x0F, 0xFF, 0x00, 0x40, 0x60, 0x20, 0x0C, 0x08, 0x01, - 0x02, 0x00, 0x40, 0x80, 0x10, 0x40, 0x08, 0x10, 0x06, 0x04, 0x03, 0x01, - 0xFF, 0x80, 0x40, 0x38, 0x20, 0x02, 0x08, 0x00, 0x42, 0x00, 0x10, 0x80, - 0x04, 0x40, 0x01, 0x10, 0x00, 0x84, 0x00, 0x41, 0x00, 0x23, 0xFF, 0xF0, - 0x00, 0xFC, 0x40, 0xC1, 0xF0, 0xC0, 0x1C, 0x60, 0x06, 0x10, 0x00, 0x88, - 0x00, 0x24, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, - 0x02, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, - 0x40, 0x06, 0x08, 0x03, 0x01, 0x83, 0x80, 0x3F, 0x00, 0x0F, 0xFE, 0x00, - 0x80, 0xC0, 0x20, 0x18, 0x10, 0x02, 0x04, 0x00, 0x41, 0x00, 0x10, 0x40, - 0x04, 0x20, 0x01, 0x08, 0x00, 0x42, 0x00, 0x10, 0x80, 0x08, 0x20, 0x02, - 0x10, 0x00, 0x84, 0x00, 0x21, 0x00, 0x10, 0x40, 0x08, 0x20, 0x06, 0x08, - 0x03, 0x02, 0x01, 0x83, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x10, 0x02, 0x02, - 0x00, 0x60, 0x20, 0x06, 0x02, 0x00, 0x60, 0x20, 0x00, 0x04, 0x00, 0x00, - 0x40, 0x80, 0x04, 0x10, 0x00, 0x7F, 0x00, 0x04, 0x10, 0x00, 0x81, 0x00, - 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x81, 0x00, 0x08, 0x10, 0x00, - 0x81, 0x00, 0x18, 0x10, 0x01, 0x8F, 0xFF, 0xF0, 0x0F, 0xFF, 0xF0, 0x10, - 0x03, 0x02, 0x00, 0x30, 0x20, 0x03, 0x02, 0x00, 0x20, 0x20, 0x00, 0x04, - 0x00, 0x00, 0x40, 0x80, 0x04, 0x10, 0x00, 0x7F, 0x00, 0x04, 0x10, 0x00, - 0x81, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, - 0x10, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFE, - 0x40, 0xC0, 0xF0, 0x40, 0x1C, 0x20, 0x03, 0x10, 0x00, 0x88, 0x00, 0x02, - 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0x01, - 0xFE, 0x80, 0x02, 0x20, 0x00, 0x88, 0x00, 0x22, 0x00, 0x08, 0x40, 0x04, - 0x18, 0x01, 0x03, 0x81, 0xC0, 0x3F, 0x80, 0x07, 0xE1, 0xF8, 0x08, 0x02, - 0x00, 0x80, 0x10, 0x04, 0x00, 0x80, 0x20, 0x04, 0x01, 0x00, 0x20, 0x18, - 0x02, 0x00, 0x80, 0x10, 0x04, 0x00, 0x80, 0x3F, 0xFC, 0x01, 0x00, 0x60, - 0x10, 0x02, 0x00, 0x80, 0x10, 0x04, 0x00, 0x80, 0x20, 0x04, 0x02, 0x00, - 0x40, 0x10, 0x02, 0x00, 0x80, 0x10, 0x04, 0x00, 0x81, 0xF8, 0x3F, 0x00, - 0x0F, 0xFF, 0x80, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, - 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x80, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x20, - 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, - 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x0C, 0x04, 0x00, - 0x80, 0x40, 0x08, 0x08, 0x00, 0x80, 0x80, 0x08, 0x08, 0x01, 0x00, 0x80, - 0x10, 0x0C, 0x02, 0x00, 0x60, 0xC0, 0x01, 0xF0, 0x00, 0x0F, 0xE1, 0xF8, - 0x08, 0x03, 0x00, 0x80, 0x60, 0x04, 0x06, 0x00, 0x20, 0x60, 0x01, 0x06, - 0x00, 0x10, 0xC0, 0x00, 0x8C, 0x00, 0x04, 0xC0, 0x00, 0x2F, 0x80, 0x01, - 0x8E, 0x00, 0x18, 0x30, 0x00, 0x80, 0xC0, 0x04, 0x06, 0x00, 0x20, 0x10, - 0x02, 0x00, 0xC0, 0x10, 0x06, 0x00, 0x80, 0x30, 0x04, 0x00, 0x81, 0xFC, - 0x07, 0x80, 0x07, 0xFC, 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, - 0x80, 0x00, 0x20, 0x00, 0x08, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x40, - 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x80, 0x10, 0x20, 0x04, - 0x08, 0x01, 0x04, 0x00, 0x81, 0x00, 0x20, 0x40, 0x0B, 0xFF, 0xFE, 0x0F, - 0x00, 0x1E, 0x03, 0x00, 0x38, 0x05, 0x00, 0x68, 0x04, 0x80, 0x68, 0x04, - 0x80, 0xC8, 0x04, 0x80, 0x90, 0x04, 0x81, 0x90, 0x08, 0x43, 0x10, 0x08, - 0x42, 0x10, 0x08, 0x46, 0x10, 0x08, 0x4C, 0x20, 0x10, 0x2C, 0x20, 0x10, - 0x38, 0x20, 0x10, 0x30, 0x20, 0x10, 0x00, 0x40, 0x10, 0x00, 0x40, 0x20, - 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0xFC, 0x07, 0xE0, 0x1F, - 0x01, 0xFC, 0x0C, 0x00, 0x80, 0x78, 0x02, 0x01, 0xE0, 0x18, 0x04, 0x80, - 0x60, 0x13, 0x01, 0x00, 0x4C, 0x04, 0x03, 0x18, 0x10, 0x0C, 0x60, 0xC0, - 0x20, 0x83, 0x00, 0x83, 0x08, 0x06, 0x0C, 0x20, 0x18, 0x18, 0x80, 0x40, - 0x66, 0x01, 0x00, 0x98, 0x04, 0x03, 0x40, 0x30, 0x0D, 0x00, 0xC0, 0x14, - 0x02, 0x00, 0x70, 0x3F, 0x80, 0xC0, 0x00, 0xF8, 0x01, 0x83, 0x01, 0x00, - 0xC1, 0x00, 0x21, 0x00, 0x19, 0x00, 0x04, 0x80, 0x02, 0x80, 0x01, 0x40, - 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x28, 0x00, 0x14, 0x00, 0x12, - 0x00, 0x09, 0x80, 0x08, 0x40, 0x08, 0x30, 0x08, 0x0C, 0x18, 0x01, 0xF0, - 0x00, 0x0F, 0xFE, 0x00, 0x40, 0x60, 0x20, 0x0C, 0x08, 0x01, 0x02, 0x00, - 0x40, 0x80, 0x10, 0x40, 0x04, 0x10, 0x02, 0x04, 0x01, 0x01, 0x01, 0x80, - 0x7F, 0x80, 0x20, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x40, - 0x00, 0x10, 0x00, 0x04, 0x00, 0x01, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xF8, - 0x01, 0x83, 0x01, 0x00, 0xC1, 0x00, 0x21, 0x00, 0x19, 0x00, 0x05, 0x00, - 0x02, 0x80, 0x01, 0x40, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x28, - 0x00, 0x14, 0x00, 0x12, 0x00, 0x09, 0x80, 0x08, 0x40, 0x08, 0x30, 0x08, - 0x0C, 0x18, 0x03, 0xF0, 0x00, 0xC0, 0x01, 0xC0, 0x01, 0xFE, 0x18, 0xC0, - 0xF0, 0x0F, 0xFE, 0x00, 0x40, 0x60, 0x20, 0x0C, 0x08, 0x01, 0x02, 0x00, - 0x40, 0x80, 0x10, 0x40, 0x04, 0x10, 0x02, 0x04, 0x01, 0x01, 0x01, 0x80, - 0x7F, 0x80, 0x20, 0x60, 0x08, 0x0C, 0x02, 0x03, 0x80, 0x80, 0x60, 0x40, - 0x18, 0x10, 0x03, 0x04, 0x00, 0xC1, 0x00, 0x1B, 0xF8, 0x07, 0x00, 0x7E, - 0x40, 0x60, 0xF0, 0x20, 0x1C, 0x10, 0x02, 0x08, 0x00, 0x82, 0x00, 0x00, - 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, - 0x18, 0x00, 0x01, 0x00, 0x00, 0x44, 0x00, 0x11, 0x00, 0x04, 0x40, 0x02, - 0x38, 0x01, 0x0B, 0x81, 0x82, 0x3F, 0x80, 0x3F, 0xFF, 0xA0, 0x20, 0x50, - 0x10, 0x28, 0x08, 0x24, 0x08, 0x10, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x1F, - 0xFC, 0x00, 0x7E, 0x0F, 0xC4, 0x00, 0x42, 0x00, 0x10, 0x80, 0x08, 0x20, - 0x02, 0x08, 0x00, 0x82, 0x00, 0x21, 0x00, 0x08, 0x40, 0x04, 0x10, 0x01, - 0x04, 0x00, 0x41, 0x00, 0x10, 0x80, 0x0C, 0x20, 0x02, 0x08, 0x00, 0x82, - 0x00, 0x60, 0x80, 0x10, 0x10, 0x08, 0x06, 0x0C, 0x00, 0x7C, 0x00, 0xFE, - 0x03, 0xF9, 0x80, 0x02, 0x0C, 0x00, 0x30, 0x20, 0x01, 0x01, 0x00, 0x10, - 0x08, 0x01, 0x80, 0x60, 0x08, 0x03, 0x00, 0xC0, 0x18, 0x04, 0x00, 0x40, - 0x60, 0x02, 0x06, 0x00, 0x10, 0x20, 0x00, 0xC3, 0x00, 0x06, 0x10, 0x00, - 0x31, 0x80, 0x00, 0x88, 0x00, 0x04, 0x80, 0x00, 0x2C, 0x00, 0x01, 0xC0, - 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x07, 0xF2, 0x00, 0x04, 0x20, 0x00, 0xC2, - 0x00, 0x08, 0x20, 0xC0, 0x82, 0x0C, 0x18, 0x21, 0xA1, 0x02, 0x1A, 0x10, - 0x23, 0x23, 0x04, 0x32, 0x30, 0x46, 0x22, 0x04, 0x62, 0x60, 0x4C, 0x26, - 0x04, 0xC2, 0x40, 0x58, 0x24, 0x05, 0x82, 0xC0, 0x70, 0x28, 0x07, 0x02, - 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x00, 0x0F, 0xC1, 0xF8, 0x30, 0x03, 0x00, - 0xC0, 0x30, 0x06, 0x03, 0x00, 0x18, 0x10, 0x00, 0xC1, 0x00, 0x03, 0x18, - 0x00, 0x09, 0x80, 0x00, 0x78, 0x00, 0x01, 0x80, 0x00, 0x1C, 0x00, 0x01, - 0xA0, 0x00, 0x19, 0x80, 0x01, 0x84, 0x00, 0x18, 0x30, 0x01, 0x80, 0xC0, - 0x08, 0x06, 0x00, 0x80, 0x18, 0x08, 0x00, 0xC1, 0xF8, 0x3F, 0x80, 0x7E, - 0x0F, 0xC4, 0x00, 0xC1, 0x80, 0x60, 0x20, 0x30, 0x0C, 0x08, 0x03, 0x04, - 0x00, 0x43, 0x00, 0x19, 0x80, 0x02, 0xC0, 0x00, 0xE0, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x08, 0x00, 0x02, - 0x00, 0x01, 0x00, 0x00, 0x40, 0x03, 0xFF, 0x80, 0x0F, 0xFF, 0x86, 0x00, - 0x82, 0x00, 0x81, 0x00, 0xC1, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0x00, - 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, - 0x60, 0x10, 0x60, 0x18, 0x20, 0x08, 0x20, 0x04, 0x20, 0x02, 0x30, 0x03, - 0x1F, 0xFF, 0x80, 0x07, 0xE0, 0x80, 0x10, 0x02, 0x00, 0xC0, 0x18, 0x02, - 0x00, 0x40, 0x18, 0x03, 0x00, 0x40, 0x08, 0x01, 0x00, 0x60, 0x0C, 0x01, - 0x00, 0x20, 0x04, 0x01, 0x80, 0x30, 0x04, 0x00, 0x80, 0x10, 0x06, 0x00, - 0xFC, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, - 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x07, 0xE0, 0x0C, 0x01, 0x00, 0x20, 0x04, - 0x01, 0x80, 0x30, 0x04, 0x00, 0x80, 0x30, 0x06, 0x00, 0x80, 0x10, 0x02, - 0x00, 0xC0, 0x18, 0x02, 0x00, 0x40, 0x18, 0x03, 0x00, 0x40, 0x08, 0x03, - 0x00, 0x60, 0xF8, 0x00, 0x01, 0x00, 0x1C, 0x01, 0xB0, 0x19, 0x81, 0x86, - 0x18, 0x11, 0x80, 0xD8, 0x03, 0x80, 0x18, 0xFF, 0xFF, 0xF8, 0xC7, 0x1C, - 0x71, 0x80, 0x03, 0xF8, 0x0C, 0x0C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x02, 0x07, 0xFC, 0x18, 0x0C, 0x20, 0x04, 0x40, 0x04, 0x80, 0x04, - 0x80, 0x08, 0x80, 0x38, 0xC0, 0xE8, 0x3F, 0x0F, 0x0F, 0x00, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0x04, 0x00, 0x00, 0x87, - 0xC0, 0x13, 0x0C, 0x06, 0x80, 0x40, 0xE0, 0x0C, 0x18, 0x00, 0x82, 0x00, - 0x10, 0xC0, 0x02, 0x10, 0x00, 0x42, 0x00, 0x08, 0x40, 0x02, 0x08, 0x00, - 0x43, 0x80, 0x10, 0x70, 0x04, 0x09, 0x83, 0x0F, 0x1F, 0x80, 0x01, 0xFC, - 0x83, 0x03, 0xC6, 0x00, 0xE4, 0x00, 0x22, 0x00, 0x12, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x18, 0x00, 0x64, - 0x00, 0x61, 0x81, 0xC0, 0x7F, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x30, 0x00, - 0x0C, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x60, 0x3F, 0x18, 0x10, 0x64, - 0x18, 0x0D, 0x08, 0x01, 0xC2, 0x00, 0x71, 0x00, 0x0C, 0x80, 0x02, 0x20, - 0x00, 0x88, 0x00, 0x62, 0x00, 0x18, 0x80, 0x0E, 0x20, 0x03, 0x04, 0x03, - 0x40, 0xC1, 0xB0, 0x1F, 0x8F, 0x00, 0x01, 0xF0, 0x0E, 0x0C, 0x18, 0x06, - 0x30, 0x02, 0x60, 0x01, 0x40, 0x01, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x60, 0x06, 0x30, 0x1C, 0x0F, 0xE0, - 0x00, 0x1F, 0xE0, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, - 0x02, 0x00, 0x07, 0xFF, 0xC0, 0x08, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, - 0x08, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x04, 0x00, 0x0F, - 0xFF, 0x00, 0x03, 0xE3, 0xE1, 0x83, 0x60, 0x40, 0x38, 0x10, 0x03, 0x04, - 0x00, 0x60, 0x80, 0x0C, 0x20, 0x01, 0x84, 0x00, 0x20, 0x80, 0x04, 0x10, - 0x01, 0x82, 0x00, 0x30, 0x60, 0x0C, 0x04, 0x02, 0x80, 0x61, 0x90, 0x07, - 0xC6, 0x00, 0x00, 0xC0, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, - 0x30, 0x00, 0x0C, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x40, 0x00, - 0x10, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x23, 0xE0, 0x0B, - 0x0C, 0x05, 0x00, 0x81, 0x80, 0x20, 0x40, 0x08, 0x10, 0x02, 0x08, 0x00, - 0x82, 0x00, 0x60, 0x80, 0x18, 0x20, 0x06, 0x10, 0x01, 0x84, 0x00, 0x61, - 0x00, 0x30, 0x40, 0x0C, 0xFC, 0x1F, 0xC0, 0x00, 0x30, 0x00, 0x60, 0x00, - 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x20, - 0x00, 0x40, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, - 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x10, 0x1F, 0xFF, - 0x80, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFE, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, - 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, 0x00, - 0x40, 0x00, 0x80, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, - 0x00, 0x80, 0x03, 0x00, 0x0C, 0x0F, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x60, - 0x00, 0x10, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x30, 0xFC, - 0x08, 0x18, 0x02, 0x0C, 0x00, 0x8C, 0x00, 0x66, 0x00, 0x1B, 0x00, 0x05, - 0x80, 0x01, 0xB0, 0x00, 0x46, 0x00, 0x31, 0xC0, 0x0C, 0x30, 0x02, 0x06, - 0x00, 0x80, 0xC0, 0x60, 0x30, 0xF8, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x20, - 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, - 0x20, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, - 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x04, 0x00, 0x08, 0x0F, 0xFF, 0xC0, - 0x1C, 0xF1, 0xE0, 0xF1, 0xE3, 0x0E, 0x1C, 0x10, 0xC1, 0x81, 0x08, 0x10, - 0x30, 0x81, 0x03, 0x18, 0x10, 0x21, 0x83, 0x02, 0x10, 0x30, 0x21, 0x02, - 0x06, 0x10, 0x20, 0x63, 0x02, 0x04, 0x30, 0x60, 0x42, 0x06, 0x04, 0xF8, - 0x70, 0xF0, 0x0E, 0x3E, 0x01, 0x60, 0x81, 0xC0, 0x20, 0xC0, 0x10, 0x40, - 0x08, 0x20, 0x04, 0x30, 0x02, 0x10, 0x02, 0x08, 0x01, 0x04, 0x00, 0x82, - 0x00, 0x42, 0x00, 0x21, 0x00, 0x20, 0x80, 0x13, 0xF0, 0x3E, 0x01, 0xF0, - 0x06, 0x0C, 0x18, 0x06, 0x20, 0x03, 0x60, 0x01, 0x40, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x02, 0x80, 0x06, 0xC0, 0x04, 0x40, 0x18, - 0x30, 0x60, 0x1F, 0x80, 0x0F, 0x1F, 0x80, 0x16, 0x0C, 0x01, 0xC0, 0x20, - 0x30, 0x03, 0x03, 0x00, 0x10, 0x20, 0x01, 0x02, 0x00, 0x10, 0x40, 0x01, - 0x04, 0x00, 0x10, 0x40, 0x02, 0x06, 0x00, 0x60, 0x60, 0x04, 0x0B, 0x00, - 0x80, 0x98, 0x30, 0x08, 0xFC, 0x00, 0x80, 0x00, 0x08, 0x00, 0x01, 0x00, - 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x0F, 0xF0, 0x00, 0x03, - 0xF1, 0xE1, 0x83, 0x20, 0x40, 0x34, 0x10, 0x03, 0x84, 0x00, 0x30, 0x80, - 0x04, 0x20, 0x00, 0x84, 0x00, 0x10, 0x80, 0x06, 0x10, 0x00, 0xC2, 0x00, - 0x30, 0x60, 0x0E, 0x04, 0x03, 0x40, 0x60, 0xC8, 0x07, 0xE2, 0x00, 0x00, - 0x40, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x08, 0x00, 0x01, - 0x00, 0x03, 0xFC, 0x00, 0x0F, 0x87, 0xC0, 0x23, 0x08, 0x04, 0xC0, 0x00, - 0xE0, 0x00, 0x18, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x02, - 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x08, - 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFA, 0x0C, 0x1C, 0x20, 0x08, 0x80, 0x11, - 0x00, 0x03, 0x00, 0x03, 0xF8, 0x00, 0x7C, 0x00, 0x0C, 0x00, 0x09, 0x00, - 0x16, 0x00, 0x2C, 0x00, 0x9E, 0x06, 0x27, 0xF0, 0x00, 0x08, 0x00, 0x40, - 0x02, 0x00, 0x10, 0x00, 0x80, 0x7F, 0xFC, 0x40, 0x02, 0x00, 0x10, 0x00, - 0x80, 0x08, 0x00, 0x40, 0x02, 0x00, 0x10, 0x01, 0x00, 0x08, 0x00, 0x40, - 0x02, 0x00, 0xD8, 0x1C, 0x3F, 0x00, 0xF0, 0x1E, 0x20, 0x04, 0x80, 0x09, - 0x00, 0x12, 0x00, 0x24, 0x00, 0xC8, 0x01, 0x20, 0x02, 0x40, 0x04, 0x80, - 0x09, 0x00, 0x12, 0x00, 0x64, 0x03, 0x8C, 0x1D, 0x0F, 0xC3, 0x80, 0xFE, - 0x0F, 0xE6, 0x00, 0x20, 0x40, 0x08, 0x08, 0x03, 0x01, 0x80, 0x40, 0x30, - 0x18, 0x06, 0x02, 0x00, 0x40, 0x80, 0x08, 0x30, 0x01, 0x84, 0x00, 0x31, - 0x80, 0x02, 0x20, 0x00, 0x48, 0x00, 0x09, 0x00, 0x01, 0xC0, 0x00, 0xF8, - 0x0F, 0xA0, 0x01, 0x90, 0x00, 0x88, 0x40, 0xC4, 0x30, 0x42, 0x18, 0x61, - 0x1A, 0x20, 0x8D, 0x10, 0x4C, 0x98, 0x26, 0x48, 0x16, 0x2C, 0x0B, 0x14, - 0x07, 0x0A, 0x03, 0x07, 0x01, 0x81, 0x00, 0x0F, 0x83, 0xE0, 0xC0, 0x18, - 0x0C, 0x0C, 0x01, 0x83, 0x00, 0x18, 0xC0, 0x01, 0xB0, 0x00, 0x1C, 0x00, - 0x03, 0x00, 0x00, 0xF0, 0x00, 0x63, 0x00, 0x18, 0x30, 0x06, 0x06, 0x01, - 0x80, 0x60, 0x60, 0x06, 0x3F, 0x07, 0xE0, 0x0F, 0xC0, 0xF8, 0x30, 0x01, - 0x00, 0x80, 0x18, 0x04, 0x00, 0x80, 0x30, 0x0C, 0x01, 0x80, 0xC0, 0x04, - 0x04, 0x00, 0x30, 0x60, 0x01, 0x86, 0x00, 0x04, 0x20, 0x00, 0x23, 0x00, - 0x01, 0xB0, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x00, 0x01, 0x80, 0x00, 0x08, - 0x00, 0x00, 0xC0, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, - 0x20, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xFF, 0x10, 0x06, 0x10, 0x0C, 0x10, - 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x04, 0x30, 0x0C, 0x60, 0x0C, 0xFF, 0xF8, 0x00, - 0xE0, 0x20, 0x08, 0x01, 0x00, 0x20, 0x04, 0x01, 0x00, 0x20, 0x04, 0x00, - 0x80, 0x20, 0x08, 0x0E, 0x00, 0x60, 0x04, 0x00, 0x80, 0x10, 0x02, 0x00, - 0x40, 0x08, 0x02, 0x00, 0x40, 0x08, 0x01, 0x00, 0x18, 0x00, 0x00, 0x10, - 0xC3, 0x08, 0x20, 0x86, 0x18, 0x41, 0x04, 0x30, 0xC2, 0x08, 0x21, 0x86, - 0x10, 0x43, 0x0C, 0x20, 0x06, 0x00, 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, - 0x10, 0x04, 0x02, 0x00, 0x80, 0x20, 0x0C, 0x01, 0xC0, 0xC0, 0x40, 0x10, - 0x04, 0x03, 0x00, 0x80, 0x20, 0x08, 0x02, 0x01, 0x00, 0xC0, 0xE0, 0x00, - 0x1E, 0x02, 0x66, 0x0D, 0x86, 0x16, 0x06, 0x48, 0x07, 0x00}; - -const GFXglyph FreeMonoOblique18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 21, 0, 1}, // 0x20 ' ' - {0, 7, 22, 21, 9, -21}, // 0x21 '!' - {20, 13, 10, 21, 7, -20}, // 0x22 '"' - {37, 15, 24, 21, 5, -21}, // 0x23 '#' - {82, 16, 26, 21, 4, -22}, // 0x24 '$' - {134, 16, 21, 21, 5, -20}, // 0x25 '%' - {176, 13, 18, 21, 5, -17}, // 0x26 '&' - {206, 5, 10, 21, 12, -20}, // 0x27 ''' - {213, 8, 25, 21, 12, -20}, // 0x28 '(' - {238, 8, 25, 21, 5, -20}, // 0x29 ')' - {263, 14, 11, 21, 7, -19}, // 0x2A '*' - {283, 15, 17, 21, 5, -17}, // 0x2B '+' - {315, 9, 10, 21, 4, -4}, // 0x2C ',' - {327, 16, 1, 21, 5, -9}, // 0x2D '-' - {329, 5, 5, 21, 8, -4}, // 0x2E '.' - {333, 19, 26, 21, 3, -22}, // 0x2F '/' - {395, 14, 21, 21, 5, -20}, // 0x30 '0' - {432, 13, 21, 21, 4, -20}, // 0x31 '1' - {467, 17, 21, 21, 3, -20}, // 0x32 '2' - {512, 16, 21, 21, 3, -20}, // 0x33 '3' - {554, 14, 21, 21, 5, -20}, // 0x34 '4' - {591, 17, 21, 21, 4, -20}, // 0x35 '5' - {636, 16, 21, 21, 6, -20}, // 0x36 '6' - {678, 13, 21, 21, 8, -20}, // 0x37 '7' - {713, 15, 21, 21, 5, -20}, // 0x38 '8' - {753, 15, 21, 21, 5, -20}, // 0x39 '9' - {793, 7, 15, 21, 8, -14}, // 0x3A ':' - {807, 11, 20, 21, 4, -14}, // 0x3B ';' - {835, 17, 16, 21, 5, -17}, // 0x3C '<' - {869, 19, 6, 21, 3, -12}, // 0x3D '=' - {884, 18, 16, 21, 3, -17}, // 0x3E '>' - {920, 12, 20, 21, 8, -19}, // 0x3F '?' - {950, 15, 23, 21, 5, -20}, // 0x40 '@' - {994, 21, 20, 21, 0, -19}, // 0x41 'A' - {1047, 18, 20, 21, 2, -19}, // 0x42 'B' - {1092, 18, 20, 21, 4, -19}, // 0x43 'C' - {1137, 18, 20, 21, 2, -19}, // 0x44 'D' - {1182, 20, 20, 21, 2, -19}, // 0x45 'E' - {1232, 20, 20, 21, 2, -19}, // 0x46 'F' - {1282, 18, 20, 21, 4, -19}, // 0x47 'G' - {1327, 21, 20, 21, 2, -19}, // 0x48 'H' - {1380, 17, 20, 21, 4, -19}, // 0x49 'I' - {1423, 20, 20, 21, 4, -19}, // 0x4A 'J' - {1473, 21, 20, 21, 2, -19}, // 0x4B 'K' - {1526, 18, 20, 21, 2, -19}, // 0x4C 'L' - {1571, 24, 20, 21, 1, -19}, // 0x4D 'M' - {1631, 22, 20, 21, 2, -19}, // 0x4E 'N' - {1686, 17, 20, 21, 4, -19}, // 0x4F 'O' - {1729, 18, 20, 21, 2, -19}, // 0x50 'P' - {1774, 17, 24, 21, 4, -19}, // 0x51 'Q' - {1825, 18, 20, 21, 2, -19}, // 0x52 'R' - {1870, 18, 20, 21, 3, -19}, // 0x53 'S' - {1915, 17, 20, 21, 5, -19}, // 0x54 'T' - {1958, 18, 20, 21, 5, -19}, // 0x55 'U' - {2003, 21, 20, 21, 4, -19}, // 0x56 'V' - {2056, 20, 20, 21, 4, -19}, // 0x57 'W' - {2106, 21, 20, 21, 2, -19}, // 0x58 'X' - {2159, 18, 20, 21, 5, -19}, // 0x59 'Y' - {2204, 17, 20, 21, 4, -19}, // 0x5A 'Z' - {2247, 11, 25, 21, 9, -20}, // 0x5B '[' - {2282, 8, 27, 21, 9, -22}, // 0x5C '\' - {2309, 11, 25, 21, 5, -20}, // 0x5D ']' - {2344, 13, 9, 21, 7, -20}, // 0x5E '^' - {2359, 21, 1, 21, -1, 4}, // 0x5F '_' - {2362, 5, 5, 21, 9, -21}, // 0x60 '`' - {2366, 16, 15, 21, 3, -14}, // 0x61 'a' - {2396, 19, 21, 21, 1, -20}, // 0x62 'b' - {2446, 17, 15, 21, 4, -14}, // 0x63 'c' - {2478, 18, 21, 21, 4, -20}, // 0x64 'd' - {2526, 16, 15, 21, 4, -14}, // 0x65 'e' - {2556, 19, 21, 21, 4, -20}, // 0x66 'f' - {2606, 19, 22, 21, 4, -14}, // 0x67 'g' - {2659, 18, 21, 21, 2, -20}, // 0x68 'h' - {2707, 15, 22, 21, 3, -21}, // 0x69 'i' - {2749, 15, 29, 21, 3, -21}, // 0x6A 'j' - {2804, 18, 21, 21, 2, -20}, // 0x6B 'k' - {2852, 15, 21, 21, 3, -20}, // 0x6C 'l' - {2892, 20, 15, 21, 1, -14}, // 0x6D 'm' - {2930, 17, 15, 21, 2, -14}, // 0x6E 'n' - {2962, 16, 15, 21, 4, -14}, // 0x6F 'o' - {2992, 20, 22, 21, 0, -14}, // 0x70 'p' - {3047, 19, 22, 21, 4, -14}, // 0x71 'q' - {3100, 19, 15, 21, 3, -14}, // 0x72 'r' - {3136, 15, 15, 21, 4, -14}, // 0x73 's' - {3165, 13, 20, 21, 5, -19}, // 0x74 't' - {3198, 15, 15, 21, 4, -14}, // 0x75 'u' - {3227, 19, 15, 21, 4, -14}, // 0x76 'v' - {3263, 17, 15, 21, 5, -14}, // 0x77 'w' - {3295, 19, 15, 21, 2, -14}, // 0x78 'x' - {3331, 21, 22, 21, 1, -14}, // 0x79 'y' - {3389, 16, 15, 21, 4, -14}, // 0x7A 'z' - {3419, 11, 25, 21, 8, -20}, // 0x7B '{' - {3454, 6, 24, 21, 9, -19}, // 0x7C '|' - {3472, 10, 25, 21, 6, -20}, // 0x7D '}' - {3504, 15, 5, 21, 5, -11}}; // 0x7E '~' - -const GFXfont FreeMonoOblique18pt7b PROGMEM = { - (uint8_t *)FreeMonoOblique18pt7bBitmaps, - (GFXglyph *)FreeMonoOblique18pt7bGlyphs, 0x20, 0x7E, 35}; - -// Approx. 4186 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique24pt7b.h deleted file mode 100644 index 28bbf9e..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique24pt7b.h +++ /dev/null @@ -1,645 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoOblique24pt7bBitmaps[] PROGMEM = { - 0x01, 0xC0, 0xF0, 0x3C, 0x0E, 0x03, 0x81, 0xE0, 0x78, 0x1C, 0x07, 0x01, - 0xC0, 0xE0, 0x38, 0x0E, 0x03, 0x00, 0xC0, 0x70, 0x1C, 0x06, 0x01, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0F, 0x83, 0xE0, 0xF8, - 0x1C, 0x00, 0x7E, 0x3F, 0x7E, 0x3F, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, - 0x78, 0x3C, 0xF8, 0x7C, 0xF0, 0x78, 0xF0, 0x78, 0xF0, 0x78, 0xE0, 0x70, - 0xE0, 0x70, 0xE0, 0x70, 0xC0, 0x60, 0x00, 0x18, 0x30, 0x00, 0x61, 0x80, - 0x01, 0x86, 0x00, 0x04, 0x18, 0x00, 0x30, 0xC0, 0x00, 0xC3, 0x00, 0x03, - 0x0C, 0x00, 0x18, 0x30, 0x00, 0x61, 0x80, 0x01, 0x86, 0x00, 0x06, 0x18, - 0x07, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x03, 0x0C, 0x00, 0x18, 0x30, 0x00, - 0x61, 0x80, 0x01, 0x86, 0x00, 0x06, 0x18, 0x00, 0x30, 0xC0, 0x1F, 0xFF, - 0xF8, 0x7F, 0xFF, 0xE0, 0x18, 0x30, 0x00, 0x61, 0x80, 0x01, 0x86, 0x00, - 0x06, 0x18, 0x00, 0x30, 0x40, 0x00, 0xC3, 0x00, 0x03, 0x0C, 0x00, 0x18, - 0x30, 0x00, 0x61, 0x80, 0x01, 0x86, 0x00, 0x06, 0x18, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x3F, 0x00, 0x07, 0xFD, 0x80, - 0x70, 0x7C, 0x06, 0x00, 0xE0, 0x60, 0x02, 0x07, 0x00, 0x10, 0x30, 0x00, - 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xF0, 0x00, 0x07, - 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x18, - 0x00, 0x00, 0xC2, 0x00, 0x06, 0x30, 0x00, 0x61, 0x80, 0x03, 0x1E, 0x00, - 0x30, 0xFC, 0x07, 0x06, 0x7F, 0xF0, 0x00, 0xFE, 0x00, 0x01, 0x80, 0x00, - 0x0C, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, - 0x00, 0x00, 0x78, 0x00, 0x07, 0xF8, 0x00, 0x38, 0x60, 0x01, 0xC0, 0xC0, - 0x06, 0x03, 0x00, 0x30, 0x0C, 0x00, 0xC0, 0x30, 0x03, 0x01, 0x80, 0x0C, - 0x0E, 0x00, 0x38, 0x70, 0x00, 0x7F, 0x81, 0xC0, 0xF8, 0x3F, 0x00, 0x07, - 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x01, - 0x00, 0x78, 0x00, 0x07, 0xF8, 0x00, 0x38, 0x60, 0x01, 0x80, 0xC0, 0x06, - 0x03, 0x00, 0x30, 0x0C, 0x00, 0xC0, 0x30, 0x03, 0x01, 0x80, 0x0C, 0x0E, - 0x00, 0x18, 0x70, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, - 0x0F, 0xF8, 0x03, 0x8E, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x06, 0x00, 0x00, - 0xC0, 0x00, 0x18, 0x00, 0x01, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x03, - 0xE0, 0x01, 0xCC, 0x0E, 0x60, 0xC3, 0xD8, 0x18, 0x63, 0x03, 0x18, 0xC0, - 0x33, 0x18, 0x06, 0xC3, 0x00, 0x70, 0x60, 0x0E, 0x0C, 0x01, 0xC0, 0xC0, - 0x78, 0x1C, 0x3B, 0xE1, 0xFE, 0x3C, 0x1F, 0x00, 0x00, 0x7E, 0xFD, 0xF3, - 0xE7, 0xCF, 0x3E, 0x78, 0xF1, 0xE3, 0x87, 0x0E, 0x18, 0x00, 0x00, 0x60, - 0x18, 0x07, 0x00, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x80, - 0x60, 0x1C, 0x03, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0xF0, 0x1C, 0x03, 0x80, - 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x30, - 0x06, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x30, 0x02, 0x00, 0x01, 0x80, 0x30, - 0x06, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x07, 0x00, 0xE0, 0x1C, 0x03, - 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x38, 0x07, 0x00, - 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x38, 0x0E, 0x01, - 0x80, 0x70, 0x0C, 0x03, 0x00, 0xC0, 0x10, 0x00, 0x00, 0x20, 0x00, 0x18, - 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x30, 0x0E, 0x0C, 0x0B, - 0xF3, 0x3E, 0x3F, 0xFE, 0x01, 0xFC, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x0E, - 0x60, 0x07, 0x18, 0x01, 0x83, 0x00, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x60, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, - 0x00, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x30, 0x00, 0x01, - 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x01, 0x80, - 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, - 0x03, 0xF0, 0x7E, 0x07, 0xC0, 0xF8, 0x0F, 0x81, 0xF0, 0x1E, 0x03, 0xE0, - 0x3C, 0x07, 0x80, 0x70, 0x0F, 0x00, 0xE0, 0x0C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3C, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x03, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, - 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x03, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0xE0, 0x00, 0x00, - 0xC0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x0F, 0xF8, 0x01, - 0xC1, 0xC0, 0x38, 0x0E, 0x07, 0x00, 0x60, 0xE0, 0x03, 0x0C, 0x00, 0x31, - 0x80, 0x03, 0x18, 0x00, 0x33, 0x00, 0x03, 0x30, 0x00, 0x33, 0x00, 0x03, - 0x20, 0x00, 0x26, 0x00, 0x06, 0x60, 0x00, 0x66, 0x00, 0x06, 0x40, 0x00, - 0x4C, 0x00, 0x0C, 0xC0, 0x00, 0xCC, 0x00, 0x0C, 0xC0, 0x01, 0x8C, 0x00, - 0x18, 0xC0, 0x01, 0x8C, 0x00, 0x30, 0xC0, 0x07, 0x06, 0x00, 0xE0, 0x60, - 0x1C, 0x03, 0x87, 0x80, 0x3F, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x0E, 0x00, - 0x0F, 0x00, 0x0F, 0x80, 0x0E, 0xC0, 0x1C, 0xC0, 0x1C, 0x60, 0x1C, 0x30, - 0x08, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, - 0x80, 0x01, 0xC0, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, - 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, - 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x1F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x01, 0xE0, 0xE0, 0x07, 0x00, 0xE0, 0x1C, - 0x00, 0xE0, 0x30, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x00, 0x03, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x00, - 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, - 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xE0, - 0x00, 0xC3, 0x80, 0x01, 0x87, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC, 0x00, 0x00, - 0x0F, 0xC0, 0x01, 0xFF, 0xC0, 0x1E, 0x07, 0x80, 0xE0, 0x06, 0x03, 0x00, - 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x60, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, - 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xE0, 0x00, 0x01, - 0x80, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, - 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xE3, 0x00, 0x07, 0x0E, 0x00, - 0x38, 0x1E, 0x03, 0xC0, 0x3F, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0xF8, 0x00, 0x1B, 0x00, 0x06, 0x60, 0x01, 0x8C, 0x00, 0x63, - 0x00, 0x18, 0x60, 0x07, 0x0C, 0x00, 0xC1, 0x80, 0x30, 0x30, 0x0C, 0x0C, - 0x03, 0x01, 0x80, 0xC0, 0x30, 0x18, 0x06, 0x06, 0x00, 0xC1, 0x80, 0x30, - 0x60, 0x06, 0x18, 0x00, 0xC3, 0xFF, 0xFE, 0x7F, 0xFF, 0xC0, 0x00, 0xC0, - 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x03, 0x00, - 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x0F, 0xFF, 0xC0, 0x40, - 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, - 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0xBF, 0xC0, 0x0F, 0xFF, - 0x80, 0xF8, 0x1E, 0x02, 0x00, 0x30, 0x00, 0x01, 0xC0, 0x00, 0x06, 0x00, - 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x06, - 0x00, 0x00, 0x30, 0x00, 0x03, 0x80, 0x00, 0x18, 0xC0, 0x01, 0x87, 0x00, - 0x38, 0x1E, 0x07, 0x80, 0x7F, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0xFF, 0xC0, 0x1F, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x01, - 0x80, 0x00, 0x18, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, - 0x0E, 0x00, 0x00, 0x60, 0x00, 0x07, 0x0F, 0x80, 0x31, 0xFF, 0x01, 0x9C, - 0x3C, 0x0D, 0x80, 0x60, 0xD8, 0x03, 0x87, 0x80, 0x0C, 0x38, 0x00, 0x61, - 0xC0, 0x03, 0x0C, 0x00, 0x18, 0x60, 0x00, 0xC3, 0x00, 0x0C, 0x18, 0x00, - 0x60, 0xE0, 0x06, 0x03, 0x00, 0x30, 0x1C, 0x07, 0x00, 0x70, 0x70, 0x01, - 0xFF, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0xFF, 0xDF, 0xFF, 0xFC, 0x00, 0x0F, - 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, - 0x06, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x18, 0x00, 0x0C, - 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x30, 0x00, 0x0C, 0x00, - 0x06, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x18, 0x00, 0x0C, - 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x00, 0x3F, 0x00, 0x0F, - 0xFC, 0x01, 0xC1, 0xE0, 0x70, 0x06, 0x06, 0x00, 0x30, 0xC0, 0x03, 0x1C, - 0x00, 0x31, 0x80, 0x03, 0x18, 0x00, 0x31, 0x80, 0x06, 0x18, 0x00, 0xE0, - 0xC0, 0x1C, 0x0F, 0x07, 0x80, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0xE0, 0x70, - 0x18, 0x03, 0x83, 0x00, 0x1C, 0x60, 0x00, 0xC6, 0x00, 0x0C, 0xC0, 0x00, - 0xCC, 0x00, 0x0C, 0xC0, 0x00, 0xCC, 0x00, 0x18, 0xC0, 0x03, 0x8E, 0x00, - 0x70, 0x60, 0x0E, 0x07, 0x83, 0xC0, 0x3F, 0xF0, 0x00, 0xFC, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0xFF, 0x80, 0x0F, 0x07, 0x00, 0x70, 0x0E, 0x03, 0x80, - 0x18, 0x0C, 0x00, 0x70, 0x60, 0x00, 0xC1, 0x80, 0x03, 0x0C, 0x00, 0x0C, - 0x30, 0x00, 0x30, 0xC0, 0x01, 0xC3, 0x00, 0x0F, 0x0C, 0x00, 0x6C, 0x38, - 0x03, 0xF0, 0x60, 0x1D, 0x81, 0xE1, 0xE6, 0x03, 0xFE, 0x18, 0x03, 0xE0, - 0xC0, 0x00, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x03, - 0xC0, 0x00, 0x7C, 0x00, 0xFF, 0xC0, 0x01, 0xF8, 0x00, 0x00, 0x07, 0x83, - 0xF1, 0xFC, 0x7F, 0x1F, 0x83, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7E, 0x3F, 0x8F, 0xE3, 0xF0, 0x78, - 0x00, 0x00, 0x3C, 0x00, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x3E, - 0x00, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x70, 0x01, - 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x3C, 0x00, 0x01, - 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x03, - 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0C, 0x00, 0x3F, 0xFF, 0xFF, 0x9F, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0x00, 0x06, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, - 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0x70, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x3F, 0xFC, 0x78, - 0x1E, 0xC0, 0x07, 0xC0, 0x03, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, - 0x06, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xE0, 0x07, 0xC0, 0x07, - 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFE, - 0x00, 0x7C, 0x00, 0x00, 0x3F, 0x00, 0x1F, 0xF0, 0x07, 0x07, 0x01, 0xC0, - 0x70, 0x60, 0x06, 0x1C, 0x00, 0xC3, 0x00, 0x18, 0xC0, 0x03, 0x18, 0x00, - 0x66, 0x00, 0xFC, 0xC0, 0x7F, 0x98, 0x1C, 0x66, 0x06, 0x0C, 0xC1, 0x81, - 0x98, 0x30, 0x33, 0x0C, 0x0E, 0x61, 0x81, 0x98, 0x30, 0x33, 0x06, 0x06, - 0x60, 0xF0, 0xCC, 0x0F, 0xF9, 0x80, 0x7F, 0x30, 0x00, 0x06, 0x00, 0x00, - 0xC0, 0x00, 0x18, 0x00, 0x03, 0x80, 0x00, 0x30, 0x00, 0x07, 0x00, 0x00, - 0x70, 0x18, 0x0F, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x06, 0xC0, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x31, 0x80, - 0x00, 0x06, 0x30, 0x00, 0x01, 0x86, 0x00, 0x00, 0x60, 0xC0, 0x00, 0x0C, - 0x1C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x40, 0x30, 0x00, 0x18, 0x06, 0x00, - 0x06, 0x00, 0xC0, 0x00, 0xC0, 0x18, 0x00, 0x30, 0x01, 0x80, 0x07, 0xFF, - 0xF0, 0x01, 0xFF, 0xFE, 0x00, 0x60, 0x00, 0xC0, 0x0C, 0x00, 0x18, 0x03, - 0x00, 0x03, 0x00, 0x40, 0x00, 0x30, 0x18, 0x00, 0x06, 0x06, 0x00, 0x00, - 0xC0, 0xC0, 0x00, 0x18, 0xFF, 0x80, 0x7F, 0xFF, 0xF0, 0x0F, 0xFC, 0x03, - 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xC0, 0x06, 0x00, 0x38, 0x01, 0x80, 0x07, - 0x00, 0xC0, 0x00, 0xC0, 0x30, 0x00, 0x30, 0x0C, 0x00, 0x0C, 0x03, 0x00, - 0x03, 0x00, 0xC0, 0x01, 0x80, 0x60, 0x00, 0xC0, 0x18, 0x01, 0xE0, 0x07, - 0xFF, 0xE0, 0x01, 0xFF, 0xFC, 0x00, 0xE0, 0x03, 0x80, 0x30, 0x00, 0x70, - 0x0C, 0x00, 0x0E, 0x03, 0x00, 0x01, 0x80, 0xC0, 0x00, 0x60, 0x60, 0x00, - 0x18, 0x18, 0x00, 0x06, 0x06, 0x00, 0x03, 0x01, 0x80, 0x01, 0xC0, 0x60, - 0x00, 0xE0, 0x30, 0x00, 0x70, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xFC, 0xC0, 0x3C, 0x0F, 0x60, 0x78, 0x01, - 0xF0, 0x70, 0x00, 0x70, 0x70, 0x00, 0x18, 0x30, 0x00, 0x0C, 0x30, 0x00, - 0x06, 0x38, 0x00, 0x02, 0x18, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x0C, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x60, - 0x60, 0x00, 0x60, 0x38, 0x00, 0xE0, 0x0F, 0x01, 0xE0, 0x03, 0xFF, 0xC0, - 0x00, 0x3F, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x0C, - 0x00, 0xF0, 0x03, 0x00, 0x1C, 0x01, 0xC0, 0x03, 0x80, 0x60, 0x00, 0x60, - 0x18, 0x00, 0x1C, 0x06, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC0, 0xC0, 0x00, - 0x30, 0x30, 0x00, 0x0C, 0x0C, 0x00, 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, - 0x00, 0x60, 0x60, 0x00, 0x18, 0x18, 0x00, 0x06, 0x06, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xC0, 0xE0, 0x00, 0x70, 0x30, 0x00, 0x18, 0x0C, 0x00, 0x0C, - 0x03, 0x00, 0x06, 0x00, 0xC0, 0x07, 0x00, 0x60, 0x07, 0x80, 0xFF, 0xFF, - 0xC0, 0x3F, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, - 0x01, 0x80, 0x01, 0x80, 0x30, 0x00, 0x60, 0x0C, 0x00, 0x0C, 0x01, 0x80, - 0x01, 0x80, 0x30, 0x00, 0x30, 0x06, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, - 0x30, 0x18, 0x00, 0x06, 0x03, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, - 0x00, 0x07, 0x03, 0x00, 0x00, 0xC0, 0x60, 0x00, 0x18, 0x0C, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x0C, 0x03, 0x00, 0x01, - 0x80, 0x60, 0x00, 0x30, 0x0C, 0x00, 0x0C, 0x01, 0x80, 0x01, 0x80, 0x60, - 0x00, 0x30, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, - 0xF0, 0x7F, 0xFF, 0xFF, 0x00, 0x60, 0x00, 0x30, 0x06, 0x00, 0x06, 0x00, - 0xC0, 0x00, 0x60, 0x0C, 0x00, 0x06, 0x00, 0xC0, 0x00, 0x60, 0x0C, 0x00, - 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x18, 0x0C, 0x00, 0x01, 0x80, 0xC0, 0x00, - 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x38, 0x18, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x30, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xFF, 0xFC, 0x00, - 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xFC, 0xC0, 0x3C, - 0x0F, 0xE0, 0x78, 0x01, 0xF0, 0x70, 0x00, 0x30, 0x70, 0x00, 0x18, 0x70, - 0x00, 0x0C, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, - 0x80, 0x00, 0x01, 0x80, 0x1F, 0xFE, 0xC0, 0x0F, 0xFF, 0x60, 0x00, 0x06, - 0x30, 0x00, 0x06, 0x18, 0x00, 0x03, 0x0C, 0x00, 0x01, 0x87, 0x00, 0x00, - 0xC1, 0x80, 0x00, 0xE0, 0xE0, 0x00, 0x60, 0x38, 0x00, 0x70, 0x0F, 0x00, - 0xF8, 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x1F, 0xE0, - 0x7F, 0x83, 0xFC, 0x03, 0x00, 0x06, 0x00, 0x60, 0x01, 0x80, 0x1C, 0x00, - 0x30, 0x03, 0x00, 0x06, 0x00, 0x60, 0x00, 0xC0, 0x0C, 0x00, 0x38, 0x01, - 0x80, 0x06, 0x00, 0x60, 0x00, 0xC0, 0x0C, 0x00, 0x18, 0x01, 0xFF, 0xFF, - 0x00, 0x3F, 0xFF, 0xC0, 0x06, 0x00, 0x18, 0x01, 0x80, 0x03, 0x00, 0x30, - 0x00, 0x60, 0x06, 0x00, 0x0C, 0x00, 0xC0, 0x03, 0x00, 0x38, 0x00, 0x60, - 0x06, 0x00, 0x0C, 0x00, 0xC0, 0x01, 0x80, 0x18, 0x00, 0x70, 0x03, 0x00, - 0x0C, 0x00, 0xE0, 0x01, 0x80, 0xFF, 0x83, 0xFE, 0x1F, 0xF0, 0x7F, 0xC0, - 0x07, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x70, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, - 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x01, - 0x80, 0x00, 0x06, 0x00, 0x00, 0x38, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, - 0x00, 0x0C, 0x00, 0x00, 0x30, 0x00, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0x00, - 0x00, 0x0F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x0C, 0x00, 0x00, - 0x00, 0xC0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x07, - 0x00, 0x20, 0x00, 0x60, 0x06, 0x00, 0x06, 0x00, 0x60, 0x00, 0x60, 0x06, - 0x00, 0x06, 0x00, 0x60, 0x00, 0xC0, 0x0C, 0x00, 0x0C, 0x00, 0xC0, 0x00, - 0xC0, 0x0C, 0x00, 0x18, 0x00, 0xE0, 0x03, 0x00, 0x07, 0x00, 0x70, 0x00, - 0x3C, 0x1C, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, - 0xFF, 0x07, 0xF8, 0x3F, 0xF8, 0x3F, 0xC0, 0x18, 0x00, 0x70, 0x00, 0xC0, - 0x07, 0x00, 0x0C, 0x00, 0x60, 0x00, 0x60, 0x0E, 0x00, 0x03, 0x00, 0xE0, - 0x00, 0x18, 0x0C, 0x00, 0x00, 0xC1, 0xC0, 0x00, 0x0C, 0x1C, 0x00, 0x00, - 0x61, 0x80, 0x00, 0x03, 0x3C, 0x00, 0x00, 0x1B, 0x78, 0x00, 0x01, 0xF0, - 0xE0, 0x00, 0x0F, 0x03, 0x80, 0x00, 0x60, 0x0C, 0x00, 0x03, 0x00, 0x70, - 0x00, 0x18, 0x01, 0x80, 0x01, 0x80, 0x0C, 0x00, 0x0C, 0x00, 0x60, 0x00, - 0x60, 0x01, 0x80, 0x03, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x60, 0x01, 0x80, - 0x03, 0x00, 0xFF, 0xE0, 0x1F, 0x87, 0xFF, 0x00, 0x7C, 0x00, 0x07, 0xFF, - 0xE0, 0x03, 0xFF, 0xF0, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, - 0x00, 0xC0, 0x03, 0x00, 0x60, 0x01, 0x80, 0x60, 0x00, 0xC0, 0x30, 0x00, - 0x60, 0x18, 0x00, 0x30, 0x0C, 0x00, 0x30, 0x0E, 0x00, 0x18, 0x06, 0x00, - 0x0C, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x3F, - 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xB0, 0x00, 0xD8, 0x01, 0xB0, 0x00, 0xD8, - 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x03, 0x30, 0x01, 0x98, 0x03, 0x30, - 0x03, 0x18, 0x06, 0x30, 0x03, 0x1C, 0x0C, 0x30, 0x03, 0x0C, 0x0C, 0x30, - 0x03, 0x0C, 0x18, 0x60, 0x07, 0x0C, 0x30, 0x60, 0x06, 0x0C, 0x30, 0x60, - 0x06, 0x06, 0x60, 0x60, 0x06, 0x06, 0xC0, 0x60, 0x06, 0x06, 0xC0, 0xC0, - 0x0C, 0x07, 0x80, 0xC0, 0x0C, 0x03, 0x00, 0xC0, 0x0C, 0x00, 0x00, 0xC0, - 0x0C, 0x00, 0x01, 0xC0, 0x0C, 0x00, 0x01, 0x80, 0x18, 0x00, 0x01, 0x80, - 0x18, 0x00, 0x01, 0x80, 0x18, 0x00, 0x01, 0x80, 0xFF, 0x80, 0x3F, 0xE0, - 0xFF, 0x80, 0x3F, 0xE0, 0x07, 0xE0, 0x0F, 0xFC, 0x3F, 0x80, 0x3F, 0xF0, - 0x0F, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x10, 0x01, 0x98, 0x00, 0xC0, 0x06, - 0x60, 0x03, 0x00, 0x19, 0xC0, 0x0C, 0x00, 0x63, 0x00, 0x30, 0x01, 0x0C, - 0x01, 0x80, 0x0C, 0x18, 0x06, 0x00, 0x30, 0x60, 0x18, 0x00, 0xC1, 0xC0, - 0x60, 0x03, 0x03, 0x01, 0x00, 0x08, 0x0C, 0x0C, 0x00, 0x60, 0x18, 0x30, - 0x01, 0x80, 0x60, 0xC0, 0x06, 0x01, 0xC3, 0x00, 0x18, 0x03, 0x18, 0x00, - 0xC0, 0x0C, 0x60, 0x03, 0x00, 0x19, 0x80, 0x0C, 0x00, 0x66, 0x00, 0x30, - 0x01, 0xD8, 0x00, 0x80, 0x03, 0xC0, 0x06, 0x00, 0x0F, 0x00, 0xFF, 0xC0, - 0x1C, 0x03, 0xFE, 0x00, 0x70, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xF0, - 0x00, 0xF0, 0x78, 0x03, 0x80, 0x1C, 0x07, 0x00, 0x0E, 0x0E, 0x00, 0x06, - 0x0C, 0x00, 0x06, 0x18, 0x00, 0x07, 0x38, 0x00, 0x03, 0x30, 0x00, 0x03, - 0x60, 0x00, 0x03, 0x60, 0x00, 0x03, 0x60, 0x00, 0x03, 0xC0, 0x00, 0x03, - 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x06, 0xC0, 0x00, 0x06, 0xC0, 0x00, 0x06, - 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x1C, 0xC0, 0x00, 0x18, 0x60, 0x00, 0x30, - 0x60, 0x00, 0x70, 0x70, 0x00, 0xE0, 0x38, 0x01, 0xC0, 0x1E, 0x0F, 0x00, - 0x0F, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x06, 0x00, 0x78, 0x01, 0x80, 0x06, 0x00, 0xC0, 0x01, 0xC0, 0x30, - 0x00, 0x30, 0x0C, 0x00, 0x0C, 0x03, 0x00, 0x03, 0x00, 0xC0, 0x01, 0xC0, - 0x60, 0x00, 0x60, 0x18, 0x00, 0x30, 0x06, 0x00, 0x18, 0x01, 0x80, 0x3C, - 0x00, 0xFF, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, - 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x7F, - 0xF0, 0x00, 0xF0, 0x78, 0x03, 0x80, 0x1C, 0x07, 0x00, 0x0E, 0x0E, 0x00, - 0x06, 0x0C, 0x00, 0x06, 0x18, 0x00, 0x03, 0x38, 0x00, 0x03, 0x30, 0x00, - 0x03, 0x60, 0x00, 0x03, 0x60, 0x00, 0x03, 0x60, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x06, 0xC0, 0x00, 0x06, 0xC0, 0x00, - 0x06, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x1C, 0xC0, 0x00, 0x18, 0x60, 0x00, - 0x30, 0x60, 0x00, 0x70, 0x30, 0x00, 0xE0, 0x38, 0x01, 0xC0, 0x0E, 0x0F, - 0x00, 0x07, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x1F, 0xF8, - 0x30, 0x3F, 0xFF, 0xF0, 0x78, 0x0F, 0x80, 0x07, 0xFF, 0xFC, 0x01, 0xFF, - 0xFF, 0xC0, 0x06, 0x00, 0x78, 0x01, 0x80, 0x0E, 0x00, 0xC0, 0x01, 0xC0, - 0x30, 0x00, 0x30, 0x0C, 0x00, 0x0C, 0x03, 0x00, 0x03, 0x00, 0xC0, 0x00, - 0xC0, 0x60, 0x00, 0x60, 0x18, 0x00, 0x30, 0x06, 0x00, 0x38, 0x01, 0x80, - 0x3C, 0x00, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x0C, 0x07, 0x80, 0x03, - 0x00, 0x70, 0x00, 0xC0, 0x0E, 0x00, 0x60, 0x01, 0x80, 0x18, 0x00, 0x70, - 0x06, 0x00, 0x0C, 0x01, 0x80, 0x03, 0x80, 0x60, 0x00, 0x60, 0x30, 0x00, - 0x1C, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x00, 0xF0, 0x00, 0x1F, 0xC0, 0x00, - 0x7F, 0xF3, 0x00, 0xE0, 0x3B, 0x03, 0x80, 0x0F, 0x07, 0x00, 0x0E, 0x06, - 0x00, 0x06, 0x0C, 0x00, 0x06, 0x0C, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x18, 0x20, 0x00, 0x18, 0x60, 0x00, 0x18, 0x60, - 0x00, 0x30, 0x60, 0x00, 0x70, 0xF0, 0x00, 0xE0, 0xF8, 0x01, 0xC0, 0xDC, - 0x07, 0x80, 0x8F, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0xFF, 0xFE, 0x3F, - 0xFF, 0xFE, 0x30, 0x18, 0x06, 0x60, 0x18, 0x06, 0x60, 0x18, 0x06, 0x60, - 0x38, 0x0C, 0x60, 0x30, 0x04, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, - 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x01, - 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0xFF, 0xFE, 0x00, 0xFF, - 0xFC, 0x00, 0x7F, 0xC0, 0xFF, 0xDF, 0xF0, 0x3F, 0xF1, 0x80, 0x00, 0x60, - 0x60, 0x00, 0x30, 0x18, 0x00, 0x0C, 0x06, 0x00, 0x03, 0x03, 0x80, 0x00, - 0xC0, 0xC0, 0x00, 0x30, 0x30, 0x00, 0x18, 0x0C, 0x00, 0x06, 0x03, 0x00, - 0x01, 0x81, 0xC0, 0x00, 0x60, 0x60, 0x00, 0x18, 0x18, 0x00, 0x0C, 0x06, - 0x00, 0x03, 0x01, 0x80, 0x00, 0xC0, 0xC0, 0x00, 0x30, 0x30, 0x00, 0x1C, - 0x0C, 0x00, 0x06, 0x03, 0x00, 0x01, 0x80, 0xC0, 0x00, 0xC0, 0x30, 0x00, - 0x70, 0x0E, 0x00, 0x38, 0x01, 0xC0, 0x1C, 0x00, 0x38, 0x1E, 0x00, 0x07, - 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, - 0xFC, 0xE0, 0x00, 0x0C, 0x0C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x60, 0x30, - 0x00, 0x18, 0x06, 0x00, 0x02, 0x00, 0xC0, 0x00, 0xC0, 0x0C, 0x00, 0x30, - 0x01, 0x80, 0x06, 0x00, 0x30, 0x01, 0x80, 0x06, 0x00, 0x60, 0x00, 0xC0, - 0x0C, 0x00, 0x18, 0x03, 0x00, 0x01, 0x80, 0xC0, 0x00, 0x30, 0x18, 0x00, - 0x06, 0x06, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x18, 0x30, 0x00, 0x03, 0x8C, - 0x00, 0x00, 0x31, 0x80, 0x00, 0x06, 0x60, 0x00, 0x00, 0xD8, 0x00, 0x00, - 0x1B, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x38, 0x00, 0x00, 0xFF, 0xC0, - 0x7F, 0xFF, 0xF8, 0x0F, 0xF8, 0xC0, 0x00, 0x0C, 0x18, 0x00, 0x01, 0x83, - 0x00, 0x00, 0x30, 0x60, 0x08, 0x0C, 0x0C, 0x07, 0x01, 0x81, 0x81, 0xE0, - 0x30, 0x60, 0x2C, 0x0C, 0x0C, 0x0D, 0x81, 0x81, 0x81, 0x30, 0x30, 0x30, - 0x66, 0x0C, 0x06, 0x08, 0xC1, 0x80, 0xC3, 0x0C, 0x30, 0x18, 0x41, 0x8C, - 0x03, 0x18, 0x31, 0x80, 0x62, 0x06, 0x30, 0x0C, 0xC0, 0xCC, 0x03, 0x10, - 0x19, 0x80, 0x66, 0x03, 0x30, 0x0C, 0x80, 0x6C, 0x01, 0xB0, 0x0D, 0x80, - 0x34, 0x01, 0xB0, 0x07, 0x80, 0x3C, 0x00, 0xE0, 0x07, 0x80, 0x1C, 0x00, - 0xF0, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x1F, 0xC0, 0x3F, 0xC0, 0x30, 0x00, - 0x30, 0x01, 0xC0, 0x03, 0x00, 0x06, 0x00, 0x30, 0x00, 0x18, 0x03, 0x00, - 0x00, 0xE0, 0x30, 0x00, 0x03, 0x03, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x03, 0xB0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x36, 0x00, 0x00, 0x03, 0x38, 0x00, - 0x00, 0x30, 0xC0, 0x00, 0x03, 0x07, 0x00, 0x00, 0x30, 0x18, 0x00, 0x03, - 0x00, 0x60, 0x00, 0x30, 0x03, 0x80, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, - 0x70, 0x03, 0x00, 0x01, 0x80, 0xFF, 0x80, 0xFF, 0x07, 0xFC, 0x07, 0xF8, - 0x00, 0x7F, 0x80, 0x7F, 0x7F, 0x00, 0x7F, 0x1C, 0x00, 0x18, 0x0C, 0x00, - 0x30, 0x0C, 0x00, 0x70, 0x06, 0x00, 0xE0, 0x06, 0x00, 0xC0, 0x03, 0x01, - 0x80, 0x03, 0x03, 0x00, 0x01, 0x86, 0x00, 0x01, 0x8C, 0x00, 0x00, 0xD8, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, - 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, - 0x00, 0xFF, 0xFE, 0x00, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFE, 0x07, 0xFF, - 0xF8, 0x0C, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x60, 0x03, 0x80, 0xC0, 0x0E, - 0x01, 0x80, 0x38, 0x03, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, - 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x60, 0x00, 0x01, 0x80, 0x00, 0x06, 0x00, 0x60, 0x18, - 0x00, 0xC0, 0x60, 0x01, 0x81, 0x80, 0x02, 0x06, 0x00, 0x0C, 0x18, 0x00, - 0x18, 0x60, 0x00, 0x30, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0x80, 0x01, 0xFE, - 0x03, 0xFC, 0x06, 0x00, 0x08, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, - 0x80, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x40, 0x01, 0x80, - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x60, 0x00, 0xC0, 0x01, - 0x80, 0x03, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0x80, - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x20, 0x00, 0xFF, 0x01, - 0xFE, 0x00, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x60, 0x18, 0x07, 0x00, 0xC0, - 0x30, 0x0C, 0x03, 0x80, 0x60, 0x18, 0x06, 0x00, 0xC0, 0x30, 0x0C, 0x03, - 0x00, 0x60, 0x18, 0x06, 0x01, 0x80, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x18, - 0x06, 0x01, 0x80, 0x60, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x04, 0x01, 0xFE, - 0x03, 0xFC, 0x00, 0x10, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, - 0x04, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, - 0x06, 0x00, 0x08, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x01, 0x80, 0xFF, 0x01, - 0xFE, 0x00, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x07, 0x80, 0x03, 0x60, 0x01, - 0x8C, 0x00, 0xC3, 0x80, 0xE0, 0x60, 0x70, 0x1C, 0x38, 0x03, 0x1C, 0x00, - 0x6E, 0x00, 0x1F, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC3, 0x86, 0x0C, 0x18, 0x70, 0xC0, 0x00, 0x3F, 0x80, 0x0F, 0xFF, 0x80, - 0x78, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, - 0x01, 0x80, 0x00, 0x06, 0x00, 0x00, 0x38, 0x03, 0xFC, 0xC0, 0x7F, 0xFF, - 0x07, 0xC0, 0x0C, 0x38, 0x00, 0x31, 0xC0, 0x01, 0xCE, 0x00, 0x06, 0x30, - 0x00, 0x18, 0xC0, 0x00, 0xE3, 0x00, 0x07, 0x8E, 0x00, 0x7C, 0x1C, 0x0F, - 0x3F, 0x3F, 0xF0, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x00, 0xC0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x06, 0x07, 0xE0, 0x00, 0xC3, - 0xFF, 0x00, 0x19, 0xC0, 0xF0, 0x03, 0x60, 0x07, 0x00, 0xD8, 0x00, 0x60, - 0x1E, 0x00, 0x0E, 0x03, 0x80, 0x00, 0xC0, 0x60, 0x00, 0x18, 0x0C, 0x00, - 0x03, 0x03, 0x00, 0x00, 0x60, 0x60, 0x00, 0x0C, 0x0C, 0x00, 0x01, 0x81, - 0x80, 0x00, 0x60, 0x70, 0x00, 0x0C, 0x0E, 0x00, 0x03, 0x01, 0xC0, 0x00, - 0x60, 0x3C, 0x00, 0x18, 0x05, 0x80, 0x06, 0x01, 0xB8, 0x01, 0x83, 0xF3, - 0xC1, 0xE0, 0x7E, 0x3F, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, - 0x07, 0xFF, 0x30, 0x38, 0x0F, 0xC1, 0x80, 0x1F, 0x0C, 0x00, 0x18, 0x60, - 0x00, 0x63, 0x00, 0x01, 0x9C, 0x00, 0x06, 0x60, 0x00, 0x01, 0x80, 0x00, - 0x0C, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x30, 0x00, 0x00, 0xE0, 0x00, 0x01, 0x80, 0x00, 0xC7, 0x00, - 0x0E, 0x0F, 0x01, 0xF0, 0x1F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0xFC, 0x0C, 0x01, - 0xFF, 0x86, 0x01, 0xC0, 0xE3, 0x03, 0x80, 0x1B, 0x03, 0x80, 0x05, 0x81, - 0x80, 0x03, 0xC1, 0x80, 0x00, 0xE1, 0x80, 0x00, 0x60, 0xC0, 0x00, 0x30, - 0x60, 0x00, 0x18, 0x60, 0x00, 0x0C, 0x30, 0x00, 0x06, 0x18, 0x00, 0x02, - 0x0C, 0x00, 0x03, 0x06, 0x00, 0x01, 0x83, 0x00, 0x01, 0xC1, 0xC0, 0x01, - 0xE0, 0x60, 0x01, 0xE0, 0x38, 0x01, 0xB0, 0x0F, 0x03, 0x9F, 0x03, 0xFF, - 0x0F, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x07, 0xFF, 0x80, 0x78, - 0x0F, 0x03, 0x80, 0x0E, 0x1C, 0x00, 0x18, 0xE0, 0x00, 0x73, 0x00, 0x00, - 0xD8, 0x00, 0x03, 0x60, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x60, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x03, 0x07, 0x80, 0xF8, - 0x0F, 0xFF, 0x80, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0xFF, - 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x18, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x07, 0xFF, 0xFC, 0x03, - 0xFF, 0xFF, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x60, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xC0, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, - 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFE, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x87, 0xC1, 0xE0, 0xF3, 0xE1, 0xC0, - 0x1B, 0x01, 0xC0, 0x07, 0x81, 0xC0, 0x03, 0xC0, 0xC0, 0x00, 0xE0, 0xC0, - 0x00, 0x60, 0x60, 0x00, 0x30, 0x60, 0x00, 0x18, 0x30, 0x00, 0x0C, 0x18, - 0x00, 0x06, 0x0C, 0x00, 0x06, 0x06, 0x00, 0x03, 0x03, 0x00, 0x03, 0x81, - 0xC0, 0x01, 0xC0, 0x60, 0x01, 0xC0, 0x38, 0x03, 0x60, 0x0F, 0x07, 0x30, - 0x03, 0xFF, 0x18, 0x00, 0x7E, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x01, - 0x80, 0x00, 0x03, 0x80, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, - 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x01, 0x83, 0xF0, 0x01, - 0x8F, 0xF8, 0x01, 0x98, 0x1C, 0x03, 0xB0, 0x0E, 0x03, 0x40, 0x06, 0x03, - 0x80, 0x06, 0x03, 0x00, 0x06, 0x03, 0x00, 0x06, 0x07, 0x00, 0x06, 0x06, - 0x00, 0x0E, 0x06, 0x00, 0x0E, 0x06, 0x00, 0x0E, 0x06, 0x00, 0x0C, 0x0C, - 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x0C, 0x00, 0x1C, 0x0C, 0x00, 0x18, 0x0C, - 0x00, 0x18, 0x18, 0x00, 0x18, 0xFF, 0x01, 0xFF, 0xFF, 0x01, 0xFF, 0x00, - 0x07, 0x00, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x1F, - 0xF0, 0x00, 0x06, 0x00, 0x01, 0xC0, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, - 0xC0, 0x00, 0x18, 0x00, 0x07, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, 0x03, - 0x00, 0x00, 0x60, 0x00, 0x1C, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x0C, - 0x00, 0x01, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x70, 0x00, - 0x07, 0x00, 0x00, 0x70, 0x00, 0x06, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, - 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, - 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x0C, 0x00, 0x00, - 0xC0, 0x00, 0x0C, 0x00, 0x01, 0xC0, 0x00, 0x18, 0x00, 0x01, 0x80, 0x00, - 0x18, 0x00, 0x01, 0x80, 0x00, 0x38, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, - 0x03, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, - 0x03, 0x80, 0xFF, 0xF0, 0x0F, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0xC1, - 0xFF, 0x00, 0x80, 0x70, 0x01, 0x80, 0xC0, 0x01, 0x83, 0x80, 0x01, 0x87, - 0x00, 0x01, 0x8C, 0x00, 0x03, 0x38, 0x00, 0x03, 0x70, 0x00, 0x03, 0xF8, - 0x00, 0x03, 0x9C, 0x00, 0x03, 0x0C, 0x00, 0x06, 0x0E, 0x00, 0x06, 0x07, - 0x00, 0x06, 0x03, 0x80, 0x06, 0x01, 0x80, 0x04, 0x00, 0xC0, 0x0C, 0x00, - 0xE0, 0xFC, 0x03, 0xFE, 0xFC, 0x03, 0xFC, 0x01, 0xFF, 0x00, 0x3F, 0xE0, - 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x0C, 0x00, 0x01, 0x80, - 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, - 0x01, 0x80, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, - 0x06, 0x00, 0x00, 0xC0, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0xE0, 0x00, - 0x18, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x0C, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0x1E, 0x07, 0x81, 0xE7, 0xE1, 0xF8, 0x3D, 0x8E, 0xE3, - 0x81, 0xE0, 0xF8, 0x30, 0x38, 0x1E, 0x06, 0x06, 0x03, 0x80, 0xC1, 0x80, - 0x60, 0x18, 0x30, 0x0C, 0x03, 0x06, 0x01, 0x80, 0x60, 0xC0, 0x30, 0x08, - 0x18, 0x0C, 0x03, 0x06, 0x01, 0x80, 0x60, 0xC0, 0x30, 0x0C, 0x18, 0x06, - 0x01, 0x83, 0x00, 0x80, 0x60, 0x40, 0x30, 0x0C, 0x18, 0x06, 0x01, 0x83, - 0x00, 0xC0, 0x30, 0x60, 0x18, 0x06, 0x7F, 0x03, 0xC1, 0xFF, 0xE0, 0xF8, - 0x3E, 0x00, 0x03, 0xE0, 0x1F, 0x1F, 0xF0, 0x3E, 0x60, 0x70, 0x0F, 0x80, - 0x70, 0x3C, 0x00, 0x60, 0x70, 0x00, 0xC0, 0xC0, 0x01, 0x81, 0x80, 0x03, - 0x07, 0x00, 0x06, 0x0C, 0x00, 0x1C, 0x18, 0x00, 0x30, 0x30, 0x00, 0x60, - 0x60, 0x00, 0xC1, 0xC0, 0x01, 0x83, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C, - 0x00, 0x18, 0x18, 0x00, 0x30, 0x70, 0x00, 0x67, 0xFC, 0x07, 0xFF, 0xF0, - 0x0F, 0xE0, 0x00, 0x3F, 0x00, 0x07, 0xFF, 0x00, 0x3C, 0x0F, 0x01, 0xC0, - 0x1C, 0x0C, 0x00, 0x38, 0x60, 0x00, 0x63, 0x00, 0x00, 0xDC, 0x00, 0x03, - 0x60, 0x00, 0x0D, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, - 0x00, 0x1B, 0x00, 0x00, 0x6C, 0x00, 0x03, 0xB0, 0x00, 0x0C, 0x60, 0x00, - 0x61, 0xC0, 0x03, 0x03, 0x80, 0x38, 0x0F, 0x03, 0xC0, 0x0F, 0xFE, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0x8F, 0xFE, 0x00, 0xFC, - 0xE0, 0x78, 0x00, 0xCC, 0x00, 0xE0, 0x06, 0xC0, 0x03, 0x00, 0x3C, 0x00, - 0x1C, 0x01, 0xC0, 0x00, 0x60, 0x0C, 0x00, 0x03, 0x00, 0xE0, 0x00, 0x18, - 0x06, 0x00, 0x00, 0xC0, 0x30, 0x00, 0x06, 0x01, 0x80, 0x00, 0x30, 0x0C, - 0x00, 0x03, 0x00, 0xE0, 0x00, 0x18, 0x07, 0x00, 0x01, 0x80, 0x3C, 0x00, - 0x1C, 0x01, 0xE0, 0x01, 0xC0, 0x0D, 0x80, 0x1C, 0x00, 0xCF, 0x03, 0xC0, - 0x06, 0x3F, 0xF8, 0x00, 0x30, 0x7F, 0x00, 0x01, 0x80, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x01, 0x80, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0xE1, 0xF0, 0x78, - 0x1C, 0xFC, 0x38, 0x01, 0xB0, 0x1C, 0x00, 0x2C, 0x0E, 0x00, 0x0F, 0x03, - 0x00, 0x01, 0xC1, 0x80, 0x00, 0x60, 0x60, 0x00, 0x18, 0x30, 0x00, 0x06, - 0x0C, 0x00, 0x01, 0x83, 0x00, 0x00, 0x60, 0xC0, 0x00, 0x30, 0x30, 0x00, - 0x0C, 0x0C, 0x00, 0x07, 0x03, 0x80, 0x03, 0xC0, 0x60, 0x01, 0xB0, 0x1C, - 0x00, 0xD8, 0x03, 0xC0, 0xE6, 0x00, 0x7F, 0xF1, 0x80, 0x07, 0xE0, 0x60, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xC0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x07, 0xF0, 0x3E, 0x03, 0xF8, 0x7F, - 0xC0, 0x18, 0xF0, 0x60, 0x0C, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xC0, - 0x00, 0x03, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01, - 0x80, 0x00, 0x3F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x0F, 0xFE, 0xC0, 0xF0, 0x3E, 0x0E, 0x00, 0x70, 0xE0, 0x01, 0x06, 0x00, - 0x08, 0x30, 0x00, 0x41, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, - 0xCC, 0x00, 0x06, 0x60, 0x00, 0x33, 0x00, 0x03, 0x3C, 0x00, 0x71, 0xF8, - 0x0F, 0x0D, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, - 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x70, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0C, 0x00, 0x06, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xC0, - 0x00, 0xE0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x0E, - 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x38, 0x0F, - 0x9F, 0xFF, 0x03, 0xF8, 0x00, 0xFC, 0x03, 0xFF, 0xE0, 0x1F, 0xC6, 0x00, - 0x0C, 0x30, 0x00, 0x61, 0x80, 0x03, 0x0C, 0x00, 0x18, 0x60, 0x01, 0x86, - 0x00, 0x0C, 0x30, 0x00, 0x61, 0x80, 0x03, 0x0C, 0x00, 0x18, 0x60, 0x01, - 0x86, 0x00, 0x0C, 0x30, 0x00, 0x61, 0x80, 0x03, 0x0C, 0x00, 0x38, 0x60, - 0x07, 0x83, 0x80, 0x6C, 0x1E, 0x1E, 0x7C, 0x7F, 0xE3, 0xE0, 0xF8, 0x00, - 0x00, 0x7F, 0xC0, 0xFF, 0xFF, 0xF0, 0x3F, 0xF1, 0xC0, 0x00, 0xC0, 0x30, - 0x00, 0x60, 0x0C, 0x00, 0x18, 0x03, 0x00, 0x0C, 0x00, 0xE0, 0x06, 0x00, - 0x18, 0x01, 0x80, 0x06, 0x00, 0xC0, 0x01, 0x80, 0x30, 0x00, 0x60, 0x18, - 0x00, 0x0C, 0x0C, 0x00, 0x03, 0x03, 0x00, 0x00, 0xC1, 0x80, 0x00, 0x30, - 0xC0, 0x00, 0x06, 0x30, 0x00, 0x01, 0x98, 0x00, 0x00, 0x6C, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x07, 0x80, 0x00, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x3F, - 0xCC, 0x00, 0x03, 0x06, 0x00, 0x01, 0x83, 0x00, 0x01, 0x81, 0x81, 0x80, - 0xC0, 0xC1, 0xE0, 0x60, 0x60, 0xF0, 0x60, 0x30, 0xD8, 0x30, 0x18, 0x6C, - 0x30, 0x0C, 0x66, 0x18, 0x06, 0x33, 0x18, 0x03, 0x31, 0x8C, 0x01, 0x98, - 0x66, 0x00, 0xD8, 0x36, 0x00, 0x6C, 0x1B, 0x00, 0x3C, 0x0F, 0x00, 0x1E, - 0x07, 0x80, 0x0E, 0x03, 0x80, 0x07, 0x01, 0xC0, 0x00, 0x07, 0xF0, 0x3F, - 0xC3, 0xFC, 0x0F, 0xF0, 0x38, 0x00, 0x60, 0x07, 0x00, 0x70, 0x00, 0xE0, - 0x38, 0x00, 0x18, 0x1C, 0x00, 0x03, 0x0C, 0x00, 0x00, 0xEE, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xDC, 0x00, - 0x00, 0xE3, 0x80, 0x00, 0x70, 0x70, 0x00, 0x38, 0x0E, 0x00, 0x18, 0x01, - 0x80, 0x1C, 0x00, 0x30, 0x0E, 0x00, 0x0E, 0x0F, 0xF0, 0x3F, 0xE3, 0xFC, - 0x0F, 0xF8, 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x3F, 0xC0, 0x60, 0x00, - 0x30, 0x01, 0x80, 0x01, 0x80, 0x0C, 0x00, 0x18, 0x00, 0x60, 0x01, 0x80, - 0x03, 0x80, 0x0C, 0x00, 0x0C, 0x00, 0xC0, 0x00, 0x60, 0x0C, 0x00, 0x03, - 0x00, 0x60, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x03, 0x06, - 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x63, 0x00, 0x00, 0x03, 0x30, 0x00, - 0x00, 0x19, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x07, 0xFF, 0xF8, 0x3F, 0xFF, 0xC3, 0x00, 0x0C, 0x18, 0x00, 0xC0, 0xC0, - 0x0C, 0x00, 0x00, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, - 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x18, 0x00, 0x01, 0x80, - 0x00, 0x18, 0x00, 0x01, 0x80, 0x0C, 0x18, 0x00, 0x61, 0x80, 0x02, 0x1F, - 0xFF, 0xF0, 0xFF, 0xFF, 0x80, 0x00, 0x0E, 0x00, 0x7C, 0x01, 0xC0, 0x03, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x01, 0xC0, 0x03, 0x00, - 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x60, 0x01, 0xC0, 0x0F, 0x00, 0xF8, - 0x01, 0xF0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x03, 0x80, - 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0xE0, 0x01, 0x80, 0x03, - 0x00, 0x06, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x01, 0x80, 0xC0, - 0x60, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x40, - 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x60, - 0x30, 0x18, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x80, 0x80, 0xC0, 0x60, 0x30, - 0x00, 0x01, 0xC0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, - 0x0C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x7C, 0x03, - 0xC0, 0x0E, 0x00, 0x18, 0x00, 0x70, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, - 0x06, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x03, 0x00, 0x0E, - 0x00, 0xF8, 0x01, 0xC0, 0x00, 0x0F, 0x00, 0x01, 0xFC, 0x03, 0x70, 0xE0, - 0x7E, 0x07, 0x1E, 0xC0, 0x3F, 0x80, 0x01, 0xE0}; - -const GFXglyph FreeMonoOblique24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 28, 0, 1}, // 0x20 ' ' - {0, 10, 30, 28, 12, -28}, // 0x21 '!' - {38, 16, 14, 28, 10, -28}, // 0x22 '"' - {66, 22, 32, 28, 6, -29}, // 0x23 '#' - {154, 21, 33, 28, 6, -29}, // 0x24 '$' - {241, 22, 29, 28, 6, -27}, // 0x25 '%' - {321, 19, 25, 28, 6, -23}, // 0x26 '&' - {381, 7, 14, 28, 16, -28}, // 0x27 ''' - {394, 11, 34, 28, 16, -27}, // 0x28 '(' - {441, 11, 34, 28, 7, -27}, // 0x29 ')' - {488, 18, 17, 28, 10, -28}, // 0x2A '*' - {527, 22, 22, 28, 6, -23}, // 0x2B '+' - {588, 12, 14, 28, 5, -6}, // 0x2C ',' - {609, 22, 2, 28, 6, -13}, // 0x2D '-' - {615, 7, 6, 28, 11, -4}, // 0x2E '.' - {621, 24, 35, 28, 5, -30}, // 0x2F '/' - {726, 20, 30, 28, 7, -28}, // 0x30 '0' - {801, 17, 29, 28, 6, -28}, // 0x31 '1' - {863, 23, 29, 28, 4, -28}, // 0x32 '2' - {947, 22, 30, 28, 5, -28}, // 0x33 '3' - {1030, 19, 28, 28, 7, -27}, // 0x34 '4' - {1097, 21, 29, 28, 6, -27}, // 0x35 '5' - {1174, 21, 30, 28, 9, -28}, // 0x36 '6' - {1253, 18, 28, 28, 10, -27}, // 0x37 '7' - {1316, 20, 30, 28, 7, -28}, // 0x38 '8' - {1391, 22, 30, 28, 6, -28}, // 0x39 '9' - {1474, 10, 21, 28, 11, -19}, // 0x3A ':' - {1501, 15, 27, 28, 5, -19}, // 0x3B ';' - {1552, 23, 22, 28, 6, -23}, // 0x3C '<' - {1616, 25, 9, 28, 4, -17}, // 0x3D '=' - {1645, 24, 22, 28, 4, -23}, // 0x3E '>' - {1711, 16, 28, 28, 11, -26}, // 0x3F '?' - {1767, 19, 32, 28, 7, -28}, // 0x40 '@' - {1843, 27, 26, 28, 1, -25}, // 0x41 'A' - {1931, 26, 26, 28, 2, -25}, // 0x42 'B' - {2016, 25, 28, 28, 5, -26}, // 0x43 'C' - {2104, 26, 26, 28, 2, -25}, // 0x44 'D' - {2189, 27, 26, 28, 2, -25}, // 0x45 'E' - {2277, 28, 26, 28, 2, -25}, // 0x46 'F' - {2368, 25, 28, 28, 5, -26}, // 0x47 'G' - {2456, 27, 26, 28, 3, -25}, // 0x48 'H' - {2544, 22, 26, 28, 6, -25}, // 0x49 'I' - {2616, 28, 27, 28, 5, -25}, // 0x4A 'J' - {2711, 29, 26, 28, 2, -25}, // 0x4B 'K' - {2806, 25, 26, 28, 3, -25}, // 0x4C 'L' - {2888, 32, 26, 28, 1, -25}, // 0x4D 'M' - {2992, 30, 26, 28, 2, -25}, // 0x4E 'N' - {3090, 24, 28, 28, 5, -26}, // 0x4F 'O' - {3174, 26, 26, 28, 2, -25}, // 0x50 'P' - {3259, 24, 32, 28, 5, -26}, // 0x51 'Q' - {3355, 26, 26, 28, 2, -25}, // 0x52 'R' - {3440, 24, 28, 28, 5, -26}, // 0x53 'S' - {3524, 24, 26, 28, 7, -25}, // 0x54 'T' - {3602, 26, 27, 28, 6, -25}, // 0x55 'U' - {3690, 27, 26, 28, 6, -25}, // 0x56 'V' - {3778, 27, 26, 28, 6, -25}, // 0x57 'W' - {3866, 29, 26, 28, 2, -25}, // 0x58 'X' - {3961, 24, 26, 28, 7, -25}, // 0x59 'Y' - {4039, 23, 26, 28, 5, -25}, // 0x5A 'Z' - {4114, 15, 34, 28, 12, -27}, // 0x5B '[' - {4178, 10, 35, 28, 12, -30}, // 0x5C '\' - {4222, 15, 34, 28, 6, -27}, // 0x5D ']' - {4286, 18, 12, 28, 9, -28}, // 0x5E '^' - {4313, 28, 2, 28, -1, 5}, // 0x5F '_' - {4320, 6, 7, 28, 13, -29}, // 0x60 '`' - {4326, 22, 22, 28, 4, -20}, // 0x61 'a' - {4387, 27, 29, 28, 1, -27}, // 0x62 'b' - {4485, 22, 22, 28, 6, -20}, // 0x63 'c' - {4546, 25, 29, 28, 5, -27}, // 0x64 'd' - {4637, 22, 22, 28, 5, -20}, // 0x65 'e' - {4698, 26, 28, 28, 5, -27}, // 0x66 'f' - {4789, 25, 30, 28, 5, -20}, // 0x67 'g' - {4883, 24, 28, 28, 3, -27}, // 0x68 'h' - {4967, 19, 29, 28, 5, -28}, // 0x69 'i' - {5036, 20, 38, 28, 4, -28}, // 0x6A 'j' - {5131, 24, 28, 28, 3, -27}, // 0x6B 'k' - {5215, 19, 28, 28, 5, -27}, // 0x6C 'l' - {5282, 27, 21, 28, 1, -20}, // 0x6D 'm' - {5353, 23, 21, 28, 3, -20}, // 0x6E 'n' - {5414, 22, 22, 28, 5, -20}, // 0x6F 'o' - {5475, 29, 30, 28, -1, -20}, // 0x70 'p' - {5584, 26, 30, 28, 5, -20}, // 0x71 'q' - {5682, 25, 20, 28, 4, -19}, // 0x72 'r' - {5745, 21, 22, 28, 5, -20}, // 0x73 's' - {5803, 17, 27, 28, 7, -25}, // 0x74 't' - {5861, 21, 21, 28, 6, -19}, // 0x75 'u' - {5917, 26, 20, 28, 5, -19}, // 0x76 'v' - {5982, 25, 20, 28, 6, -19}, // 0x77 'w' - {6045, 26, 20, 28, 3, -19}, // 0x78 'x' - {6110, 29, 29, 28, 1, -19}, // 0x79 'y' - {6216, 21, 20, 28, 5, -19}, // 0x7A 'z' - {6269, 15, 34, 28, 10, -27}, // 0x7B '{' - {6333, 9, 35, 28, 12, -28}, // 0x7C '|' - {6373, 15, 34, 28, 8, -27}, // 0x7D '}' - {6437, 20, 6, 28, 7, -15}}; // 0x7E '~' - -const GFXfont FreeMonoOblique24pt7b PROGMEM = { - (uint8_t *)FreeMonoOblique24pt7bBitmaps, - (GFXglyph *)FreeMonoOblique24pt7bGlyphs, 0x20, 0x7E, 47}; - -// Approx. 7124 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique9pt7b.h deleted file mode 100644 index 1e82964..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeMonoOblique9pt7b.h +++ /dev/null @@ -1,189 +0,0 @@ -#pragma once -#include - -const uint8_t FreeMonoOblique9pt7bBitmaps[] PROGMEM = { - 0x11, 0x22, 0x24, 0x40, 0x00, 0xC0, 0xDE, 0xE5, 0x29, 0x00, 0x09, 0x05, - 0x02, 0x82, 0x47, 0xF8, 0xA0, 0x51, 0xFE, 0x28, 0x14, 0x0A, 0x09, 0x00, - 0x08, 0x1D, 0x23, 0x40, 0x70, 0x1C, 0x02, 0x82, 0x84, 0x78, 0x20, 0x20, - 0x1C, 0x11, 0x08, 0x83, 0x80, 0x18, 0x71, 0xC0, 0x1C, 0x11, 0x08, 0x83, - 0x80, 0x1E, 0x60, 0x81, 0x03, 0x0A, 0x65, 0x46, 0x88, 0xE8, 0xFA, 0x80, - 0x12, 0x24, 0x48, 0x88, 0x88, 0x88, 0x80, 0x01, 0x11, 0x11, 0x11, 0x22, - 0x44, 0x80, 0x10, 0x22, 0x5B, 0xC3, 0x0A, 0x22, 0x00, 0x04, 0x02, 0x02, - 0x1F, 0xF0, 0x80, 0x40, 0x20, 0x00, 0x36, 0x4C, 0x80, 0xFF, 0x80, 0xF0, - 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, - 0x08, 0x08, 0x00, 0x1C, 0x45, 0x0A, 0x18, 0x30, 0x61, 0x42, 0x85, 0x11, - 0xC0, 0x04, 0x38, 0x90, 0x20, 0x81, 0x02, 0x04, 0x08, 0x23, 0xF8, 0x07, - 0x04, 0xC4, 0x20, 0x10, 0x10, 0x30, 0x20, 0x20, 0x60, 0x40, 0x3F, 0x80, - 0x0F, 0x00, 0x40, 0x20, 0x20, 0x60, 0x18, 0x04, 0x02, 0x01, 0x43, 0x1E, - 0x00, 0x03, 0x05, 0x0A, 0x12, 0x22, 0x22, 0x42, 0x7F, 0x04, 0x04, 0x1E, - 0x1F, 0x88, 0x08, 0x05, 0xC3, 0x30, 0x08, 0x04, 0x02, 0x02, 0x42, 0x1E, - 0x00, 0x07, 0x18, 0x20, 0x40, 0x5C, 0xA6, 0xC2, 0x82, 0x82, 0xC4, 0x78, - 0xFF, 0x04, 0x10, 0x20, 0x82, 0x04, 0x10, 0x20, 0x81, 0x00, 0x1E, 0x23, - 0x41, 0x41, 0x62, 0x1C, 0x66, 0x82, 0x82, 0x84, 0x78, 0x1E, 0x23, 0x41, - 0x41, 0x43, 0x65, 0x3A, 0x02, 0x04, 0x18, 0xE0, 0x6C, 0x00, 0x36, 0x18, - 0xC0, 0x00, 0x19, 0x8C, 0xC4, 0x00, 0x01, 0x83, 0x06, 0x0C, 0x06, 0x00, - 0x80, 0x30, 0x04, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x20, 0x0C, 0x01, 0x00, - 0x60, 0x20, 0x60, 0xC1, 0x80, 0x3D, 0x8E, 0x08, 0x10, 0xC6, 0x08, 0x00, - 0x01, 0x80, 0x1C, 0x45, 0x0A, 0x79, 0x34, 0x69, 0x4E, 0x81, 0x03, 0x03, - 0xC0, 0x0F, 0x00, 0x60, 0x12, 0x02, 0x40, 0x88, 0x21, 0x07, 0xE1, 0x04, - 0x20, 0x5E, 0x3C, 0x3F, 0x84, 0x11, 0x04, 0x82, 0x3F, 0x88, 0x32, 0x04, - 0x81, 0x60, 0xBF, 0xC0, 0x1E, 0x98, 0xD0, 0x28, 0x08, 0x04, 0x02, 0x01, - 0x00, 0x41, 0x1F, 0x00, 0x3F, 0x0C, 0x22, 0x04, 0x81, 0x20, 0x48, 0x12, - 0x09, 0x02, 0x43, 0x3F, 0x00, 0x3F, 0xC4, 0x11, 0x00, 0x88, 0x3E, 0x08, - 0x82, 0x00, 0x82, 0x60, 0xBF, 0xE0, 0x3F, 0xE2, 0x08, 0x40, 0x11, 0x03, - 0xE0, 0x44, 0x08, 0x01, 0x00, 0x60, 0x1F, 0x00, 0x1E, 0x98, 0xD0, 0x08, - 0x08, 0x04, 0x7A, 0x05, 0x02, 0x41, 0x1F, 0x00, 0x3D, 0xE2, 0x18, 0x42, - 0x08, 0x43, 0xF8, 0x41, 0x08, 0x21, 0x08, 0x21, 0x1E, 0xF0, 0x3F, 0x82, - 0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x20, 0x10, 0x7F, 0x00, 0x0F, 0xE0, - 0x20, 0x04, 0x00, 0x80, 0x10, 0x02, 0x20, 0x84, 0x10, 0x84, 0x0F, 0x00, - 0x3C, 0xE2, 0x10, 0x44, 0x11, 0x02, 0xC0, 0x64, 0x08, 0x81, 0x08, 0x61, - 0x1E, 0x38, 0x3E, 0x02, 0x00, 0x80, 0x20, 0x10, 0x04, 0x01, 0x04, 0x42, - 0x10, 0xBF, 0xE0, 0x38, 0x38, 0xC3, 0x05, 0x28, 0x29, 0x42, 0x52, 0x13, - 0x10, 0x99, 0x84, 0x08, 0x20, 0x47, 0x8F, 0x00, 0x70, 0xE6, 0x08, 0xA1, - 0x14, 0x22, 0x48, 0x49, 0x11, 0x22, 0x14, 0x43, 0x1E, 0x20, 0x1E, 0x18, - 0x90, 0x28, 0x18, 0x0C, 0x06, 0x05, 0x02, 0x46, 0x1E, 0x00, 0x3F, 0x84, - 0x31, 0x04, 0x81, 0x20, 0x8F, 0xC2, 0x00, 0x80, 0x60, 0x3E, 0x00, 0x1E, - 0x18, 0x90, 0x28, 0x18, 0x0C, 0x06, 0x05, 0x02, 0x46, 0x1E, 0x08, 0x0F, - 0x44, 0x60, 0x3F, 0x84, 0x31, 0x04, 0x81, 0x20, 0x8F, 0xC2, 0x10, 0x84, - 0x60, 0xBC, 0x10, 0x0F, 0x88, 0xC8, 0x24, 0x01, 0x80, 0x38, 0x05, 0x02, - 0xC2, 0x5E, 0x00, 0xFF, 0xC4, 0x44, 0x02, 0x01, 0x00, 0x80, 0x40, 0x60, - 0x20, 0x7E, 0x00, 0xF1, 0xD0, 0x24, 0x09, 0x02, 0x41, 0xA0, 0x48, 0x12, - 0x04, 0xC6, 0x1F, 0x00, 0xF1, 0xE8, 0x11, 0x02, 0x20, 0x82, 0x20, 0x44, - 0x09, 0x01, 0x40, 0x28, 0x02, 0x00, 0xF1, 0xE8, 0x09, 0x12, 0x26, 0x45, - 0x48, 0xAA, 0x29, 0x45, 0x28, 0xC6, 0x18, 0xC0, 0x38, 0xE2, 0x08, 0x26, - 0x05, 0x00, 0x40, 0x18, 0x04, 0x81, 0x08, 0x41, 0x1C, 0x70, 0xE3, 0xA0, - 0x90, 0x84, 0x81, 0x80, 0x80, 0x40, 0x20, 0x20, 0x7E, 0x00, 0x3F, 0x90, - 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x82, 0x7F, 0x00, 0x39, 0x08, - 0x44, 0x21, 0x08, 0x42, 0x21, 0x0E, 0x00, 0x88, 0x44, 0x44, 0x22, 0x22, - 0x11, 0x11, 0x38, 0x42, 0x11, 0x08, 0x42, 0x10, 0x84, 0x2E, 0x00, 0x08, - 0x28, 0x92, 0x18, 0x20, 0xFF, 0xC0, 0xA4, 0x3E, 0x00, 0x80, 0x47, 0xA4, - 0x34, 0x12, 0x18, 0xF7, 0x38, 0x01, 0x00, 0x40, 0x09, 0xE1, 0xC6, 0x20, - 0x44, 0x09, 0x01, 0x30, 0x46, 0x13, 0xBC, 0x00, 0x1F, 0x48, 0x74, 0x0A, - 0x00, 0x80, 0x20, 0x0C, 0x18, 0xF8, 0x01, 0x80, 0x40, 0x23, 0x96, 0x32, - 0x0A, 0x05, 0x02, 0x81, 0x61, 0x1F, 0xE0, 0x1F, 0x30, 0xD0, 0x3F, 0xF8, - 0x04, 0x01, 0x00, 0x7C, 0x07, 0xC3, 0x00, 0x80, 0xFE, 0x10, 0x04, 0x01, - 0x00, 0x40, 0x10, 0x08, 0x0F, 0xE0, 0x1D, 0xD8, 0xC4, 0x12, 0x04, 0x82, - 0x20, 0x8C, 0x61, 0xE8, 0x02, 0x01, 0x07, 0x80, 0x30, 0x04, 0x01, 0x00, - 0x5C, 0x38, 0x88, 0x22, 0x08, 0x82, 0x21, 0x18, 0x4F, 0x3C, 0x04, 0x04, - 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0xFF, 0x01, 0x00, 0x80, - 0x03, 0xF0, 0x10, 0x08, 0x04, 0x02, 0x02, 0x01, 0x00, 0x80, 0x40, 0x47, - 0xC0, 0x38, 0x08, 0x04, 0x02, 0x71, 0x20, 0xA0, 0xA0, 0x68, 0x24, 0x11, - 0x38, 0xE0, 0x3C, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, - 0xFF, 0x3E, 0xE2, 0x64, 0x88, 0x91, 0x12, 0x24, 0x48, 0x91, 0x17, 0x33, - 0x37, 0x14, 0x4C, 0x24, 0x12, 0x09, 0x08, 0x85, 0xE3, 0x1E, 0x10, 0x90, - 0x30, 0x18, 0x0C, 0x0B, 0x08, 0x78, 0x33, 0xC3, 0x8C, 0x40, 0x88, 0x12, - 0x02, 0x60, 0x8C, 0x31, 0x78, 0x20, 0x08, 0x03, 0xE0, 0x00, 0x1C, 0xD8, - 0xC4, 0x12, 0x04, 0x81, 0x20, 0x4C, 0x21, 0xF8, 0x02, 0x00, 0x81, 0xF0, - 0x73, 0x8E, 0x04, 0x04, 0x02, 0x01, 0x00, 0x81, 0xFC, 0x1F, 0x61, 0x40, - 0x3C, 0x03, 0x81, 0x82, 0xFC, 0x10, 0x63, 0xF9, 0x02, 0x04, 0x10, 0x20, - 0x40, 0x7C, 0xE3, 0x10, 0x90, 0x48, 0x24, 0x22, 0x11, 0x18, 0xF6, 0xF3, - 0xD0, 0x44, 0x10, 0x88, 0x24, 0x09, 0x02, 0x80, 0x40, 0xE1, 0xD0, 0x24, - 0x91, 0x24, 0x55, 0x19, 0x86, 0x61, 0x10, 0x39, 0xC4, 0x20, 0xB0, 0x30, - 0x0C, 0x04, 0x86, 0x13, 0x8E, 0x3C, 0x71, 0x04, 0x10, 0x40, 0x88, 0x09, - 0x00, 0xA0, 0x06, 0x00, 0x40, 0x08, 0x01, 0x00, 0xFC, 0x00, 0x7F, 0x42, - 0x04, 0x08, 0x10, 0x20, 0x42, 0xFE, 0x0C, 0x41, 0x04, 0x30, 0x8C, 0x08, - 0x21, 0x04, 0x10, 0x60, 0x24, 0x94, 0x92, 0x52, 0x40, 0x18, 0x20, 0x82, - 0x10, 0x40, 0xC4, 0x10, 0x82, 0x08, 0xC0, 0x61, 0x24, 0x30}; - -const GFXglyph FreeMonoOblique9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 11, 0, 1}, // 0x20 ' ' - {0, 4, 11, 11, 4, -10}, // 0x21 '!' - {6, 5, 5, 11, 4, -10}, // 0x22 '"' - {10, 9, 12, 11, 2, -10}, // 0x23 '#' - {24, 8, 12, 11, 3, -10}, // 0x24 '$' - {36, 9, 11, 11, 2, -10}, // 0x25 '%' - {49, 7, 10, 11, 2, -9}, // 0x26 '&' - {58, 2, 5, 11, 6, -10}, // 0x27 ''' - {60, 4, 13, 11, 6, -10}, // 0x28 '(' - {67, 4, 13, 11, 3, -10}, // 0x29 ')' - {74, 7, 7, 11, 4, -10}, // 0x2A '*' - {81, 9, 8, 11, 2, -8}, // 0x2B '+' - {90, 4, 5, 11, 2, -1}, // 0x2C ',' - {93, 9, 1, 11, 2, -5}, // 0x2D '-' - {95, 2, 2, 11, 4, -1}, // 0x2E '.' - {96, 9, 13, 11, 2, -11}, // 0x2F '/' - {111, 7, 11, 11, 3, -10}, // 0x30 '0' - {121, 7, 11, 11, 2, -10}, // 0x31 '1' - {131, 9, 11, 11, 2, -10}, // 0x32 '2' - {144, 9, 11, 11, 2, -10}, // 0x33 '3' - {157, 8, 11, 11, 2, -10}, // 0x34 '4' - {168, 9, 11, 11, 2, -10}, // 0x35 '5' - {181, 8, 11, 11, 3, -10}, // 0x36 '6' - {192, 7, 11, 11, 4, -10}, // 0x37 '7' - {202, 8, 11, 11, 3, -10}, // 0x38 '8' - {213, 8, 11, 11, 3, -10}, // 0x39 '9' - {224, 3, 8, 11, 4, -7}, // 0x3A ':' - {227, 5, 11, 11, 2, -7}, // 0x3B ';' - {234, 9, 8, 11, 2, -8}, // 0x3C '<' - {243, 9, 4, 11, 2, -6}, // 0x3D '=' - {248, 9, 8, 11, 2, -8}, // 0x3E '>' - {257, 7, 10, 11, 4, -9}, // 0x3F '?' - {266, 7, 12, 11, 3, -10}, // 0x40 '@' - {277, 11, 10, 11, 0, -9}, // 0x41 'A' - {291, 10, 10, 11, 1, -9}, // 0x42 'B' - {304, 9, 10, 11, 2, -9}, // 0x43 'C' - {316, 10, 10, 11, 1, -9}, // 0x44 'D' - {329, 10, 10, 11, 1, -9}, // 0x45 'E' - {342, 11, 10, 11, 1, -9}, // 0x46 'F' - {356, 9, 10, 11, 2, -9}, // 0x47 'G' - {368, 11, 10, 11, 1, -9}, // 0x48 'H' - {382, 9, 10, 11, 2, -9}, // 0x49 'I' - {394, 11, 10, 11, 2, -9}, // 0x4A 'J' - {408, 11, 10, 11, 1, -9}, // 0x4B 'K' - {422, 10, 10, 11, 1, -9}, // 0x4C 'L' - {435, 13, 10, 11, 0, -9}, // 0x4D 'M' - {452, 11, 10, 11, 1, -9}, // 0x4E 'N' - {466, 9, 10, 11, 2, -9}, // 0x4F 'O' - {478, 10, 10, 11, 1, -9}, // 0x50 'P' - {491, 9, 13, 11, 2, -9}, // 0x51 'Q' - {506, 10, 10, 11, 1, -9}, // 0x52 'R' - {519, 9, 10, 11, 2, -9}, // 0x53 'S' - {531, 9, 10, 11, 3, -9}, // 0x54 'T' - {543, 10, 10, 11, 2, -9}, // 0x55 'U' - {556, 11, 10, 11, 2, -9}, // 0x56 'V' - {570, 11, 10, 11, 2, -9}, // 0x57 'W' - {584, 11, 10, 11, 1, -9}, // 0x58 'X' - {598, 9, 10, 11, 3, -9}, // 0x59 'Y' - {610, 9, 10, 11, 2, -9}, // 0x5A 'Z' - {622, 5, 13, 11, 5, -10}, // 0x5B '[' - {631, 4, 14, 11, 4, -11}, // 0x5C '\' - {638, 5, 13, 11, 2, -10}, // 0x5D ']' - {647, 7, 5, 11, 3, -10}, // 0x5E '^' - {652, 11, 1, 11, 0, 2}, // 0x5F '_' - {654, 2, 3, 11, 5, -11}, // 0x60 '`' - {655, 9, 8, 11, 2, -7}, // 0x61 'a' - {664, 11, 11, 11, 0, -10}, // 0x62 'b' - {680, 10, 8, 11, 2, -7}, // 0x63 'c' - {690, 9, 11, 11, 2, -10}, // 0x64 'd' - {703, 9, 8, 11, 2, -7}, // 0x65 'e' - {712, 10, 11, 11, 2, -10}, // 0x66 'f' - {726, 10, 11, 11, 2, -7}, // 0x67 'g' - {740, 10, 11, 11, 1, -10}, // 0x68 'h' - {754, 8, 11, 11, 2, -10}, // 0x69 'i' - {765, 9, 14, 11, 1, -10}, // 0x6A 'j' - {781, 9, 11, 11, 1, -10}, // 0x6B 'k' - {794, 8, 11, 11, 2, -10}, // 0x6C 'l' - {805, 11, 8, 11, 0, -7}, // 0x6D 'm' - {816, 9, 8, 11, 1, -7}, // 0x6E 'n' - {825, 9, 8, 11, 2, -7}, // 0x6F 'o' - {834, 11, 11, 11, 0, -7}, // 0x70 'p' - {850, 10, 11, 11, 2, -7}, // 0x71 'q' - {864, 9, 8, 11, 2, -7}, // 0x72 'r' - {873, 8, 8, 11, 2, -7}, // 0x73 's' - {881, 7, 10, 11, 2, -9}, // 0x74 't' - {890, 9, 8, 11, 2, -7}, // 0x75 'u' - {899, 10, 8, 11, 2, -7}, // 0x76 'v' - {909, 10, 8, 11, 2, -7}, // 0x77 'w' - {919, 10, 8, 11, 1, -7}, // 0x78 'x' - {929, 12, 11, 11, 0, -7}, // 0x79 'y' - {946, 8, 8, 11, 2, -7}, // 0x7A 'z' - {954, 6, 13, 11, 4, -10}, // 0x7B '{' - {964, 3, 12, 11, 5, -9}, // 0x7C '|' - {969, 6, 13, 11, 3, -10}, // 0x7D '}' - {979, 7, 3, 11, 3, -6}}; // 0x7E '~' - -const GFXfont FreeMonoOblique9pt7b PROGMEM = { - (uint8_t *)FreeMonoOblique9pt7bBitmaps, - (GFXglyph *)FreeMonoOblique9pt7bGlyphs, 0x20, 0x7E, 18}; - -// Approx. 1654 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans12pt7b.h deleted file mode 100644 index 6e77392..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans12pt7b.h +++ /dev/null @@ -1,272 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSans12pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xCF, 0x3C, 0xF3, 0x8A, 0x20, 0x06, 0x30, - 0x31, 0x03, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x03, 0x18, 0x18, - 0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x01, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, - 0x04, 0x03, 0xE1, 0xFF, 0x72, 0x6C, 0x47, 0x88, 0xF1, 0x07, 0x20, 0x7E, - 0x03, 0xF0, 0x17, 0x02, 0x3C, 0x47, 0x88, 0xF1, 0x1B, 0x26, 0x7F, 0xC3, - 0xE0, 0x10, 0x02, 0x00, 0x00, 0x06, 0x03, 0xC0, 0x40, 0x7E, 0x0C, 0x0E, - 0x70, 0x80, 0xC3, 0x18, 0x0C, 0x31, 0x00, 0xE7, 0x30, 0x07, 0xE6, 0x00, - 0x3C, 0x40, 0x00, 0x0C, 0x7C, 0x00, 0x8F, 0xE0, 0x19, 0xC7, 0x01, 0x18, - 0x30, 0x31, 0x83, 0x02, 0x1C, 0x70, 0x40, 0xFE, 0x04, 0x07, 0xC0, 0x0F, - 0x00, 0x7E, 0x03, 0x9C, 0x0C, 0x30, 0x30, 0xC0, 0xE7, 0x01, 0xF8, 0x03, - 0x80, 0x3E, 0x01, 0xCC, 0x6E, 0x19, 0xB0, 0x7C, 0xC0, 0xF3, 0x03, 0xCE, - 0x1F, 0x9F, 0xE6, 0x1E, 0x1C, 0xFF, 0xA0, 0x08, 0x8C, 0x66, 0x31, 0x98, - 0xC6, 0x31, 0x8C, 0x63, 0x08, 0x63, 0x08, 0x61, 0x0C, 0x20, 0x82, 0x18, - 0xC3, 0x18, 0xC3, 0x18, 0xC6, 0x31, 0x8C, 0x62, 0x31, 0x88, 0xC4, 0x62, - 0x00, 0x10, 0x23, 0x5B, 0xE3, 0x8D, 0x91, 0x00, 0x0C, 0x03, 0x00, 0xC0, - 0x30, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xF5, 0x60, - 0xFF, 0xF0, 0xF0, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x02, 0x0C, 0x10, 0x20, - 0xC1, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, - 0x6E, 0x0F, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x0E, 0xC1, 0x9C, 0x71, 0xFC, 0x1F, 0x00, 0x08, 0xCF, 0xFF, 0x8C, 0x63, - 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0x1F, 0x0F, 0xF9, 0x87, 0x60, 0x7C, - 0x06, 0x00, 0xC0, 0x18, 0x07, 0x01, 0xC0, 0xF0, 0x78, 0x1C, 0x06, 0x00, - 0x80, 0x30, 0x07, 0xFF, 0xFF, 0xE0, 0x3F, 0x0F, 0xF3, 0x87, 0x60, 0x6C, - 0x0C, 0x01, 0x80, 0x70, 0x7C, 0x0F, 0x80, 0x18, 0x01, 0x80, 0x3C, 0x07, - 0x80, 0xD8, 0x73, 0xFC, 0x1F, 0x00, 0x01, 0x80, 0x70, 0x0E, 0x03, 0xC0, - 0xD8, 0x1B, 0x06, 0x61, 0x8C, 0x21, 0x8C, 0x33, 0x06, 0x7F, 0xFF, 0xFE, - 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, - 0x00, 0xDE, 0x1F, 0xE7, 0x0E, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x07, - 0x81, 0xF8, 0x73, 0xFC, 0x1F, 0x00, 0x0F, 0x07, 0xF9, 0xC3, 0x30, 0x74, - 0x01, 0x80, 0x33, 0xC7, 0xFE, 0xF0, 0xDC, 0x1F, 0x01, 0xE0, 0x3C, 0x06, - 0xC1, 0xDC, 0x71, 0xFC, 0x1F, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0x00, 0x60, - 0x18, 0x02, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x30, 0x04, 0x01, 0x80, - 0x30, 0x06, 0x01, 0x80, 0x30, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, 0x66, - 0x0C, 0xC1, 0x8C, 0x61, 0xFC, 0x3F, 0x8E, 0x3B, 0x01, 0xE0, 0x3C, 0x07, - 0x80, 0xD8, 0x31, 0xFC, 0x1F, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x6C, - 0x07, 0x80, 0xF0, 0x1E, 0x07, 0x61, 0xEF, 0xFC, 0x79, 0x80, 0x30, 0x05, - 0x81, 0x98, 0x73, 0xFC, 0x1E, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0xF0, 0x00, - 0x0F, 0x56, 0x00, 0x00, 0x07, 0x01, 0xE0, 0xF8, 0x3C, 0x0F, 0x00, 0xE0, - 0x07, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0x00, 0x78, 0x01, 0xF0, 0x07, - 0xC0, 0x0F, 0x00, 0x70, 0x1E, 0x0F, 0x03, 0xC0, 0xF0, 0x08, 0x00, 0x1F, - 0x1F, 0xEE, 0x1B, 0x03, 0xC0, 0xC0, 0x30, 0x0C, 0x06, 0x03, 0x81, 0xC0, - 0xE0, 0x30, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0xFE, - 0x00, 0x0F, 0xFE, 0x00, 0xF0, 0x3E, 0x07, 0x00, 0x3C, 0x38, 0x00, 0x30, - 0xC1, 0xE0, 0x66, 0x0F, 0xD9, 0xD8, 0x61, 0xC3, 0xC3, 0x07, 0x0F, 0x1C, - 0x1C, 0x3C, 0x60, 0x60, 0xF1, 0x81, 0x83, 0xC6, 0x06, 0x1B, 0x18, 0x38, - 0xEE, 0x71, 0xE7, 0x18, 0xFD, 0xF8, 0x71, 0xE7, 0xC0, 0xE0, 0x00, 0x01, - 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFC, 0x00, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x07, 0xE0, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x0C, 0x30, - 0x0C, 0x30, 0x1C, 0x38, 0x18, 0x18, 0x1F, 0xF8, 0x3F, 0xFC, 0x30, 0x1C, - 0x30, 0x0C, 0x70, 0x0E, 0x60, 0x06, 0x60, 0x06, 0xFF, 0xC7, 0xFF, 0x30, - 0x19, 0x80, 0x6C, 0x03, 0x60, 0x1B, 0x00, 0xD8, 0x0C, 0xFF, 0xC7, 0xFF, - 0x30, 0x0D, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x06, 0xFF, 0xF7, - 0xFE, 0x00, 0x07, 0xE0, 0x3F, 0xF0, 0xE0, 0x73, 0x80, 0x66, 0x00, 0x6C, - 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x6C, 0x00, 0xDC, 0x03, 0x1E, 0x0E, 0x1F, 0xF8, 0x0F, 0xC0, - 0xFF, 0x83, 0xFF, 0x8C, 0x07, 0x30, 0x0E, 0xC0, 0x1B, 0x00, 0x7C, 0x00, - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x00, - 0x6C, 0x03, 0xB0, 0x1C, 0xFF, 0xE3, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, - 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xEF, 0xFE, 0xC0, - 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xFF, 0xDF, - 0xFB, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x00, - 0x07, 0xF0, 0x1F, 0xFC, 0x3C, 0x1E, 0x70, 0x06, 0x60, 0x03, 0xE0, 0x00, - 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x03, 0xC0, 0x03, - 0x60, 0x03, 0x60, 0x07, 0x30, 0x0F, 0x3C, 0x1F, 0x1F, 0xFB, 0x07, 0xE1, - 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, - 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, - 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, - 0x3C, 0x1E, 0x0F, 0x07, 0xC7, 0x7F, 0x1F, 0x00, 0xC0, 0x3B, 0x01, 0xCC, - 0x0E, 0x30, 0x70, 0xC3, 0x83, 0x1C, 0x0C, 0xE0, 0x33, 0x80, 0xDE, 0x03, - 0xDC, 0x0E, 0x38, 0x30, 0x60, 0xC1, 0xC3, 0x03, 0x8C, 0x06, 0x30, 0x1C, - 0xC0, 0x3B, 0x00, 0x60, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, - 0xFF, 0xFF, 0xF0, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xD0, - 0x0F, 0xD8, 0x1B, 0xD8, 0x1B, 0xD8, 0x1B, 0xCC, 0x33, 0xCC, 0x33, 0xCC, - 0x33, 0xC6, 0x63, 0xC6, 0x63, 0xC6, 0x63, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC1, 0x83, 0xE0, 0x1F, 0x00, 0xFC, 0x07, 0xE0, 0x3D, 0x81, 0xEE, - 0x0F, 0x30, 0x79, 0xC3, 0xC6, 0x1E, 0x18, 0xF0, 0xE7, 0x83, 0x3C, 0x1D, - 0xE0, 0x6F, 0x01, 0xF8, 0x0F, 0xC0, 0x3E, 0x01, 0xC0, 0x03, 0xE0, 0x0F, - 0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6, 0x00, 0x33, 0x00, 0x1B, 0x00, 0x07, - 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x36, 0x00, - 0x33, 0x00, 0x18, 0xC0, 0x18, 0x78, 0x3C, 0x1F, 0xFC, 0x03, 0xF8, 0x00, - 0xFF, 0x8F, 0xFE, 0xC0, 0x6C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, - 0xFF, 0xEF, 0xFC, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, - 0xC0, 0x0C, 0x00, 0x03, 0xE0, 0x0F, 0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6, - 0x00, 0x33, 0x00, 0x1B, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0x78, 0x00, 0x36, 0x00, 0x33, 0x01, 0x98, 0xC0, 0xFC, 0x78, - 0x3C, 0x1F, 0xFF, 0x03, 0xF9, 0x80, 0x00, 0x40, 0xFF, 0xC3, 0xFF, 0xCC, - 0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x0C, 0xFF, 0xE3, - 0xFF, 0xCC, 0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x06, - 0xC0, 0x1B, 0x00, 0x70, 0x0F, 0xE0, 0x7F, 0xC3, 0x83, 0x9C, 0x07, 0x60, - 0x0D, 0x80, 0x06, 0x00, 0x1E, 0x00, 0x3F, 0x80, 0x3F, 0xC0, 0x0F, 0x80, - 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xDE, 0x0E, 0x3F, 0xF0, 0x3F, 0x80, - 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, - 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x80, 0xEE, 0x0E, 0x3F, 0xE0, 0x7C, 0x00, 0x60, 0x06, 0xC0, - 0x1D, 0xC0, 0x31, 0x80, 0x63, 0x01, 0xC7, 0x03, 0x06, 0x06, 0x0C, 0x1C, - 0x1C, 0x30, 0x18, 0x60, 0x31, 0xC0, 0x73, 0x00, 0x66, 0x00, 0xDC, 0x01, - 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0xE0, 0x30, 0x1D, 0x80, 0xE0, - 0x76, 0x07, 0x81, 0xD8, 0x1E, 0x06, 0x70, 0x7C, 0x18, 0xC1, 0xB0, 0xE3, - 0x0C, 0xC3, 0x8C, 0x33, 0x0C, 0x38, 0xC6, 0x30, 0x67, 0x18, 0xC1, 0x98, - 0x67, 0x06, 0x61, 0xD8, 0x1D, 0x83, 0x60, 0x3C, 0x0D, 0x80, 0xF0, 0x3E, - 0x03, 0xC0, 0x70, 0x0F, 0x01, 0xC0, 0x18, 0x07, 0x00, 0x70, 0x0E, 0x60, - 0x38, 0xE0, 0x60, 0xE1, 0xC0, 0xC3, 0x01, 0xCC, 0x01, 0xF8, 0x01, 0xE0, - 0x03, 0x80, 0x07, 0x80, 0x1F, 0x00, 0x33, 0x00, 0xE7, 0x03, 0x86, 0x06, - 0x0E, 0x1C, 0x0E, 0x70, 0x0C, 0xC0, 0x1C, 0x60, 0x06, 0x70, 0x0E, 0x30, - 0x1C, 0x38, 0x18, 0x1C, 0x38, 0x0C, 0x30, 0x0E, 0x70, 0x06, 0x60, 0x03, - 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x0E, - 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x70, 0x07, 0x00, 0x30, 0x03, - 0x80, 0x38, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, - 0xC0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF, - 0xF0, 0x81, 0x81, 0x02, 0x06, 0x04, 0x08, 0x18, 0x10, 0x20, 0x60, 0x40, - 0x81, 0x81, 0x02, 0x06, 0x04, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x3F, 0xF0, 0x0C, 0x0E, 0x05, 0x86, 0xC3, 0x21, 0x19, - 0x8C, 0x83, 0xC1, 0x80, 0xFF, 0xFE, 0xE3, 0x8C, 0x30, 0x3F, 0x07, 0xF8, - 0xE1, 0xCC, 0x0C, 0x00, 0xC0, 0x1C, 0x3F, 0xCF, 0x8C, 0xC0, 0xCC, 0x0C, - 0xE3, 0xC7, 0xEF, 0x3C, 0x70, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, - 0x0C, 0xF8, 0xDF, 0xCF, 0x0E, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xE0, 0x6F, 0x0E, 0xDF, 0xCC, 0xF8, 0x1F, 0x0F, 0xE7, 0x1B, - 0x83, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x38, 0x37, 0x1C, 0xFE, 0x1F, - 0x00, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x3C, 0xCF, 0xFB, 0x8F, - 0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x3B, 0x8F, 0x3F, - 0x63, 0xCC, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x3C, 0x07, 0xFF, 0xFF, 0xFE, - 0x00, 0xC0, 0x1C, 0x0D, 0xC3, 0x1F, 0xE1, 0xF0, 0x3B, 0xD8, 0xC6, 0x7F, - 0xEC, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x00, 0x1E, 0x67, 0xFD, 0xC7, - 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x9F, - 0xB1, 0xE6, 0x00, 0xC0, 0x3E, 0x0E, 0x7F, 0xC7, 0xE0, 0xC0, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x33, 0xCD, 0xFB, 0xC7, 0xE0, 0xF0, 0x3C, 0x0F, 0x03, - 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30, 0xF0, 0x3F, 0xFF, 0xFF, - 0xF0, 0x33, 0x00, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, - 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x83, 0x30, 0xC6, 0x30, - 0xCC, 0x1B, 0x83, 0xF0, 0x77, 0x0C, 0x61, 0x8E, 0x30, 0xE6, 0x0C, 0xC1, - 0xD8, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xCF, 0x1F, 0x6F, 0xDF, 0xFC, - 0x78, 0xFC, 0x18, 0x3C, 0x0C, 0x1E, 0x06, 0x0F, 0x03, 0x07, 0x81, 0x83, - 0xC0, 0xC1, 0xE0, 0x60, 0xF0, 0x30, 0x78, 0x18, 0x3C, 0x0C, 0x18, 0xCF, - 0x37, 0xEF, 0x1F, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, - 0x0F, 0x03, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, - 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x1F, 0xC1, 0xF0, 0xCF, 0x8D, - 0xFC, 0xF0, 0xEE, 0x06, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, - 0x07, 0xF0, 0xEF, 0xFC, 0xCF, 0x8C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x00, - 0x1E, 0x67, 0xFD, 0xC7, 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, - 0x7C, 0x1D, 0xC7, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, - 0xCF, 0x7F, 0x38, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x3E, 0x1F, - 0xEE, 0x1B, 0x00, 0xC0, 0x3C, 0x07, 0xF0, 0x3E, 0x01, 0xF0, 0x3E, 0x1D, - 0xFE, 0x3E, 0x00, 0x63, 0x19, 0xFF, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x31, - 0xE7, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, - 0xF0, 0x7E, 0x3D, 0xFB, 0x3C, 0xC0, 0xE0, 0x66, 0x06, 0x60, 0x67, 0x0C, - 0x30, 0xC3, 0x0C, 0x39, 0x81, 0x98, 0x19, 0x81, 0xF0, 0x0F, 0x00, 0xE0, - 0x0E, 0x00, 0xC1, 0xC1, 0xB0, 0xE1, 0xD8, 0x70, 0xCC, 0x2C, 0x66, 0x36, - 0x31, 0x9B, 0x18, 0xCD, 0x98, 0x64, 0x6C, 0x16, 0x36, 0x0F, 0x1A, 0x07, - 0x8F, 0x03, 0x83, 0x80, 0xC1, 0xC0, 0x60, 0xEE, 0x18, 0xC6, 0x0C, 0xC1, - 0xF0, 0x1C, 0x01, 0x80, 0x78, 0x1B, 0x03, 0x30, 0xC7, 0x30, 0x66, 0x06, - 0xE0, 0x6C, 0x0D, 0x83, 0x38, 0x63, 0x0C, 0x63, 0x0E, 0x60, 0xCC, 0x1B, - 0x03, 0x60, 0x3C, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, 0xE0, 0x78, 0x0E, - 0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x0C, 0x07, 0x03, 0x81, 0xC0, 0x60, 0x30, - 0x18, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x19, 0xCC, 0x63, 0x18, 0xC6, 0x31, - 0x99, 0x86, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1C, 0x60, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0xC7, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x0C, 0x33, 0x31, - 0x8C, 0x63, 0x18, 0xC6, 0x73, 0x00, 0x70, 0x3E, 0x09, 0xE4, 0x1F, 0x03, - 0x80}; - -const GFXglyph FreeSans12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 2, 18, 8, 3, -17}, // 0x21 '!' - {5, 6, 6, 8, 1, -16}, // 0x22 '"' - {10, 13, 16, 13, 0, -15}, // 0x23 '#' - {36, 11, 20, 13, 1, -17}, // 0x24 '$' - {64, 20, 17, 21, 1, -16}, // 0x25 '%' - {107, 14, 17, 16, 1, -16}, // 0x26 '&' - {137, 2, 6, 5, 1, -16}, // 0x27 ''' - {139, 5, 23, 8, 2, -17}, // 0x28 '(' - {154, 5, 23, 8, 1, -17}, // 0x29 ')' - {169, 7, 7, 9, 1, -17}, // 0x2A '*' - {176, 10, 11, 14, 2, -10}, // 0x2B '+' - {190, 2, 6, 7, 2, -1}, // 0x2C ',' - {192, 6, 2, 8, 1, -7}, // 0x2D '-' - {194, 2, 2, 6, 2, -1}, // 0x2E '.' - {195, 7, 18, 7, 0, -17}, // 0x2F '/' - {211, 11, 17, 13, 1, -16}, // 0x30 '0' - {235, 5, 17, 13, 3, -16}, // 0x31 '1' - {246, 11, 17, 13, 1, -16}, // 0x32 '2' - {270, 11, 17, 13, 1, -16}, // 0x33 '3' - {294, 11, 17, 13, 1, -16}, // 0x34 '4' - {318, 11, 17, 13, 1, -16}, // 0x35 '5' - {342, 11, 17, 13, 1, -16}, // 0x36 '6' - {366, 11, 17, 13, 1, -16}, // 0x37 '7' - {390, 11, 17, 13, 1, -16}, // 0x38 '8' - {414, 11, 17, 13, 1, -16}, // 0x39 '9' - {438, 2, 13, 6, 2, -12}, // 0x3A ':' - {442, 2, 16, 6, 2, -11}, // 0x3B ';' - {446, 12, 12, 14, 1, -11}, // 0x3C '<' - {464, 12, 6, 14, 1, -8}, // 0x3D '=' - {473, 12, 12, 14, 1, -11}, // 0x3E '>' - {491, 10, 18, 13, 2, -17}, // 0x3F '?' - {514, 22, 21, 24, 1, -17}, // 0x40 '@' - {572, 16, 18, 16, 0, -17}, // 0x41 'A' - {608, 13, 18, 16, 2, -17}, // 0x42 'B' - {638, 15, 18, 17, 1, -17}, // 0x43 'C' - {672, 14, 18, 17, 2, -17}, // 0x44 'D' - {704, 12, 18, 15, 2, -17}, // 0x45 'E' - {731, 11, 18, 14, 2, -17}, // 0x46 'F' - {756, 16, 18, 18, 1, -17}, // 0x47 'G' - {792, 13, 18, 17, 2, -17}, // 0x48 'H' - {822, 2, 18, 7, 2, -17}, // 0x49 'I' - {827, 9, 18, 13, 1, -17}, // 0x4A 'J' - {848, 14, 18, 16, 2, -17}, // 0x4B 'K' - {880, 10, 18, 14, 2, -17}, // 0x4C 'L' - {903, 16, 18, 20, 2, -17}, // 0x4D 'M' - {939, 13, 18, 18, 2, -17}, // 0x4E 'N' - {969, 17, 18, 19, 1, -17}, // 0x4F 'O' - {1008, 12, 18, 16, 2, -17}, // 0x50 'P' - {1035, 17, 19, 19, 1, -17}, // 0x51 'Q' - {1076, 14, 18, 17, 2, -17}, // 0x52 'R' - {1108, 14, 18, 16, 1, -17}, // 0x53 'S' - {1140, 12, 18, 15, 1, -17}, // 0x54 'T' - {1167, 13, 18, 17, 2, -17}, // 0x55 'U' - {1197, 15, 18, 15, 0, -17}, // 0x56 'V' - {1231, 22, 18, 22, 0, -17}, // 0x57 'W' - {1281, 15, 18, 16, 0, -17}, // 0x58 'X' - {1315, 16, 18, 16, 0, -17}, // 0x59 'Y' - {1351, 13, 18, 15, 1, -17}, // 0x5A 'Z' - {1381, 4, 23, 7, 2, -17}, // 0x5B '[' - {1393, 7, 18, 7, 0, -17}, // 0x5C '\' - {1409, 4, 23, 7, 1, -17}, // 0x5D ']' - {1421, 9, 9, 11, 1, -16}, // 0x5E '^' - {1432, 15, 1, 13, -1, 4}, // 0x5F '_' - {1434, 5, 4, 6, 1, -17}, // 0x60 '`' - {1437, 12, 13, 13, 1, -12}, // 0x61 'a' - {1457, 12, 18, 13, 1, -17}, // 0x62 'b' - {1484, 10, 13, 12, 1, -12}, // 0x63 'c' - {1501, 11, 18, 13, 1, -17}, // 0x64 'd' - {1526, 11, 13, 13, 1, -12}, // 0x65 'e' - {1544, 5, 18, 7, 1, -17}, // 0x66 'f' - {1556, 11, 18, 13, 1, -12}, // 0x67 'g' - {1581, 10, 18, 13, 1, -17}, // 0x68 'h' - {1604, 2, 18, 5, 2, -17}, // 0x69 'i' - {1609, 4, 23, 6, 0, -17}, // 0x6A 'j' - {1621, 11, 18, 12, 1, -17}, // 0x6B 'k' - {1646, 2, 18, 5, 1, -17}, // 0x6C 'l' - {1651, 17, 13, 19, 1, -12}, // 0x6D 'm' - {1679, 10, 13, 13, 1, -12}, // 0x6E 'n' - {1696, 11, 13, 13, 1, -12}, // 0x6F 'o' - {1714, 12, 17, 13, 1, -12}, // 0x70 'p' - {1740, 11, 17, 13, 1, -12}, // 0x71 'q' - {1764, 6, 13, 8, 1, -12}, // 0x72 'r' - {1774, 10, 13, 12, 1, -12}, // 0x73 's' - {1791, 5, 16, 7, 1, -15}, // 0x74 't' - {1801, 10, 13, 13, 1, -12}, // 0x75 'u' - {1818, 12, 13, 12, 0, -12}, // 0x76 'v' - {1838, 17, 13, 17, 0, -12}, // 0x77 'w' - {1866, 11, 13, 11, 0, -12}, // 0x78 'x' - {1884, 11, 18, 11, 0, -12}, // 0x79 'y' - {1909, 10, 13, 12, 1, -12}, // 0x7A 'z' - {1926, 5, 23, 8, 1, -17}, // 0x7B '{' - {1941, 2, 23, 6, 2, -17}, // 0x7C '|' - {1947, 5, 23, 8, 2, -17}, // 0x7D '}' - {1962, 10, 5, 12, 1, -10}}; // 0x7E '~' - -const GFXfont FreeSans12pt7b PROGMEM = {(uint8_t *)FreeSans12pt7bBitmaps, - (GFXglyph *)FreeSans12pt7bGlyphs, 0x20, - 0x7E, 29}; - -// Approx. 2641 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans18pt7b.h deleted file mode 100644 index f3a9606..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans18pt7b.h +++ /dev/null @@ -1,454 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSans18pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0x20, 0x3F, 0xFC, 0xE3, 0xF1, - 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E, 0x82, 0x41, 0x00, 0x01, 0xC3, 0x80, - 0x38, 0x70, 0x06, 0x0E, 0x00, 0xC1, 0x80, 0x38, 0x70, 0x07, 0x0E, 0x0F, - 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0xE1, 0xC0, 0x1C, 0x38, 0x03, - 0x87, 0x00, 0x70, 0xE0, 0x0C, 0x18, 0x3F, 0xFF, 0xF7, 0xFF, 0xFE, 0xFF, - 0xFF, 0xC1, 0xC3, 0x80, 0x30, 0x60, 0x06, 0x0C, 0x01, 0xC3, 0x80, 0x38, - 0x70, 0x07, 0x0E, 0x00, 0xC1, 0x80, 0x03, 0x00, 0x0F, 0xC0, 0x3F, 0xF0, - 0x3F, 0xF8, 0x7B, 0x3C, 0xF3, 0x1C, 0xE3, 0x0E, 0xE3, 0x0E, 0xE3, 0x0E, - 0xE3, 0x00, 0xE3, 0x00, 0xF3, 0x00, 0x7B, 0x00, 0x7F, 0x80, 0x1F, 0xF0, - 0x07, 0xFC, 0x03, 0x7E, 0x03, 0x0F, 0x03, 0x07, 0xE3, 0x07, 0xE3, 0x07, - 0xE3, 0x07, 0xE3, 0x0F, 0x73, 0x3E, 0x7F, 0xFC, 0x3F, 0xF8, 0x0F, 0xE0, - 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x78, 0x00, - 0xE0, 0x0F, 0xF0, 0x06, 0x00, 0xFF, 0xC0, 0x70, 0x07, 0x0E, 0x07, 0x00, - 0x70, 0x38, 0x38, 0x03, 0x00, 0xC3, 0x80, 0x18, 0x06, 0x1C, 0x00, 0xE0, - 0x71, 0xC0, 0x03, 0x87, 0x8C, 0x00, 0x1F, 0xF8, 0xE0, 0x00, 0x7F, 0x86, - 0x00, 0x01, 0xF8, 0x70, 0x00, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x38, 0x7F, - 0x80, 0x01, 0x87, 0xFE, 0x00, 0x1C, 0x38, 0x70, 0x00, 0xC3, 0x81, 0xC0, - 0x0E, 0x18, 0x06, 0x00, 0xE0, 0xC0, 0x30, 0x07, 0x07, 0x03, 0x80, 0x70, - 0x1C, 0x38, 0x03, 0x80, 0xFF, 0xC0, 0x38, 0x03, 0xFC, 0x01, 0x80, 0x07, - 0x80, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x01, 0xE1, 0xE0, 0x1C, - 0x0E, 0x01, 0xC0, 0xE0, 0x1C, 0x0E, 0x01, 0xE1, 0xE0, 0x0E, 0x3C, 0x00, - 0x77, 0x80, 0x07, 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0xE0, 0x03, 0xCF, 0x1C, - 0x78, 0x79, 0xC7, 0x03, 0xDC, 0xE0, 0x1F, 0x8E, 0x00, 0xF8, 0xE0, 0x0F, - 0x0E, 0x00, 0x70, 0xF0, 0x0F, 0x87, 0xC3, 0xFC, 0x7F, 0xFD, 0xC3, 0xFF, - 0x0E, 0x0F, 0xC0, 0xF0, 0xFF, 0xFF, 0xFA, 0x40, 0x06, 0x06, 0x0C, 0x0C, - 0x18, 0x18, 0x38, 0x30, 0x70, 0x70, 0x70, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x70, 0x70, 0x70, 0x30, 0x38, 0x18, - 0x18, 0x0C, 0x0C, 0x06, 0x03, 0xC0, 0x60, 0x30, 0x30, 0x38, 0x18, 0x1C, - 0x0C, 0x0E, 0x0E, 0x0E, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x06, 0x0E, 0x0E, 0x0E, 0x0C, 0x1C, 0x18, 0x38, 0x30, 0x30, - 0x60, 0xC0, 0x0C, 0x03, 0x00, 0xC3, 0xB7, 0xFF, 0xC7, 0x81, 0xE0, 0xEC, - 0x73, 0x88, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xFF, - 0xF6, 0xDA, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xC0, 0x30, 0x18, - 0x06, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x06, 0x01, 0x80, 0x60, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x30, 0x18, 0x06, - 0x01, 0x80, 0xC0, 0x30, 0x00, 0x07, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, - 0x3C, 0x78, 0x1E, 0x70, 0x0E, 0x70, 0x0E, 0xE0, 0x07, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0E, 0x70, 0x0E, 0x78, 0x1E, 0x3C, - 0x3C, 0x1F, 0xF8, 0x1F, 0xF0, 0x07, 0xE0, 0x03, 0x03, 0x07, 0x0F, 0x3F, - 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xE0, 0x1F, 0xF8, - 0x3F, 0xFC, 0x7C, 0x3E, 0x70, 0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF8, - 0x03, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, - 0x60, 0x00, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, - 0x07, 0xFE, 0x07, 0xFF, 0x87, 0x83, 0xC3, 0x80, 0xF3, 0x80, 0x39, 0xC0, - 0x1C, 0xE0, 0x0E, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x7F, 0x00, 0x3F, 0x00, - 0x1F, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0xF0, 0x01, - 0xF8, 0x00, 0xFE, 0x00, 0x77, 0x00, 0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, - 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x78, 0x00, 0xF8, - 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xB8, 0x03, 0x38, 0x07, 0x38, 0x0E, 0x38, - 0x1C, 0x38, 0x18, 0x38, 0x38, 0x38, 0x70, 0x38, 0x60, 0x38, 0xE0, 0x38, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x1F, 0xFF, 0x0F, 0xFF, 0x8F, 0xFF, - 0xC7, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x39, - 0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0x83, 0xE7, 0x00, 0xF0, 0x00, 0x3C, - 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xFC, 0x00, - 0xEF, 0x00, 0x73, 0xC0, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xE0, 0x00, - 0x03, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, 0x1E, 0x38, 0x0E, 0x70, 0x0E, - 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, - 0xFC, 0x3E, 0xF0, 0x0E, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, - 0x60, 0x07, 0x70, 0x0F, 0x70, 0x0E, 0x3C, 0x3E, 0x3F, 0xFC, 0x1F, 0xF8, - 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x06, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, - 0x00, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0x83, - 0xC7, 0x80, 0xF3, 0x80, 0x39, 0xC0, 0x1C, 0xE0, 0x0E, 0x78, 0x0F, 0x1E, - 0x0F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xE0, 0xF9, 0xC0, 0x1D, - 0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xF7, 0x00, - 0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xE0, - 0x1F, 0xF8, 0x3F, 0xFC, 0x7C, 0x3C, 0x70, 0x0E, 0xF0, 0x0E, 0xE0, 0x06, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0F, 0x78, 0x3F, - 0x3F, 0xFF, 0x1F, 0xF7, 0x07, 0xC7, 0x00, 0x07, 0x00, 0x06, 0x00, 0x0E, - 0x70, 0x0E, 0x70, 0x1C, 0x78, 0x3C, 0x3F, 0xF8, 0x1F, 0xF0, 0x07, 0xC0, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xB6, 0xD6, 0x00, 0x00, 0x80, 0x03, 0xC0, 0x07, 0xE0, - 0x0F, 0xC0, 0x3F, 0x80, 0x7E, 0x00, 0xFC, 0x01, 0xF0, 0x00, 0xE0, 0x00, - 0x7C, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0x00, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x0F, 0xE0, 0x00, 0xFC, - 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0x80, 0x0F, 0xC0, - 0x1F, 0x80, 0x7F, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x01, 0xC0, 0x00, - 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xEF, 0x01, - 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0x00, 0x0E, 0x00, 0x38, 0x00, 0xF0, - 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x00, - 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x0F, 0xE0, 0x03, 0xE0, 0x01, 0xF0, - 0x07, 0x80, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x1E, - 0x3C, 0x03, 0xE0, 0x1E, 0x38, 0x0F, 0xF3, 0x8E, 0x78, 0x1E, 0x3F, 0x0F, - 0x70, 0x38, 0x1F, 0x07, 0x70, 0x78, 0x0F, 0x07, 0xE0, 0x70, 0x0E, 0x07, - 0xE0, 0x70, 0x0E, 0x07, 0xE0, 0xE0, 0x0E, 0x07, 0xE0, 0xE0, 0x1C, 0x07, - 0xE0, 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x38, 0x1C, - 0xF0, 0x70, 0x78, 0x3C, 0x70, 0x78, 0xFC, 0x78, 0x78, 0x3F, 0xDF, 0xF0, - 0x38, 0x1F, 0x0F, 0xC0, 0x3C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x0E, 0x00, 0x01, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x03, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xDC, 0x00, 0x07, 0x78, - 0x00, 0x3C, 0xE0, 0x00, 0xE3, 0x80, 0x03, 0x8F, 0x00, 0x1E, 0x1C, 0x00, - 0x70, 0x70, 0x01, 0xC1, 0xE0, 0x0E, 0x03, 0x80, 0x38, 0x0E, 0x00, 0xE0, - 0x3C, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0x83, 0xC0, 0x0E, - 0x0E, 0x00, 0x3C, 0x78, 0x00, 0xF1, 0xE0, 0x01, 0xC7, 0x00, 0x07, 0xBC, - 0x00, 0x1E, 0xF0, 0x00, 0x3B, 0x80, 0x00, 0xF0, 0xFF, 0xFC, 0x1F, 0xFF, - 0xE3, 0xFF, 0xFE, 0x70, 0x03, 0xCE, 0x00, 0x3D, 0xC0, 0x03, 0xB8, 0x00, - 0x77, 0x00, 0x0E, 0xE0, 0x01, 0xDC, 0x00, 0x73, 0x80, 0x1E, 0x7F, 0xFF, - 0x8F, 0xFF, 0xF1, 0xFF, 0xFF, 0x38, 0x00, 0xF7, 0x00, 0x0E, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x03, - 0xF8, 0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0xFF, 0x1F, 0xFF, 0x80, 0x00, 0xFF, - 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xFE, 0x07, 0xE0, 0x7C, 0x3E, 0x00, 0x78, - 0xF0, 0x00, 0xE7, 0x80, 0x03, 0xDC, 0x00, 0x07, 0x70, 0x00, 0x03, 0x80, - 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, - 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x1D, 0xC0, 0x00, 0x77, - 0x00, 0x03, 0xDE, 0x00, 0x0E, 0x3C, 0x00, 0x78, 0xF8, 0x03, 0xC1, 0xF8, - 0x1F, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x03, 0xF8, 0x00, 0xFF, 0xF8, - 0x0F, 0xFF, 0xE0, 0xFF, 0xFF, 0x0E, 0x00, 0xF8, 0xE0, 0x03, 0xCE, 0x00, - 0x1C, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xE0, - 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, - 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x0F, 0xE0, 0x00, 0xEE, 0x00, 0x0E, - 0xE0, 0x01, 0xEE, 0x00, 0x3C, 0xE0, 0x0F, 0x8F, 0xFF, 0xF0, 0xFF, 0xFE, - 0x0F, 0xFF, 0x80, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0x80, 0x00, - 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, - 0x00, 0x0E, 0x00, 0x03, 0xFF, 0xFE, 0xFF, 0xFF, 0xBF, 0xFF, 0xEE, 0x00, - 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, - 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0E, 0x00, - 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, - 0x00, 0x1F, 0xFF, 0xCF, 0xFF, 0xE7, 0xFF, 0xF3, 0x80, 0x01, 0xC0, 0x00, - 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, - 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7F, - 0x80, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x0F, 0x80, 0xFC, 0x1E, 0x00, - 0x3E, 0x3C, 0x00, 0x0E, 0x78, 0x00, 0x0F, 0x70, 0x00, 0x07, 0x70, 0x00, - 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x03, - 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0x70, 0x00, 0x07, 0x70, 0x00, 0x0F, 0x78, 0x00, 0x0F, 0x3C, 0x00, - 0x1F, 0x1E, 0x00, 0x3F, 0x0F, 0xC0, 0xF7, 0x07, 0xFF, 0xE7, 0x03, 0xFF, - 0xC3, 0x00, 0xFF, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, - 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, - 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, - 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, - 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, - 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0x80, 0x7E, - 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, - 0x3F, 0x00, 0xE0, 0x01, 0xEE, 0x00, 0x3C, 0xE0, 0x07, 0x8E, 0x00, 0xF0, - 0xE0, 0x1E, 0x0E, 0x03, 0xE0, 0xE0, 0x7C, 0x0E, 0x0F, 0x80, 0xE1, 0xF0, - 0x0E, 0x1E, 0x00, 0xE3, 0xC0, 0x0E, 0x7C, 0x00, 0xEF, 0xE0, 0x0F, 0xCE, - 0x00, 0xF8, 0xF0, 0x0F, 0x07, 0x80, 0xE0, 0x3C, 0x0E, 0x03, 0xC0, 0xE0, - 0x1E, 0x0E, 0x00, 0xF0, 0xE0, 0x0F, 0x0E, 0x00, 0x78, 0xE0, 0x03, 0xCE, - 0x00, 0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x0F, 0xE0, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, - 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, - 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, - 0x38, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0x00, 0x1F, 0xF8, - 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, - 0x00, 0x3F, 0xEE, 0x00, 0x77, 0xEE, 0x00, 0x77, 0xEE, 0x00, 0x77, 0xE7, - 0x00, 0xE7, 0xE7, 0x00, 0xE7, 0xE7, 0x00, 0xE7, 0xE3, 0x81, 0xC7, 0xE3, - 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE1, 0xC3, 0x87, 0xE1, 0xC3, 0x87, 0xE1, - 0xC3, 0x87, 0xE0, 0xE7, 0x07, 0xE0, 0xE7, 0x07, 0xE0, 0xE7, 0x07, 0xE0, - 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x3C, 0x07, 0xE0, - 0x3C, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0xC0, 0x07, - 0xFC, 0x00, 0x7F, 0xE0, 0x07, 0xEF, 0x00, 0x7E, 0x70, 0x07, 0xE7, 0x80, - 0x7E, 0x3C, 0x07, 0xE1, 0xC0, 0x7E, 0x1E, 0x07, 0xE0, 0xE0, 0x7E, 0x0F, - 0x07, 0xE0, 0x78, 0x7E, 0x03, 0x87, 0xE0, 0x3C, 0x7E, 0x01, 0xE7, 0xE0, - 0x0E, 0x7E, 0x00, 0xF7, 0xE0, 0x07, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, - 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x0F, 0x00, 0x7F, 0x00, 0x01, 0xFF, - 0xF0, 0x01, 0xFF, 0xFC, 0x01, 0xF0, 0x1F, 0x01, 0xE0, 0x03, 0xC1, 0xE0, - 0x00, 0xF1, 0xE0, 0x00, 0x3C, 0xE0, 0x00, 0x0E, 0x70, 0x00, 0x07, 0x70, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, - 0xB8, 0x00, 0x03, 0x9C, 0x00, 0x01, 0xCF, 0x00, 0x01, 0xE3, 0xC0, 0x01, - 0xE0, 0xF0, 0x01, 0xE0, 0x3E, 0x03, 0xE0, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, - 0x80, 0x3E, 0xE0, 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, - 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0x1E, 0xFF, 0xFF, 0x3F, 0xFF, - 0x8F, 0xFF, 0xC3, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, - 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, 0x01, 0xFF, - 0xFC, 0x01, 0xF0, 0x1F, 0x01, 0xE0, 0x03, 0xC1, 0xE0, 0x00, 0xF1, 0xE0, - 0x00, 0x3C, 0xE0, 0x00, 0x0E, 0x70, 0x00, 0x07, 0x70, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xB8, 0x00, 0x03, - 0x9C, 0x00, 0x01, 0xCF, 0x00, 0x39, 0xE3, 0xC0, 0x1F, 0xE0, 0xF0, 0x07, - 0xE0, 0x3E, 0x03, 0xF0, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xEE, 0x00, 0x3F, - 0x83, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x20, 0xFF, 0xFE, 0x0F, 0xFF, - 0xF8, 0xFF, 0xFF, 0xCE, 0x00, 0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x0E, 0xE0, - 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x01, 0xCE, - 0x00, 0x3C, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8E, 0x00, 0x3C, - 0xE0, 0x01, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, - 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xFE, 0x00, - 0x0F, 0x03, 0xFC, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, 0xE0, 0x7C, 0x38, - 0x01, 0xE7, 0x00, 0x0E, 0x70, 0x00, 0xE7, 0x00, 0x00, 0x70, 0x00, 0x07, - 0x80, 0x00, 0x3E, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x3F, 0xF8, - 0x00, 0x3F, 0xE0, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x7E, 0x00, 0x07, 0xF0, 0x00, 0x77, 0x80, 0x0E, 0x7C, 0x03, 0xE3, 0xFF, - 0xFC, 0x1F, 0xFF, 0x80, 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, - 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, - 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, - 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0xE0, 0x00, 0xFC, 0x00, - 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x1E, 0xF0, 0x07, - 0x9F, 0x01, 0xF1, 0xFF, 0xFC, 0x1F, 0xFE, 0x00, 0x7F, 0x00, 0xE0, 0x00, - 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x1C, 0xE0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, - 0x00, 0x70, 0xE0, 0x07, 0x87, 0x80, 0x3C, 0x1C, 0x01, 0xC0, 0xE0, 0x0E, - 0x07, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x38, 0x07, 0x83, 0x80, 0x1C, - 0x1C, 0x00, 0xE0, 0xE0, 0x07, 0x8E, 0x00, 0x1C, 0x70, 0x00, 0xE3, 0x80, - 0x07, 0xB8, 0x00, 0x1D, 0xC0, 0x00, 0xEE, 0x00, 0x07, 0xE0, 0x00, 0x1F, - 0x00, 0x00, 0xF8, 0x00, 0x03, 0x80, 0x00, 0x70, 0x03, 0xC0, 0x0F, 0x70, - 0x03, 0xC0, 0x0F, 0x78, 0x03, 0xE0, 0x0F, 0x78, 0x03, 0xE0, 0x0E, 0x38, - 0x07, 0xE0, 0x0E, 0x38, 0x07, 0xF0, 0x1E, 0x3C, 0x07, 0x70, 0x1E, 0x3C, - 0x07, 0x70, 0x1C, 0x1C, 0x0E, 0x70, 0x1C, 0x1C, 0x0E, 0x38, 0x3C, 0x1C, - 0x0E, 0x38, 0x3C, 0x1E, 0x1E, 0x38, 0x38, 0x0E, 0x1C, 0x38, 0x38, 0x0E, - 0x1C, 0x1C, 0x38, 0x0E, 0x1C, 0x1C, 0x78, 0x0F, 0x3C, 0x1C, 0x70, 0x07, - 0x38, 0x0E, 0x70, 0x07, 0x38, 0x0E, 0x70, 0x07, 0x38, 0x0E, 0x70, 0x07, - 0x70, 0x0E, 0xE0, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xF0, 0x07, 0xE0, 0x03, - 0xF0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xE0, 0x03, 0xC0, 0x01, - 0xE0, 0x03, 0xC0, 0xF0, 0x00, 0x7B, 0xC0, 0x07, 0x8F, 0x00, 0x38, 0x78, - 0x03, 0xC1, 0xE0, 0x3C, 0x07, 0x81, 0xC0, 0x3C, 0x1E, 0x00, 0xF1, 0xE0, - 0x03, 0x8E, 0x00, 0x1E, 0xF0, 0x00, 0x7F, 0x00, 0x01, 0xF0, 0x00, 0x0F, - 0x80, 0x00, 0x7C, 0x00, 0x07, 0xF0, 0x00, 0x3B, 0x80, 0x03, 0xDE, 0x00, - 0x3C, 0x78, 0x01, 0xC1, 0xC0, 0x1E, 0x0F, 0x01, 0xE0, 0x3C, 0x0E, 0x00, - 0xE0, 0xF0, 0x07, 0x8F, 0x00, 0x1E, 0x70, 0x00, 0xF7, 0x80, 0x03, 0xC0, - 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xF0, 0x01, 0xE1, 0xE0, 0x03, 0x81, - 0xE0, 0x0F, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x78, 0x03, 0xC1, 0xE0, 0x07, - 0x83, 0x80, 0x07, 0x8F, 0x00, 0x07, 0x1C, 0x00, 0x0F, 0x78, 0x00, 0x0E, - 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, - 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x70, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x80, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, - 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x7C, 0x00, - 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0xE3, 0x8E, 0x38, 0xE3, - 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, - 0x8E, 0x38, 0xE3, 0x8F, 0xFF, 0xFC, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x60, - 0x0C, 0x03, 0x00, 0xC0, 0x18, 0x06, 0x01, 0x80, 0x20, 0x0C, 0x03, 0x00, - 0x40, 0x18, 0x06, 0x01, 0x80, 0x30, 0x0C, 0x03, 0x00, 0x60, 0x18, 0x06, - 0x00, 0xC0, 0x30, 0xFF, 0xFF, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, - 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, - 0x1C, 0x7F, 0xFF, 0xFC, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x3F, 0x01, 0xD8, - 0x0C, 0xE0, 0xE3, 0x06, 0x1C, 0x70, 0xE3, 0x83, 0x18, 0x1D, 0xC0, 0x6C, - 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF0, 0xF0, 0xE0, 0xE0, - 0xE0, 0x07, 0xF0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x03, 0xC7, 0x00, 0xE0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x0F, 0xFF, 0x1F, 0xF3, - 0x9F, 0x01, 0xCF, 0x00, 0xE7, 0x00, 0x73, 0x80, 0x79, 0xE0, 0xFC, 0x7F, - 0xEF, 0x9F, 0xE3, 0xC7, 0xE1, 0xE0, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xFC, 0x3E, 0xF8, 0x1E, 0xF0, 0x0E, 0xE0, 0x0F, 0xE0, 0x07, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0E, - 0xF8, 0x1E, 0xFC, 0x3C, 0xEF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0x07, 0xF0, - 0x1F, 0xF8, 0x3F, 0xFC, 0x3C, 0x1E, 0x78, 0x0E, 0x70, 0x07, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x07, - 0x70, 0x07, 0x78, 0x0E, 0x7C, 0x1E, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, - 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, - 0x1C, 0x00, 0x0E, 0x0F, 0xC7, 0x1F, 0xFB, 0x9F, 0xFF, 0xDF, 0x07, 0xEF, - 0x01, 0xF7, 0x00, 0x7F, 0x80, 0x3F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, - 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x77, 0x00, 0x7B, 0xC0, 0x7D, 0xF0, - 0x7E, 0x7F, 0xFB, 0x1F, 0xF9, 0x83, 0xF0, 0xC0, 0x07, 0xE0, 0x1F, 0xF8, - 0x3F, 0xFC, 0x7C, 0x1E, 0x70, 0x0E, 0x60, 0x06, 0xE0, 0x07, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x70, 0x07, - 0x78, 0x0E, 0x3C, 0x1E, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, 0x0E, 0x3C, - 0xF9, 0xC3, 0x87, 0x0E, 0x7F, 0xFF, 0xFC, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, - 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0x07, 0xC7, 0x1F, - 0xF7, 0x3F, 0xFF, 0x3C, 0x3F, 0x78, 0x0F, 0x70, 0x0F, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0x70, - 0x0F, 0x78, 0x0F, 0x7C, 0x3F, 0x3F, 0xF7, 0x1F, 0xE7, 0x07, 0xC7, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x0E, 0x70, 0x0E, 0x78, 0x1E, 0x3F, 0xFC, 0x1F, - 0xF8, 0x07, 0xE0, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, - 0x1C, 0x00, 0x38, 0x00, 0x71, 0xF8, 0xE7, 0xFD, 0xDF, 0xFB, 0xF0, 0xFF, - 0xC0, 0xFF, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1C, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFC, 0x1C, 0x71, 0xC7, 0x00, 0x00, 0x07, 0x1C, 0x71, 0xC7, 0x1C, - 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, - 0x73, 0xFF, 0xFB, 0xC0, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, 0xE0, 0xF0, - 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x80, 0xFF, 0x80, - 0xFB, 0xC0, 0xF1, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xE0, 0x70, 0xE0, 0x78, - 0xE0, 0x3C, 0xE0, 0x1C, 0xE0, 0x1E, 0xE0, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE3, 0xE0, 0xF8, 0xE7, 0xF1, 0xFE, - 0xEF, 0xFB, 0xFE, 0xF8, 0x7F, 0x0F, 0xF0, 0x3E, 0x07, 0xF0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE3, 0xF1, 0xCF, 0xFB, 0xBF, 0xF7, 0xE1, 0xFF, 0x81, - 0xFE, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x38, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0x83, 0xC7, - 0x80, 0xF3, 0x80, 0x3B, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, - 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3B, 0x80, 0x39, 0xE0, 0x3C, 0x78, - 0x3C, 0x3F, 0xFE, 0x0F, 0xFE, 0x01, 0xFC, 0x00, 0xE3, 0xE0, 0xE7, 0xF8, - 0xEF, 0xFC, 0xFC, 0x3E, 0xF8, 0x1E, 0xF0, 0x0E, 0xE0, 0x0F, 0xE0, 0x07, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0E, - 0xF8, 0x1E, 0xFC, 0x3E, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x07, 0xE1, - 0x8F, 0xFC, 0xCF, 0xFF, 0x67, 0x83, 0xF7, 0x80, 0xFB, 0x80, 0x3F, 0xC0, - 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, - 0x00, 0x3B, 0x80, 0x3D, 0xE0, 0x3E, 0xF8, 0x3F, 0x3F, 0xFF, 0x8F, 0xFD, - 0xC1, 0xF8, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, - 0x07, 0x00, 0x03, 0x80, 0xE3, 0xF7, 0xFB, 0xFF, 0x8F, 0x07, 0x83, 0x81, - 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, - 0x38, 0x00, 0x0F, 0xC0, 0xFF, 0x87, 0xFF, 0x3C, 0x1E, 0xE0, 0x3B, 0x80, - 0x0E, 0x00, 0x3C, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0x00, - 0x3F, 0x80, 0x7E, 0x01, 0xFC, 0x1F, 0x7F, 0xF8, 0xFF, 0xC1, 0xFC, 0x00, - 0x38, 0x70, 0xE1, 0xCF, 0xFF, 0xFF, 0x9C, 0x38, 0x70, 0xE1, 0xC3, 0x87, - 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0xE7, 0xC7, 0x80, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x03, 0xFC, - 0x0F, 0xFC, 0x3F, 0x7F, 0xEE, 0xFF, 0x9C, 0x7E, 0x38, 0x70, 0x03, 0xB8, - 0x03, 0x9C, 0x01, 0xC7, 0x00, 0xE3, 0x80, 0xE1, 0xC0, 0x70, 0x70, 0x38, - 0x38, 0x38, 0x1C, 0x1C, 0x07, 0x0E, 0x03, 0x8E, 0x01, 0xC7, 0x00, 0x77, - 0x00, 0x3B, 0x80, 0x1D, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, - 0x70, 0x00, 0xF0, 0x1C, 0x03, 0xB8, 0x1F, 0x03, 0xDC, 0x0F, 0x81, 0xCE, - 0x07, 0xC0, 0xE7, 0x83, 0xE0, 0x71, 0xC3, 0xB8, 0x70, 0xE1, 0xDC, 0x38, - 0x70, 0xEE, 0x1C, 0x1C, 0x63, 0x0E, 0x0E, 0x71, 0xCE, 0x07, 0x38, 0xE7, - 0x03, 0x9C, 0x73, 0x80, 0xEC, 0x19, 0x80, 0x7E, 0x0F, 0xC0, 0x3F, 0x07, - 0xE0, 0x0F, 0x83, 0xF0, 0x07, 0x80, 0xF0, 0x03, 0xC0, 0x78, 0x01, 0xE0, - 0x3C, 0x00, 0x70, 0x07, 0x38, 0x0E, 0x3C, 0x1C, 0x1C, 0x1C, 0x0E, 0x38, - 0x0F, 0x70, 0x07, 0x70, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x03, 0xE0, - 0x07, 0xE0, 0x07, 0x70, 0x0E, 0x78, 0x1E, 0x38, 0x1C, 0x1C, 0x38, 0x1E, - 0x78, 0x0E, 0x70, 0x07, 0x70, 0x07, 0x38, 0x03, 0x9C, 0x01, 0xC7, 0x01, - 0xC3, 0x80, 0xE1, 0xC0, 0x70, 0x70, 0x70, 0x38, 0x38, 0x1C, 0x3C, 0x07, - 0x1C, 0x03, 0x8E, 0x01, 0xCE, 0x00, 0x77, 0x00, 0x3B, 0x80, 0x1F, 0x80, - 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, - 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x0F, - 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0xF9, 0xFF, 0xF0, 0x00, 0xE0, 0x03, 0x80, - 0x0E, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x1C, 0x00, 0x70, - 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x07, 0x0F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x38, 0xF8, 0xE0, 0xF8, 0x38, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x0F, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0xF0, 0xF8, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1C, 0x1F, - 0x07, 0x1F, 0x1C, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0xF8, 0xF0, 0xE0, 0x38, 0x00, 0xFC, 0x03, 0xFC, 0x1F, 0x3E, - 0x3C, 0x1F, 0xE0, 0x1F, 0x80, 0x1E, 0x00}; - -const GFXglyph FreeSans18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 3, 26, 12, 4, -25}, // 0x21 '!' - {10, 9, 9, 12, 1, -24}, // 0x22 '"' - {21, 19, 24, 19, 0, -23}, // 0x23 '#' - {78, 16, 30, 19, 2, -26}, // 0x24 '$' - {138, 29, 25, 31, 1, -24}, // 0x25 '%' - {229, 20, 25, 23, 2, -24}, // 0x26 '&' - {292, 3, 9, 7, 2, -24}, // 0x27 ''' - {296, 8, 33, 12, 3, -25}, // 0x28 '(' - {329, 8, 33, 12, 1, -25}, // 0x29 ')' - {362, 10, 10, 14, 2, -25}, // 0x2A '*' - {375, 16, 16, 20, 2, -15}, // 0x2B '+' - {407, 3, 9, 10, 3, -3}, // 0x2C ',' - {411, 8, 3, 12, 2, -10}, // 0x2D '-' - {414, 3, 4, 9, 3, -3}, // 0x2E '.' - {416, 10, 26, 10, 0, -25}, // 0x2F '/' - {449, 16, 25, 19, 2, -24}, // 0x30 '0' - {499, 8, 25, 19, 4, -24}, // 0x31 '1' - {524, 16, 25, 19, 2, -24}, // 0x32 '2' - {574, 17, 25, 19, 1, -24}, // 0x33 '3' - {628, 16, 25, 19, 1, -24}, // 0x34 '4' - {678, 17, 25, 19, 1, -24}, // 0x35 '5' - {732, 16, 25, 19, 2, -24}, // 0x36 '6' - {782, 16, 25, 19, 2, -24}, // 0x37 '7' - {832, 17, 25, 19, 1, -24}, // 0x38 '8' - {886, 16, 25, 19, 1, -24}, // 0x39 '9' - {936, 3, 19, 9, 3, -18}, // 0x3A ':' - {944, 3, 24, 9, 3, -18}, // 0x3B ';' - {953, 17, 17, 20, 2, -16}, // 0x3C '<' - {990, 17, 9, 20, 2, -12}, // 0x3D '=' - {1010, 17, 17, 20, 2, -16}, // 0x3E '>' - {1047, 15, 26, 19, 3, -25}, // 0x3F '?' - {1096, 32, 31, 36, 1, -25}, // 0x40 '@' - {1220, 22, 26, 23, 1, -25}, // 0x41 'A' - {1292, 19, 26, 23, 3, -25}, // 0x42 'B' - {1354, 22, 26, 25, 1, -25}, // 0x43 'C' - {1426, 20, 26, 24, 3, -25}, // 0x44 'D' - {1491, 18, 26, 22, 3, -25}, // 0x45 'E' - {1550, 17, 26, 21, 3, -25}, // 0x46 'F' - {1606, 24, 26, 27, 1, -25}, // 0x47 'G' - {1684, 19, 26, 25, 3, -25}, // 0x48 'H' - {1746, 3, 26, 10, 4, -25}, // 0x49 'I' - {1756, 14, 26, 18, 1, -25}, // 0x4A 'J' - {1802, 20, 26, 24, 3, -25}, // 0x4B 'K' - {1867, 15, 26, 20, 3, -25}, // 0x4C 'L' - {1916, 24, 26, 30, 3, -25}, // 0x4D 'M' - {1994, 20, 26, 26, 3, -25}, // 0x4E 'N' - {2059, 25, 26, 27, 1, -25}, // 0x4F 'O' - {2141, 18, 26, 23, 3, -25}, // 0x50 'P' - {2200, 25, 28, 27, 1, -25}, // 0x51 'Q' - {2288, 20, 26, 25, 3, -25}, // 0x52 'R' - {2353, 20, 26, 23, 1, -25}, // 0x53 'S' - {2418, 19, 26, 22, 1, -25}, // 0x54 'T' - {2480, 19, 26, 25, 3, -25}, // 0x55 'U' - {2542, 21, 26, 23, 1, -25}, // 0x56 'V' - {2611, 32, 26, 33, 0, -25}, // 0x57 'W' - {2715, 21, 26, 23, 1, -25}, // 0x58 'X' - {2784, 23, 26, 24, 0, -25}, // 0x59 'Y' - {2859, 19, 26, 22, 1, -25}, // 0x5A 'Z' - {2921, 6, 33, 10, 2, -25}, // 0x5B '[' - {2946, 10, 26, 10, 0, -25}, // 0x5C '\' - {2979, 6, 33, 10, 1, -25}, // 0x5D ']' - {3004, 13, 13, 16, 2, -24}, // 0x5E '^' - {3026, 21, 2, 19, -1, 5}, // 0x5F '_' - {3032, 7, 5, 9, 1, -25}, // 0x60 '`' - {3037, 17, 19, 19, 1, -18}, // 0x61 'a' - {3078, 16, 26, 20, 2, -25}, // 0x62 'b' - {3130, 16, 19, 18, 1, -18}, // 0x63 'c' - {3168, 17, 26, 20, 1, -25}, // 0x64 'd' - {3224, 16, 19, 19, 1, -18}, // 0x65 'e' - {3262, 7, 26, 10, 1, -25}, // 0x66 'f' - {3285, 16, 27, 19, 1, -18}, // 0x67 'g' - {3339, 15, 26, 19, 2, -25}, // 0x68 'h' - {3388, 3, 26, 8, 2, -25}, // 0x69 'i' - {3398, 6, 34, 9, 0, -25}, // 0x6A 'j' - {3424, 16, 26, 18, 2, -25}, // 0x6B 'k' - {3476, 3, 26, 7, 2, -25}, // 0x6C 'l' - {3486, 24, 19, 28, 2, -18}, // 0x6D 'm' - {3543, 15, 19, 19, 2, -18}, // 0x6E 'n' - {3579, 17, 19, 19, 1, -18}, // 0x6F 'o' - {3620, 16, 25, 20, 2, -18}, // 0x70 'p' - {3670, 17, 25, 20, 1, -18}, // 0x71 'q' - {3724, 9, 19, 12, 2, -18}, // 0x72 'r' - {3746, 14, 19, 17, 2, -18}, // 0x73 's' - {3780, 7, 23, 10, 1, -22}, // 0x74 't' - {3801, 15, 19, 19, 2, -18}, // 0x75 'u' - {3837, 17, 19, 17, 0, -18}, // 0x76 'v' - {3878, 25, 19, 25, 0, -18}, // 0x77 'w' - {3938, 16, 19, 17, 0, -18}, // 0x78 'x' - {3976, 17, 27, 17, 0, -18}, // 0x79 'y' - {4034, 15, 19, 17, 1, -18}, // 0x7A 'z' - {4070, 8, 33, 12, 1, -25}, // 0x7B '{' - {4103, 2, 33, 9, 3, -25}, // 0x7C '|' - {4112, 8, 33, 12, 3, -25}, // 0x7D '}' - {4145, 15, 7, 18, 1, -15}}; // 0x7E '~' - -const GFXfont FreeSans18pt7b PROGMEM = {(uint8_t *)FreeSans18pt7bBitmaps, - (GFXglyph *)FreeSans18pt7bGlyphs, 0x20, - 0x7E, 42}; - -// Approx. 4831 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans24pt7b.h deleted file mode 100644 index 3559530..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans24pt7b.h +++ /dev/null @@ -1,729 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSans24pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x76, 0x66, - 0x66, 0x00, 0x0F, 0xFF, 0xFF, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, - 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xEC, 0x19, 0x83, 0x30, 0x60, 0x00, 0x70, - 0x3C, 0x00, 0x70, 0x3C, 0x00, 0xF0, 0x38, 0x00, 0xF0, 0x38, 0x00, 0xF0, - 0x78, 0x00, 0xE0, 0x78, 0x00, 0xE0, 0x78, 0x01, 0xE0, 0x70, 0x01, 0xE0, - 0x70, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x03, 0xC0, - 0xE0, 0x03, 0xC0, 0xE0, 0x03, 0xC0, 0xE0, 0x03, 0x81, 0xE0, 0x03, 0x81, - 0xE0, 0x03, 0x81, 0xE0, 0x07, 0x81, 0xC0, 0x07, 0x81, 0xC0, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0x0F, 0x03, 0x80, 0x0F, 0x03, - 0x80, 0x0F, 0x07, 0x80, 0x0E, 0x07, 0x80, 0x0E, 0x07, 0x80, 0x1E, 0x07, - 0x00, 0x1E, 0x07, 0x00, 0x1E, 0x07, 0x00, 0x1C, 0x0F, 0x00, 0x1C, 0x0F, - 0x00, 0x00, 0x38, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x7F, 0xFE, - 0x01, 0xFF, 0xFE, 0x07, 0xE7, 0x3E, 0x0F, 0x8E, 0x3C, 0x3E, 0x1C, 0x3C, - 0x78, 0x38, 0x38, 0xF0, 0x70, 0x71, 0xE0, 0xE0, 0xE3, 0xC1, 0xC0, 0x07, - 0x83, 0x80, 0x0F, 0x87, 0x00, 0x0F, 0x8E, 0x00, 0x1F, 0xDC, 0x00, 0x1F, - 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0x80, 0x07, 0xFF, 0x80, 0x03, - 0xFF, 0x80, 0x07, 0x1F, 0x80, 0x0E, 0x1F, 0x00, 0x1C, 0x1F, 0x00, 0x38, - 0x1F, 0xC0, 0x70, 0x3F, 0x80, 0xE0, 0x7F, 0x81, 0xC0, 0xFF, 0x03, 0x81, - 0xEF, 0x07, 0x07, 0x9F, 0x0E, 0x0F, 0x3E, 0x1C, 0x3E, 0x3F, 0x39, 0xF8, - 0x3F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0x80, 0x00, - 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0x0F, 0xC0, 0x00, 0x78, 0x00, 0x3F, 0xE0, 0x00, - 0xE0, 0x01, 0xFF, 0xE0, 0x03, 0x80, 0x03, 0xFF, 0xE0, 0x07, 0x00, 0x0F, - 0x87, 0xC0, 0x1C, 0x00, 0x3C, 0x03, 0xC0, 0x38, 0x00, 0x70, 0x03, 0x80, - 0xE0, 0x00, 0xE0, 0x07, 0x03, 0xC0, 0x01, 0xC0, 0x0E, 0x07, 0x00, 0x03, - 0x80, 0x1C, 0x1E, 0x00, 0x07, 0x80, 0x78, 0x38, 0x00, 0x07, 0xC3, 0xE0, - 0xF0, 0x00, 0x07, 0xFF, 0xC1, 0xC0, 0x00, 0x0F, 0xFF, 0x07, 0x80, 0x00, - 0x0F, 0xFC, 0x0E, 0x00, 0x00, 0x07, 0xE0, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x3F, 0x00, 0x00, 0x03, 0x80, 0xFF, - 0x80, 0x00, 0x0E, 0x07, 0xFF, 0x80, 0x00, 0x3C, 0x0F, 0xFF, 0x80, 0x00, - 0x70, 0x3E, 0x1F, 0x00, 0x01, 0xE0, 0xF0, 0x0F, 0x00, 0x03, 0x81, 0xC0, - 0x0E, 0x00, 0x0F, 0x03, 0x80, 0x1C, 0x00, 0x1C, 0x07, 0x00, 0x38, 0x00, - 0x78, 0x0E, 0x00, 0x70, 0x00, 0xE0, 0x1E, 0x01, 0xE0, 0x03, 0x80, 0x1F, - 0x0F, 0x80, 0x07, 0x00, 0x1F, 0xFF, 0x00, 0x1C, 0x00, 0x3F, 0xFC, 0x00, - 0x38, 0x00, 0x1F, 0xF0, 0x00, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x07, - 0xC3, 0xC0, 0x00, 0xF8, 0x1E, 0x00, 0x0F, 0x00, 0xE0, 0x00, 0xF0, 0x0E, - 0x00, 0x0F, 0x00, 0xE0, 0x00, 0xF0, 0x0E, 0x00, 0x07, 0x81, 0xE0, 0x00, - 0x7C, 0x3C, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x1F, 0x1E, 0x07, 0x83, 0xE0, 0xF0, 0x78, 0x7C, 0x0F, 0x8F, 0x87, 0x80, - 0x7C, 0xF0, 0xF0, 0x03, 0xFF, 0x0F, 0x00, 0x1F, 0xE0, 0xF0, 0x00, 0xFE, - 0x0F, 0x00, 0x0F, 0xC0, 0xF0, 0x00, 0x7E, 0x0F, 0x80, 0x0F, 0xF0, 0x7C, - 0x01, 0xFF, 0x07, 0xF0, 0x7D, 0xF8, 0x3F, 0xFF, 0x8F, 0xC1, 0xFF, 0xF0, - 0x7E, 0x0F, 0xFE, 0x03, 0xE0, 0x3F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF6, 0x66, 0x01, 0xC0, 0x70, 0x38, 0x1C, 0x07, 0x03, 0xC0, 0xE0, 0x78, - 0x1C, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x70, 0x3C, - 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, - 0xC0, 0x70, 0x1E, 0x07, 0x81, 0xE0, 0x38, 0x0F, 0x03, 0xC0, 0x70, 0x1E, - 0x03, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x18, 0x07, 0xE0, 0x38, 0x07, - 0x01, 0xC0, 0x38, 0x0F, 0x01, 0xC0, 0x78, 0x0E, 0x03, 0x80, 0xF0, 0x1C, - 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, - 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x07, 0x81, 0xE0, 0x78, - 0x1E, 0x07, 0x03, 0xC0, 0xF0, 0x38, 0x1E, 0x07, 0x01, 0xC0, 0xE0, 0x38, - 0x1C, 0x06, 0x03, 0x80, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x63, - 0x1B, 0xFF, 0xFF, 0xFF, 0xC3, 0xF0, 0x07, 0x80, 0x3F, 0x01, 0xCE, 0x07, - 0x3C, 0x38, 0x70, 0x21, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, - 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0x00, 0x00, 0x0E, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, - 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xF3, - 0x33, 0x36, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF0, - 0x00, 0x38, 0x01, 0xC0, 0x0C, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x80, - 0x1C, 0x00, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x0E, - 0x00, 0x60, 0x03, 0x00, 0x38, 0x01, 0x80, 0x0C, 0x00, 0xE0, 0x07, 0x00, - 0x30, 0x03, 0x80, 0x1C, 0x00, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x18, - 0x01, 0xC0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x38, 0x00, 0x00, 0xFC, 0x00, - 0x0F, 0xFC, 0x00, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x1F, 0x87, 0xE0, 0xF8, - 0x07, 0xC3, 0xC0, 0x0F, 0x1F, 0x00, 0x3E, 0x78, 0x00, 0x79, 0xE0, 0x01, - 0xE7, 0x80, 0x07, 0xBC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, - 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, - 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, - 0xDE, 0x00, 0x1E, 0x78, 0x00, 0x79, 0xE0, 0x01, 0xE7, 0xC0, 0x0F, 0x8F, - 0x00, 0x3C, 0x3E, 0x01, 0xF0, 0x7C, 0x1F, 0x81, 0xFF, 0xFE, 0x03, 0xFF, - 0xF0, 0x03, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x60, 0x1C, 0x03, 0x80, - 0xF0, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3C, 0x07, 0x80, 0xF0, - 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, - 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, - 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xFE, 0x01, 0xFF, - 0xFE, 0x0F, 0xFF, 0xFC, 0x3F, 0x03, 0xF9, 0xF0, 0x03, 0xE7, 0x80, 0x07, - 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xC0, - 0x00, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, - 0x7C, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xF8, 0x00, 0x3F, 0xC0, - 0x03, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x3E, - 0x00, 0x00, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, - 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0xFF, 0xFF, 0x83, - 0xF0, 0x1F, 0x87, 0xC0, 0x1F, 0x1F, 0x00, 0x1F, 0x3C, 0x00, 0x1E, 0x78, - 0x00, 0x3C, 0xF0, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, - 0x07, 0x80, 0x00, 0x7F, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0x7F, - 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x03, - 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x1F, - 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFB, 0xC0, 0x01, 0xE7, 0xC0, 0x07, 0xC7, - 0xE0, 0x3F, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x03, - 0xFC, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x1F, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x3F, - 0xE0, 0x00, 0x7B, 0xC0, 0x01, 0xE7, 0x80, 0x07, 0x8F, 0x00, 0x0F, 0x1E, - 0x00, 0x3C, 0x3C, 0x00, 0xF0, 0x78, 0x03, 0xC0, 0xF0, 0x07, 0x81, 0xE0, - 0x1E, 0x03, 0xC0, 0x78, 0x07, 0x81, 0xE0, 0x0F, 0x03, 0xC0, 0x1E, 0x0F, - 0x00, 0x3C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, - 0xC0, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1F, 0x3F, 0x80, 0x7B, 0xFF, - 0x81, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x1F, 0x80, 0xFC, 0x78, 0x01, 0xF8, - 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0xFF, 0x80, 0x07, 0x9E, 0x00, 0x1E, 0x7C, 0x00, 0xF1, 0xFC, 0x0F, 0xC3, - 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x7F, 0xFC, 0x03, 0xFF, 0xF8, 0x1F, 0x83, - 0xF0, 0xF8, 0x07, 0xC3, 0xC0, 0x0F, 0x8F, 0x00, 0x1E, 0x78, 0x00, 0x79, - 0xE0, 0x00, 0x07, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0xFE, 0x03, 0xCF, - 0xFE, 0x0F, 0x7F, 0xFE, 0x3F, 0xFF, 0xFC, 0xFF, 0x03, 0xF3, 0xF0, 0x03, - 0xEF, 0x80, 0x07, 0xBE, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, - 0x00, 0x03, 0xFC, 0x00, 0x0F, 0x70, 0x00, 0x3D, 0xC0, 0x00, 0xF7, 0x80, - 0x07, 0x9F, 0x00, 0x3E, 0x3E, 0x00, 0xF8, 0xFC, 0x0F, 0xC1, 0xFF, 0xFE, - 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x07, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0x00, 0x00, - 0x78, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, - 0x01, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x70, - 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, - 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, - 0x01, 0xFE, 0x00, 0x1F, 0xFE, 0x00, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x3F, - 0x03, 0xF1, 0xF0, 0x03, 0xC7, 0xC0, 0x0F, 0x9E, 0x00, 0x1E, 0x78, 0x00, - 0x79, 0xE0, 0x01, 0xE7, 0x80, 0x0F, 0x8F, 0x00, 0x3C, 0x3F, 0x03, 0xF0, - 0x7F, 0xFF, 0x80, 0x7F, 0xF8, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0xFC, - 0x0F, 0xC7, 0xC0, 0x0F, 0x9E, 0x00, 0x1E, 0xF8, 0x00, 0x7F, 0xC0, 0x00, - 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, - 0x80, 0x07, 0xDE, 0x00, 0x1E, 0x7C, 0x00, 0xF8, 0xFC, 0x0F, 0xC3, 0xFF, - 0xFF, 0x07, 0xFF, 0xF8, 0x07, 0xFF, 0x80, 0x07, 0xF8, 0x00, 0x01, 0xFC, - 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0xFF, 0x83, 0xF0, 0x7E, 0x3E, - 0x00, 0xF1, 0xE0, 0x07, 0xCF, 0x00, 0x1E, 0xF0, 0x00, 0x77, 0x80, 0x03, - 0xBC, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xE0, - 0x03, 0xEF, 0x00, 0x1F, 0x7C, 0x01, 0xF9, 0xF8, 0x3F, 0xCF, 0xFF, 0xFE, - 0x3F, 0xFE, 0xF0, 0xFF, 0xE7, 0x80, 0xFC, 0x3C, 0x00, 0x01, 0xE0, 0x00, - 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x03, 0xC7, - 0xC0, 0x3E, 0x1F, 0x03, 0xE0, 0xFF, 0xFE, 0x03, 0xFF, 0xE0, 0x0F, 0xFE, - 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF3, 0x33, 0x36, 0xEC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xC0, - 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x80, 0x03, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xF0, - 0x00, 0x07, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, - 0xC0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x01, - 0xC0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x80, 0x00, 0x01, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x1F, - 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, - 0x0F, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7E, 0x0F, 0xE7, 0x80, - 0x3E, 0x78, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, - 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, - 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, - 0x07, 0xFC, 0x03, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7E, - 0x00, 0x00, 0x7F, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xF0, 0x07, 0xC0, 0x00, - 0x00, 0x3F, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x3C, 0x00, 0x7E, 0x00, - 0x3E, 0x0F, 0x00, 0x3F, 0xE3, 0xC3, 0xE3, 0xE0, 0x1F, 0xFE, 0x78, 0x3C, - 0x78, 0x07, 0xE1, 0xFF, 0x07, 0xDF, 0x01, 0xF0, 0x1F, 0xC0, 0xFB, 0xC0, - 0x7C, 0x01, 0xF8, 0x0F, 0x78, 0x0F, 0x00, 0x3F, 0x01, 0xEF, 0x03, 0xC0, - 0x07, 0xC0, 0x3F, 0xC0, 0x78, 0x00, 0xF8, 0x07, 0xF8, 0x0F, 0x00, 0x1F, - 0x00, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x1F, 0xE0, 0x78, 0x00, 0x78, 0x07, - 0xFC, 0x0F, 0x00, 0x1F, 0x00, 0xF7, 0x81, 0xE0, 0x03, 0xC0, 0x1E, 0xF0, - 0x3C, 0x00, 0x78, 0x07, 0x9E, 0x07, 0x80, 0x1F, 0x01, 0xF3, 0xE0, 0xF8, - 0x07, 0xC0, 0x3C, 0x3C, 0x0F, 0x81, 0xF8, 0x0F, 0x87, 0x81, 0xF8, 0x7F, - 0x87, 0xE0, 0xF8, 0x1F, 0xFE, 0xFF, 0xF8, 0x0F, 0x01, 0xFF, 0x1F, 0xFC, - 0x01, 0xF0, 0x0F, 0x80, 0xFE, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x7C, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xF8, - 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xF7, 0xC0, 0x00, 0x03, - 0xDF, 0x00, 0x00, 0x1F, 0x3C, 0x00, 0x00, 0x78, 0xF8, 0x00, 0x01, 0xE3, - 0xE0, 0x00, 0x0F, 0x87, 0x80, 0x00, 0x3C, 0x1F, 0x00, 0x01, 0xF0, 0x7C, - 0x00, 0x07, 0x80, 0xF0, 0x00, 0x1E, 0x03, 0xE0, 0x00, 0xF8, 0x0F, 0x80, - 0x03, 0xC0, 0x1E, 0x00, 0x0F, 0x00, 0x7C, 0x00, 0x7C, 0x01, 0xF0, 0x01, - 0xE0, 0x03, 0xC0, 0x07, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x0F, 0x83, 0xE0, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0xF8, 0x3C, 0x00, 0x01, - 0xF1, 0xF0, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x1F, 0x1E, 0x00, 0x00, 0x3E, - 0xF8, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x01, 0xE0, 0xFF, 0xFF, 0x80, 0x7F, - 0xFF, 0xF0, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x0F, 0x00, 0x0F, 0xC7, - 0x80, 0x01, 0xE3, 0xC0, 0x00, 0xF9, 0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x1E, - 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x07, 0x9E, 0x00, 0x07, 0x8F, 0x00, 0x03, - 0xC7, 0x80, 0x07, 0xC3, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, - 0xF8, 0x7F, 0xFF, 0xFE, 0x3C, 0x00, 0x0F, 0x9E, 0x00, 0x03, 0xEF, 0x00, - 0x00, 0xF7, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, - 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFF, - 0x00, 0x01, 0xF7, 0x80, 0x01, 0xFB, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF8, - 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x07, - 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0xFE, 0x01, - 0xF8, 0x07, 0xC0, 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x3C, - 0x3C, 0x00, 0x01, 0xE3, 0xE0, 0x00, 0x07, 0x9E, 0x00, 0x00, 0x3C, 0xF0, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x78, 0x00, - 0x00, 0x7B, 0xC0, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x3C, 0x78, 0x00, 0x01, - 0xE3, 0xE0, 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xF0, 0x3E, 0x00, 0x1F, 0x81, - 0xFE, 0x03, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xF8, 0x00, 0x3F, - 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, - 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFE, 0x0F, 0x00, 0x0F, 0xE1, 0xE0, - 0x00, 0x7E, 0x3C, 0x00, 0x07, 0xE7, 0x80, 0x00, 0x7C, 0xF0, 0x00, 0x07, - 0xDE, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x0F, 0x78, 0x00, 0x01, 0xEF, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, - 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xF8, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xF7, - 0x80, 0x00, 0x1E, 0xF0, 0x00, 0x03, 0xDE, 0x00, 0x00, 0xFB, 0xC0, 0x00, - 0x3E, 0x78, 0x00, 0x0F, 0xCF, 0x00, 0x03, 0xF1, 0xE0, 0x01, 0xFC, 0x3F, - 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, - 0xFE, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, - 0x3F, 0xFF, 0xFC, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, - 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0xFE, - 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x7F, 0x80, 0x7F, - 0x01, 0xF8, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x1E, - 0x3E, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x3D, 0xF0, 0x00, 0x00, 0x03, - 0xC0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x01, 0xE0, - 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x00, - 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xBC, 0x00, - 0x00, 0x0F, 0x78, 0x00, 0x00, 0x1E, 0xF8, 0x00, 0x00, 0x7D, 0xF0, 0x00, - 0x00, 0xF9, 0xF0, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x07, 0xE3, 0xF0, 0x00, - 0x1F, 0xC3, 0xF0, 0x00, 0xFF, 0x83, 0xFC, 0x07, 0xEF, 0x03, 0xFF, 0xFF, - 0x9E, 0x03, 0xFF, 0xFE, 0x1C, 0x01, 0xFF, 0xF0, 0x38, 0x00, 0x7F, 0x80, - 0x00, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xE0, - 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, - 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, - 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, - 0x03, 0xC0, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0, - 0x07, 0xF8, 0x01, 0xFF, 0x80, 0x3E, 0xF0, 0x0F, 0x9F, 0x83, 0xF1, 0xFF, - 0xFC, 0x3F, 0xFF, 0x01, 0xFF, 0xC0, 0x0F, 0xE0, 0x00, 0xF0, 0x00, 0x07, - 0xDE, 0x00, 0x01, 0xF3, 0xC0, 0x00, 0x7C, 0x78, 0x00, 0x1F, 0x0F, 0x00, - 0x07, 0xC1, 0xE0, 0x01, 0xF0, 0x3C, 0x00, 0x7C, 0x07, 0x80, 0x1F, 0x00, - 0xF0, 0x07, 0xC0, 0x1E, 0x01, 0xF0, 0x03, 0xC0, 0x7C, 0x00, 0x78, 0x1F, - 0x00, 0x0F, 0x07, 0xC0, 0x01, 0xE1, 0xF0, 0x00, 0x3C, 0x7E, 0x00, 0x07, - 0x9F, 0xE0, 0x00, 0xF7, 0xFE, 0x00, 0x1F, 0xF7, 0xC0, 0x03, 0xFC, 0x7C, - 0x00, 0x7F, 0x07, 0xC0, 0x0F, 0xC0, 0xF8, 0x01, 0xF0, 0x0F, 0x80, 0x3C, - 0x00, 0xF8, 0x07, 0x80, 0x1F, 0x80, 0xF0, 0x01, 0xF0, 0x1E, 0x00, 0x1F, - 0x03, 0xC0, 0x03, 0xF0, 0x78, 0x00, 0x3E, 0x0F, 0x00, 0x03, 0xE1, 0xE0, - 0x00, 0x3E, 0x3C, 0x00, 0x07, 0xC7, 0x80, 0x00, 0x7C, 0xF0, 0x00, 0x07, - 0xDE, 0x00, 0x00, 0xFC, 0xF0, 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, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, - 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 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, 0x80, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFC, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, - 0x00, 0xFF, 0xF7, 0x00, 0x00, 0xEF, 0xF7, 0x80, 0x01, 0xEF, 0xF7, 0x80, - 0x01, 0xEF, 0xF3, 0xC0, 0x01, 0xCF, 0xF3, 0xC0, 0x03, 0xCF, 0xF3, 0xC0, - 0x03, 0xCF, 0xF1, 0xE0, 0x03, 0x8F, 0xF1, 0xE0, 0x07, 0x8F, 0xF1, 0xE0, - 0x07, 0x8F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, - 0x0F, 0x0F, 0xF0, 0x78, 0x1E, 0x0F, 0xF0, 0x78, 0x1E, 0x0F, 0xF0, 0x78, - 0x1E, 0x0F, 0xF0, 0x3C, 0x3C, 0x0F, 0xF0, 0x3C, 0x3C, 0x0F, 0xF0, 0x3C, - 0x3C, 0x0F, 0xF0, 0x1E, 0x78, 0x0F, 0xF0, 0x1E, 0x78, 0x0F, 0xF0, 0x0E, - 0x78, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x07, - 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x0F, 0xF0, 0x07, 0xE0, 0x0F, 0xF0, 0x03, - 0xE0, 0x0F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x3F, - 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0xF8, 0x00, - 0x3F, 0xDE, 0x00, 0x0F, 0xF7, 0xC0, 0x03, 0xFC, 0xF8, 0x00, 0xFF, 0x1E, - 0x00, 0x3F, 0xC7, 0xC0, 0x0F, 0xF0, 0xF0, 0x03, 0xFC, 0x3E, 0x00, 0xFF, - 0x07, 0xC0, 0x3F, 0xC0, 0xF0, 0x0F, 0xF0, 0x3E, 0x03, 0xFC, 0x07, 0xC0, - 0xFF, 0x00, 0xF0, 0x3F, 0xC0, 0x3E, 0x0F, 0xF0, 0x07, 0x83, 0xFC, 0x01, - 0xF0, 0xFF, 0x00, 0x3E, 0x3F, 0xC0, 0x07, 0x8F, 0xF0, 0x01, 0xF3, 0xFC, - 0x00, 0x3E, 0xFF, 0x00, 0x07, 0xBF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, 0x3F, - 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x00, - 0x0F, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, - 0x80, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x7F, 0x80, - 0xFF, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x03, 0xF0, 0x3E, 0x00, - 0x00, 0xF8, 0x3E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x0F, 0x1F, 0x00, - 0x00, 0x07, 0xCF, 0x00, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x00, 0xF7, 0xC0, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x3E, 0xF0, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x0F, - 0x3E, 0x00, 0x00, 0x0F, 0x8F, 0x00, 0x00, 0x07, 0x87, 0xC0, 0x00, 0x07, - 0xC1, 0xF0, 0x00, 0x07, 0xC0, 0xFC, 0x00, 0x07, 0xE0, 0x3F, 0x00, 0x07, - 0xE0, 0x0F, 0xF0, 0x1F, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0xFF, - 0x80, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0xF0, 0x00, - 0xFE, 0xF0, 0x00, 0x3E, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, - 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, - 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x3E, 0xF0, 0x00, 0xFE, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, - 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x7F, 0x80, 0xFF, - 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x03, 0xF0, 0x3E, 0x00, 0x00, - 0xF8, 0x3E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x0F, 0x1F, 0x00, 0x00, - 0x07, 0xCF, 0x00, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x00, 0xF7, 0xC0, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3E, 0xF0, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x0F, 0x3E, - 0x00, 0x00, 0x0F, 0x8F, 0x00, 0x03, 0x87, 0x87, 0xC0, 0x03, 0xE7, 0xC1, - 0xF0, 0x00, 0xFF, 0xC0, 0xFC, 0x00, 0x3F, 0xE0, 0x3F, 0x00, 0x0F, 0xE0, - 0x0F, 0xF0, 0x1F, 0xF0, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xC7, 0xC0, 0x01, 0xFF, 0x01, 0xE0, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFE, 0x0F, - 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x3F, 0x3C, 0x00, 0x07, - 0xCF, 0x00, 0x00, 0xFB, 0xC0, 0x00, 0x1E, 0xF0, 0x00, 0x07, 0xBC, 0x00, - 0x01, 0xEF, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x1E, 0xF0, 0x00, 0x07, 0xBC, - 0x00, 0x03, 0xCF, 0x00, 0x01, 0xF3, 0xC0, 0x00, 0xF8, 0xFF, 0xFF, 0xFC, - 0x3F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, - 0x3F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xFB, 0xC0, 0x00, 0x1E, 0xF0, - 0x00, 0x07, 0xBC, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x1E, - 0xF0, 0x00, 0x07, 0xBC, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x7B, 0xC0, 0x00, - 0x1E, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x7F, 0xC0, 0x00, - 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xF8, 0x07, - 0xF0, 0x7C, 0x00, 0x1F, 0x0F, 0x00, 0x01, 0xE3, 0xE0, 0x00, 0x3E, 0x78, - 0x00, 0x03, 0xCF, 0x00, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x03, 0xFF, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xF7, 0x80, 0x00, 0x3E, 0xF8, 0x00, - 0x07, 0x9F, 0x80, 0x01, 0xF1, 0xFE, 0x01, 0xFC, 0x1F, 0xFF, 0xFF, 0x01, - 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, - 0x00, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x7D, 0xE0, 0x00, 0x1E, 0x7C, 0x00, 0x0F, 0x9F, - 0x80, 0x07, 0xE3, 0xF8, 0x07, 0xF0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFC, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0xF7, 0xC0, - 0x00, 0x0F, 0x9E, 0x00, 0x00, 0x7C, 0xF8, 0x00, 0x03, 0xC7, 0xC0, 0x00, - 0x3E, 0x1E, 0x00, 0x01, 0xF0, 0xF8, 0x00, 0x0F, 0x07, 0xC0, 0x00, 0xF8, - 0x1E, 0x00, 0x07, 0xC0, 0xF8, 0x00, 0x3C, 0x07, 0xC0, 0x03, 0xE0, 0x1E, - 0x00, 0x1F, 0x00, 0xF8, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x80, 0x1E, 0x00, - 0x7C, 0x00, 0xF8, 0x03, 0xC0, 0x03, 0xC0, 0x1E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x0F, 0x00, 0x03, 0xC0, 0x78, 0x00, 0x1F, 0x07, 0x80, 0x00, - 0xF8, 0x3C, 0x00, 0x03, 0xC1, 0xE0, 0x00, 0x1F, 0x1E, 0x00, 0x00, 0x78, - 0xF0, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x1F, 0x78, 0x00, 0x00, 0x7B, 0xC0, - 0x00, 0x03, 0xDE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xFF, 0x80, 0x03, - 0xF0, 0x00, 0x7D, 0xE0, 0x00, 0xFC, 0x00, 0x1E, 0x7C, 0x00, 0x7F, 0x80, - 0x0F, 0x9F, 0x00, 0x1F, 0xE0, 0x03, 0xE7, 0xC0, 0x07, 0xF8, 0x00, 0xF8, - 0xF0, 0x01, 0xFF, 0x00, 0x3C, 0x3E, 0x00, 0xF3, 0xC0, 0x1F, 0x0F, 0x80, - 0x3C, 0xF0, 0x07, 0xC3, 0xE0, 0x0F, 0x3C, 0x01, 0xF0, 0x78, 0x07, 0xC7, - 0x80, 0x78, 0x1F, 0x01, 0xE1, 0xE0, 0x1E, 0x07, 0xC0, 0x78, 0x78, 0x0F, - 0x80, 0xF0, 0x1E, 0x1E, 0x03, 0xE0, 0x3C, 0x0F, 0x83, 0xC0, 0xF0, 0x0F, - 0x83, 0xC0, 0xF0, 0x3C, 0x03, 0xE0, 0xF0, 0x3C, 0x1F, 0x00, 0x78, 0x3C, - 0x0F, 0x87, 0xC0, 0x1E, 0x1E, 0x01, 0xE1, 0xE0, 0x07, 0x87, 0x80, 0x78, - 0x78, 0x01, 0xF1, 0xE0, 0x1E, 0x1E, 0x00, 0x3C, 0xF8, 0x03, 0xCF, 0x80, - 0x0F, 0x3C, 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x3C, 0xF0, 0x00, 0xFB, - 0xC0, 0x0F, 0xBC, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x07, 0xF8, 0x00, - 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xF8, - 0x00, 0x0F, 0xC0, 0x00, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, - 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x01, 0xF3, 0xF0, 0x00, 0x1F, 0x8F, 0x80, 0x00, 0xF8, 0x3E, 0x00, 0x0F, - 0x80, 0xF8, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x00, - 0x7C, 0x07, 0xC0, 0x03, 0xE0, 0x3E, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x3E, - 0x3E, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x1F, 0xF0, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x07, - 0xDF, 0x00, 0x00, 0x7C, 0x78, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x3E, 0x0F, - 0x80, 0x03, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, 0x01, 0xF0, 0x07, 0xC0, - 0x1F, 0x00, 0x3F, 0x00, 0xF8, 0x00, 0xF8, 0x0F, 0x80, 0x03, 0xE0, 0xF8, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x7C, 0x7C, 0x00, 0x01, 0xF7, 0xC0, 0x00, - 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x03, 0xE7, 0xE0, 0x00, - 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0x1F, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x1F, - 0x00, 0xF8, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, - 0x0F, 0x80, 0x7C, 0x00, 0x1E, 0x01, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x00, - 0xF8, 0x7C, 0x00, 0x03, 0xE1, 0xE0, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x0F, - 0x3C, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xC7, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x07, 0x00, 0x18, 0x00, 0xE0, 0x07, 0x00, 0x18, 0x00, 0xE0, - 0x07, 0x00, 0x18, 0x00, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x07, 0x00, - 0x38, 0x00, 0xC0, 0x06, 0x00, 0x38, 0x00, 0xC0, 0x06, 0x00, 0x38, 0x01, - 0xC0, 0x06, 0x00, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x30, 0x01, 0xC0, 0x0E, - 0x00, 0x30, 0x01, 0xC0, 0x0E, 0x00, 0x30, 0x01, 0xC0, 0x0E, 0xFF, 0xFF, - 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x3F, - 0x00, 0x0F, 0xC0, 0x07, 0xF8, 0x01, 0xCE, 0x00, 0x73, 0x80, 0x3C, 0x70, - 0x0E, 0x1C, 0x07, 0x87, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x38, 0x07, 0x0E, - 0x01, 0xC7, 0x80, 0x79, 0xC0, 0x0E, 0x70, 0x03, 0xB8, 0x00, 0x70, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0x01, 0xE0, 0x3C, 0x07, - 0x00, 0xE0, 0x1C, 0x01, 0xFF, 0x00, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0xE0, - 0x3F, 0xFF, 0xF0, 0x7E, 0x03, 0xF8, 0x7C, 0x00, 0xF8, 0x78, 0x00, 0x78, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, - 0x00, 0x03, 0xF8, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0xF8, 0x3F, 0xFE, 0x78, - 0x7F, 0x80, 0x78, 0xFC, 0x00, 0x78, 0xF8, 0x00, 0x78, 0xF0, 0x00, 0x78, - 0xF0, 0x00, 0xF8, 0xF0, 0x00, 0xF8, 0xF8, 0x03, 0xF8, 0x7E, 0x0F, 0xF8, - 0x7F, 0xFF, 0x7F, 0x3F, 0xFE, 0x3F, 0x1F, 0xFC, 0x3F, 0x07, 0xE0, 0x1F, - 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, - 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x7E, - 0x03, 0xC7, 0xFE, 0x0F, 0x7F, 0xFC, 0x3D, 0xFF, 0xF8, 0xFF, 0x07, 0xF3, - 0xF8, 0x07, 0xCF, 0xC0, 0x0F, 0xBE, 0x00, 0x1E, 0xF8, 0x00, 0x7B, 0xE0, - 0x01, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, - 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x01, 0xFF, - 0x80, 0x07, 0xBE, 0x00, 0x1E, 0xFC, 0x00, 0xFB, 0xF8, 0x07, 0xCF, 0xF0, - 0x7F, 0x3B, 0xFF, 0xF8, 0xE7, 0xFF, 0xC3, 0x8F, 0xFE, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, - 0xF0, 0x3F, 0x1F, 0x00, 0xF9, 0xF0, 0x03, 0xCF, 0x00, 0x0F, 0x78, 0x00, - 0x07, 0xC0, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, - 0x1E, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0xC0, 0x0F, 0x9F, 0x00, 0xF8, 0xFC, - 0x0F, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0x3F, 0xFC, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, - 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x01, - 0xFC, 0x1E, 0x0F, 0xFE, 0x3C, 0x3F, 0xFF, 0x78, 0xFF, 0xFF, 0xF3, 0xF8, - 0x3F, 0xE7, 0xC0, 0x1F, 0xDF, 0x00, 0x1F, 0xBE, 0x00, 0x1F, 0x78, 0x00, - 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x01, - 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x1F, - 0xF0, 0x00, 0x7D, 0xE0, 0x00, 0xFB, 0xC0, 0x01, 0xF7, 0xC0, 0x07, 0xE7, - 0xC0, 0x1F, 0xCF, 0xE0, 0xFF, 0x8F, 0xFF, 0xF7, 0x0F, 0xFF, 0xCE, 0x0F, - 0xFF, 0x1C, 0x07, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0xFF, - 0xFC, 0x07, 0xFF, 0xF8, 0x1F, 0x83, 0xF0, 0xF8, 0x07, 0xC7, 0xC0, 0x0F, - 0x9E, 0x00, 0x1E, 0x78, 0x00, 0x7B, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, - 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x1E, - 0x7C, 0x00, 0x78, 0xF8, 0x03, 0xE3, 0xF0, 0x3F, 0x07, 0xFF, 0xF8, 0x0F, - 0xFF, 0xE0, 0x1F, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xC3, 0xF0, 0xFC, - 0x7F, 0x1F, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x3F, 0xFF, 0xFF, 0xFF, 0x1E, - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, - 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, - 0x1E, 0x07, 0x80, 0x00, 0xFC, 0x00, 0x1F, 0xF8, 0xF0, 0xFF, 0xFB, 0xC7, - 0xFF, 0xFF, 0x3F, 0x83, 0xFC, 0xF8, 0x07, 0xF7, 0xC0, 0x0F, 0xDE, 0x00, - 0x1F, 0x78, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, - 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, - 0x00, 0x3F, 0xC0, 0x00, 0xF7, 0x80, 0x07, 0xDE, 0x00, 0x1F, 0x7C, 0x00, - 0xFC, 0xF8, 0x07, 0xF3, 0xF8, 0x3F, 0xC7, 0xFF, 0xEF, 0x0F, 0xFF, 0x3C, - 0x1F, 0xF8, 0xF0, 0x1F, 0x83, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x79, 0xE0, - 0x01, 0xE7, 0xC0, 0x0F, 0x8F, 0x80, 0xFC, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, - 0x80, 0xFF, 0xFC, 0x00, 0x7F, 0x80, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, - 0x00, 0xF0, 0xFE, 0x1E, 0x3F, 0xE3, 0xCF, 0xFF, 0x7B, 0xFF, 0xEF, 0xF0, - 0xFF, 0xF8, 0x07, 0xFF, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFE, 0x00, - 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, - 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, - 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, - 0xFE, 0x00, 0x3C, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, - 0xFF, 0xFE, 0xFE, 0xF8, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, - 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x80, 0x1F, 0x3C, 0x01, 0xF1, 0xE0, 0x1F, 0x0F, - 0x01, 0xF0, 0x78, 0x1F, 0x03, 0xC1, 0xF0, 0x1E, 0x1F, 0x00, 0xF1, 0xF0, - 0x07, 0x9F, 0x00, 0x3D, 0xF8, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x7F, - 0x7C, 0x03, 0xF1, 0xF0, 0x1F, 0x07, 0xC0, 0xF0, 0x3E, 0x07, 0x80, 0xF8, - 0x3C, 0x03, 0xC1, 0xE0, 0x1F, 0x0F, 0x00, 0x7C, 0x78, 0x03, 0xE3, 0xC0, - 0x0F, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xF7, 0x80, 0x07, 0xC0, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0x03, 0xF0, 0xE3, 0xFE, 0x0F, 0xFC, 0xE7, - 0xFF, 0x1F, 0xFE, 0xEF, 0xFF, 0xBF, 0xFE, 0xFE, 0x0F, 0xF8, 0x3F, 0xFC, - 0x07, 0xF0, 0x1F, 0xF8, 0x03, 0xE0, 0x0F, 0xF8, 0x03, 0xE0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0xF0, 0x03, 0xC0, 0x0F, 0x00, - 0x7E, 0x0E, 0x1F, 0xF8, 0xE7, 0xFF, 0xCE, 0xFF, 0xFE, 0xEF, 0x07, 0xFF, - 0xE0, 0x1F, 0xFC, 0x01, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0xFF, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x0F, 0x00, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xFF, - 0x80, 0xFF, 0xFF, 0x83, 0xF8, 0x3F, 0x87, 0xC0, 0x1F, 0x1F, 0x00, 0x1F, - 0x3C, 0x00, 0x1E, 0x78, 0x00, 0x3D, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x7F, - 0x80, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, - 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x7D, 0xE0, 0x00, 0xF3, 0xC0, - 0x01, 0xE7, 0xC0, 0x07, 0xC7, 0xC0, 0x1F, 0x0F, 0xE0, 0xFE, 0x0F, 0xFF, - 0xF8, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x00, 0xFE, - 0x03, 0x8F, 0xFE, 0x0E, 0x7F, 0xFC, 0x3B, 0xFF, 0xF8, 0xFF, 0x87, 0xF3, - 0xF8, 0x07, 0xCF, 0xC0, 0x0F, 0xBE, 0x00, 0x1E, 0xF8, 0x00, 0x7B, 0xE0, - 0x01, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, - 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x01, 0xFF, - 0x80, 0x07, 0xBE, 0x00, 0x1E, 0xFC, 0x00, 0xFB, 0xF8, 0x07, 0xCF, 0xF0, - 0x7F, 0x3F, 0xFF, 0xF8, 0xF7, 0xFF, 0xC3, 0xC7, 0xFE, 0x0F, 0x07, 0xE0, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x07, 0xFF, 0x1C, 0x3F, 0xFF, 0x38, 0xFF, 0xFF, 0x73, 0xF8, - 0x3F, 0xE7, 0xC0, 0x1F, 0xDF, 0x00, 0x1F, 0xBE, 0x00, 0x1F, 0x78, 0x00, - 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x01, - 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x1F, - 0xF0, 0x00, 0x7D, 0xE0, 0x00, 0xFB, 0xC0, 0x01, 0xF7, 0xC0, 0x07, 0xE7, - 0xC0, 0x1F, 0xCF, 0xE0, 0xFF, 0x8F, 0xFF, 0xEF, 0x0F, 0xFF, 0xDE, 0x0F, - 0xFE, 0x3C, 0x07, 0xF0, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x78, 0x00, 0xFE, 0x1F, 0xE7, 0xFE, 0xFF, 0xFF, 0x8F, - 0xC0, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0x01, 0xFC, 0x00, 0xFF, 0xF0, - 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x3E, 0x07, 0xE7, 0xC0, 0x3E, 0x78, 0x01, - 0xE7, 0x80, 0x00, 0x78, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xFC, - 0x00, 0x1F, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x03, 0xFE, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x80, 0x1F, 0x7E, 0x07, 0xE7, 0xFF, 0xFE, 0x3F, 0xFF, 0xC1, 0xFF, 0xF0, - 0x03, 0xFC, 0x00, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x8F, 0xFF, - 0xFF, 0xFF, 0xC7, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, - 0xE0, 0x78, 0x1F, 0xC7, 0xF0, 0xFC, 0x1F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x3F, 0xF8, 0x07, 0xFF, - 0xE0, 0xFF, 0x7F, 0xFF, 0x77, 0xFF, 0xE7, 0x1F, 0xFC, 0x70, 0x7E, 0x00, - 0x78, 0x00, 0x3E, 0xF0, 0x00, 0x79, 0xF0, 0x00, 0xF1, 0xE0, 0x03, 0xE3, - 0xC0, 0x07, 0x87, 0xC0, 0x0F, 0x07, 0x80, 0x3C, 0x0F, 0x00, 0x78, 0x1F, - 0x01, 0xF0, 0x1E, 0x03, 0xC0, 0x3C, 0x07, 0x80, 0x7C, 0x1F, 0x00, 0x78, - 0x3C, 0x00, 0xF0, 0x78, 0x01, 0xF1, 0xE0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, - 0x80, 0x03, 0xDE, 0x00, 0x07, 0xBC, 0x00, 0x0F, 0x70, 0x00, 0x0F, 0xE0, - 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, - 0xF8, 0x03, 0xE0, 0x07, 0x9E, 0x00, 0xFC, 0x01, 0xE7, 0x80, 0x3F, 0x00, - 0x79, 0xF0, 0x0F, 0xC0, 0x3E, 0x3C, 0x07, 0xF0, 0x0F, 0x0F, 0x01, 0xFE, - 0x03, 0xC3, 0xC0, 0x7F, 0x80, 0xF0, 0x78, 0x1D, 0xE0, 0x78, 0x1E, 0x0F, - 0x38, 0x1E, 0x07, 0x83, 0xCF, 0x07, 0x81, 0xE0, 0xF3, 0xC1, 0xE0, 0x3C, - 0x38, 0xF0, 0xF0, 0x0F, 0x1E, 0x1C, 0x3C, 0x03, 0xC7, 0x87, 0x8F, 0x00, - 0x71, 0xE1, 0xE3, 0x80, 0x1E, 0x70, 0x79, 0xE0, 0x07, 0xBC, 0x0E, 0x78, - 0x01, 0xEF, 0x03, 0xDE, 0x00, 0x3B, 0xC0, 0xF7, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x07, 0xC0, 0x1F, 0x80, 0x01, 0xF0, 0x03, 0xC0, 0x00, 0x7C, - 0x00, 0x78, 0xF0, 0x03, 0xE1, 0xE0, 0x0F, 0x07, 0xC0, 0x78, 0x0F, 0x03, - 0xE0, 0x1E, 0x0F, 0x00, 0x7C, 0x78, 0x00, 0xF3, 0xE0, 0x01, 0xEF, 0x00, - 0x07, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xC0, 0x03, 0xCF, 0x00, 0x0F, 0x1E, - 0x00, 0x78, 0x7C, 0x03, 0xE0, 0xF0, 0x0F, 0x03, 0xE0, 0x78, 0x07, 0xC3, - 0xE0, 0x0F, 0x1F, 0x00, 0x3E, 0x78, 0x00, 0x7C, 0x78, 0x00, 0x3D, 0xE0, - 0x01, 0xF7, 0x80, 0x07, 0x8F, 0x00, 0x1E, 0x3C, 0x00, 0xF0, 0xF0, 0x03, - 0xC1, 0xE0, 0x0F, 0x07, 0x80, 0x78, 0x1E, 0x01, 0xE0, 0x3C, 0x07, 0x80, - 0xF0, 0x3C, 0x03, 0xC0, 0xF0, 0x07, 0x87, 0xC0, 0x1E, 0x1E, 0x00, 0x78, - 0x78, 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x0F, 0x3C, 0x00, 0x1F, 0xE0, - 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, - 0x3E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x3C, - 0x00, 0x01, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3E, 0x00, 0x0F, 0xF0, 0x00, - 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xF7, - 0xFF, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0x00, 0x01, 0xE0, 0x00, 0x3E, - 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, - 0x00, 0x07, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, - 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xC0, 0x00, 0x7C, - 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x01, 0xE0, 0xFC, 0x1F, 0x87, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, - 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x78, 0x1E, 0x0F, 0x81, 0xE0, 0x3C, 0x07, 0xC0, 0x3C, 0x03, 0x80, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, - 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x00, 0xFC, 0x1F, 0x80, - 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x1F, 0x83, 0xF0, 0x0F, 0x00, - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, - 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x3E, 0x03, - 0xC0, 0x78, 0x1F, 0x07, 0x80, 0xE0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, - 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, - 0x70, 0x1E, 0x1F, 0x83, 0xF0, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0xF0, 0x0D, - 0xFF, 0x01, 0xF0, 0xF8, 0x7C, 0x0F, 0xFD, 0x80, 0x7F, 0x80, 0x03, 0xE0}; - -const GFXglyph FreeSans24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 12, 0, 1}, // 0x20 ' ' - {0, 4, 34, 16, 6, -33}, // 0x21 '!' - {17, 11, 12, 16, 2, -32}, // 0x22 '"' - {34, 24, 33, 26, 1, -31}, // 0x23 '#' - {133, 23, 41, 26, 1, -34}, // 0x24 '$' - {251, 39, 34, 42, 1, -32}, // 0x25 '%' - {417, 28, 34, 31, 2, -32}, // 0x26 '&' - {536, 4, 12, 9, 2, -32}, // 0x27 ''' - {542, 10, 44, 16, 3, -33}, // 0x28 '(' - {597, 10, 44, 16, 2, -33}, // 0x29 ')' - {652, 14, 14, 18, 2, -33}, // 0x2A '*' - {677, 23, 22, 27, 2, -21}, // 0x2B '+' - {741, 4, 12, 13, 4, -4}, // 0x2C ',' - {747, 11, 4, 16, 2, -14}, // 0x2D '-' - {753, 4, 5, 12, 4, -4}, // 0x2E '.' - {756, 13, 35, 13, 0, -33}, // 0x2F '/' - {813, 22, 34, 26, 2, -32}, // 0x30 '0' - {907, 11, 33, 26, 5, -32}, // 0x31 '1' - {953, 22, 33, 26, 2, -32}, // 0x32 '2' - {1044, 23, 34, 26, 1, -32}, // 0x33 '3' - {1142, 23, 33, 26, 1, -32}, // 0x34 '4' - {1237, 22, 34, 26, 2, -32}, // 0x35 '5' - {1331, 22, 34, 26, 2, -32}, // 0x36 '6' - {1425, 21, 33, 26, 2, -32}, // 0x37 '7' - {1512, 22, 34, 26, 2, -32}, // 0x38 '8' - {1606, 21, 34, 26, 2, -32}, // 0x39 '9' - {1696, 4, 25, 12, 4, -24}, // 0x3A ':' - {1709, 4, 32, 12, 4, -24}, // 0x3B ';' - {1725, 23, 23, 27, 2, -22}, // 0x3C '<' - {1792, 23, 12, 27, 2, -16}, // 0x3D '=' - {1827, 23, 23, 27, 2, -22}, // 0x3E '>' - {1894, 20, 35, 26, 4, -34}, // 0x3F '?' - {1982, 43, 42, 48, 2, -34}, // 0x40 '@' - {2208, 30, 34, 31, 1, -33}, // 0x41 'A' - {2336, 25, 34, 31, 4, -33}, // 0x42 'B' - {2443, 29, 36, 33, 2, -34}, // 0x43 'C' - {2574, 27, 34, 33, 4, -33}, // 0x44 'D' - {2689, 24, 34, 30, 4, -33}, // 0x45 'E' - {2791, 22, 34, 28, 4, -33}, // 0x46 'F' - {2885, 31, 36, 36, 2, -34}, // 0x47 'G' - {3025, 26, 34, 34, 4, -33}, // 0x48 'H' - {3136, 4, 34, 13, 5, -33}, // 0x49 'I' - {3153, 19, 35, 25, 2, -33}, // 0x4A 'J' - {3237, 27, 34, 32, 4, -33}, // 0x4B 'K' - {3352, 21, 34, 26, 4, -33}, // 0x4C 'L' - {3442, 32, 34, 40, 4, -33}, // 0x4D 'M' - {3578, 26, 34, 34, 4, -33}, // 0x4E 'N' - {3689, 33, 36, 37, 2, -34}, // 0x4F 'O' - {3838, 24, 34, 31, 4, -33}, // 0x50 'P' - {3940, 33, 38, 37, 2, -34}, // 0x51 'Q' - {4097, 26, 34, 33, 4, -33}, // 0x52 'R' - {4208, 27, 36, 31, 2, -34}, // 0x53 'S' - {4330, 26, 34, 30, 2, -33}, // 0x54 'T' - {4441, 26, 35, 34, 4, -33}, // 0x55 'U' - {4555, 29, 34, 30, 1, -33}, // 0x56 'V' - {4679, 42, 34, 44, 1, -33}, // 0x57 'W' - {4858, 29, 34, 31, 1, -33}, // 0x58 'X' - {4982, 30, 34, 32, 1, -33}, // 0x59 'Y' - {5110, 27, 34, 29, 1, -33}, // 0x5A 'Z' - {5225, 8, 44, 13, 3, -33}, // 0x5B '[' - {5269, 13, 35, 13, 0, -33}, // 0x5C '\' - {5326, 8, 44, 13, 1, -33}, // 0x5D ']' - {5370, 18, 18, 22, 2, -32}, // 0x5E '^' - {5411, 28, 2, 26, -1, 7}, // 0x5F '_' - {5418, 10, 7, 12, 1, -34}, // 0x60 '`' - {5427, 24, 27, 26, 1, -25}, // 0x61 'a' - {5508, 22, 35, 26, 3, -33}, // 0x62 'b' - {5605, 21, 27, 24, 1, -25}, // 0x63 'c' - {5676, 23, 35, 26, 1, -33}, // 0x64 'd' - {5777, 22, 27, 25, 1, -25}, // 0x65 'e' - {5852, 10, 34, 13, 1, -33}, // 0x66 'f' - {5895, 22, 36, 26, 1, -25}, // 0x67 'g' - {5994, 19, 34, 25, 3, -33}, // 0x68 'h' - {6075, 4, 34, 10, 3, -33}, // 0x69 'i' - {6092, 8, 44, 11, 0, -33}, // 0x6A 'j' - {6136, 21, 34, 24, 3, -33}, // 0x6B 'k' - {6226, 4, 34, 10, 3, -33}, // 0x6C 'l' - {6243, 32, 26, 38, 3, -25}, // 0x6D 'm' - {6347, 20, 26, 25, 3, -25}, // 0x6E 'n' - {6412, 23, 27, 25, 1, -25}, // 0x6F 'o' - {6490, 22, 35, 26, 3, -25}, // 0x70 'p' - {6587, 23, 35, 26, 1, -25}, // 0x71 'q' - {6688, 12, 26, 16, 3, -25}, // 0x72 'r' - {6727, 20, 27, 23, 1, -25}, // 0x73 's' - {6795, 10, 32, 13, 1, -30}, // 0x74 't' - {6835, 20, 26, 25, 3, -24}, // 0x75 'u' - {6900, 23, 25, 23, 0, -24}, // 0x76 'v' - {6972, 34, 25, 34, 0, -24}, // 0x77 'w' - {7079, 22, 25, 22, 0, -24}, // 0x78 'x' - {7148, 22, 35, 22, 0, -24}, // 0x79 'y' - {7245, 20, 25, 23, 1, -24}, // 0x7A 'z' - {7308, 11, 44, 16, 2, -33}, // 0x7B '{' - {7369, 3, 44, 12, 4, -33}, // 0x7C '|' - {7386, 11, 44, 16, 2, -33}, // 0x7D '}' - {7447, 19, 7, 24, 2, -19}}; // 0x7E '~' - -const GFXfont FreeSans24pt7b PROGMEM = {(uint8_t *)FreeSans24pt7bBitmaps, - (GFXglyph *)FreeSans24pt7bGlyphs, 0x20, - 0x7E, 56}; - -// Approx. 8136 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans9pt7b.h deleted file mode 100644 index 91c33b0..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSans9pt7b.h +++ /dev/null @@ -1,203 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSans9pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xF8, 0xC0, 0xDE, 0xF7, 0x20, 0x09, 0x86, 0x41, 0x91, 0xFF, - 0x13, 0x04, 0xC3, 0x20, 0xC8, 0xFF, 0x89, 0x82, 0x61, 0x90, 0x10, 0x1F, - 0x14, 0xDA, 0x3D, 0x1E, 0x83, 0x40, 0x78, 0x17, 0x08, 0xF4, 0x7A, 0x35, - 0x33, 0xF0, 0x40, 0x20, 0x38, 0x10, 0xEC, 0x20, 0xC6, 0x20, 0xC6, 0x40, - 0xC6, 0x40, 0x6C, 0x80, 0x39, 0x00, 0x01, 0x3C, 0x02, 0x77, 0x02, 0x63, - 0x04, 0x63, 0x04, 0x77, 0x08, 0x3C, 0x0E, 0x06, 0x60, 0xCC, 0x19, 0x81, - 0xE0, 0x18, 0x0F, 0x03, 0x36, 0xC2, 0xD8, 0x73, 0x06, 0x31, 0xE3, 0xC4, - 0xFE, 0x13, 0x26, 0x6C, 0xCC, 0xCC, 0xC4, 0x66, 0x23, 0x10, 0x8C, 0x46, - 0x63, 0x33, 0x33, 0x32, 0x66, 0x4C, 0x80, 0x25, 0x7E, 0xA5, 0x00, 0x30, - 0xC3, 0x3F, 0x30, 0xC3, 0x0C, 0xD6, 0xF0, 0xC0, 0x08, 0x44, 0x21, 0x10, - 0x84, 0x42, 0x11, 0x08, 0x00, 0x3C, 0x66, 0x42, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0x42, 0x66, 0x3C, 0x11, 0x3F, 0x33, 0x33, 0x33, 0x33, - 0x30, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18, - 0x10, 0x08, 0x07, 0xF8, 0x3C, 0x66, 0xC3, 0xC3, 0x03, 0x06, 0x1C, 0x07, - 0x03, 0xC3, 0xC3, 0x66, 0x3C, 0x0C, 0x18, 0x71, 0x62, 0xC9, 0xA3, 0x46, - 0xFE, 0x18, 0x30, 0x60, 0xC0, 0x7F, 0x20, 0x10, 0x08, 0x08, 0x07, 0xF3, - 0x8C, 0x03, 0x01, 0x80, 0xF0, 0x6C, 0x63, 0xE0, 0x1E, 0x31, 0x98, 0x78, - 0x0C, 0x06, 0xF3, 0x8D, 0x83, 0xC1, 0xE0, 0xD0, 0x6C, 0x63, 0xE0, 0xFF, - 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30, - 0x3E, 0x31, 0xB0, 0x78, 0x3C, 0x1B, 0x18, 0xF8, 0xC6, 0xC1, 0xE0, 0xF0, - 0x6C, 0x63, 0xE0, 0x3C, 0x66, 0xC2, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x03, - 0x03, 0xC2, 0x66, 0x3C, 0xC0, 0x00, 0x30, 0xC0, 0x00, 0x00, 0x64, 0xA0, - 0x00, 0x81, 0xC7, 0x8E, 0x0C, 0x07, 0x80, 0x70, 0x0E, 0x01, 0x80, 0xFF, - 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x70, 0x0E, 0x01, 0xC0, 0x18, 0x38, 0x71, - 0xC0, 0x80, 0x00, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x18, 0x38, 0x18, - 0x18, 0x0C, 0x00, 0x00, 0x01, 0x80, 0x03, 0xF0, 0x06, 0x0E, 0x06, 0x01, - 0x86, 0x00, 0x66, 0x1D, 0xBB, 0x31, 0xCF, 0x18, 0xC7, 0x98, 0x63, 0xCC, - 0x31, 0xE6, 0x11, 0xB3, 0x99, 0xCC, 0xF7, 0x86, 0x00, 0x01, 0x80, 0x00, - 0x70, 0x40, 0x0F, 0xE0, 0x06, 0x00, 0xF0, 0x0F, 0x00, 0x90, 0x19, 0x81, - 0x98, 0x10, 0x83, 0x0C, 0x3F, 0xC2, 0x04, 0x60, 0x66, 0x06, 0xC0, 0x30, - 0xFF, 0x18, 0x33, 0x03, 0x60, 0x6C, 0x0D, 0x83, 0x3F, 0xC6, 0x06, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x6F, 0xF8, 0x1F, 0x86, 0x19, 0x81, 0xA0, 0x3C, - 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x68, 0x0D, 0x83, 0x18, 0x61, 0xF0, - 0xFF, 0x18, 0x33, 0x03, 0x60, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, - 0x78, 0x0F, 0x03, 0x60, 0xCF, 0xF0, 0xFF, 0xE0, 0x30, 0x18, 0x0C, 0x06, - 0x03, 0xFD, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xF8, 0xFF, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x0F, 0x83, - 0x0E, 0x60, 0x66, 0x03, 0xC0, 0x0C, 0x00, 0xC1, 0xFC, 0x03, 0xC0, 0x36, - 0x03, 0x60, 0x73, 0x0F, 0x0F, 0x10, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xFF, 0xFE, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x06, - 0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x07, - 0x8F, 0x1E, 0x27, 0x80, 0xC0, 0xD8, 0x33, 0x0C, 0x63, 0x0C, 0xC1, 0xB8, - 0x3F, 0x07, 0x30, 0xC3, 0x18, 0x63, 0x06, 0x60, 0x6C, 0x0C, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xE0, - 0x3F, 0x01, 0xFC, 0x1F, 0xE0, 0xFD, 0x05, 0xEC, 0x6F, 0x63, 0x79, 0x13, - 0xCD, 0x9E, 0x6C, 0xF1, 0x47, 0x8E, 0x3C, 0x71, 0x80, 0xE0, 0x7C, 0x0F, - 0xC1, 0xE8, 0x3D, 0x87, 0x98, 0xF1, 0x1E, 0x33, 0xC3, 0x78, 0x6F, 0x07, - 0xE0, 0x7C, 0x0E, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0, 0x6C, 0x01, 0xE0, - 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x0C, 0x60, 0xC0, 0xF8, - 0x00, 0xFF, 0x30, 0x6C, 0x0F, 0x03, 0xC0, 0xF0, 0x6F, 0xF3, 0x00, 0xC0, - 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0, - 0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x6C, - 0x60, 0xC0, 0xFB, 0x00, 0x08, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0, - 0x6C, 0x0C, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xC0, - 0x70, 0x3F, 0x18, 0x6C, 0x0F, 0x03, 0xC0, 0x1E, 0x01, 0xF0, 0x0E, 0x00, - 0xF0, 0x3C, 0x0D, 0x86, 0x3F, 0x00, 0xFF, 0x86, 0x03, 0x01, 0x80, 0xC0, - 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x78, 0x0F, - 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, - 0xB0, 0x61, 0xF0, 0xC0, 0x6C, 0x0D, 0x81, 0x10, 0x63, 0x0C, 0x61, 0x04, - 0x60, 0xCC, 0x19, 0x01, 0x60, 0x3C, 0x07, 0x00, 0x60, 0xC1, 0x81, 0x30, - 0xE1, 0x98, 0x70, 0xCC, 0x28, 0x66, 0x26, 0x21, 0x13, 0x30, 0xC8, 0x98, - 0x6C, 0x4C, 0x14, 0x34, 0x0A, 0x1A, 0x07, 0x07, 0x03, 0x03, 0x80, 0x81, - 0x80, 0x60, 0x63, 0x0C, 0x30, 0xC1, 0x98, 0x0F, 0x00, 0xE0, 0x06, 0x00, - 0xF0, 0x19, 0x01, 0x98, 0x30, 0xC6, 0x0E, 0x60, 0x60, 0xC0, 0x36, 0x06, - 0x30, 0xC3, 0x0C, 0x19, 0x81, 0xD8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x0C, 0x06, 0x03, - 0x01, 0xC0, 0x60, 0x30, 0x18, 0x06, 0x03, 0x00, 0xFF, 0xC0, 0xFB, 0x6D, - 0xB6, 0xDB, 0x6D, 0xB6, 0xE0, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x84, - 0x10, 0x80, 0xED, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0xE0, 0x30, 0x60, 0xA2, - 0x44, 0xD8, 0xA1, 0x80, 0xFF, 0xC0, 0xC6, 0x30, 0x7E, 0x71, 0xB0, 0xC0, - 0x60, 0xF3, 0xDB, 0x0D, 0x86, 0xC7, 0x3D, 0xC0, 0xC0, 0x60, 0x30, 0x1B, - 0xCE, 0x36, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE0, 0x3C, - 0x66, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x03, 0x03, 0x03, - 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x3C, 0x66, - 0xC3, 0xC3, 0xFF, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x36, 0x6F, 0x66, 0x66, - 0x66, 0x66, 0x60, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, - 0x3B, 0x03, 0x03, 0xC6, 0x7C, 0xC0, 0xC0, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC0, 0x30, 0x03, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xE0, 0xC0, 0x60, 0x30, 0x18, 0x4C, - 0x46, 0x63, 0x61, 0xF0, 0xEC, 0x62, 0x31, 0x98, 0x6C, 0x30, 0xFF, 0xFF, - 0xFF, 0xC0, 0xDE, 0xF7, 0x1C, 0xF0, 0xC7, 0x86, 0x3C, 0x31, 0xE1, 0x8F, - 0x0C, 0x78, 0x63, 0xC3, 0x1E, 0x18, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0x66, 0x3C, 0xDE, 0x71, 0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, - 0xE3, 0x6F, 0x30, 0x18, 0x0C, 0x00, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0x67, 0x3B, 0x03, 0x03, 0x03, 0xDF, 0x31, 0x8C, 0x63, 0x18, - 0xC6, 0x00, 0x3E, 0xE3, 0xC0, 0xC0, 0xE0, 0x3C, 0x07, 0xC3, 0xE3, 0x7E, - 0x66, 0xF6, 0x66, 0x66, 0x66, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC7, 0x7B, 0xC1, 0xA0, 0x98, 0xCC, 0x42, 0x21, 0xB0, 0xD0, - 0x28, 0x1C, 0x0C, 0x00, 0xC6, 0x1E, 0x38, 0x91, 0xC4, 0xCA, 0x66, 0xD3, - 0x16, 0xD0, 0xA6, 0x87, 0x1C, 0x38, 0xC0, 0xC6, 0x00, 0x43, 0x62, 0x36, - 0x1C, 0x18, 0x1C, 0x3C, 0x26, 0x62, 0x43, 0xC1, 0x21, 0x98, 0xCC, 0x42, - 0x61, 0xB0, 0xD0, 0x38, 0x1C, 0x0C, 0x06, 0x03, 0x01, 0x03, 0x00, 0xFE, - 0x0C, 0x30, 0xC1, 0x86, 0x18, 0x20, 0xC1, 0xFC, 0x36, 0x66, 0x66, 0x6E, - 0xCE, 0x66, 0x66, 0x66, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC6, 0x66, - 0x66, 0x67, 0x37, 0x66, 0x66, 0x66, 0xC0, 0x61, 0x24, 0x38}; - -const GFXglyph FreeSans9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 2, 13, 6, 2, -12}, // 0x21 '!' - {4, 5, 4, 6, 1, -12}, // 0x22 '"' - {7, 10, 12, 10, 0, -11}, // 0x23 '#' - {22, 9, 16, 10, 1, -13}, // 0x24 '$' - {40, 16, 13, 16, 1, -12}, // 0x25 '%' - {66, 11, 13, 12, 1, -12}, // 0x26 '&' - {84, 2, 4, 4, 1, -12}, // 0x27 ''' - {85, 4, 17, 6, 1, -12}, // 0x28 '(' - {94, 4, 17, 6, 1, -12}, // 0x29 ')' - {103, 5, 5, 7, 1, -12}, // 0x2A '*' - {107, 6, 8, 11, 3, -7}, // 0x2B '+' - {113, 2, 4, 5, 2, 0}, // 0x2C ',' - {114, 4, 1, 6, 1, -4}, // 0x2D '-' - {115, 2, 1, 5, 1, 0}, // 0x2E '.' - {116, 5, 13, 5, 0, -12}, // 0x2F '/' - {125, 8, 13, 10, 1, -12}, // 0x30 '0' - {138, 4, 13, 10, 3, -12}, // 0x31 '1' - {145, 9, 13, 10, 1, -12}, // 0x32 '2' - {160, 8, 13, 10, 1, -12}, // 0x33 '3' - {173, 7, 13, 10, 2, -12}, // 0x34 '4' - {185, 9, 13, 10, 1, -12}, // 0x35 '5' - {200, 9, 13, 10, 1, -12}, // 0x36 '6' - {215, 8, 13, 10, 0, -12}, // 0x37 '7' - {228, 9, 13, 10, 1, -12}, // 0x38 '8' - {243, 8, 13, 10, 1, -12}, // 0x39 '9' - {256, 2, 10, 5, 1, -9}, // 0x3A ':' - {259, 3, 12, 5, 1, -8}, // 0x3B ';' - {264, 9, 9, 11, 1, -8}, // 0x3C '<' - {275, 9, 4, 11, 1, -5}, // 0x3D '=' - {280, 9, 9, 11, 1, -8}, // 0x3E '>' - {291, 9, 13, 10, 1, -12}, // 0x3F '?' - {306, 17, 16, 18, 1, -12}, // 0x40 '@' - {340, 12, 13, 12, 0, -12}, // 0x41 'A' - {360, 11, 13, 12, 1, -12}, // 0x42 'B' - {378, 11, 13, 13, 1, -12}, // 0x43 'C' - {396, 11, 13, 13, 1, -12}, // 0x44 'D' - {414, 9, 13, 11, 1, -12}, // 0x45 'E' - {429, 8, 13, 11, 1, -12}, // 0x46 'F' - {442, 12, 13, 14, 1, -12}, // 0x47 'G' - {462, 11, 13, 13, 1, -12}, // 0x48 'H' - {480, 2, 13, 5, 2, -12}, // 0x49 'I' - {484, 7, 13, 10, 1, -12}, // 0x4A 'J' - {496, 11, 13, 12, 1, -12}, // 0x4B 'K' - {514, 8, 13, 10, 1, -12}, // 0x4C 'L' - {527, 13, 13, 15, 1, -12}, // 0x4D 'M' - {549, 11, 13, 13, 1, -12}, // 0x4E 'N' - {567, 13, 13, 14, 1, -12}, // 0x4F 'O' - {589, 10, 13, 12, 1, -12}, // 0x50 'P' - {606, 13, 14, 14, 1, -12}, // 0x51 'Q' - {629, 12, 13, 13, 1, -12}, // 0x52 'R' - {649, 10, 13, 12, 1, -12}, // 0x53 'S' - {666, 9, 13, 11, 1, -12}, // 0x54 'T' - {681, 11, 13, 13, 1, -12}, // 0x55 'U' - {699, 11, 13, 12, 0, -12}, // 0x56 'V' - {717, 17, 13, 17, 0, -12}, // 0x57 'W' - {745, 12, 13, 12, 0, -12}, // 0x58 'X' - {765, 12, 13, 12, 0, -12}, // 0x59 'Y' - {785, 10, 13, 11, 1, -12}, // 0x5A 'Z' - {802, 3, 17, 5, 1, -12}, // 0x5B '[' - {809, 5, 13, 5, 0, -12}, // 0x5C '\' - {818, 3, 17, 5, 0, -12}, // 0x5D ']' - {825, 7, 7, 8, 1, -12}, // 0x5E '^' - {832, 10, 1, 10, 0, 3}, // 0x5F '_' - {834, 4, 3, 5, 0, -12}, // 0x60 '`' - {836, 9, 10, 10, 1, -9}, // 0x61 'a' - {848, 9, 13, 10, 1, -12}, // 0x62 'b' - {863, 8, 10, 9, 1, -9}, // 0x63 'c' - {873, 8, 13, 10, 1, -12}, // 0x64 'd' - {886, 8, 10, 10, 1, -9}, // 0x65 'e' - {896, 4, 13, 5, 1, -12}, // 0x66 'f' - {903, 8, 14, 10, 1, -9}, // 0x67 'g' - {917, 8, 13, 10, 1, -12}, // 0x68 'h' - {930, 2, 13, 4, 1, -12}, // 0x69 'i' - {934, 4, 17, 4, 0, -12}, // 0x6A 'j' - {943, 9, 13, 9, 1, -12}, // 0x6B 'k' - {958, 2, 13, 4, 1, -12}, // 0x6C 'l' - {962, 13, 10, 15, 1, -9}, // 0x6D 'm' - {979, 8, 10, 10, 1, -9}, // 0x6E 'n' - {989, 8, 10, 10, 1, -9}, // 0x6F 'o' - {999, 9, 13, 10, 1, -9}, // 0x70 'p' - {1014, 8, 13, 10, 1, -9}, // 0x71 'q' - {1027, 5, 10, 6, 1, -9}, // 0x72 'r' - {1034, 8, 10, 9, 1, -9}, // 0x73 's' - {1044, 4, 12, 5, 1, -11}, // 0x74 't' - {1050, 8, 10, 10, 1, -9}, // 0x75 'u' - {1060, 9, 10, 9, 0, -9}, // 0x76 'v' - {1072, 13, 10, 13, 0, -9}, // 0x77 'w' - {1089, 8, 10, 9, 0, -9}, // 0x78 'x' - {1099, 9, 14, 9, 0, -9}, // 0x79 'y' - {1115, 7, 10, 9, 1, -9}, // 0x7A 'z' - {1124, 4, 17, 6, 1, -12}, // 0x7B '{' - {1133, 2, 17, 4, 2, -12}, // 0x7C '|' - {1138, 4, 17, 6, 1, -12}, // 0x7D '}' - {1147, 7, 3, 9, 1, -7}}; // 0x7E '~' - -const GFXfont FreeSans9pt7b PROGMEM = {(uint8_t *)FreeSans9pt7bBitmaps, - (GFXglyph *)FreeSans9pt7bGlyphs, 0x20, - 0x7E, 22}; - -// Approx. 1822 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold12pt7b.h deleted file mode 100644 index c1d6ef4..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold12pt7b.h +++ /dev/null @@ -1,290 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBold12pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x60, 0xFF, 0xF0, 0xF3, 0xFC, 0xFF, - 0x3F, 0xCF, 0x61, 0x98, 0x60, 0x0E, 0x70, 0x73, 0x83, 0x18, 0xFF, 0xF7, - 0xFF, 0xBF, 0xFC, 0x73, 0x83, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFD, 0xFF, - 0xE3, 0x18, 0x39, 0xC1, 0xCE, 0x0E, 0x70, 0x02, 0x00, 0x7E, 0x0F, 0xF8, - 0x7F, 0xE7, 0xAF, 0xB9, 0x3D, 0xC8, 0x0F, 0x40, 0x3F, 0x00, 0xFF, 0x00, - 0xFC, 0x05, 0xFF, 0x27, 0xF9, 0x3F, 0xEB, 0xEF, 0xFE, 0x3F, 0xE0, 0x7C, - 0x00, 0x80, 0x04, 0x00, 0x3C, 0x06, 0x0F, 0xC1, 0x81, 0xFC, 0x30, 0x73, - 0x8C, 0x0C, 0x31, 0x81, 0xCE, 0x60, 0x1F, 0xCC, 0x03, 0xF3, 0x00, 0x3C, - 0x67, 0x80, 0x19, 0xF8, 0x02, 0x7F, 0x80, 0xCE, 0x70, 0x11, 0x86, 0x06, - 0x39, 0xC1, 0x87, 0xF8, 0x30, 0x7E, 0x0C, 0x07, 0x80, 0x07, 0x80, 0x1F, - 0xC0, 0x3F, 0xE0, 0x3C, 0xE0, 0x3C, 0xE0, 0x3E, 0xE0, 0x0F, 0xC0, 0x07, - 0x00, 0x3F, 0x8C, 0x7F, 0xCC, 0xF1, 0xFC, 0xF0, 0xF8, 0xF0, 0x78, 0xF8, - 0xF8, 0x7F, 0xFC, 0x3F, 0xDE, 0x1F, 0x8E, 0xFF, 0xFF, 0x66, 0x0C, 0x73, - 0x8E, 0x71, 0xC7, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x1C, 0x71, 0xC3, - 0x8E, 0x18, 0x70, 0xC3, 0x87, 0x1C, 0x38, 0xE3, 0x87, 0x1C, 0x71, 0xC7, - 0x1C, 0x71, 0xCE, 0x38, 0xE7, 0x1C, 0x63, 0x80, 0x10, 0x23, 0x5F, 0xF3, - 0x87, 0x1B, 0x14, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, - 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0xFF, 0xF3, 0x36, 0xC0, 0xFF, - 0xFF, 0xC0, 0xFF, 0xF0, 0x0C, 0x30, 0x86, 0x18, 0x61, 0x0C, 0x30, 0xC2, - 0x18, 0x61, 0x84, 0x30, 0xC0, 0x1F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, - 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, - 0xF7, 0x9E, 0x7F, 0xE3, 0xFC, 0x0F, 0x00, 0x06, 0x1C, 0x7F, 0xFF, 0xE3, - 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x1F, 0x83, - 0xFC, 0x7F, 0xEF, 0x9F, 0xF0, 0xFF, 0x0F, 0x00, 0xF0, 0x0F, 0x01, 0xE0, - 0x3C, 0x0F, 0x81, 0xE0, 0x3C, 0x03, 0x80, 0x7F, 0xF7, 0xFF, 0x7F, 0xF0, - 0x1F, 0x07, 0xFC, 0xFF, 0xEF, 0x1E, 0xF1, 0xE0, 0x1E, 0x03, 0xC0, 0x78, - 0x07, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xF0, 0xFF, 0x1F, 0x7F, 0xE7, 0xFC, - 0x1F, 0x80, 0x03, 0xC0, 0xF8, 0x1F, 0x07, 0xE1, 0xBC, 0x27, 0x8C, 0xF3, - 0x1E, 0x63, 0xD8, 0x7B, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x80, 0xF0, 0x1E, - 0x03, 0xC0, 0x3F, 0xE7, 0xFE, 0x7F, 0xE7, 0x00, 0x60, 0x06, 0xF8, 0x7F, - 0xCF, 0xFE, 0xF1, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFE, 0x1E, 0xFF, - 0xE7, 0xFC, 0x3F, 0x00, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9F, 0xF0, 0x0F, - 0x78, 0xFF, 0xCF, 0xFE, 0xF9, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xF7, - 0x9F, 0x7F, 0xE3, 0xFC, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, - 0x1C, 0x07, 0x01, 0xE0, 0x38, 0x0F, 0x01, 0xC0, 0x78, 0x0F, 0x01, 0xE0, - 0x38, 0x0F, 0x01, 0xE0, 0x3C, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xC7, 0x9E, - 0x70, 0xE7, 0x0E, 0x39, 0xC1, 0xF8, 0x3F, 0xC7, 0x9E, 0xF0, 0xFF, 0x0F, - 0xF0, 0xFF, 0x9F, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0x1F, 0x03, 0xFC, 0x7F, - 0xEF, 0x9E, 0xF0, 0xEF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF9, 0xF7, 0xFF, 0x3F, - 0xF1, 0xEF, 0x00, 0xEF, 0x1E, 0x7F, 0xE7, 0xFC, 0x1F, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0x11, 0x6C, - 0x00, 0x10, 0x07, 0x03, 0xF1, 0xFC, 0x7E, 0x0F, 0x80, 0xE0, 0x0F, 0xC0, - 0x3F, 0x80, 0x7F, 0x00, 0xF0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0E, 0x00, 0xFC, - 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0x00, 0xF0, 0x7F, 0x1F, 0x8F, 0xE0, 0xF0, - 0x08, 0x00, 0x1F, 0x07, 0xFC, 0x7F, 0xEF, 0x9F, 0xF0, 0xFF, 0x0F, 0x00, - 0xF0, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x0E, 0x00, 0xE0, 0x00, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xFC, 0x03, 0xC0, - 0xF0, 0x38, 0x01, 0xC3, 0x80, 0x07, 0x18, 0x3D, 0x99, 0x87, 0xEC, 0x6C, - 0x71, 0xC3, 0xC3, 0x06, 0x1E, 0x18, 0x30, 0xF1, 0x81, 0x87, 0x8C, 0x18, - 0x7C, 0x60, 0xC3, 0x63, 0x8E, 0x3B, 0x8F, 0xDF, 0x8C, 0x3C, 0xF0, 0x70, - 0x00, 0x01, 0xC0, 0x00, 0x07, 0x80, 0x80, 0x1F, 0xFE, 0x00, 0x1F, 0xC0, - 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xF0, 0x07, 0xF0, 0x07, - 0x70, 0x0F, 0x78, 0x0E, 0x78, 0x0E, 0x38, 0x1E, 0x3C, 0x1C, 0x3C, 0x3F, - 0xFC, 0x3F, 0xFE, 0x3F, 0xFE, 0x78, 0x0E, 0x78, 0x0F, 0x70, 0x0F, 0xF0, - 0x07, 0xFF, 0xC3, 0xFF, 0xCF, 0xFF, 0x3C, 0x3E, 0xF0, 0x7B, 0xC1, 0xEF, - 0x0F, 0xBF, 0xFC, 0xFF, 0xE3, 0xFF, 0xCF, 0x07, 0xBC, 0x0F, 0xF0, 0x3F, - 0xC0, 0xFF, 0x07, 0xFF, 0xFE, 0xFF, 0xFB, 0xFF, 0x80, 0x07, 0xE0, 0x1F, - 0xF8, 0x3F, 0xFC, 0x7C, 0x3E, 0x78, 0x1F, 0xF8, 0x0F, 0xF0, 0x00, 0xF0, - 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x0F, 0x78, - 0x1F, 0x7C, 0x3E, 0x3F, 0xFE, 0x1F, 0xFC, 0x07, 0xF0, 0xFF, 0xE1, 0xFF, - 0xE3, 0xFF, 0xE7, 0x83, 0xEF, 0x03, 0xDE, 0x07, 0xFC, 0x07, 0xF8, 0x0F, - 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x03, 0xFE, 0x07, 0xBC, - 0x1F, 0x7F, 0xFC, 0xFF, 0xF1, 0xFF, 0x80, 0xFF, 0xF7, 0xFF, 0xBF, 0xFD, - 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0xFC, 0xFF, 0xE7, 0xFF, 0x3C, - 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0x03, 0xF0, 0x0F, 0xFC, 0x3F, 0xFE, 0x3E, 0x1F, - 0x78, 0x07, 0x78, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x7F, 0xF0, 0x7F, - 0xF0, 0x7F, 0xF0, 0x07, 0x78, 0x07, 0x7C, 0x0F, 0x3E, 0x1F, 0x3F, 0xFB, - 0x0F, 0xFB, 0x03, 0xE3, 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, 0x3F, 0xC0, 0xF0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, - 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7B, 0xFE, 0x7F, 0xC3, 0xE0, 0xF0, 0x3E, - 0xF0, 0x3C, 0xF0, 0x78, 0xF0, 0xF0, 0xF1, 0xE0, 0xF3, 0xC0, 0xF7, 0x80, - 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0xFB, 0xC0, 0xF1, 0xE0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0x78, 0xF0, 0x3C, 0xF0, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, - 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, - 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, - 0x1F, 0xFE, 0x0F, 0xFF, 0x0F, 0xFF, 0x87, 0xFF, 0xC3, 0xFF, 0xE1, 0xFF, - 0xF9, 0xFF, 0xFC, 0xEF, 0xFE, 0x77, 0xFB, 0x3B, 0xFD, 0xDD, 0xFE, 0xFC, - 0xFF, 0x7E, 0x7F, 0x9F, 0x3F, 0xCF, 0x9F, 0xE7, 0x8F, 0xF3, 0xC7, 0xF8, - 0xE3, 0xC0, 0xF0, 0x1F, 0xF0, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xE1, 0xFF, - 0xC3, 0xFD, 0xC7, 0xFB, 0x8F, 0xF3, 0x9F, 0xE7, 0x3F, 0xC7, 0x7F, 0x8F, - 0xFF, 0x0F, 0xFE, 0x1F, 0xFC, 0x1F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x3C, - 0x03, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x87, 0xC7, 0xC7, 0x80, 0xF3, 0xC0, - 0x7B, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x01, 0xFE, - 0x00, 0xF7, 0x80, 0xF3, 0xC0, 0x78, 0xF0, 0xF8, 0x7F, 0xFC, 0x1F, 0xFC, - 0x03, 0xF8, 0x00, 0xFF, 0xE3, 0xFF, 0xEF, 0xFF, 0xBC, 0x1F, 0xF0, 0x3F, - 0xC0, 0xFF, 0x03, 0xFC, 0x1F, 0xFF, 0xFB, 0xFF, 0xCF, 0xFE, 0x3C, 0x00, - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x00, 0x03, - 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x87, 0xC7, 0xC7, 0x80, 0xF3, 0xC0, 0x7B, - 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x04, - 0xF7, 0x87, 0xF3, 0xC3, 0xF8, 0xF0, 0xF8, 0x7F, 0xFC, 0x1F, 0xFF, 0x83, - 0xF1, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, 0xFC, 0xF0, 0x3E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x3C, 0xFF, 0xF8, 0xFF, 0xF0, - 0xFF, 0xF8, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x3C, - 0xF0, 0x3C, 0xF0, 0x1F, 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE7, 0xC3, 0xEF, - 0x03, 0xDE, 0x00, 0x3C, 0x00, 0x7F, 0x00, 0x7F, 0xF0, 0x3F, 0xF8, 0x0F, - 0xF8, 0x01, 0xF0, 0x01, 0xFE, 0x03, 0xDE, 0x0F, 0xBF, 0xFE, 0x3F, 0xF8, - 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, - 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, - 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, 0x3F, - 0x00, 0x70, 0x0E, 0xF0, 0x3D, 0xE0, 0x79, 0xC0, 0xE3, 0x81, 0xC7, 0x87, - 0x87, 0x0E, 0x0E, 0x1C, 0x1E, 0x78, 0x1C, 0xE0, 0x39, 0xC0, 0x73, 0x80, - 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x70, - 0x38, 0x1C, 0xE0, 0xF0, 0x79, 0xE1, 0xF0, 0xF3, 0xC3, 0xE1, 0xE3, 0x87, - 0xC3, 0x87, 0x0F, 0x87, 0x0E, 0x3B, 0x9E, 0x1E, 0x77, 0x38, 0x1C, 0xEE, - 0x70, 0x39, 0xCC, 0xE0, 0x73, 0x99, 0xC0, 0x6E, 0x3F, 0x00, 0xFC, 0x7E, - 0x01, 0xF8, 0xFC, 0x03, 0xF0, 0xF8, 0x03, 0xE1, 0xE0, 0x07, 0x83, 0xC0, - 0x0F, 0x07, 0x80, 0xF0, 0x3C, 0xF0, 0xF9, 0xE1, 0xE1, 0xE7, 0x83, 0xCF, - 0x03, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0x80, 0x0F, 0x00, 0x3F, 0x00, - 0xFF, 0x01, 0xFE, 0x07, 0x9E, 0x0F, 0x1E, 0x3C, 0x3C, 0xF8, 0x3D, 0xE0, - 0x78, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3C, 0x3C, 0x3C, 0x3C, 0x78, 0x1E, - 0x78, 0x0E, 0x70, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x03, - 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, - 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF8, 0x07, 0x80, 0x78, 0x07, 0x80, 0x7C, 0x03, 0xC0, 0x3C, 0x03, - 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0xF3, 0xCF, - 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xFF, 0xFF, - 0xC0, 0xC1, 0x81, 0x03, 0x06, 0x04, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x40, - 0xC1, 0x81, 0x03, 0x06, 0xFF, 0xFF, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, - 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0xFF, 0xFF, 0xC0, 0x0F, 0x00, - 0xF0, 0x0F, 0x01, 0xF8, 0x1B, 0x83, 0x9C, 0x39, 0xC3, 0x0C, 0x70, 0xE7, - 0x0E, 0xE0, 0x70, 0xFF, 0xFF, 0xFF, 0xFC, 0xE6, 0x30, 0x1F, 0x83, 0xFF, - 0x1F, 0xFD, 0xE1, 0xE0, 0x0F, 0x03, 0xF9, 0xFF, 0xDF, 0x1E, 0xF0, 0xF7, - 0x8F, 0xBF, 0xFC, 0xFF, 0xE3, 0xCF, 0x80, 0xF0, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x7B, 0xC3, 0xFF, 0x9F, 0xFE, 0xF8, 0xF7, 0x83, 0xFC, - 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xE3, 0xDF, 0xFE, 0xFF, 0xE7, 0xBE, - 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x8F, 0xF0, 0x7F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x77, 0x8F, 0x7F, 0xF3, 0xFE, 0x0F, 0x80, 0x00, 0x78, 0x03, - 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x8F, 0xBC, 0xFF, 0xEF, 0xFF, 0x78, 0xFF, - 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3D, 0xE3, 0xEF, 0xFF, 0x3F, - 0xF8, 0xFB, 0xC0, 0x1F, 0x81, 0xFE, 0x1F, 0xF9, 0xF1, 0xCF, 0x07, 0x7F, - 0xFB, 0xFF, 0xDE, 0x00, 0xF0, 0x03, 0xC3, 0x9F, 0xFC, 0x7F, 0xC0, 0xF8, - 0x00, 0x3E, 0xFD, 0xFB, 0xC7, 0x9F, 0xBF, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, - 0x8F, 0x1E, 0x3C, 0x78, 0xF0, 0x1E, 0x79, 0xFB, 0xDF, 0xFE, 0xF1, 0xFF, - 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0xC7, 0xDF, 0xFE, 0x7F, - 0xF1, 0xF7, 0x80, 0x3C, 0x01, 0xFF, 0x1E, 0x7F, 0xF0, 0xFE, 0x00, 0xF0, - 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x7C, 0xFF, 0xEF, 0xFF, 0xF9, - 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, - 0xFF, 0x0F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, - 0xF3, 0xC0, 0x00, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, - 0xF3, 0xCF, 0xFF, 0xFF, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, - 0x0F, 0x0F, 0xF1, 0xEF, 0x3C, 0xF7, 0x8F, 0xF0, 0xFF, 0x0F, 0xF8, 0xFF, - 0x8F, 0x3C, 0xF1, 0xCF, 0x1E, 0xF0, 0xEF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x8F, 0x9F, 0xFB, 0xFB, 0xFF, 0xFF, - 0xFC, 0xF8, 0xFF, 0x1E, 0x1F, 0xE3, 0xC3, 0xFC, 0x78, 0x7F, 0x8F, 0x0F, - 0xF1, 0xE1, 0xFE, 0x3C, 0x3F, 0xC7, 0x87, 0xF8, 0xF0, 0xFF, 0x1E, 0x1E, - 0xF7, 0xCF, 0xFE, 0xFF, 0xFF, 0x9F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, - 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xF0, 0x0F, 0x81, 0xFF, 0x1F, - 0xFC, 0xF1, 0xEF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7B, 0xC7, - 0x9F, 0xFC, 0x7F, 0xC0, 0xF8, 0x00, 0xF7, 0xC7, 0xFF, 0x3F, 0xFD, 0xF1, - 0xEF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0xC7, 0xBF, 0xFD, - 0xFF, 0xCF, 0x78, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x00, - 0x0F, 0x79, 0xFF, 0xDF, 0xFE, 0xF1, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, - 0x0F, 0xF0, 0x7B, 0xC7, 0xDF, 0xFE, 0x7F, 0xF1, 0xF7, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0xF3, 0xF7, 0xFF, 0xF8, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x1F, 0x87, 0xFC, 0xFF, 0xEF, - 0x0F, 0xF8, 0x0F, 0xF0, 0x7F, 0xE0, 0xFF, 0x01, 0xFF, 0x0F, 0xFF, 0xE7, - 0xFE, 0x1F, 0x80, 0x79, 0xE7, 0xBF, 0xFD, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, - 0x7D, 0xF3, 0xC0, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, - 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x1F, 0xFF, 0xF7, 0xFF, 0x3E, 0xF0, 0xF0, - 0x7B, 0x83, 0x9E, 0x1C, 0xF1, 0xE3, 0x8E, 0x1C, 0x70, 0x77, 0x83, 0xB8, - 0x1D, 0xC0, 0x7E, 0x03, 0xE0, 0x1F, 0x00, 0x70, 0x00, 0xF0, 0xE1, 0xDC, - 0x78, 0x77, 0x1F, 0x3D, 0xE7, 0xCF, 0x79, 0xB3, 0x8E, 0x6C, 0xE3, 0xBB, - 0x38, 0xEE, 0xFC, 0x1F, 0x3F, 0x07, 0xC7, 0xC1, 0xF1, 0xF0, 0x7C, 0x78, - 0x0E, 0x1E, 0x00, 0x78, 0xF3, 0xC7, 0x8F, 0x78, 0x3B, 0x81, 0xFC, 0x07, - 0xC0, 0x1E, 0x01, 0xF0, 0x1F, 0xC0, 0xEF, 0x0F, 0x78, 0xF1, 0xE7, 0x87, - 0x00, 0xF0, 0x7B, 0x83, 0x9E, 0x1C, 0x71, 0xE3, 0x8E, 0x1E, 0x70, 0x73, - 0x83, 0xB8, 0x1F, 0xC0, 0x7E, 0x03, 0xE0, 0x0F, 0x00, 0x70, 0x03, 0x80, - 0x3C, 0x07, 0xC0, 0x3E, 0x01, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, - 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, - 0x1C, 0xF3, 0xCE, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0xBC, 0xF0, 0xE3, 0x8E, - 0x38, 0xE3, 0x8E, 0x3C, 0xF1, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0xE3, 0x8F, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x0F, 0x3D, 0xC7, 0x1C, - 0x71, 0xC7, 0x1C, 0xF3, 0xCE, 0x00, 0x78, 0x0F, 0xE0, 0xCF, 0x30, 0x7F, - 0x01, 0xE0}; - -const GFXglyph FreeSansBold12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 7, 0, 1}, // 0x20 ' ' - {0, 4, 17, 8, 3, -16}, // 0x21 '!' - {9, 10, 6, 11, 1, -17}, // 0x22 '"' - {17, 13, 16, 13, 0, -15}, // 0x23 '#' - {43, 13, 20, 13, 0, -17}, // 0x24 '$' - {76, 19, 17, 21, 1, -16}, // 0x25 '%' - {117, 16, 17, 17, 1, -16}, // 0x26 '&' - {151, 4, 6, 6, 1, -17}, // 0x27 ''' - {154, 6, 22, 8, 1, -17}, // 0x28 '(' - {171, 6, 22, 8, 1, -17}, // 0x29 ')' - {188, 7, 8, 9, 1, -17}, // 0x2A '*' - {195, 11, 11, 14, 2, -10}, // 0x2B '+' - {211, 4, 7, 6, 1, -2}, // 0x2C ',' - {215, 6, 3, 8, 1, -7}, // 0x2D '-' - {218, 4, 3, 6, 1, -2}, // 0x2E '.' - {220, 6, 17, 7, 0, -16}, // 0x2F '/' - {233, 12, 17, 13, 1, -16}, // 0x30 '0' - {259, 7, 17, 14, 3, -16}, // 0x31 '1' - {274, 12, 17, 13, 1, -16}, // 0x32 '2' - {300, 12, 17, 13, 1, -16}, // 0x33 '3' - {326, 11, 17, 13, 1, -16}, // 0x34 '4' - {350, 12, 17, 13, 1, -16}, // 0x35 '5' - {376, 12, 17, 13, 1, -16}, // 0x36 '6' - {402, 11, 17, 13, 1, -16}, // 0x37 '7' - {426, 12, 17, 13, 1, -16}, // 0x38 '8' - {452, 12, 17, 13, 1, -16}, // 0x39 '9' - {478, 4, 12, 6, 1, -11}, // 0x3A ':' - {484, 4, 16, 6, 1, -11}, // 0x3B ';' - {492, 12, 12, 14, 1, -11}, // 0x3C '<' - {510, 12, 9, 14, 1, -9}, // 0x3D '=' - {524, 12, 12, 14, 1, -11}, // 0x3E '>' - {542, 12, 18, 15, 2, -17}, // 0x3F '?' - {569, 21, 21, 23, 1, -17}, // 0x40 '@' - {625, 16, 18, 17, 0, -17}, // 0x41 'A' - {661, 14, 18, 17, 2, -17}, // 0x42 'B' - {693, 16, 18, 17, 1, -17}, // 0x43 'C' - {729, 15, 18, 17, 2, -17}, // 0x44 'D' - {763, 13, 18, 16, 2, -17}, // 0x45 'E' - {793, 12, 18, 15, 2, -17}, // 0x46 'F' - {820, 16, 18, 18, 1, -17}, // 0x47 'G' - {856, 14, 18, 18, 2, -17}, // 0x48 'H' - {888, 4, 18, 7, 2, -17}, // 0x49 'I' - {897, 11, 18, 14, 1, -17}, // 0x4A 'J' - {922, 16, 18, 17, 2, -17}, // 0x4B 'K' - {958, 11, 18, 15, 2, -17}, // 0x4C 'L' - {983, 17, 18, 21, 2, -17}, // 0x4D 'M' - {1022, 15, 18, 18, 2, -17}, // 0x4E 'N' - {1056, 17, 18, 19, 1, -17}, // 0x4F 'O' - {1095, 14, 18, 16, 2, -17}, // 0x50 'P' - {1127, 17, 19, 19, 1, -17}, // 0x51 'Q' - {1168, 16, 18, 17, 2, -17}, // 0x52 'R' - {1204, 15, 18, 16, 1, -17}, // 0x53 'S' - {1238, 12, 18, 15, 2, -17}, // 0x54 'T' - {1265, 14, 18, 18, 2, -17}, // 0x55 'U' - {1297, 15, 18, 16, 0, -17}, // 0x56 'V' - {1331, 23, 18, 23, 0, -17}, // 0x57 'W' - {1383, 15, 18, 16, 1, -17}, // 0x58 'X' - {1417, 16, 18, 15, 0, -17}, // 0x59 'Y' - {1453, 13, 18, 15, 1, -17}, // 0x5A 'Z' - {1483, 6, 23, 8, 2, -17}, // 0x5B '[' - {1501, 7, 17, 7, 0, -16}, // 0x5C '\' - {1516, 6, 23, 8, 0, -17}, // 0x5D ']' - {1534, 12, 11, 14, 1, -16}, // 0x5E '^' - {1551, 15, 2, 13, -1, 4}, // 0x5F '_' - {1555, 4, 3, 6, 0, -17}, // 0x60 '`' - {1557, 13, 13, 14, 1, -12}, // 0x61 'a' - {1579, 13, 18, 15, 2, -17}, // 0x62 'b' - {1609, 12, 13, 13, 1, -12}, // 0x63 'c' - {1629, 13, 18, 15, 1, -17}, // 0x64 'd' - {1659, 13, 13, 14, 1, -12}, // 0x65 'e' - {1681, 7, 18, 8, 1, -17}, // 0x66 'f' - {1697, 13, 18, 15, 1, -12}, // 0x67 'g' - {1727, 12, 18, 14, 2, -17}, // 0x68 'h' - {1754, 4, 18, 7, 2, -17}, // 0x69 'i' - {1763, 6, 23, 7, 0, -17}, // 0x6A 'j' - {1781, 12, 18, 14, 2, -17}, // 0x6B 'k' - {1808, 4, 18, 6, 2, -17}, // 0x6C 'l' - {1817, 19, 13, 21, 2, -12}, // 0x6D 'm' - {1848, 12, 13, 15, 2, -12}, // 0x6E 'n' - {1868, 13, 13, 15, 1, -12}, // 0x6F 'o' - {1890, 13, 18, 15, 2, -12}, // 0x70 'p' - {1920, 13, 18, 15, 1, -12}, // 0x71 'q' - {1950, 8, 13, 9, 2, -12}, // 0x72 'r' - {1963, 12, 13, 13, 1, -12}, // 0x73 's' - {1983, 6, 15, 8, 1, -14}, // 0x74 't' - {1995, 12, 13, 15, 2, -12}, // 0x75 'u' - {2015, 13, 13, 13, 0, -12}, // 0x76 'v' - {2037, 18, 13, 19, 0, -12}, // 0x77 'w' - {2067, 13, 13, 13, 0, -12}, // 0x78 'x' - {2089, 13, 18, 13, 0, -12}, // 0x79 'y' - {2119, 10, 13, 12, 1, -12}, // 0x7A 'z' - {2136, 6, 23, 9, 1, -17}, // 0x7B '{' - {2154, 2, 22, 7, 2, -17}, // 0x7C '|' - {2160, 6, 23, 9, 3, -17}, // 0x7D '}' - {2178, 12, 5, 12, 0, -7}}; // 0x7E '~' - -const GFXfont FreeSansBold12pt7b PROGMEM = { - (uint8_t *)FreeSansBold12pt7bBitmaps, (GFXglyph *)FreeSansBold12pt7bGlyphs, - 0x20, 0x7E, 29}; - -// Approx. 2858 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold18pt7b.h deleted file mode 100644 index f0e2807..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold18pt7b.h +++ /dev/null @@ -1,483 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBold18pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE7, 0x39, 0xCE, 0x73, 0x80, - 0x0F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xC7, 0xFE, 0x3F, 0xF1, 0xFF, 0x8F, - 0xFC, 0x7D, 0xC1, 0xCE, 0x0E, 0x70, 0x70, 0x03, 0xC3, 0x80, 0x3C, 0x78, - 0x03, 0xC7, 0x80, 0x38, 0x78, 0x07, 0x87, 0x07, 0xFF, 0xFF, 0x7F, 0xFF, - 0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xF0, 0xF0, 0xE0, 0x0F, 0x0E, 0x00, 0xF1, - 0xE0, 0x0F, 0x1E, 0x00, 0xE1, 0xE0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0x1C, 0x3C, 0x03, 0xC3, 0x80, 0x3C, 0x78, 0x03, - 0xC7, 0x80, 0x38, 0x78, 0x03, 0x87, 0x80, 0x00, 0x60, 0x00, 0x7F, 0x80, - 0x3F, 0xFC, 0x0F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0xDF, 0x9F, 0x19, 0xFB, - 0xC3, 0x1F, 0x78, 0x63, 0xEF, 0x8C, 0x01, 0xFD, 0x80, 0x1F, 0xF0, 0x01, - 0xFF, 0xC0, 0x1F, 0xFE, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x67, 0xE0, - 0x0C, 0x7F, 0xE1, 0x8F, 0xFC, 0x31, 0xFF, 0xC6, 0x3E, 0xFC, 0xDF, 0x9F, - 0xFF, 0xF1, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0x7F, 0x80, 0x01, 0x80, 0x00, - 0x30, 0x00, 0x06, 0x00, 0x0F, 0x00, 0x1C, 0x01, 0xFE, 0x00, 0xE0, 0x1F, - 0xF8, 0x0E, 0x00, 0xFF, 0xC0, 0x70, 0x0F, 0x0F, 0x07, 0x00, 0x70, 0x38, - 0x38, 0x03, 0x81, 0xC3, 0x80, 0x1C, 0x0E, 0x3C, 0x00, 0xF0, 0xF1, 0xC0, - 0x03, 0xFF, 0x1C, 0x00, 0x1F, 0xF8, 0xE0, 0x00, 0x7F, 0x8E, 0x00, 0x00, - 0xF0, 0x70, 0xF8, 0x00, 0x07, 0x1F, 0xF0, 0x00, 0x39, 0xFF, 0xC0, 0x03, - 0x8F, 0xFE, 0x00, 0x1C, 0xF0, 0x78, 0x01, 0xC7, 0x01, 0xC0, 0x0C, 0x38, - 0x0E, 0x00, 0xE1, 0xC0, 0x70, 0x06, 0x0F, 0x07, 0x80, 0x70, 0x3F, 0xF8, - 0x07, 0x01, 0xFF, 0xC0, 0x38, 0x07, 0xFC, 0x03, 0x80, 0x0F, 0x80, 0x01, - 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x1F, 0x1E, - 0x00, 0x7C, 0x78, 0x01, 0xF1, 0xE0, 0x07, 0xE7, 0x80, 0x0F, 0xBC, 0x00, - 0x1F, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xF0, 0xF0, 0xFF, - 0xE3, 0xC7, 0xE7, 0xCF, 0x3F, 0x0F, 0xF8, 0xF8, 0x3F, 0xE3, 0xE0, 0x7F, - 0x8F, 0x80, 0xFC, 0x3F, 0x03, 0xF0, 0x7E, 0x3F, 0xE1, 0xFF, 0xFF, 0x83, - 0xFF, 0xFF, 0x07, 0xFE, 0x7E, 0x07, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFD, - 0xCE, 0x70, 0x07, 0x87, 0x83, 0xC3, 0xC1, 0xE1, 0xE0, 0xF0, 0x78, 0x78, - 0x3C, 0x1E, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x1E, 0x0F, 0x03, 0x81, 0xE0, 0x70, - 0x3C, 0x0E, 0x07, 0x80, 0xF0, 0x38, 0x1E, 0x07, 0x83, 0xC0, 0xF0, 0x78, - 0x3C, 0x0F, 0x07, 0x83, 0xC0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, - 0xC1, 0xE0, 0xF0, 0x78, 0x78, 0x3C, 0x1E, 0x0F, 0x0F, 0x07, 0x87, 0x83, - 0xC1, 0xC1, 0xE0, 0xE0, 0xF0, 0x00, 0x06, 0x00, 0x60, 0x06, 0x07, 0x6E, - 0x7F, 0xE3, 0xFC, 0x0F, 0x01, 0xF8, 0x1F, 0x83, 0x9C, 0x10, 0x80, 0x03, - 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x03, - 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x8C, 0x63, - 0x37, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x80, 0x01, - 0x81, 0xC0, 0xC0, 0x60, 0x70, 0x38, 0x18, 0x0C, 0x0E, 0x06, 0x03, 0x01, - 0x81, 0xC0, 0xC0, 0x60, 0x30, 0x38, 0x18, 0x0C, 0x0E, 0x07, 0x03, 0x01, - 0x81, 0xC0, 0xC0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0xFF, - 0xC7, 0xE3, 0xF3, 0xE0, 0xF9, 0xF0, 0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, - 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, - 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3, - 0xF1, 0xFF, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x01, 0xC0, - 0xF0, 0x3C, 0x1F, 0x1F, 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, 0xC0, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, - 0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, - 0x0F, 0x80, 0x07, 0xC0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xF0, 0x03, 0xF0, - 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0, - 0x03, 0xE0, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF, 0x80, - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xCF, 0xC3, 0xF7, 0xC0, - 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, - 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, 0xC3, 0xF3, 0xFF, 0xF8, 0xFF, - 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, - 0x01, 0xFC, 0x03, 0xFC, 0x07, 0x7C, 0x07, 0x7C, 0x0E, 0x7C, 0x0E, 0x7C, - 0x1C, 0x7C, 0x18, 0x7C, 0x38, 0x7C, 0x70, 0x7C, 0x60, 0x7C, 0xE0, 0x7C, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x7C, - 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x1F, 0xFF, 0x0F, 0xFF, - 0x8F, 0xFF, 0xC7, 0xFF, 0xE3, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70, - 0x00, 0x79, 0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0xFF, 0xE7, 0xC3, 0xF0, - 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xFE, 0x03, - 0xFF, 0x03, 0xFF, 0xC3, 0xF3, 0xFF, 0xF1, 0xFF, 0xF8, 0x3F, 0xF0, 0x07, - 0xE0, 0x00, 0x03, 0xF8, 0x03, 0xFF, 0x81, 0xFF, 0xF0, 0xFF, 0xFE, 0x3E, - 0x1F, 0x9F, 0x03, 0xE7, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0xF8, 0x3E, 0xFF, - 0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFE, 0x1F, 0xBF, 0x03, 0xFF, 0x80, 0x7F, - 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, 0x80, 0x7D, 0xF0, 0x3E, 0x7E, - 0x1F, 0x8F, 0xFF, 0xC1, 0xFF, 0xF0, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0xF8, - 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1E, - 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x03, - 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xE0, 0x07, 0xFC, 0x0F, 0xFF, 0x07, - 0xFF, 0xC7, 0xC3, 0xF3, 0xC0, 0xF9, 0xE0, 0x3C, 0xF0, 0x1E, 0x78, 0x1F, - 0x1E, 0x1F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xF1, 0xF9, 0xF0, - 0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, - 0xC3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07, - 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xC7, 0xE3, 0xF7, 0xE0, 0xFB, - 0xE0, 0x3D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, - 0xF7, 0xE3, 0xFB, 0xFF, 0xFC, 0xFF, 0xFE, 0x3F, 0xDF, 0x07, 0xCF, 0x80, - 0x07, 0x80, 0x03, 0xDF, 0x03, 0xE7, 0xC3, 0xE3, 0xFF, 0xF0, 0xFF, 0xF0, - 0x3F, 0xF0, 0x07, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xC6, 0x33, 0x9B, 0xD8, 0x00, 0x00, 0xC0, 0x00, - 0xF0, 0x01, 0xFC, 0x03, 0xFF, 0x03, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x03, - 0xF8, 0x00, 0xF0, 0x00, 0x3F, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x07, - 0xFF, 0x00, 0x3F, 0xF0, 0x01, 0xFC, 0x00, 0x1F, 0x00, 0x00, 0xC0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xC0, 0x00, 0x3C, 0x00, 0x0F, 0xE0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, - 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0x00, 0x03, 0xC0, 0x07, 0xF0, - 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF8, 0x3F, 0xF0, 0x0F, 0xE0, 0x03, 0xC0, - 0x00, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xFF, 0xF1, 0xFF, - 0xFC, 0x7E, 0x3F, 0xBF, 0x03, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, - 0xC0, 0x03, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x1F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, - 0x00, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0xF8, 0x07, - 0x80, 0x00, 0x7C, 0x0F, 0x00, 0x00, 0x3C, 0x1E, 0x03, 0xE3, 0x9E, 0x3C, - 0x0F, 0xF7, 0x8E, 0x38, 0x1F, 0xFF, 0x0E, 0x78, 0x3E, 0x1F, 0x07, 0x70, - 0x38, 0x0F, 0x07, 0x70, 0x78, 0x0F, 0x07, 0xE0, 0x70, 0x0E, 0x07, 0xE0, - 0x70, 0x0E, 0x07, 0xE0, 0xE0, 0x0E, 0x07, 0xE0, 0xE0, 0x1E, 0x0F, 0xE0, - 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x3C, 0x1E, 0xE0, 0xF0, 0x3C, 0x3C, 0xF0, - 0xF0, 0xFC, 0x7C, 0x70, 0x7F, 0xFF, 0xF8, 0x78, 0x3F, 0xCF, 0xF0, 0x3C, - 0x1F, 0x07, 0xC0, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x01, 0x00, 0x07, 0xF0, 0x0F, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x01, 0xFF, - 0x80, 0x01, 0xFF, 0x80, 0x01, 0xF7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, - 0xC0, 0x03, 0xE3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC1, - 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x3E, 0x00, 0x7C, 0x3E, 0x00, - 0x7E, 0x3E, 0x00, 0x3E, 0x7C, 0x00, 0x3E, 0x7C, 0x00, 0x3F, 0x7C, 0x00, - 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xF8, - 0x07, 0xEF, 0x80, 0x3E, 0xF8, 0x03, 0xEF, 0x80, 0x3E, 0xF8, 0x03, 0xEF, - 0x80, 0x3E, 0xF8, 0x07, 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8, - 0xFF, 0xFF, 0xCF, 0x80, 0x7E, 0xF8, 0x01, 0xEF, 0x80, 0x1F, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xEF, 0xFF, - 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x80, - 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0xC3, 0xF8, 0x1F, 0x87, 0xE0, 0x1F, 0x9F, - 0x80, 0x1F, 0x3E, 0x00, 0x1F, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xE0, - 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x7D, 0xF0, 0x00, - 0xFB, 0xF0, 0x03, 0xF3, 0xF0, 0x0F, 0xC7, 0xF0, 0x3F, 0x87, 0xFF, 0xFE, - 0x07, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x01, 0xFE, 0x00, 0xFF, 0xFC, 0x07, - 0xFF, 0xF8, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x8F, 0x80, 0xFE, 0x7C, 0x01, - 0xF3, 0xE0, 0x07, 0xDF, 0x00, 0x3E, 0xF8, 0x01, 0xF7, 0xC0, 0x07, 0xFE, - 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x03, - 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7D, 0xF0, - 0x03, 0xEF, 0x80, 0x3E, 0x7C, 0x07, 0xF3, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0, - 0xFF, 0xFF, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, - 0xFF, 0x7F, 0xFF, 0xEF, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7F, 0xFF, 0xCF, 0xFF, - 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, - 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0xFF, 0xEF, 0xFF, 0xF7, - 0xFF, 0xFB, 0xFF, 0xFD, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xE0, 0x07, 0xFF, - 0xF8, 0x0F, 0xFF, 0xFC, 0x1F, 0xC0, 0xFE, 0x3F, 0x00, 0x7E, 0x7E, 0x00, - 0x3F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, 0x03, - 0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x1F, 0x7E, 0x00, 0x3F, 0x3F, 0x00, 0x7F, 0x1F, 0xC1, 0xFF, 0x0F, 0xFF, - 0xFF, 0x07, 0xFF, 0xE7, 0x03, 0xFF, 0xC7, 0x00, 0xFF, 0x07, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, - 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, - 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, - 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, - 0xF8, 0x1F, 0xFC, 0x3F, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, - 0xF8, 0x01, 0xFB, 0xE0, 0x0F, 0xCF, 0x80, 0x7E, 0x3E, 0x03, 0xF0, 0xF8, - 0x1F, 0x83, 0xE0, 0xFC, 0x0F, 0x87, 0xE0, 0x3E, 0x3F, 0x00, 0xF8, 0xF8, - 0x03, 0xE7, 0xE0, 0x0F, 0xBF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xF0, 0x03, - 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0xBF, 0x00, 0xFC, 0x7E, 0x03, 0xE0, - 0xFC, 0x0F, 0x81, 0xF8, 0x3E, 0x07, 0xE0, 0xF8, 0x0F, 0xC3, 0xE0, 0x1F, - 0x8F, 0x80, 0x7F, 0x3E, 0x00, 0xFC, 0xF8, 0x01, 0xFB, 0xE0, 0x03, 0xF0, - 0xF8, 0x00, 0x7C, 0x00, 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, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0xFF, 0xFF, - 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, - 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFB, 0xC3, 0xDF, 0xFB, - 0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xF9, 0xC7, 0xDF, 0xF9, - 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF8, - 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, - 0x7F, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, - 0x3E, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x1F, 0xFE, 0x01, 0xFF, 0xE0, 0x1F, - 0xFF, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x81, 0xFF, 0xF8, 0x1F, 0xFF, 0xC1, - 0xFF, 0xBC, 0x1F, 0xFB, 0xE1, 0xFF, 0x9F, 0x1F, 0xF9, 0xF1, 0xFF, 0x8F, - 0x9F, 0xF8, 0x79, 0xFF, 0x87, 0xDF, 0xF8, 0x3D, 0xFF, 0x83, 0xFF, 0xF8, - 0x1F, 0xFF, 0x81, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x07, 0xFF, - 0x80, 0x3F, 0xF8, 0x03, 0xFF, 0x80, 0x1F, 0x00, 0x7F, 0x00, 0x01, 0xFF, - 0xF0, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFC, 0x1F, 0xC1, 0xF8, - 0x03, 0xF1, 0xF8, 0x00, 0xFC, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x7C, - 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, - 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F, - 0xBE, 0x00, 0x0F, 0x9F, 0x00, 0x07, 0xCF, 0xC0, 0x07, 0xE3, 0xF0, 0x07, - 0xE0, 0xFE, 0x0F, 0xE0, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE, - 0x7F, 0xFF, 0xEF, 0x80, 0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, - 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x1F, 0xFC, 0x07, 0xEF, 0xFF, 0xFD, - 0xFF, 0xFF, 0x3F, 0xFF, 0xC7, 0xFF, 0xE0, 0xF8, 0x00, 0x1F, 0x00, 0x03, - 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, - 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFF, - 0xF0, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFC, 0x1F, 0xC1, 0xF8, - 0x03, 0xF1, 0xF8, 0x00, 0xFC, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x7C, - 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, - 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x01, 0x0F, - 0xBE, 0x01, 0xCF, 0x9F, 0x01, 0xFF, 0xCF, 0xC0, 0x7F, 0xE3, 0xF0, 0x1F, - 0xE0, 0xFE, 0x0F, 0xF0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0x03, 0xFF, - 0xEF, 0x80, 0x3F, 0xC3, 0x80, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0xFF, - 0xFE, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xCF, 0x80, 0x3F, 0x7C, 0x00, 0xFB, - 0xE0, 0x07, 0xDF, 0x00, 0x3E, 0xF8, 0x01, 0xF7, 0xC0, 0x0F, 0x3E, 0x00, - 0xF9, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF, 0x1F, - 0x00, 0xFC, 0xF8, 0x03, 0xE7, 0xC0, 0x1F, 0x3E, 0x00, 0xF9, 0xF0, 0x07, - 0xCF, 0x80, 0x3E, 0x7C, 0x01, 0xF3, 0xE0, 0x0F, 0x9F, 0x00, 0x7C, 0xF8, - 0x03, 0xF7, 0xC0, 0x0F, 0xC0, 0x07, 0xF8, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, - 0x87, 0xFF, 0xFC, 0x7E, 0x0F, 0xCF, 0xC0, 0x7E, 0xF8, 0x03, 0xEF, 0x80, - 0x3E, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x3F, - 0xFF, 0x81, 0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0x00, 0x03, 0xF0, - 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x03, 0xFF, 0xE0, 0x7E, - 0x7F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x00, 0x3F, 0xC0, 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, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, - 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, - 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, - 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, - 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, - 0x0F, 0xFF, 0x00, 0x3F, 0xC0, 0xF8, 0x00, 0xFB, 0xE0, 0x03, 0xE7, 0xC0, - 0x1F, 0x9F, 0x00, 0x7C, 0x7C, 0x01, 0xF0, 0xF8, 0x07, 0xC3, 0xE0, 0x3E, - 0x0F, 0x80, 0xF8, 0x1E, 0x03, 0xE0, 0x7C, 0x1F, 0x01, 0xF0, 0x7C, 0x03, - 0xC1, 0xF0, 0x0F, 0x87, 0x80, 0x3E, 0x3E, 0x00, 0xF8, 0xF8, 0x01, 0xE3, - 0xC0, 0x07, 0xCF, 0x00, 0x1F, 0x7C, 0x00, 0x3D, 0xE0, 0x00, 0xFF, 0x80, - 0x03, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00, - 0xF8, 0x00, 0x03, 0xE0, 0x00, 0xF8, 0x07, 0xC0, 0x3F, 0xF8, 0x07, 0xE0, - 0x3E, 0xFC, 0x07, 0xE0, 0x3E, 0x7C, 0x0F, 0xE0, 0x3E, 0x7C, 0x0F, 0xE0, - 0x7E, 0x7C, 0x0F, 0xE0, 0x7C, 0x7C, 0x0F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF0, - 0x7C, 0x3E, 0x1E, 0xF0, 0x78, 0x3E, 0x1E, 0x70, 0xF8, 0x1E, 0x1E, 0x70, - 0xF8, 0x1E, 0x1E, 0x78, 0xF8, 0x1F, 0x1E, 0x78, 0xF0, 0x1F, 0x3C, 0x78, - 0xF0, 0x0F, 0x3C, 0x39, 0xF0, 0x0F, 0x3C, 0x3D, 0xF0, 0x0F, 0x3C, 0x3D, - 0xE0, 0x0F, 0xBC, 0x3D, 0xE0, 0x07, 0xF8, 0x3D, 0xE0, 0x07, 0xF8, 0x1F, - 0xE0, 0x07, 0xF8, 0x1F, 0xC0, 0x03, 0xF8, 0x1F, 0xC0, 0x03, 0xF8, 0x1F, - 0xC0, 0x03, 0xF0, 0x0F, 0x80, 0x03, 0xF0, 0x0F, 0x80, 0x01, 0xF0, 0x0F, - 0x80, 0xFE, 0x01, 0xF9, 0xF8, 0x07, 0xE3, 0xF0, 0x3F, 0x0F, 0xC0, 0xF8, - 0x1F, 0x87, 0xE0, 0x7E, 0x3F, 0x00, 0xFC, 0xFC, 0x01, 0xF7, 0xE0, 0x07, - 0xFF, 0x00, 0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0xFC, - 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0x00, - 0x1F, 0x7E, 0x00, 0xFC, 0xF8, 0x03, 0xE3, 0xF0, 0x1F, 0x87, 0xC0, 0x7C, - 0x1F, 0x83, 0xF0, 0x3F, 0x1F, 0x80, 0xFC, 0x7E, 0x01, 0xFB, 0xF0, 0x07, - 0xF0, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0x9F, 0x00, 0xFC, 0xFC, 0x07, 0xC3, - 0xE0, 0x7E, 0x1F, 0x83, 0xE0, 0x7C, 0x1F, 0x03, 0xF1, 0xF0, 0x0F, 0x8F, - 0x80, 0x7E, 0xF8, 0x01, 0xF7, 0xC0, 0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, - 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, - 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03, - 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7E, 0x00, 0x1F, - 0x80, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF8, - 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, - 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, - 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38, 0x06, - 0x01, 0x80, 0x70, 0x0C, 0x03, 0x00, 0xE0, 0x18, 0x06, 0x01, 0xC0, 0x30, - 0x0C, 0x03, 0x00, 0xE0, 0x18, 0x06, 0x01, 0xC0, 0x30, 0x0C, 0x03, 0x80, - 0x60, 0x18, 0x07, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0, - 0x0F, 0x78, 0x1E, 0x78, 0x1E, 0x78, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x1E, - 0x78, 0x1E, 0x78, 0x1E, 0x70, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0x07, 0xF8, 0x07, - 0xFF, 0x83, 0xFF, 0xF1, 0xFF, 0xFE, 0x7C, 0x1F, 0xBE, 0x03, 0xE0, 0x00, - 0xF8, 0x01, 0xFE, 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xF8, 0xFB, 0xF0, 0x3E, - 0xF8, 0x0F, 0xBE, 0x07, 0xEF, 0xC3, 0xFB, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F, - 0xFB, 0xF1, 0xF8, 0xFC, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, - 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE7, 0xE0, 0xFB, 0xFC, - 0x3F, 0xFF, 0xCF, 0xFF, 0xF3, 0xF8, 0x7E, 0xFC, 0x0F, 0xBF, 0x03, 0xFF, - 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xF0, - 0x3F, 0xFC, 0x0F, 0xBF, 0x87, 0xEF, 0xFF, 0xF3, 0xFF, 0xFC, 0xFB, 0xFC, - 0x3E, 0x7E, 0x00, 0x03, 0xF0, 0x07, 0xFE, 0x0F, 0xFF, 0x87, 0xFF, 0xE7, - 0xE1, 0xFB, 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, - 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0xFB, 0xE0, 0x7D, 0xF8, 0x7E, 0x7F, - 0xFE, 0x3F, 0xFE, 0x0F, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, - 0xF8, 0x1F, 0x1F, 0x0F, 0xFB, 0xE3, 0xFF, 0xFC, 0xFF, 0xFF, 0xBF, 0x8F, - 0xF7, 0xC0, 0x7F, 0xF8, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, - 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFE, 0x03, 0xF7, 0xC0, 0x7E, 0xFC, 0x3F, - 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFB, 0xE0, 0xFC, 0x7C, 0x07, 0xE0, - 0x07, 0xFE, 0x03, 0xFF, 0xE0, 0xFF, 0xF8, 0x7E, 0x1F, 0x1F, 0x03, 0xCF, - 0x80, 0xFB, 0xE0, 0x1E, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0xE0, - 0x00, 0xF8, 0x00, 0x3F, 0x03, 0xE7, 0xE1, 0xF9, 0xFF, 0xFC, 0x3F, 0xFE, - 0x07, 0xFF, 0x00, 0x7F, 0x00, 0x0F, 0xC7, 0xF3, 0xFC, 0xFF, 0x3E, 0x0F, - 0x83, 0xE3, 0xFE, 0xFF, 0xBF, 0xE3, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, - 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, - 0x0F, 0x80, 0x07, 0xC7, 0xC3, 0xFD, 0xF3, 0xFF, 0xFC, 0xFF, 0xFF, 0x7E, - 0x1F, 0xDF, 0x03, 0xFF, 0xC0, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, - 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, 0x0F, 0xDF, 0x03, 0xF7, 0xE1, 0xFD, - 0xFF, 0xFF, 0x3F, 0xFF, 0xC7, 0xFD, 0xF0, 0x7C, 0x7C, 0x00, 0x1F, 0x00, - 0x07, 0xFF, 0x03, 0xF7, 0xE1, 0xF9, 0xFF, 0xFC, 0x3F, 0xFE, 0x01, 0xFE, - 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, - 0xC0, 0x03, 0xE0, 0x01, 0xF1, 0xF0, 0xFB, 0xFE, 0x7F, 0xFF, 0xBF, 0xFF, - 0xDF, 0xC3, 0xFF, 0xC0, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, - 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, - 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xC0, 0xFF, 0xFF, 0xF0, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x3E, 0x7C, 0xF9, 0xF0, 0x00, 0x00, 0x1F, 0x3E, 0x7C, 0xF9, - 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, - 0x7C, 0xF9, 0xF3, 0xFF, 0xFF, 0xFE, 0xF8, 0xF8, 0x00, 0x7C, 0x00, 0x3E, - 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x3E, - 0xF8, 0x3E, 0x7C, 0x3F, 0x3E, 0x3F, 0x1F, 0x3F, 0x0F, 0x9F, 0x07, 0xDF, - 0x03, 0xFF, 0x81, 0xFF, 0xC0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0x7E, 0x1F, - 0x1F, 0x0F, 0x87, 0xC7, 0xC3, 0xF3, 0xE0, 0xF9, 0xF0, 0x7E, 0xF8, 0x1F, - 0x7C, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0xF8, 0x3F, 0x1F, - 0x7F, 0x9F, 0xF3, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xC3, 0xF8, - 0x7F, 0xF8, 0x3F, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0, 0xF8, 0x1F, 0xF8, - 0x1F, 0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, 0xFC, 0x0F, 0x81, - 0xFF, 0x81, 0xF0, 0x3F, 0xF0, 0x3E, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0, - 0xF8, 0x1F, 0xF8, 0x1F, 0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, - 0x80, 0xF8, 0xF8, 0x7D, 0xFF, 0x3F, 0xFF, 0xDF, 0xFF, 0xEF, 0xE1, 0xFF, - 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, - 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, - 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xE0, 0x03, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, - 0xFC, 0x1F, 0xFF, 0xC7, 0xF0, 0xFC, 0xF8, 0x0F, 0xBF, 0x01, 0xFF, 0xC0, - 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0xC0, - 0x7E, 0xF8, 0x0F, 0x9F, 0x87, 0xF1, 0xFF, 0xFC, 0x1F, 0xFF, 0x01, 0xFF, - 0xC0, 0x0F, 0xE0, 0x00, 0xF8, 0xF8, 0x3E, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF, - 0xFC, 0xFE, 0x1F, 0xBF, 0x03, 0xEF, 0xC0, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, - 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, 0x0F, 0xFF, 0x03, 0xEF, - 0xE1, 0xFB, 0xFF, 0xFC, 0xFF, 0xFF, 0x3E, 0xFF, 0x0F, 0x8F, 0x83, 0xE0, - 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, - 0x3E, 0x00, 0x00, 0x07, 0xE3, 0xE1, 0xFF, 0x7C, 0x7F, 0xFF, 0x9F, 0xFF, - 0xF7, 0xF1, 0xFE, 0xF8, 0x0F, 0xFF, 0x01, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, - 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0xC0, 0x7E, 0xF8, 0x0F, - 0xDF, 0x83, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE1, 0xFF, 0x7C, 0x1F, 0x8F, - 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, - 0x00, 0x03, 0xE0, 0x00, 0x7C, 0xF8, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xE1, - 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, - 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, - 0x0F, 0xFF, 0x87, 0xFF, 0xE7, 0xE1, 0xF3, 0xE0, 0x79, 0xF8, 0x00, 0xFF, - 0x80, 0x3F, 0xFC, 0x1F, 0xFF, 0x83, 0xFF, 0xC0, 0x3F, 0xF0, 0x01, 0xFF, - 0xC0, 0x7D, 0xF0, 0x7E, 0xFF, 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0x01, 0xFE, - 0x00, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0x3E, 0x1F, - 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xF3, - 0xF8, 0xFC, 0x3E, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, - 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, - 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0xFF, 0xF0, 0xFF, 0xFF, - 0xFF, 0x7F, 0xFF, 0x9F, 0xF7, 0xC7, 0xE3, 0xE0, 0x7C, 0x07, 0xCF, 0x80, - 0xF9, 0xF0, 0x1F, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, 0x7C, 0x1F, 0x07, 0x83, - 0xC0, 0xF8, 0xF8, 0x1F, 0x1F, 0x01, 0xE3, 0xC0, 0x3E, 0x78, 0x07, 0xDF, - 0x00, 0x7B, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x1F, 0xC0, 0x03, 0xF8, - 0x00, 0x7F, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x1F, 0x03, 0xEF, 0x83, 0xE0, - 0x7D, 0xF0, 0x7E, 0x1F, 0x3E, 0x0F, 0xC3, 0xE3, 0xC3, 0xF8, 0x7C, 0x7C, - 0x7F, 0x0F, 0x0F, 0x8F, 0xF3, 0xE1, 0xF1, 0xDE, 0x7C, 0x1E, 0x7B, 0xCF, - 0x83, 0xEF, 0x39, 0xE0, 0x7D, 0xE7, 0x3C, 0x07, 0xB8, 0xFF, 0x80, 0xF7, - 0x1F, 0xE0, 0x1F, 0xE3, 0xFC, 0x03, 0xFC, 0x3F, 0x80, 0x3F, 0x07, 0xF0, - 0x07, 0xE0, 0xFC, 0x00, 0xFC, 0x1F, 0x80, 0x0F, 0x83, 0xF0, 0x00, 0xFC, - 0x1F, 0x9F, 0x07, 0xE7, 0xE3, 0xF0, 0xF8, 0xF8, 0x1F, 0x7E, 0x07, 0xDF, - 0x00, 0xFF, 0x80, 0x1F, 0xE0, 0x07, 0xF0, 0x00, 0xF8, 0x00, 0x7F, 0x00, - 0x3F, 0xE0, 0x0F, 0xF8, 0x07, 0xDF, 0x03, 0xF7, 0xE0, 0xF8, 0xF8, 0x7E, - 0x3F, 0x1F, 0x07, 0xEF, 0xC0, 0xF8, 0x7C, 0x03, 0xEF, 0x80, 0xF9, 0xF8, - 0x1F, 0x1F, 0x03, 0xE3, 0xE0, 0xF8, 0x7C, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, - 0x78, 0x0F, 0x1F, 0x01, 0xF3, 0xC0, 0x3E, 0x78, 0x03, 0xDF, 0x00, 0x7F, - 0xC0, 0x0F, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x07, 0xF8, - 0x00, 0xFE, 0x00, 0x1F, 0x80, 0x03, 0xE0, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, - 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, - 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, - 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x87, - 0xC7, 0xE3, 0xF1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, - 0xE0, 0xF0, 0xF9, 0xF8, 0xF0, 0x7E, 0x0F, 0x83, 0xC1, 0xE0, 0xF0, 0x78, - 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xFC, 0x7E, 0x1F, 0x07, 0x80, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0xF0, 0x7C, 0x3E, 0x1F, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x1F, 0x83, 0xC7, 0xE7, 0xC3, - 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC7, 0xE3, 0xE1, - 0xF0, 0xF0, 0x00, 0x3C, 0x00, 0xFE, 0x0F, 0xFE, 0x1E, 0x1F, 0xFC, 0x0F, - 0xC0, 0x0F, 0x00}; - -const GFXglyph FreeSansBold18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 10, 0, 1}, // 0x20 ' ' - {0, 5, 25, 12, 4, -24}, // 0x21 '!' - {16, 13, 9, 17, 2, -25}, // 0x22 '"' - {31, 20, 24, 19, 0, -23}, // 0x23 '#' - {91, 19, 29, 19, 0, -25}, // 0x24 '$' - {160, 29, 25, 31, 1, -24}, // 0x25 '%' - {251, 22, 25, 25, 2, -24}, // 0x26 '&' - {320, 5, 9, 9, 2, -25}, // 0x27 ''' - {326, 9, 33, 12, 1, -25}, // 0x28 '(' - {364, 9, 33, 12, 1, -25}, // 0x29 ')' - {402, 12, 11, 14, 0, -25}, // 0x2A '*' - {419, 16, 16, 20, 2, -15}, // 0x2B '+' - {451, 5, 11, 9, 2, -4}, // 0x2C ',' - {458, 9, 4, 12, 1, -10}, // 0x2D '-' - {463, 5, 5, 9, 2, -4}, // 0x2E '.' - {467, 9, 25, 10, 0, -24}, // 0x2F '/' - {496, 17, 25, 19, 1, -24}, // 0x30 '0' - {550, 10, 25, 19, 3, -24}, // 0x31 '1' - {582, 17, 25, 19, 1, -24}, // 0x32 '2' - {636, 17, 25, 19, 1, -24}, // 0x33 '3' - {690, 16, 25, 19, 2, -24}, // 0x34 '4' - {740, 17, 25, 19, 1, -24}, // 0x35 '5' - {794, 18, 25, 19, 1, -24}, // 0x36 '6' - {851, 17, 25, 19, 1, -24}, // 0x37 '7' - {905, 17, 25, 19, 1, -24}, // 0x38 '8' - {959, 17, 25, 19, 1, -24}, // 0x39 '9' - {1013, 5, 18, 9, 2, -17}, // 0x3A ':' - {1025, 5, 24, 9, 2, -17}, // 0x3B ';' - {1040, 18, 17, 20, 1, -16}, // 0x3C '<' - {1079, 17, 12, 20, 2, -13}, // 0x3D '=' - {1105, 18, 17, 20, 1, -16}, // 0x3E '>' - {1144, 18, 26, 21, 2, -25}, // 0x3F '?' - {1203, 32, 31, 34, 1, -25}, // 0x40 '@' - {1327, 24, 26, 24, 0, -25}, // 0x41 'A' - {1405, 20, 26, 25, 3, -25}, // 0x42 'B' - {1470, 23, 26, 25, 1, -25}, // 0x43 'C' - {1545, 21, 26, 25, 3, -25}, // 0x44 'D' - {1614, 19, 26, 23, 3, -25}, // 0x45 'E' - {1676, 17, 26, 22, 3, -25}, // 0x46 'F' - {1732, 24, 26, 27, 1, -25}, // 0x47 'G' - {1810, 20, 26, 26, 3, -25}, // 0x48 'H' - {1875, 5, 26, 11, 3, -25}, // 0x49 'I' - {1892, 16, 26, 20, 1, -25}, // 0x4A 'J' - {1944, 22, 26, 25, 3, -25}, // 0x4B 'K' - {2016, 17, 26, 22, 3, -25}, // 0x4C 'L' - {2072, 24, 26, 30, 3, -25}, // 0x4D 'M' - {2150, 20, 26, 26, 3, -25}, // 0x4E 'N' - {2215, 25, 26, 27, 1, -25}, // 0x4F 'O' - {2297, 19, 26, 24, 3, -25}, // 0x50 'P' - {2359, 25, 27, 27, 1, -25}, // 0x51 'Q' - {2444, 21, 26, 25, 3, -25}, // 0x52 'R' - {2513, 20, 26, 24, 2, -25}, // 0x53 'S' - {2578, 19, 26, 23, 2, -25}, // 0x54 'T' - {2640, 20, 26, 26, 3, -25}, // 0x55 'U' - {2705, 22, 26, 23, 1, -25}, // 0x56 'V' - {2777, 32, 26, 34, 1, -25}, // 0x57 'W' - {2881, 22, 26, 24, 1, -25}, // 0x58 'X' - {2953, 21, 26, 22, 1, -25}, // 0x59 'Y' - {3022, 19, 26, 21, 1, -25}, // 0x5A 'Z' - {3084, 8, 33, 12, 2, -25}, // 0x5B '[' - {3117, 10, 25, 10, 0, -24}, // 0x5C '\' - {3149, 8, 33, 12, 1, -25}, // 0x5D ']' - {3182, 16, 15, 20, 2, -23}, // 0x5E '^' - {3212, 21, 3, 19, -1, 5}, // 0x5F '_' - {3220, 7, 5, 9, 1, -25}, // 0x60 '`' - {3225, 18, 19, 20, 1, -18}, // 0x61 'a' - {3268, 18, 26, 22, 2, -25}, // 0x62 'b' - {3327, 17, 19, 20, 1, -18}, // 0x63 'c' - {3368, 19, 26, 22, 1, -25}, // 0x64 'd' - {3430, 18, 19, 20, 1, -18}, // 0x65 'e' - {3473, 10, 26, 12, 1, -25}, // 0x66 'f' - {3506, 18, 26, 21, 1, -18}, // 0x67 'g' - {3565, 17, 26, 21, 2, -25}, // 0x68 'h' - {3621, 5, 26, 10, 2, -25}, // 0x69 'i' - {3638, 7, 33, 10, 0, -25}, // 0x6A 'j' - {3667, 17, 26, 20, 2, -25}, // 0x6B 'k' - {3723, 5, 26, 9, 2, -25}, // 0x6C 'l' - {3740, 27, 19, 31, 2, -18}, // 0x6D 'm' - {3805, 17, 19, 21, 2, -18}, // 0x6E 'n' - {3846, 19, 19, 21, 1, -18}, // 0x6F 'o' - {3892, 18, 26, 22, 2, -18}, // 0x70 'p' - {3951, 19, 26, 22, 1, -18}, // 0x71 'q' - {4013, 11, 19, 14, 2, -18}, // 0x72 'r' - {4040, 17, 19, 19, 1, -18}, // 0x73 's' - {4081, 9, 23, 12, 1, -22}, // 0x74 't' - {4107, 17, 19, 21, 2, -18}, // 0x75 'u' - {4148, 19, 19, 19, 0, -18}, // 0x76 'v' - {4194, 27, 19, 27, 0, -18}, // 0x77 'w' - {4259, 18, 19, 19, 1, -18}, // 0x78 'x' - {4302, 19, 26, 19, 0, -18}, // 0x79 'y' - {4364, 16, 19, 18, 1, -18}, // 0x7A 'z' - {4402, 9, 33, 14, 1, -25}, // 0x7B '{' - {4440, 3, 33, 10, 4, -25}, // 0x7C '|' - {4453, 9, 33, 14, 3, -25}, // 0x7D '}' - {4491, 15, 6, 18, 1, -10}}; // 0x7E '~' - -const GFXfont FreeSansBold18pt7b PROGMEM = { - (uint8_t *)FreeSansBold18pt7bBitmaps, (GFXglyph *)FreeSansBold18pt7bGlyphs, - 0x20, 0x7E, 42}; - -// Approx. 5175 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold24pt7b.h deleted file mode 100644 index 5dd7a54..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold24pt7b.h +++ /dev/null @@ -1,786 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBold24pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xDF, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xC7, 0x0E, 0x1C, 0x00, 0x00, 0x07, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, - 0xFF, 0xF8, 0x7F, 0xFE, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, 0xFD, 0xF0, 0x3E, - 0x7C, 0x0F, 0x9F, 0x03, 0xE3, 0x80, 0x70, 0xE0, 0x1C, 0x00, 0xF8, 0x3E, - 0x00, 0x3E, 0x0F, 0x80, 0x0F, 0x83, 0xE0, 0x03, 0xE0, 0xF8, 0x00, 0xF8, - 0x7C, 0x00, 0x7C, 0x1F, 0x00, 0x1F, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0x7F, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, - 0x03, 0xE0, 0xF8, 0x00, 0xF8, 0x3E, 0x00, 0x3E, 0x1F, 0x00, 0x1F, 0x07, - 0xC0, 0x07, 0xC1, 0xF0, 0x01, 0xF0, 0x7C, 0x00, 0x7C, 0x1F, 0x03, 0xFF, - 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, - 0xFF, 0xFF, 0xFC, 0x0F, 0x87, 0xC0, 0x07, 0xC1, 0xF0, 0x01, 0xF0, 0x7C, - 0x00, 0x7C, 0x1F, 0x00, 0x1F, 0x07, 0xC0, 0x07, 0xC3, 0xE0, 0x03, 0xE0, - 0xF8, 0x00, 0xF8, 0x3E, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, - 0x80, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF8, 0x7F, 0x73, 0xFE, 0x7F, 0x38, - 0xFF, 0x3F, 0x1C, 0x3F, 0xDF, 0x8E, 0x0F, 0xEF, 0xC7, 0x07, 0xF7, 0xE3, - 0x80, 0x03, 0xF9, 0xC0, 0x01, 0xFE, 0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x3F, - 0xFC, 0x00, 0x0F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x80, - 0x0F, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0xE7, 0xFC, 0x00, 0x71, 0xFF, - 0x00, 0x38, 0x7F, 0xFF, 0x1C, 0x1F, 0xFF, 0x8E, 0x0F, 0xFF, 0xC7, 0x07, - 0xFF, 0xE3, 0x87, 0xFB, 0xF9, 0xC3, 0xF9, 0xFE, 0xE7, 0xFC, 0x7F, 0xFF, - 0xFC, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x00, 0x3F, - 0xE0, 0x00, 0x03, 0x80, 0x00, 0x01, 0xC0, 0x00, 0x00, 0xE0, 0x00, 0x00, - 0x70, 0x00, 0x03, 0xE0, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x00, 0x78, 0x00, - 0x7F, 0xF8, 0x01, 0xE0, 0x01, 0xFF, 0xF0, 0x03, 0xC0, 0x07, 0xFF, 0xF0, - 0x0F, 0x00, 0x0F, 0x83, 0xE0, 0x1E, 0x00, 0x3E, 0x03, 0xE0, 0x78, 0x00, - 0x78, 0x03, 0xC0, 0xF0, 0x00, 0xF0, 0x07, 0x83, 0xC0, 0x01, 0xE0, 0x0F, - 0x07, 0x80, 0x03, 0xE0, 0x3E, 0x1E, 0x00, 0x03, 0xE0, 0xF8, 0x3C, 0x00, - 0x07, 0xFF, 0xF0, 0xF0, 0x00, 0x07, 0xFF, 0xC1, 0xE0, 0x00, 0x07, 0xFF, - 0x07, 0x80, 0x00, 0x07, 0xFC, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x01, 0xE0, 0xFF, 0x80, 0x00, - 0x07, 0x87, 0xFF, 0xC0, 0x00, 0x0F, 0x0F, 0xFF, 0x80, 0x00, 0x3C, 0x3F, - 0xFF, 0x80, 0x00, 0x78, 0xFC, 0x1F, 0x00, 0x01, 0xE1, 0xF0, 0x1F, 0x00, - 0x03, 0xC3, 0xC0, 0x1E, 0x00, 0x0F, 0x07, 0x80, 0x3C, 0x00, 0x1E, 0x0F, - 0x00, 0x78, 0x00, 0x78, 0x1F, 0x01, 0xF0, 0x00, 0xF0, 0x1F, 0x07, 0xC0, - 0x03, 0xC0, 0x3F, 0xFF, 0x80, 0x07, 0x80, 0x3F, 0xFE, 0x00, 0x1E, 0x00, - 0x7F, 0xF8, 0x00, 0x7C, 0x00, 0x3F, 0xE0, 0x00, 0xF0, 0x00, 0x1F, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x3F, 0xCF, 0xC0, 0x00, 0xFE, - 0x1F, 0x00, 0x03, 0xF8, 0x7C, 0x00, 0x0F, 0xE1, 0xF0, 0x00, 0x3F, 0xC7, - 0xC0, 0x00, 0x7F, 0x3E, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x07, 0xFF, 0x03, 0xE0, 0x3F, 0xFE, 0x0F, 0x83, 0xFF, 0xF8, 0x3E, 0x1F, - 0xF3, 0xF1, 0xF8, 0x7F, 0x07, 0xE7, 0xE3, 0xFC, 0x1F, 0xFF, 0x0F, 0xE0, - 0x3F, 0xFC, 0x3F, 0x80, 0x7F, 0xF0, 0xFE, 0x01, 0xFF, 0x83, 0xF8, 0x03, - 0xFE, 0x0F, 0xF0, 0x0F, 0xF0, 0x3F, 0xE0, 0x7F, 0xE0, 0x7F, 0xC3, 0xFF, - 0xC1, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFB, 0xFC, - 0x0F, 0xFF, 0xC7, 0xF8, 0x1F, 0xFE, 0x0F, 0xE0, 0x0F, 0xE0, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x7C, 0xF8, 0xE1, 0xC0, 0x00, - 0xF0, 0x0F, 0x80, 0xF8, 0x07, 0xC0, 0x7C, 0x07, 0xE0, 0x3E, 0x03, 0xF0, - 0x1F, 0x80, 0xF8, 0x0F, 0xC0, 0x7E, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, - 0xC0, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, - 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x00, 0xF8, 0x07, 0xE0, 0x3F, 0x01, - 0xF8, 0x07, 0xC0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x3F, 0x00, 0xF8, 0x07, - 0xE0, 0x1F, 0x00, 0xF8, 0x03, 0xE0, 0x1F, 0x00, 0x7C, 0x01, 0xE0, 0x78, - 0x03, 0xE0, 0x0F, 0x80, 0x7C, 0x01, 0xF0, 0x0F, 0x80, 0x3E, 0x01, 0xF0, - 0x0F, 0xC0, 0x3E, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, - 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xE0, 0x3F, 0x01, 0xF8, - 0x0F, 0xC0, 0x7C, 0x07, 0xE0, 0x3F, 0x01, 0xF0, 0x1F, 0x80, 0xF8, 0x0F, - 0xC0, 0x7C, 0x07, 0xE0, 0x3E, 0x03, 0xF0, 0x1F, 0x01, 0xF0, 0x00, 0x03, - 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x06, 0x38, 0xDF, 0xFF, 0xFF, 0xFF, - 0x9F, 0xFE, 0x07, 0xC0, 0x1F, 0xC0, 0x3F, 0x80, 0xF7, 0x83, 0xC7, 0x87, - 0x8F, 0x02, 0x08, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, - 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x87, 0x0E, 0x1C, 0x78, 0xEF, 0xDF, 0x38, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x38, 0x03, 0xC0, 0x1C, 0x00, 0xE0, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x38, - 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x00, 0x38, 0x03, 0xC0, 0x1C, 0x00, - 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, - 0x03, 0x80, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, - 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x1F, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x3F, 0xC3, 0xFC, 0x7F, 0x81, 0xFE, 0x7F, - 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0x7F, - 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x81, 0xFE, 0x3F, - 0xC3, 0xFC, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xF8, 0x1F, 0xFF, 0xF8, 0x0F, - 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0x3C, 0x01, 0xF0, - 0x07, 0xC0, 0x3F, 0x01, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, - 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, - 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, - 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x01, 0xFE, 0x00, 0x0F, 0xFF, 0x80, - 0x3F, 0xFF, 0x80, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x9F, - 0xE0, 0xFF, 0x7F, 0x80, 0xFF, 0xFE, 0x01, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, - 0x03, 0xFF, 0xF0, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, - 0xC0, 0x01, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x00, - 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x01, - 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xBF, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x01, 0xFE, 0x00, 0x0F, - 0xFF, 0x80, 0x7F, 0xFF, 0x81, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x8F, 0xFF, - 0xFF, 0x1F, 0xE1, 0xFF, 0x7F, 0x81, 0xFE, 0xFE, 0x01, 0xFD, 0xFC, 0x03, - 0xFB, 0xF8, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7F, - 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xC0, - 0x00, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0xC0, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, - 0x07, 0xFF, 0xF8, 0x0F, 0xF7, 0xF8, 0x3F, 0xCF, 0xFF, 0xFF, 0x9F, 0xFF, - 0xFE, 0x1F, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x07, 0xF8, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, - 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x7B, 0xF8, 0x01, - 0xEF, 0xE0, 0x0F, 0x3F, 0x80, 0x78, 0xFE, 0x01, 0xE3, 0xF8, 0x0F, 0x0F, - 0xE0, 0x38, 0x3F, 0x81, 0xE0, 0xFE, 0x07, 0x03, 0xF8, 0x3C, 0x0F, 0xE1, - 0xE0, 0x3F, 0x87, 0x00, 0xFE, 0x3C, 0x03, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, - 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x1F, 0xFF, 0xFC, 0x3F, - 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, - 0xFF, 0x8F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, - 0x01, 0xF1, 0xF8, 0x03, 0xEF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC, 0xFE, 0x07, 0xFC, 0x00, 0x07, 0xF8, - 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, - 0x0F, 0xF7, 0xF8, 0x3F, 0xEF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x0F, 0xFF, - 0xFC, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x00, 0xFF, - 0x00, 0x07, 0xFF, 0x80, 0x1F, 0xFF, 0xC0, 0x7F, 0xFF, 0x81, 0xFF, 0xFF, - 0x87, 0xFF, 0xFF, 0x8F, 0xF0, 0xFF, 0x3F, 0xC0, 0xFE, 0x7F, 0x00, 0x00, - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF0, 0x1F, - 0xDF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0xFF, 0xFF, 0xF9, 0xFF, - 0x87, 0xFB, 0xFC, 0x07, 0xF7, 0xF8, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, - 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0x7E, 0x00, 0xFE, 0xFC, 0x01, - 0xFD, 0xFC, 0x07, 0xFB, 0xF8, 0x0F, 0xE3, 0xFC, 0x7F, 0xC7, 0xFF, 0xFF, - 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0x80, - 0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, - 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF0, - 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, - 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x7F, 0x83, 0xFC, 0x7F, - 0x00, 0xFC, 0x7E, 0x00, 0xFC, 0x7E, 0x00, 0x7C, 0x7E, 0x00, 0x7C, 0x7E, - 0x00, 0xFC, 0x3F, 0x00, 0xF8, 0x3F, 0x83, 0xF8, 0x0F, 0xFF, 0xF0, 0x07, - 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x3F, 0xC3, 0xFC, 0x7F, - 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, - 0x00, 0xFE, 0x7F, 0x83, 0xFE, 0x7F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, 0x1F, - 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x00, - 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF0, 0x3F, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0xC3, 0xFC, 0x7F, 0x01, 0xFE, 0xFF, - 0x00, 0xFE, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0x7F, - 0x01, 0xFF, 0x7F, 0xC3, 0xFF, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0x0F, 0xFF, 0x7F, 0x07, 0xFE, 0x7F, 0x01, 0xFC, 0x7E, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x7F, 0x01, 0xFC, 0x7F, - 0x83, 0xFC, 0x7F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0x1F, - 0xFF, 0xE0, 0x07, 0xFF, 0x80, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x1C, 0x38, 0x71, 0xE7, 0xBF, 0x7C, 0xE0, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x3C, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xF0, 0x01, - 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0x7F, 0xFC, - 0x01, 0xFF, 0xC0, 0x03, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0xE0, 0x00, - 0x1F, 0xF8, 0x00, 0x3F, 0xFE, 0x00, 0x0F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, - 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x0F, 0xE0, - 0x00, 0x03, 0xC0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0x00, - 0x01, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xFE, 0x00, - 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x00, 0x7F, 0xFC, - 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xE0, - 0x01, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, 0xFF, - 0xFC, 0x03, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x1E, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0xC0, 0x1F, - 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0x7F, - 0x83, 0xFE, 0x7F, 0x01, 0xFE, 0xFF, 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFE, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x00, - 0x01, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, - 0x3F, 0xF0, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, - 0x03, 0xFE, 0x01, 0xFF, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x7F, - 0x80, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x00, - 0x00, 0x1F, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, 0x00, - 0x3E, 0x0F, 0xC0, 0x07, 0xE3, 0xC3, 0xE1, 0xF0, 0x03, 0xFE, 0xF8, 0x3C, - 0x7E, 0x01, 0xFF, 0xFF, 0x07, 0x8F, 0x80, 0x7E, 0x1F, 0xC0, 0x7B, 0xF0, - 0x1F, 0x81, 0xF8, 0x0F, 0x7C, 0x03, 0xE0, 0x1F, 0x01, 0xEF, 0x80, 0xF8, - 0x03, 0xC0, 0x3F, 0xF0, 0x1E, 0x00, 0x78, 0x07, 0xFC, 0x07, 0xC0, 0x0F, - 0x00, 0xFF, 0x80, 0xF0, 0x01, 0xE0, 0x1F, 0xF0, 0x1E, 0x00, 0x38, 0x07, - 0xFE, 0x07, 0xC0, 0x0F, 0x00, 0xFF, 0xC0, 0xF8, 0x01, 0xE0, 0x1E, 0xF8, - 0x1F, 0x00, 0x38, 0x07, 0xDF, 0x03, 0xE0, 0x0F, 0x00, 0xF3, 0xF0, 0x7C, - 0x03, 0xE0, 0x3E, 0x3E, 0x0F, 0xC0, 0xFC, 0x0F, 0x87, 0xC0, 0xFC, 0x3F, - 0xC7, 0xF0, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x0F, 0xC1, 0xFF, 0xEF, 0xFF, - 0x01, 0xFC, 0x1F, 0xF8, 0xFF, 0x80, 0x1F, 0xC0, 0xFC, 0x07, 0xC0, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x60, 0x00, 0x01, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, - 0x3F, 0xFE, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0xFE, 0x3F, 0x80, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xFC, 0x1F, 0xC0, 0x01, - 0xF8, 0x1F, 0xC0, 0x03, 0xF8, 0x0F, 0xE0, 0x03, 0xF8, 0x0F, 0xE0, 0x03, - 0xF0, 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xFF, 0xFF, 0xF0, 0x07, - 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF8, 0x1F, - 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xC0, 0x01, 0xFC, 0x3F, - 0x80, 0x01, 0xFC, 0x3F, 0x80, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, - 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, - 0x8F, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0x1F, 0xF7, 0xF0, - 0x01, 0xFE, 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, 0x7F, - 0x7F, 0x00, 0x1F, 0xCF, 0xE0, 0x07, 0xF9, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0x87, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x1F, 0xEF, 0xE0, 0x01, 0xFD, 0xFC, 0x00, - 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, - 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xEF, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFF, - 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, - 0xE0, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, 0x81, 0xFF, 0x0F, 0xF8, 0x01, 0xFE, - 0x3F, 0xC0, 0x07, 0xF9, 0xFE, 0x00, 0x0F, 0xE7, 0xF8, 0x00, 0x1F, 0xDF, - 0xC0, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x7F, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x3F, 0xCF, - 0xF0, 0x00, 0xFE, 0x3F, 0xE0, 0x07, 0xF8, 0x7F, 0xE0, 0x7F, 0xC0, 0xFF, - 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, - 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, - 0x0F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, 0xFE, 0x00, 0xFF, 0xCF, 0xE0, 0x03, - 0xFC, 0xFE, 0x00, 0x1F, 0xEF, 0xE0, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, - 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, - 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, - 0xEF, 0xE0, 0x01, 0xFE, 0xFE, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xFC, 0xFF, - 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xF7, - 0xFF, 0xFF, 0xFB, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, - 0x07, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFE, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x9F, 0xC0, 0x00, 0x0F, 0xE0, - 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, - 0x07, 0xFE, 0x03, 0xFF, 0x0F, 0xF0, 0x01, 0xFE, 0x3F, 0xC0, 0x01, 0xFC, - 0x7F, 0x00, 0x01, 0xFD, 0xFE, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF8, - 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, - 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x3F, 0x7F, 0x00, - 0x00, 0x7E, 0xFF, 0x00, 0x01, 0xFC, 0xFF, 0x00, 0x03, 0xF9, 0xFF, 0x00, - 0x0F, 0xF1, 0xFF, 0x00, 0x3F, 0xE3, 0xFF, 0x83, 0xFF, 0xC3, 0xFF, 0xFF, - 0xFF, 0x83, 0xFF, 0xFF, 0xDF, 0x03, 0xFF, 0xFF, 0x9E, 0x03, 0xFF, 0xFE, - 0x3C, 0x01, 0xFF, 0xF0, 0x78, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x0F, - 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, - 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, - 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, - 0xFF, 0xC0, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, - 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, - 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, - 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, - 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xFF, 0xE0, - 0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, - 0xFF, 0xC0, 0xFF, 0xFF, 0x87, 0xFD, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0xFE, - 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x7F, 0x8F, 0xE0, 0x03, 0xFC, 0x3F, 0x80, - 0x1F, 0xE0, 0xFE, 0x00, 0xFF, 0x83, 0xF8, 0x07, 0xFC, 0x0F, 0xE0, 0x1F, - 0xE0, 0x3F, 0x80, 0xFF, 0x00, 0xFE, 0x07, 0xF8, 0x03, 0xF8, 0x3F, 0xC0, - 0x0F, 0xE1, 0xFE, 0x00, 0x3F, 0x8F, 0xF0, 0x00, 0xFE, 0x7F, 0x80, 0x03, - 0xFB, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, - 0xFF, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x3F, 0xF7, - 0xF8, 0x00, 0xFF, 0x8F, 0xF0, 0x03, 0xFC, 0x3F, 0xC0, 0x0F, 0xE0, 0x7F, - 0x80, 0x3F, 0x80, 0xFF, 0x00, 0xFE, 0x01, 0xFE, 0x03, 0xF8, 0x07, 0xFC, - 0x0F, 0xE0, 0x0F, 0xF0, 0x3F, 0x80, 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC3, - 0xF8, 0x00, 0xFF, 0x8F, 0xE0, 0x01, 0xFE, 0x3F, 0x80, 0x03, 0xFC, 0xFE, - 0x00, 0x07, 0xFB, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x01, 0xFC, 0x00, - 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, - 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, - 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, - 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xE0, 0x03, - 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFC, 0x00, - 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xBE, 0x03, 0xEF, 0xFF, 0xDF, 0x01, 0xF7, 0xFF, 0xEF, - 0x80, 0xFB, 0xFF, 0xF7, 0xC0, 0xFD, 0xFF, 0xFB, 0xF0, 0x7C, 0xFF, 0xFC, - 0xF8, 0x3E, 0x7F, 0xFE, 0x7C, 0x1F, 0x3F, 0xFF, 0x3E, 0x0F, 0x9F, 0xFF, - 0x9F, 0x8F, 0x8F, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, 0xE3, 0xE3, 0xE3, 0xFF, - 0xF1, 0xF1, 0xF1, 0xFF, 0xF8, 0xFC, 0xF8, 0xFF, 0xFC, 0x3E, 0xF8, 0x7F, - 0xFE, 0x1F, 0x7C, 0x3F, 0xFF, 0x0F, 0xBE, 0x1F, 0xFF, 0x87, 0xDF, 0x0F, - 0xFF, 0xC3, 0xFF, 0x07, 0xFF, 0xE0, 0xFF, 0x83, 0xFF, 0xF0, 0x7F, 0xC1, - 0xFF, 0xF8, 0x3F, 0xE0, 0xFF, 0xFC, 0x1F, 0xF0, 0x7F, 0xFE, 0x07, 0xF0, - 0x3F, 0xFF, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x00, - 0x7F, 0xFF, 0x80, 0x07, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xC0, 0x07, 0xFF, - 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xF0, - 0x07, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xF8, 0x07, 0xFF, 0xEF, 0xC0, 0x7F, - 0xFE, 0xFE, 0x07, 0xFF, 0xE7, 0xE0, 0x7F, 0xFE, 0x7F, 0x07, 0xFF, 0xE3, - 0xF0, 0x7F, 0xFE, 0x1F, 0x87, 0xFF, 0xE1, 0xFC, 0x7F, 0xFE, 0x0F, 0xC7, - 0xFF, 0xE0, 0xFE, 0x7F, 0xFE, 0x07, 0xE7, 0xFF, 0xE0, 0x3F, 0x7F, 0xFE, - 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, - 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xE0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, - 0xE0, 0x03, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, - 0x0F, 0xFF, 0xE0, 0x00, 0x7F, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, - 0x80, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x3F, 0xC0, - 0x0F, 0xF8, 0x3F, 0xC0, 0x01, 0xFE, 0x1F, 0xC0, 0x00, 0x7F, 0x1F, 0xE0, - 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x07, 0xF7, 0xF8, - 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, - 0xC0, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, - 0xFC, 0x00, 0x01, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x7F, - 0x3F, 0xC0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x3F, - 0xC1, 0xFE, 0x00, 0x3F, 0xC0, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, - 0xE0, 0x0F, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0xFF, - 0xE0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xE0, 0x0F, 0xFB, 0xF8, 0x00, 0xFF, - 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, - 0x7F, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF8, - 0x03, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, - 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x0F, 0xE0, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, - 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x7F, 0xFF, - 0xE0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, - 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x3F, 0xC0, 0x07, 0xF8, 0x3F, 0xC0, - 0x01, 0xFE, 0x1F, 0xC0, 0x00, 0x7F, 0x1F, 0xE0, 0x00, 0x3F, 0xCF, 0xE0, - 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, - 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x21, 0xFE, - 0xFE, 0x00, 0x38, 0xFE, 0x7F, 0x00, 0x3E, 0x7F, 0x3F, 0xC0, 0x3F, 0xFF, - 0x8F, 0xE0, 0x0F, 0xFF, 0x87, 0xF8, 0x03, 0xFF, 0xC1, 0xFE, 0x00, 0xFF, - 0xC0, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, - 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, - 0xCF, 0xC0, 0x01, 0xFF, 0x03, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, - 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, - 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x3F, 0xEF, 0xE0, - 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0xFE, - 0x00, 0x3F, 0xCF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xE0, 0x07, 0xF8, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, - 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xEF, 0xE0, 0x00, 0xFF, 0x00, 0xFF, 0xC0, - 0x00, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF0, 0x3F, - 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFC, 0x7F, 0xC0, 0xFF, 0xCF, 0xF0, 0x03, - 0xFE, 0xFE, 0x00, 0x1F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, - 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xF0, - 0x07, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, - 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, - 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0x00, 0x0F, 0xE7, 0xFC, 0x03, 0xFE, 0x7F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFC, 0x00, - 0x07, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, - 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, - 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x03, - 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xBF, 0xC0, 0x1F, 0xE7, 0xFC, 0x07, 0xFC, - 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, - 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xDF, 0xC0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xE7, - 0xF0, 0x00, 0x7F, 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x3F, 0x87, 0xF0, - 0x01, 0xFC, 0x1F, 0xC0, 0x0F, 0xC0, 0xFE, 0x00, 0xFE, 0x03, 0xF0, 0x07, - 0xF0, 0x1F, 0x80, 0x3F, 0x00, 0xFE, 0x03, 0xF8, 0x03, 0xF0, 0x1F, 0xC0, - 0x1F, 0x80, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, - 0x83, 0xF0, 0x00, 0xFE, 0x1F, 0x80, 0x03, 0xF1, 0xF8, 0x00, 0x1F, 0x8F, - 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x03, 0xF3, 0xE0, 0x00, 0x1F, 0xBF, 0x00, - 0x00, 0xFD, 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x1F, 0xFF, 0xE0, 0x07, 0xF0, 0x03, 0xFD, - 0xFC, 0x01, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x3F, 0xE0, 0x0F, 0xE7, 0xF0, - 0x07, 0xFC, 0x01, 0xFC, 0x7F, 0x00, 0xFF, 0x80, 0x7F, 0x8F, 0xE0, 0x1F, - 0xF0, 0x0F, 0xE1, 0xFC, 0x07, 0xFF, 0x01, 0xFC, 0x3F, 0x80, 0xFB, 0xE0, - 0x3F, 0x83, 0xF0, 0x1F, 0x7C, 0x07, 0xE0, 0x7F, 0x03, 0xEF, 0x81, 0xFC, - 0x0F, 0xE0, 0x7D, 0xF0, 0x3F, 0x80, 0xFC, 0x1F, 0x9F, 0x07, 0xF0, 0x1F, - 0x83, 0xE3, 0xE0, 0xFC, 0x03, 0xF0, 0x7C, 0x7C, 0x1F, 0x80, 0x7F, 0x0F, - 0x8F, 0x87, 0xF0, 0x07, 0xE1, 0xF0, 0xF8, 0xFC, 0x00, 0xFC, 0x7E, 0x1F, - 0x1F, 0x80, 0x1F, 0x8F, 0x83, 0xE3, 0xF0, 0x01, 0xF9, 0xF0, 0x7C, 0x7E, - 0x00, 0x3F, 0x3E, 0x0F, 0x9F, 0x80, 0x07, 0xE7, 0xC0, 0xFB, 0xF0, 0x00, - 0xFD, 0xF0, 0x1F, 0x7E, 0x00, 0x0F, 0xBE, 0x03, 0xEF, 0xC0, 0x01, 0xFF, - 0xC0, 0x7D, 0xF0, 0x00, 0x3F, 0xF8, 0x0F, 0xFE, 0x00, 0x03, 0xFF, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, - 0x03, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x00, 0x07, - 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x07, 0xF9, 0xFF, 0x00, 0x3F, 0xC3, - 0xFC, 0x00, 0xFF, 0x07, 0xF8, 0x07, 0xF8, 0x1F, 0xE0, 0x1F, 0xC0, 0x3F, - 0xC0, 0xFF, 0x00, 0xFF, 0x07, 0xF8, 0x01, 0xFE, 0x1F, 0xE0, 0x03, 0xF8, - 0xFF, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x1F, 0xDF, 0xE0, 0x00, 0x3F, 0xFF, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x7F, 0x7F, 0x80, 0x03, 0xF8, - 0xFF, 0x00, 0x1F, 0xE1, 0xFC, 0x00, 0x7F, 0x07, 0xF8, 0x03, 0xFC, 0x0F, - 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0x7F, 0x83, 0xFC, 0x01, 0xFE, - 0x0F, 0xF0, 0x03, 0xFC, 0x7F, 0x80, 0x0F, 0xFB, 0xFE, 0x00, 0x1F, 0xE0, - 0xFF, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x7F, 0x9F, 0xE0, 0x03, 0xFC, 0xFF, - 0x00, 0x3F, 0xC3, 0xFC, 0x01, 0xFE, 0x0F, 0xE0, 0x0F, 0xE0, 0x7F, 0x00, - 0xFF, 0x01, 0xFC, 0x07, 0xF0, 0x0F, 0xE0, 0x7F, 0x80, 0x3F, 0x83, 0xF8, - 0x01, 0xFC, 0x3F, 0xC0, 0x07, 0xF1, 0xFC, 0x00, 0x3F, 0x8F, 0xE0, 0x00, - 0xFE, 0xFE, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, - 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xC0, 0x00, - 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, - 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, - 0xE1, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, - 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, - 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x03, 0xC0, 0x07, 0x00, - 0x1C, 0x00, 0x78, 0x00, 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x1C, 0x00, 0x70, - 0x01, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0x70, 0x01, 0xC0, 0x07, - 0x00, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, - 0x03, 0x80, 0x0E, 0x00, 0x3C, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, - 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, - 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, - 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xFC, 0x00, - 0x7D, 0xF0, 0x01, 0xF7, 0xC0, 0x0F, 0xDF, 0x80, 0x3E, 0x3E, 0x00, 0xF8, - 0xFC, 0x07, 0xE1, 0xF0, 0x1F, 0x07, 0xC0, 0xFC, 0x1F, 0x83, 0xE0, 0x3E, - 0x0F, 0x80, 0xFC, 0x7E, 0x01, 0xF1, 0xF0, 0x07, 0xC7, 0xC0, 0x1F, 0xBE, - 0x00, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3E, 0x0F, 0x83, 0xC0, 0xF0, 0x38, 0x1E, - 0x01, 0xFF, 0x00, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, - 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xFC, 0x7F, 0x03, 0xFC, 0x7E, 0x01, 0xFC, - 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xFC, - 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x7F, 0xC1, 0xFC, 0xFF, 0x01, 0xFC, - 0xFE, 0x01, 0xFC, 0xFE, 0x03, 0xFC, 0xFE, 0x03, 0xFC, 0xFF, 0x07, 0xFC, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0x3F, 0xFD, 0xFE, - 0x1F, 0xF0, 0xFF, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, - 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x0F, - 0xC0, 0x3F, 0x9F, 0xF8, 0x1F, 0xDF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC7, 0xFF, - 0xFF, 0xE3, 0xFF, 0xFF, 0xF9, 0xFF, 0x83, 0xFE, 0xFF, 0x80, 0xFF, 0x7F, - 0x80, 0x3F, 0xBF, 0xC0, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, - 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x3F, - 0xFF, 0x80, 0x3F, 0xFF, 0xC0, 0x1F, 0xDF, 0xF0, 0x1F, 0xEF, 0xFC, 0x1F, - 0xF7, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xF8, 0xFE, 0xFF, - 0xF8, 0x7F, 0x3F, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x07, - 0xFF, 0xC0, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC7, 0xFF, - 0xFF, 0x9F, 0xF0, 0x7F, 0xBF, 0xC0, 0x7F, 0x7F, 0x00, 0x7F, 0xFC, 0x00, - 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0xFD, - 0xFE, 0x03, 0xFB, 0xFE, 0x0F, 0xF3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x87, - 0xFF, 0xFE, 0x07, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x3F, 0x80, 0x7E, 0x1F, 0xC0, 0xFF, 0xCF, 0xE1, 0xFF, 0xF7, - 0xF1, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0x83, - 0xFF, 0x7F, 0x80, 0xFF, 0xBF, 0x80, 0x3F, 0xFF, 0xC0, 0x1F, 0xFF, 0xC0, - 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, - 0x00, 0x7F, 0xFE, 0x00, 0x3F, 0xFF, 0x80, 0x3F, 0xDF, 0xC0, 0x1F, 0xEF, - 0xF0, 0x1F, 0xF7, 0xFC, 0x1F, 0xF9, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, - 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xBF, 0x81, 0xFF, 0x9F, 0xC0, 0x3F, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, - 0xF0, 0x3F, 0xFF, 0xF8, 0x3F, 0xC3, 0xF8, 0x7F, 0x80, 0xFC, 0x7F, 0x00, - 0xFC, 0x7F, 0x00, 0x7C, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFE, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x7F, 0x00, - 0xFE, 0x3F, 0xC1, 0xFE, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xF8, 0x0F, 0xFF, - 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x01, 0xFC, 0x1F, 0xF0, 0xFF, - 0xC3, 0xFF, 0x1F, 0xFC, 0x7F, 0x81, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, - 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xFF, 0xE1, 0xFC, 0x07, 0xF0, 0x1F, - 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, - 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, - 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 0x07, 0xFE, - 0x7F, 0x0F, 0xFF, 0x7F, 0x1F, 0xFF, 0x7F, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, - 0xFF, 0x7F, 0xC3, 0xFF, 0x7F, 0x81, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x00, - 0xFF, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, - 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0xFF, 0xFF, 0x00, - 0xFF, 0x7F, 0x81, 0xFF, 0x7F, 0xC3, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, 0x7F, 0x07, 0xFE, 0x7F, 0x01, 0xF8, - 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0xFF, 0x7F, 0x01, 0xFE, 0x7F, 0xC3, 0xFE, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, - 0xF8, 0x0F, 0xFF, 0xE0, 0x01, 0xFF, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, - 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x3F, 0x83, - 0xF8, 0xFF, 0xC7, 0xF7, 0xFF, 0xCF, 0xEF, 0xFF, 0xDF, 0xFF, 0xFF, 0xBF, - 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0x01, 0xFF, 0xFE, 0x01, 0xFF, 0xF8, - 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, - 0x3F, 0xFF, 0x00, 0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, - 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, - 0xFF, 0x00, 0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0x1F, 0xC7, 0xF1, 0xFC, 0x7F, 0x1F, 0xC7, 0xF0, 0x00, - 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x7F, 0x1F, 0xC7, 0xF1, 0xFC, 0x7F, 0x1F, - 0xC7, 0xF1, 0xFC, 0x7F, 0x1F, 0xC7, 0xF1, 0xFC, 0x7F, 0x1F, 0xC7, 0xF1, - 0xFC, 0x7F, 0x1F, 0xC7, 0xF1, 0xFC, 0x7F, 0x1F, 0xC7, 0xF1, 0xFC, 0x7F, - 0x1F, 0xC7, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0xFE, 0x00, - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, - 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, - 0x00, 0x01, 0xFC, 0x03, 0xFB, 0xF8, 0x0F, 0xE7, 0xF0, 0x3F, 0xCF, 0xE0, - 0xFF, 0x1F, 0xC3, 0xFC, 0x3F, 0x87, 0xF0, 0x7F, 0x1F, 0xC0, 0xFE, 0x7F, - 0x01, 0xFD, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0xE0, - 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0xE0, 0x7F, 0xDF, 0xC0, 0xFF, 0x3F, 0xC1, - 0xFC, 0x3F, 0x83, 0xF8, 0x3F, 0x87, 0xF0, 0x7F, 0x8F, 0xE0, 0x7F, 0x1F, - 0xC0, 0xFF, 0x3F, 0x80, 0xFE, 0x7F, 0x01, 0xFE, 0xFE, 0x01, 0xFD, 0xFC, - 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0x1F, 0x80, 0x7E, - 0x0F, 0xE7, 0xFE, 0x1F, 0xF8, 0xFE, 0xFF, 0xF3, 0xFF, 0xCF, 0xFF, 0xFF, - 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x83, 0xFF, 0x0F, 0xFF, 0xF0, 0x1F, 0xE0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, - 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, - 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, - 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, - 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, - 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, - 0x01, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, 0xC0, 0x7F, 0xFE, 0x01, 0xFC, 0x07, - 0xF0, 0xFE, 0x1F, 0xC1, 0xFC, 0xFF, 0xE3, 0xFB, 0xFF, 0xE7, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0x80, 0xFF, - 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, - 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE, - 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, - 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE, 0x00, - 0xFE, 0x00, 0x7F, 0x80, 0x01, 0xFF, 0xF0, 0x01, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0x81, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF1, 0xFF, 0x07, 0xFC, 0xFF, - 0x01, 0xFE, 0x7F, 0x00, 0x7F, 0x7F, 0x80, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, - 0xC0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, - 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xBF, 0x80, 0x3F, 0x9F, 0xE0, 0x3F, - 0xCF, 0xF8, 0x3F, 0xE3, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, - 0xF0, 0x0F, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0xFE, - 0x1F, 0x80, 0x7F, 0x3F, 0xF0, 0x3F, 0xBF, 0xFE, 0x1F, 0xDF, 0xFF, 0x8F, - 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xF3, 0xFF, 0x07, 0xFD, 0xFF, 0x01, 0xFE, - 0xFF, 0x00, 0x7F, 0x7F, 0x80, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, - 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, - 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xBF, 0xE0, 0x3F, 0xDF, 0xF8, - 0x3F, 0xCF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE3, 0xFB, 0xFF, 0xE1, 0xFD, - 0xFF, 0xF0, 0xFE, 0x7F, 0xE0, 0x7F, 0x0F, 0xC0, 0x3F, 0x80, 0x00, 0x1F, - 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x81, 0xFF, 0x9F, 0xC3, 0xFF, - 0xEF, 0xE1, 0xFF, 0xF7, 0xF1, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFD, 0xFF, - 0x07, 0xFE, 0xFF, 0x01, 0xFF, 0x7F, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, - 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, - 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xBF, 0x80, 0x3F, - 0xDF, 0xE0, 0x3F, 0xEF, 0xF8, 0x3F, 0xF3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, - 0xFC, 0x7F, 0xFE, 0xFE, 0x1F, 0xFF, 0x7F, 0x03, 0xFF, 0x3F, 0x80, 0x7E, - 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0xFE, 0x1F, 0xFC, - 0x7F, 0xFB, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0x80, - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F, - 0x80, 0x7F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, - 0x1F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x07, - 0xFF, 0xE0, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x7F, - 0x81, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0xC0, 0x00, 0x7F, - 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x07, - 0xFF, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x81, 0xFE, 0x7F, - 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x01, - 0xFF, 0x80, 0x3F, 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, - 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, - 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, - 0x83, 0xF8, 0x3F, 0x83, 0xF8, 0x3F, 0x83, 0xFF, 0x3F, 0xF1, 0xFF, 0x0F, - 0xF0, 0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, - 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, - 0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, - 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, - 0xFE, 0x00, 0xFF, 0xFC, 0x03, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, - 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xDF, 0xFF, 0xBF, 0x9F, 0xFF, 0x7F, 0x1F, - 0xFC, 0xFE, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0x9F, - 0xC0, 0x1F, 0xC7, 0xE0, 0x0F, 0xE3, 0xF8, 0x07, 0xE1, 0xFC, 0x07, 0xF0, - 0x7E, 0x03, 0xF8, 0x3F, 0x81, 0xF8, 0x1F, 0xC0, 0xFC, 0x07, 0xE0, 0xFE, - 0x03, 0xF8, 0x7E, 0x00, 0xFC, 0x3F, 0x00, 0x7E, 0x1F, 0x80, 0x3F, 0x1F, - 0x80, 0x0F, 0xCF, 0xC0, 0x07, 0xE7, 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0xFF, - 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x07, - 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0xFC, 0x03, 0xF8, 0x0F, 0xFF, 0xC0, 0x7F, 0x01, 0xFF, 0xF8, 0x0F, 0xE0, - 0x3F, 0x3F, 0x03, 0xFE, 0x07, 0xE7, 0xE0, 0x7F, 0xC1, 0xFC, 0xFE, 0x0F, - 0xF8, 0x3F, 0x9F, 0xC1, 0xFF, 0x07, 0xE1, 0xF8, 0x3D, 0xE0, 0xFC, 0x3F, - 0x0F, 0xBE, 0x3F, 0x87, 0xF1, 0xF7, 0xC7, 0xE0, 0x7E, 0x3E, 0xF8, 0xFC, - 0x0F, 0xC7, 0xDF, 0x1F, 0x81, 0xF9, 0xF1, 0xE3, 0xF0, 0x3F, 0x3E, 0x3E, - 0xFC, 0x03, 0xF7, 0xC7, 0xDF, 0x80, 0x7E, 0xF8, 0xFB, 0xF0, 0x0F, 0xDE, - 0x1F, 0x7C, 0x00, 0xFF, 0xC1, 0xFF, 0x80, 0x1F, 0xF8, 0x3F, 0xF0, 0x03, - 0xFF, 0x07, 0xFE, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x07, 0xF8, 0x1F, 0xF0, - 0x00, 0xFF, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x07, - 0xF0, 0x00, 0xFF, 0x00, 0xFF, 0x7F, 0x81, 0xFE, 0x3F, 0x81, 0xFC, 0x3F, - 0xC3, 0xFC, 0x1F, 0xC3, 0xF8, 0x0F, 0xE7, 0xF0, 0x0F, 0xEF, 0xF0, 0x07, - 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, - 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x03, - 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x0F, 0xE7, 0xF0, 0x1F, - 0xE7, 0xF0, 0x1F, 0xC3, 0xF8, 0x3F, 0xC3, 0xFC, 0x7F, 0x81, 0xFC, 0x7F, - 0x01, 0xFE, 0xFF, 0x00, 0xFF, 0x7F, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0xDF, - 0xC0, 0x0F, 0xC7, 0xF0, 0x07, 0xE3, 0xF8, 0x07, 0xF1, 0xFC, 0x03, 0xF0, - 0x7F, 0x01, 0xF8, 0x3F, 0x81, 0xFC, 0x0F, 0xC0, 0xFC, 0x07, 0xF0, 0x7E, - 0x03, 0xF8, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0x7E, 0x1F, 0x80, 0x3F, 0x8F, - 0xC0, 0x0F, 0xCF, 0xC0, 0x07, 0xE7, 0xE0, 0x03, 0xFB, 0xF0, 0x00, 0xFD, - 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFC, 0x00, 0x07, - 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x1F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0x07, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7F, 0xFF, - 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xBF, - 0xFF, 0xFC, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x1F, 0xE0, 0x01, 0xFE, - 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x1F, - 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xC1, 0xFE, 0x0F, 0xF0, 0xFF, - 0x87, 0xE0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, - 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x3F, - 0x0F, 0xF0, 0x7F, 0x03, 0xF8, 0x1F, 0xE0, 0x1F, 0x80, 0x7C, 0x03, 0xE0, - 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, - 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xE0, 0x3F, 0xE0, 0xFF, 0x07, 0xF8, 0x1F, - 0xC0, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFC, 0x07, 0xF0, 0x3F, 0xC1, 0xFE, 0x0F, 0xF8, 0x0F, 0xC0, 0x3E, 0x01, - 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, - 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x80, 0x7F, 0x81, 0xFC, - 0x0F, 0xE0, 0xFF, 0x0F, 0xC0, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, - 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, - 0x0F, 0xC3, 0xFE, 0x1F, 0xE0, 0xFF, 0x07, 0xF0, 0x3F, 0x00, 0x1F, 0x00, - 0x03, 0xFE, 0x00, 0x1F, 0xF8, 0x0F, 0xFF, 0xF0, 0xFF, 0x0F, 0xFF, 0xF0, - 0x1F, 0xF8, 0x00, 0x7F, 0x80, 0x00, 0xF8}; - -const GFXglyph FreeSansBold24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 13, 0, 1}, // 0x20 ' ' - {0, 7, 34, 16, 5, -33}, // 0x21 '!' - {30, 18, 12, 22, 2, -33}, // 0x22 '"' - {57, 26, 33, 26, 0, -31}, // 0x23 '#' - {165, 25, 40, 26, 1, -34}, // 0x24 '$' - {290, 39, 34, 42, 1, -32}, // 0x25 '%' - {456, 30, 35, 34, 3, -33}, // 0x26 '&' - {588, 7, 12, 12, 3, -33}, // 0x27 ''' - {599, 13, 44, 16, 2, -33}, // 0x28 '(' - {671, 13, 44, 16, 1, -33}, // 0x29 ')' - {743, 15, 15, 18, 1, -33}, // 0x2A '*' - {772, 23, 22, 27, 2, -21}, // 0x2B '+' - {836, 7, 15, 12, 2, -6}, // 0x2C ',' - {850, 13, 6, 16, 1, -15}, // 0x2D '-' - {860, 7, 7, 12, 2, -6}, // 0x2E '.' - {867, 13, 34, 13, 0, -32}, // 0x2F '/' - {923, 24, 35, 26, 1, -33}, // 0x30 '0' - {1028, 14, 33, 26, 4, -32}, // 0x31 '1' - {1086, 23, 34, 26, 2, -33}, // 0x32 '2' - {1184, 23, 35, 26, 2, -33}, // 0x33 '3' - {1285, 22, 33, 26, 2, -32}, // 0x34 '4' - {1376, 23, 34, 26, 2, -32}, // 0x35 '5' - {1474, 23, 35, 26, 2, -33}, // 0x36 '6' - {1575, 23, 33, 26, 1, -32}, // 0x37 '7' - {1670, 24, 35, 26, 1, -33}, // 0x38 '8' - {1775, 24, 35, 26, 1, -33}, // 0x39 '9' - {1880, 7, 25, 12, 2, -24}, // 0x3A ':' - {1902, 7, 33, 12, 2, -24}, // 0x3B ';' - {1931, 23, 23, 27, 2, -22}, // 0x3C '<' - {1998, 23, 18, 27, 2, -19}, // 0x3D '=' - {2050, 23, 23, 27, 2, -22}, // 0x3E '>' - {2117, 24, 35, 29, 3, -34}, // 0x3F '?' - {2222, 43, 41, 46, 1, -34}, // 0x40 '@' - {2443, 32, 34, 33, 0, -33}, // 0x41 'A' - {2579, 27, 34, 33, 4, -33}, // 0x42 'B' - {2694, 30, 36, 34, 2, -34}, // 0x43 'C' - {2829, 28, 34, 34, 4, -33}, // 0x44 'D' - {2948, 25, 34, 31, 4, -33}, // 0x45 'E' - {3055, 24, 34, 30, 4, -33}, // 0x46 'F' - {3157, 31, 36, 36, 2, -34}, // 0x47 'G' - {3297, 27, 34, 35, 4, -33}, // 0x48 'H' - {3412, 7, 34, 15, 4, -33}, // 0x49 'I' - {3442, 22, 35, 27, 1, -33}, // 0x4A 'J' - {3539, 30, 34, 34, 4, -33}, // 0x4B 'K' - {3667, 23, 34, 29, 4, -33}, // 0x4C 'L' - {3765, 33, 34, 41, 4, -33}, // 0x4D 'M' - {3906, 28, 34, 35, 4, -33}, // 0x4E 'N' - {4025, 33, 36, 37, 2, -34}, // 0x4F 'O' - {4174, 26, 34, 32, 4, -33}, // 0x50 'P' - {4285, 33, 37, 37, 2, -34}, // 0x51 'Q' - {4438, 28, 34, 34, 4, -33}, // 0x52 'R' - {4557, 28, 36, 32, 2, -34}, // 0x53 'S' - {4683, 27, 34, 30, 2, -33}, // 0x54 'T' - {4798, 27, 35, 35, 4, -33}, // 0x55 'U' - {4917, 29, 34, 31, 1, -33}, // 0x56 'V' - {5041, 43, 34, 45, 1, -33}, // 0x57 'W' - {5224, 30, 34, 32, 1, -33}, // 0x58 'X' - {5352, 29, 34, 30, 1, -33}, // 0x59 'Y' - {5476, 26, 34, 29, 1, -33}, // 0x5A 'Z' - {5587, 11, 43, 16, 3, -33}, // 0x5B '[' - {5647, 14, 34, 13, -1, -32}, // 0x5C '\' - {5707, 11, 43, 16, 1, -33}, // 0x5D ']' - {5767, 22, 20, 27, 3, -32}, // 0x5E '^' - {5822, 28, 4, 26, -1, 6}, // 0x5F '_' - {5836, 9, 7, 12, 1, -35}, // 0x60 '`' - {5844, 24, 26, 27, 2, -24}, // 0x61 'a' - {5922, 25, 35, 29, 3, -33}, // 0x62 'b' - {6032, 23, 26, 26, 2, -24}, // 0x63 'c' - {6107, 25, 35, 29, 2, -33}, // 0x64 'd' - {6217, 24, 26, 27, 2, -24}, // 0x65 'e' - {6295, 14, 34, 16, 1, -33}, // 0x66 'f' - {6355, 24, 36, 29, 2, -24}, // 0x67 'g' - {6463, 23, 34, 28, 3, -33}, // 0x68 'h' - {6561, 7, 34, 13, 3, -33}, // 0x69 'i' - {6591, 10, 45, 13, 0, -33}, // 0x6A 'j' - {6648, 23, 34, 27, 3, -33}, // 0x6B 'k' - {6746, 7, 34, 13, 3, -33}, // 0x6C 'l' - {6776, 36, 25, 42, 3, -24}, // 0x6D 'm' - {6889, 23, 25, 29, 3, -24}, // 0x6E 'n' - {6961, 25, 26, 29, 2, -24}, // 0x6F 'o' - {7043, 25, 36, 29, 3, -24}, // 0x70 'p' - {7156, 25, 36, 29, 2, -24}, // 0x71 'q' - {7269, 15, 25, 18, 3, -24}, // 0x72 'r' - {7316, 24, 26, 26, 1, -24}, // 0x73 's' - {7394, 12, 32, 16, 2, -30}, // 0x74 't' - {7442, 23, 26, 29, 3, -24}, // 0x75 'u' - {7517, 25, 25, 25, 0, -24}, // 0x76 'v' - {7596, 35, 25, 37, 1, -24}, // 0x77 'w' - {7706, 24, 25, 26, 1, -24}, // 0x78 'x' - {7781, 25, 36, 26, 0, -24}, // 0x79 'y' - {7894, 21, 25, 24, 1, -24}, // 0x7A 'z' - {7960, 13, 43, 18, 2, -33}, // 0x7B '{' - {8030, 4, 44, 13, 5, -33}, // 0x7C '|' - {8052, 13, 43, 18, 3, -33}, // 0x7D '}' - {8122, 21, 8, 23, 1, -14}}; // 0x7E '~' - -const GFXfont FreeSansBold24pt7b PROGMEM = { - (uint8_t *)FreeSansBold24pt7bBitmaps, (GFXglyph *)FreeSansBold24pt7bGlyphs, - 0x20, 0x7E, 56}; - -// Approx. 8815 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold9pt7b.h deleted file mode 100644 index cffb178..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBold9pt7b.h +++ /dev/null @@ -1,210 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBold9pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFE, 0x48, 0x7E, 0xEF, 0xDF, 0xBF, 0x74, 0x40, 0x19, 0x86, - 0x67, 0xFD, 0xFF, 0x33, 0x0C, 0xC3, 0x33, 0xFE, 0xFF, 0x99, 0x86, 0x61, - 0x90, 0x10, 0x1F, 0x1F, 0xDE, 0xFF, 0x3F, 0x83, 0xC0, 0xFC, 0x1F, 0x09, - 0xFC, 0xFE, 0xF7, 0xF1, 0xE0, 0x40, 0x38, 0x10, 0x7C, 0x30, 0xC6, 0x20, - 0xC6, 0x40, 0xC6, 0x40, 0x7C, 0x80, 0x39, 0x9C, 0x01, 0x3E, 0x03, 0x63, - 0x02, 0x63, 0x04, 0x63, 0x0C, 0x3E, 0x08, 0x1C, 0x0E, 0x01, 0xF8, 0x3B, - 0x83, 0xB8, 0x3F, 0x01, 0xE0, 0x3E, 0x67, 0x76, 0xE3, 0xEE, 0x1C, 0xF3, - 0xC7, 0xFE, 0x3F, 0x70, 0xFF, 0xF4, 0x18, 0x63, 0x1C, 0x73, 0x8E, 0x38, - 0xE3, 0x8E, 0x18, 0x70, 0xC3, 0x06, 0x08, 0x61, 0x83, 0x0E, 0x38, 0x71, - 0xC7, 0x1C, 0x71, 0xC6, 0x38, 0xE3, 0x18, 0x40, 0x21, 0x3E, 0x45, 0x28, - 0x38, 0x70, 0xE7, 0xFF, 0xE7, 0x0E, 0x1C, 0xFC, 0x9C, 0xFF, 0xC0, 0xFC, - 0x08, 0xC4, 0x23, 0x10, 0x84, 0x62, 0x11, 0x88, 0x00, 0x3E, 0x3F, 0x9D, - 0xDC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xDD, 0xCF, 0xE3, 0xE0, - 0x08, 0xFF, 0xF3, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x80, 0x3E, 0x3F, 0xB8, - 0xFC, 0x70, 0x38, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0F, 0xF7, 0xF8, - 0x3C, 0x7F, 0xE7, 0xE7, 0x07, 0x0C, 0x0E, 0x07, 0x07, 0xE7, 0xE7, 0x7E, - 0x3C, 0x0E, 0x1E, 0x1E, 0x2E, 0x2E, 0x4E, 0x4E, 0x8E, 0xFF, 0xFF, 0x0E, - 0x0E, 0x0E, 0x7F, 0x3F, 0x90, 0x18, 0x0D, 0xE7, 0xFB, 0x9E, 0x07, 0x03, - 0x81, 0xF1, 0xFF, 0xE7, 0xC0, 0x3E, 0x3F, 0x9C, 0xFC, 0x0E, 0xE7, 0xFB, - 0xDF, 0xC7, 0xE3, 0xF1, 0xDD, 0xEF, 0xE3, 0xE0, 0xFF, 0xFF, 0xC0, 0xE0, - 0xE0, 0x60, 0x70, 0x30, 0x38, 0x1C, 0x0C, 0x0E, 0x07, 0x03, 0x80, 0x3F, - 0x1F, 0xEE, 0x3F, 0x87, 0xE3, 0xCF, 0xC7, 0xFB, 0xCF, 0xE1, 0xF8, 0x7F, - 0x3D, 0xFE, 0x3F, 0x00, 0x3E, 0x3F, 0xBD, 0xDC, 0x7E, 0x3F, 0x1F, 0xDE, - 0xFF, 0x3B, 0x81, 0xF9, 0xCF, 0xE3, 0xC0, 0xFC, 0x00, 0x07, 0xE0, 0xFC, - 0x00, 0x07, 0xE5, 0xE0, 0x00, 0x83, 0xC7, 0xDF, 0x0C, 0x07, 0x80, 0xF8, - 0x1F, 0x01, 0x80, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x70, - 0x3F, 0x03, 0xE0, 0x38, 0x7D, 0xF1, 0xE0, 0x80, 0x00, 0x3E, 0x3F, 0xB8, - 0xFC, 0x70, 0x38, 0x1C, 0x1C, 0x1C, 0x1C, 0x0E, 0x00, 0x03, 0x81, 0xC0, - 0x03, 0xF0, 0x0F, 0xFC, 0x1E, 0x0E, 0x38, 0x02, 0x70, 0xE9, 0x63, 0x19, - 0xC2, 0x19, 0xC6, 0x11, 0xC6, 0x33, 0xC6, 0x32, 0x63, 0xFE, 0x73, 0xDC, - 0x3C, 0x00, 0x1F, 0xF8, 0x07, 0xF0, 0x07, 0x00, 0xF0, 0x0F, 0x80, 0xF8, - 0x1D, 0x81, 0x9C, 0x19, 0xC3, 0x8C, 0x3F, 0xE7, 0xFE, 0x70, 0x66, 0x07, - 0xE0, 0x70, 0xFF, 0x9F, 0xFB, 0x83, 0xF0, 0x7E, 0x0F, 0xFF, 0x3F, 0xF7, - 0x06, 0xE0, 0xFC, 0x1F, 0x83, 0xFF, 0xEF, 0xF8, 0x1F, 0x83, 0xFE, 0x78, - 0xE7, 0x07, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x07, 0x07, 0x78, - 0xF3, 0xFE, 0x1F, 0x80, 0xFF, 0x8F, 0xFC, 0xE0, 0xEE, 0x0E, 0xE0, 0x7E, - 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x0E, 0xE0, 0xEF, 0xFC, 0xFF, 0x80, - 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07, 0xFB, 0xFD, 0xC0, 0xE0, 0x70, 0x38, - 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x1C, 0x0E, 0x07, 0xFB, 0xFD, 0xC0, - 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, 0x0F, 0x87, 0xF9, 0xE3, 0xB8, 0x3E, - 0x01, 0xC0, 0x38, 0xFF, 0x1F, 0xE0, 0x6E, 0x0D, 0xE3, 0x9F, 0xD0, 0xF2, - 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, - 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xE7, 0xE7, 0xE7, 0x7E, 0x3C, - 0xE0, 0xEE, 0x1C, 0xE3, 0x8E, 0x70, 0xEE, 0x0F, 0xC0, 0xFE, 0x0F, 0x70, - 0xE7, 0x0E, 0x38, 0xE1, 0xCE, 0x0E, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xF8, 0x7F, 0xE1, - 0xFF, 0x87, 0xFE, 0x1F, 0xEC, 0x7F, 0xB3, 0x7E, 0xCD, 0xFB, 0x37, 0xEC, - 0xDF, 0x9E, 0x7E, 0x79, 0xF9, 0xE7, 0xE7, 0x9C, 0xE0, 0xFE, 0x1F, 0xC3, - 0xFC, 0x7F, 0xCF, 0xD9, 0xFB, 0xBF, 0x37, 0xE7, 0xFC, 0x7F, 0x87, 0xF0, - 0xFE, 0x0E, 0x0F, 0x81, 0xFF, 0x1E, 0x3C, 0xE0, 0xEE, 0x03, 0xF0, 0x1F, - 0x80, 0xFC, 0x07, 0xE0, 0x3B, 0x83, 0x9E, 0x3C, 0x7F, 0xC0, 0xF8, 0x00, - 0xFF, 0x9F, 0xFB, 0x87, 0xF0, 0x7E, 0x0F, 0xC3, 0xFF, 0xF7, 0xFC, 0xE0, - 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x0F, 0x81, 0xFF, 0x1E, 0x3C, 0xE0, - 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE1, 0xBB, 0x8F, 0x9E, 0x3C, - 0x7F, 0xE0, 0xFB, 0x80, 0x08, 0xFF, 0x8F, 0xFC, 0xE0, 0xEE, 0x0E, 0xE0, - 0xEE, 0x0E, 0xFF, 0xCF, 0xFC, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, - 0xF0, 0x3F, 0x0F, 0xFB, 0xC7, 0xF0, 0x7E, 0x01, 0xFC, 0x1F, 0xF0, 0x3F, - 0x00, 0xFC, 0x1D, 0xC7, 0xBF, 0xE1, 0xF8, 0xFF, 0xFF, 0xC7, 0x03, 0x81, - 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0xFC, - 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, - 0xC7, 0xBF, 0xE1, 0xF0, 0x60, 0x67, 0x0E, 0x70, 0xE3, 0x0C, 0x30, 0xC3, - 0x9C, 0x19, 0x81, 0x98, 0x1F, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x06, 0x00, - 0x61, 0xC3, 0xB8, 0xE1, 0x9C, 0x70, 0xCE, 0x3C, 0xE3, 0x36, 0x71, 0x9B, - 0x30, 0xED, 0x98, 0x36, 0x7C, 0x1B, 0x3C, 0x0F, 0x1E, 0x07, 0x8F, 0x01, - 0xC3, 0x80, 0xE1, 0x80, 0x70, 0xE7, 0x8E, 0x39, 0xC1, 0xF8, 0x1F, 0x80, - 0xF0, 0x07, 0x00, 0xF0, 0x1F, 0x81, 0x9C, 0x39, 0xC7, 0x0E, 0x70, 0xE0, - 0xE0, 0xFC, 0x39, 0xC7, 0x18, 0xC3, 0xB8, 0x36, 0x07, 0xC0, 0x70, 0x0E, - 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xC0, 0xE0, 0xE0, 0xF0, - 0x70, 0x70, 0x70, 0x78, 0x38, 0x38, 0x1F, 0xFF, 0xF8, 0xFF, 0xEE, 0xEE, - 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0xF0, 0x86, 0x10, 0x86, 0x10, 0x84, 0x30, - 0x84, 0x30, 0x80, 0xFF, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7F, 0xF0, - 0x18, 0x1C, 0x3C, 0x3E, 0x36, 0x66, 0x63, 0xC3, 0xFF, 0xC0, 0xCC, 0x3F, - 0x1F, 0xEE, 0x38, 0x0E, 0x3F, 0x9E, 0xEE, 0x3B, 0x9E, 0xFF, 0x9E, 0xE0, - 0xE0, 0x38, 0x0E, 0x03, 0xBC, 0xFF, 0xBC, 0xEE, 0x1F, 0x87, 0xE1, 0xF8, - 0x7F, 0x3B, 0xFE, 0xEF, 0x00, 0x1F, 0x3F, 0xDC, 0x7C, 0x0E, 0x07, 0x03, - 0x80, 0xE3, 0x7F, 0x8F, 0x00, 0x03, 0x81, 0xC0, 0xE7, 0x77, 0xFB, 0xBF, - 0x8F, 0xC7, 0xE3, 0xF1, 0xFD, 0xEF, 0xF3, 0xB8, 0x3E, 0x3F, 0x9C, 0xDC, - 0x3F, 0xFF, 0xFF, 0x81, 0xC3, 0x7F, 0x8F, 0x00, 0x3B, 0xDD, 0xFF, 0xB9, - 0xCE, 0x73, 0x9C, 0xE7, 0x00, 0x3B, 0xBF, 0xDD, 0xFC, 0x7E, 0x3F, 0x1F, - 0x8F, 0xEF, 0x7F, 0x9D, 0xC0, 0xFC, 0x77, 0xF1, 0xF0, 0xE0, 0x70, 0x38, - 0x1D, 0xEF, 0xFF, 0x9F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x38, - 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0x77, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x7F, 0xE0, 0xE0, 0x70, 0x38, 0x1C, 0x7E, 0x77, 0x73, 0xF1, 0xF8, 0xFE, - 0x77, 0x39, 0xDC, 0x6E, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEF, 0x7B, - 0xFF, 0xFE, 0x39, 0xF8, 0xE7, 0xE3, 0x9F, 0x8E, 0x7E, 0x39, 0xF8, 0xE7, - 0xE3, 0x9F, 0x8E, 0x70, 0xEF, 0x7F, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, - 0xC7, 0xE3, 0xF1, 0xC0, 0x1E, 0x1F, 0xE7, 0x3B, 0x87, 0xE1, 0xF8, 0x7E, - 0x1D, 0xCE, 0x7F, 0x87, 0x80, 0xEF, 0x3F, 0xEF, 0x3B, 0x87, 0xE1, 0xF8, - 0x7E, 0x1F, 0xCE, 0xFF, 0xBB, 0xCE, 0x03, 0x80, 0xE0, 0x38, 0x00, 0x3B, - 0xBF, 0xFD, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xEF, 0x7F, 0x9D, 0xC0, 0xE0, - 0x70, 0x38, 0x1C, 0xEF, 0xFF, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x80, 0x3E, - 0x3F, 0xB8, 0xFC, 0x0F, 0xC3, 0xFC, 0x3F, 0xC7, 0xFF, 0x1F, 0x00, 0x73, - 0xBF, 0xF7, 0x39, 0xCE, 0x73, 0x9E, 0x70, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, - 0x3F, 0x1F, 0x8F, 0xC7, 0xFF, 0xBD, 0xC0, 0xE1, 0x98, 0x67, 0x39, 0xCC, - 0x33, 0x0D, 0xC3, 0xE0, 0x78, 0x1E, 0x07, 0x00, 0xE3, 0x1D, 0x9E, 0x66, - 0x79, 0x99, 0xE6, 0x77, 0xB8, 0xD2, 0xC3, 0xCF, 0x0F, 0x3C, 0x3C, 0xF0, - 0x73, 0x80, 0x73, 0x9C, 0xE3, 0xF0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0xFC, - 0x73, 0x9C, 0xE0, 0xE1, 0xD8, 0x67, 0x39, 0xCE, 0x33, 0x0E, 0xC3, 0xE0, - 0x78, 0x1E, 0x03, 0x00, 0xC0, 0x70, 0x38, 0x0E, 0x00, 0xFE, 0xFE, 0x0E, - 0x1C, 0x38, 0x38, 0x70, 0xE0, 0xFF, 0xFF, 0x37, 0x66, 0x66, 0x6E, 0xE6, - 0x66, 0x66, 0x67, 0x30, 0xFF, 0xFF, 0x80, 0xCE, 0x66, 0x66, 0x67, 0x76, - 0x66, 0x66, 0x6E, 0xC0, 0x71, 0x8E}; - -const GFXglyph FreeSansBold9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 3, 13, 6, 2, -12}, // 0x21 '!' - {5, 7, 5, 9, 1, -12}, // 0x22 '"' - {10, 10, 12, 10, 0, -11}, // 0x23 '#' - {25, 9, 15, 10, 1, -13}, // 0x24 '$' - {42, 16, 13, 16, 0, -12}, // 0x25 '%' - {68, 12, 13, 13, 1, -12}, // 0x26 '&' - {88, 3, 5, 5, 1, -12}, // 0x27 ''' - {90, 6, 17, 6, 1, -12}, // 0x28 '(' - {103, 6, 17, 6, 0, -12}, // 0x29 ')' - {116, 5, 6, 7, 1, -12}, // 0x2A '*' - {120, 7, 8, 11, 2, -7}, // 0x2B '+' - {127, 3, 5, 4, 1, -1}, // 0x2C ',' - {129, 5, 2, 6, 0, -5}, // 0x2D '-' - {131, 3, 2, 4, 1, -1}, // 0x2E '.' - {132, 5, 13, 5, 0, -12}, // 0x2F '/' - {141, 9, 13, 10, 1, -12}, // 0x30 '0' - {156, 5, 13, 10, 2, -12}, // 0x31 '1' - {165, 9, 13, 10, 1, -12}, // 0x32 '2' - {180, 8, 13, 10, 1, -12}, // 0x33 '3' - {193, 8, 13, 10, 2, -12}, // 0x34 '4' - {206, 9, 13, 10, 1, -12}, // 0x35 '5' - {221, 9, 13, 10, 1, -12}, // 0x36 '6' - {236, 9, 13, 10, 0, -12}, // 0x37 '7' - {251, 10, 13, 10, 0, -12}, // 0x38 '8' - {268, 9, 13, 10, 1, -12}, // 0x39 '9' - {283, 3, 9, 4, 1, -8}, // 0x3A ':' - {287, 3, 12, 4, 1, -8}, // 0x3B ';' - {292, 9, 9, 11, 1, -8}, // 0x3C '<' - {303, 9, 6, 11, 1, -6}, // 0x3D '=' - {310, 9, 9, 11, 1, -8}, // 0x3E '>' - {321, 9, 13, 11, 1, -12}, // 0x3F '?' - {336, 16, 15, 18, 0, -12}, // 0x40 '@' - {366, 12, 13, 13, 0, -12}, // 0x41 'A' - {386, 11, 13, 13, 1, -12}, // 0x42 'B' - {404, 12, 13, 13, 1, -12}, // 0x43 'C' - {424, 12, 13, 13, 1, -12}, // 0x44 'D' - {444, 9, 13, 12, 1, -12}, // 0x45 'E' - {459, 9, 13, 11, 1, -12}, // 0x46 'F' - {474, 11, 13, 14, 1, -12}, // 0x47 'G' - {492, 11, 13, 13, 1, -12}, // 0x48 'H' - {510, 3, 13, 6, 1, -12}, // 0x49 'I' - {515, 8, 13, 10, 1, -12}, // 0x4A 'J' - {528, 12, 13, 13, 1, -12}, // 0x4B 'K' - {548, 8, 13, 11, 1, -12}, // 0x4C 'L' - {561, 14, 13, 16, 1, -12}, // 0x4D 'M' - {584, 11, 13, 14, 1, -12}, // 0x4E 'N' - {602, 13, 13, 14, 1, -12}, // 0x4F 'O' - {624, 11, 13, 12, 1, -12}, // 0x50 'P' - {642, 13, 14, 14, 1, -12}, // 0x51 'Q' - {665, 12, 13, 13, 1, -12}, // 0x52 'R' - {685, 11, 13, 12, 1, -12}, // 0x53 'S' - {703, 9, 13, 12, 2, -12}, // 0x54 'T' - {718, 11, 13, 13, 1, -12}, // 0x55 'U' - {736, 12, 13, 12, 0, -12}, // 0x56 'V' - {756, 17, 13, 17, 0, -12}, // 0x57 'W' - {784, 12, 13, 12, 0, -12}, // 0x58 'X' - {804, 11, 13, 12, 1, -12}, // 0x59 'Y' - {822, 9, 13, 11, 1, -12}, // 0x5A 'Z' - {837, 4, 17, 6, 1, -12}, // 0x5B '[' - {846, 5, 13, 5, 0, -12}, // 0x5C '\' - {855, 4, 17, 6, 0, -12}, // 0x5D ']' - {864, 8, 8, 11, 1, -12}, // 0x5E '^' - {872, 10, 1, 10, 0, 4}, // 0x5F '_' - {874, 3, 2, 5, 0, -12}, // 0x60 '`' - {875, 10, 10, 10, 1, -9}, // 0x61 'a' - {888, 10, 13, 11, 1, -12}, // 0x62 'b' - {905, 9, 10, 10, 1, -9}, // 0x63 'c' - {917, 9, 13, 11, 1, -12}, // 0x64 'd' - {932, 9, 10, 10, 1, -9}, // 0x65 'e' - {944, 5, 13, 6, 1, -12}, // 0x66 'f' - {953, 9, 14, 11, 1, -9}, // 0x67 'g' - {969, 9, 13, 11, 1, -12}, // 0x68 'h' - {984, 3, 13, 5, 1, -12}, // 0x69 'i' - {989, 4, 17, 5, 0, -12}, // 0x6A 'j' - {998, 9, 13, 10, 1, -12}, // 0x6B 'k' - {1013, 3, 13, 5, 1, -12}, // 0x6C 'l' - {1018, 14, 10, 16, 1, -9}, // 0x6D 'm' - {1036, 9, 10, 11, 1, -9}, // 0x6E 'n' - {1048, 10, 10, 11, 1, -9}, // 0x6F 'o' - {1061, 10, 14, 11, 1, -9}, // 0x70 'p' - {1079, 9, 14, 11, 1, -9}, // 0x71 'q' - {1095, 6, 10, 7, 1, -9}, // 0x72 'r' - {1103, 9, 10, 10, 1, -9}, // 0x73 's' - {1115, 5, 12, 6, 1, -11}, // 0x74 't' - {1123, 9, 10, 11, 1, -9}, // 0x75 'u' - {1135, 10, 10, 10, 0, -9}, // 0x76 'v' - {1148, 14, 10, 14, 0, -9}, // 0x77 'w' - {1166, 10, 10, 10, 0, -9}, // 0x78 'x' - {1179, 10, 14, 10, 0, -9}, // 0x79 'y' - {1197, 8, 10, 9, 1, -9}, // 0x7A 'z' - {1207, 4, 17, 7, 1, -12}, // 0x7B '{' - {1216, 1, 17, 5, 2, -12}, // 0x7C '|' - {1219, 4, 17, 7, 2, -12}, // 0x7D '}' - {1228, 8, 2, 9, 0, -4}}; // 0x7E '~' - -const GFXfont FreeSansBold9pt7b PROGMEM = {(uint8_t *)FreeSansBold9pt7bBitmaps, - (GFXglyph *)FreeSansBold9pt7bGlyphs, - 0x20, 0x7E, 22}; - -// Approx. 1902 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique12pt7b.h deleted file mode 100644 index ff76ce3..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique12pt7b.h +++ /dev/null @@ -1,319 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBoldOblique12pt7bBitmaps[] PROGMEM = { - 0x1C, 0x3C, 0x78, 0xE1, 0xC3, 0x8F, 0x1C, 0x38, 0x70, 0xC1, 0x83, 0x00, - 0x1C, 0x78, 0xF0, 0x71, 0xFC, 0xFE, 0x3B, 0x8E, 0xC3, 0x30, 0xC0, 0x01, - 0x8C, 0x07, 0x38, 0x0C, 0x61, 0xFF, 0xF3, 0xFF, 0xE7, 0xFF, 0x83, 0x9C, - 0x0E, 0x70, 0x1C, 0xE1, 0xFF, 0xF3, 0xFF, 0xC7, 0xFF, 0x83, 0x18, 0x0E, - 0x70, 0x18, 0xC0, 0x73, 0x80, 0x00, 0x40, 0x07, 0xF0, 0x3F, 0xF0, 0xFF, - 0xF3, 0xC9, 0xE7, 0xB3, 0xCF, 0x60, 0x1F, 0xC0, 0x3F, 0xC0, 0x3F, 0xE0, - 0x1F, 0xE0, 0x1B, 0xE0, 0x33, 0xDE, 0x47, 0xBC, 0x8F, 0x7F, 0x7C, 0x7F, - 0xF0, 0x7F, 0x80, 0x18, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x01, 0x87, - 0x80, 0xC3, 0xF0, 0x61, 0xFE, 0x10, 0xE1, 0x8C, 0x30, 0x66, 0x0C, 0x3B, - 0x03, 0xFC, 0x80, 0x7E, 0x60, 0x0F, 0x30, 0x00, 0x18, 0x70, 0x0C, 0x7E, - 0x03, 0x1F, 0xC1, 0x8E, 0x30, 0xC3, 0x1C, 0x60, 0xFE, 0x18, 0x1F, 0x8C, - 0x07, 0x80, 0x01, 0xE0, 0x07, 0xF0, 0x1F, 0xE0, 0x79, 0xC0, 0xF3, 0x81, - 0xEE, 0x01, 0xF8, 0x01, 0xE0, 0x1F, 0xC6, 0x7B, 0xDD, 0xE3, 0xF7, 0x87, - 0xEF, 0x07, 0x9F, 0x1F, 0x3F, 0xFF, 0x3F, 0xDE, 0x3F, 0x1C, 0x7F, 0xEE, - 0xCC, 0x03, 0x83, 0x81, 0x81, 0xC1, 0xC0, 0xE0, 0xE0, 0x70, 0x70, 0x38, - 0x3C, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x18, 0x0E, 0x07, - 0x01, 0x80, 0x06, 0x03, 0x81, 0xC0, 0x60, 0x38, 0x1C, 0x0E, 0x07, 0x03, - 0x81, 0xC0, 0xE0, 0xE0, 0x70, 0x38, 0x38, 0x1C, 0x1C, 0x0E, 0x0E, 0x06, - 0x07, 0x07, 0x00, 0x0C, 0x0C, 0x4F, 0xFF, 0x1C, 0x3C, 0x6C, 0x44, 0x03, - 0x80, 0x38, 0x07, 0x00, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0xE0, 0x0E, - 0x00, 0xE0, 0x0C, 0x00, 0x7B, 0xDC, 0x23, 0x33, 0x00, 0x7F, 0xFF, 0xF0, - 0x7F, 0xE0, 0x00, 0xC0, 0x30, 0x18, 0x04, 0x03, 0x00, 0x80, 0x60, 0x10, - 0x0C, 0x02, 0x01, 0x80, 0x40, 0x30, 0x08, 0x06, 0x01, 0x00, 0xC0, 0x00, - 0x03, 0xC0, 0x7F, 0x87, 0xFC, 0x78, 0xF3, 0xC7, 0xBC, 0x3D, 0xE1, 0xEF, - 0x0F, 0xF0, 0x7F, 0x87, 0xBC, 0x3D, 0xE1, 0xEF, 0x1E, 0x78, 0xF3, 0xFF, - 0x0F, 0xF0, 0x3E, 0x00, 0x03, 0x83, 0x83, 0xCF, 0xEF, 0xF0, 0x78, 0x38, - 0x1C, 0x0E, 0x0F, 0x07, 0x03, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x00, - 0x03, 0xF0, 0x0F, 0xF8, 0x7F, 0xF8, 0xF1, 0xF3, 0xC1, 0xE7, 0x83, 0xC0, - 0x07, 0x80, 0x1E, 0x00, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x7C, 0x01, 0xE0, - 0x07, 0x00, 0x1F, 0xFC, 0x3F, 0xF8, 0xFF, 0xF0, 0x07, 0xE0, 0xFF, 0x8F, - 0xFE, 0xF8, 0xF7, 0x87, 0x80, 0x78, 0x0F, 0x80, 0xFC, 0x07, 0xE0, 0x0F, - 0x80, 0x3C, 0x01, 0xEF, 0x0F, 0x78, 0xF3, 0xFF, 0x8F, 0xF8, 0x3F, 0x00, - 0x00, 0x78, 0x07, 0xC0, 0x7E, 0x03, 0xF0, 0x37, 0x03, 0x38, 0x31, 0xC3, - 0x9E, 0x38, 0xF1, 0x87, 0x1F, 0xFE, 0xFF, 0xF7, 0xFF, 0x80, 0xF0, 0x07, - 0x00, 0x38, 0x03, 0xC0, 0x07, 0xFC, 0x1F, 0xF0, 0xFF, 0xC3, 0x00, 0x1C, - 0x00, 0x7F, 0x81, 0xFF, 0x0F, 0xFE, 0x38, 0xF8, 0x01, 0xE0, 0x07, 0x80, - 0x1E, 0xF0, 0xF3, 0xC7, 0xCF, 0xFE, 0x1F, 0xF0, 0x3F, 0x00, 0x03, 0xE0, - 0x7F, 0x87, 0xFE, 0x78, 0xF3, 0xC0, 0x3D, 0xE1, 0xFF, 0x8F, 0xFE, 0xF8, - 0xF7, 0xC7, 0xBC, 0x3D, 0xE1, 0xEF, 0x1E, 0x7C, 0xF3, 0xFF, 0x0F, 0xF0, - 0x1F, 0x00, 0x7F, 0xFB, 0xFF, 0xDF, 0xFE, 0x00, 0xE0, 0x0E, 0x00, 0xE0, - 0x0E, 0x00, 0xE0, 0x0F, 0x00, 0x70, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, - 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x00, 0x03, 0xF0, 0x1F, 0xE0, 0xFF, 0xC7, - 0x8F, 0x1C, 0x3C, 0x71, 0xE0, 0xFF, 0x03, 0xF8, 0x3F, 0xF1, 0xF1, 0xE7, - 0x87, 0xBC, 0x1E, 0xF0, 0x7B, 0xE3, 0xCF, 0xFF, 0x1F, 0xF8, 0x1F, 0x80, - 0x03, 0xE0, 0x3F, 0xE1, 0xFF, 0x8F, 0x9F, 0x3C, 0x3D, 0xE0, 0xF7, 0x83, - 0xDE, 0x1F, 0x78, 0xFD, 0xFF, 0xE3, 0xFF, 0x87, 0xDE, 0x00, 0xF3, 0xC7, - 0x8F, 0xFE, 0x1F, 0xF0, 0x3F, 0x00, 0x1C, 0xF3, 0x80, 0x00, 0x00, 0x00, - 0x01, 0xCF, 0x38, 0x0E, 0x3C, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, - 0xE3, 0x81, 0x06, 0x18, 0x60, 0x00, 0x00, 0x01, 0xC0, 0x7E, 0x1F, 0xE7, - 0xF8, 0x7E, 0x03, 0xE0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x00, 0x78, 0x00, - 0xC0, 0x3F, 0xFC, 0xFF, 0xF3, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0x9F, 0xFC, 0x7F, 0xF0, 0x30, 0x01, 0xE0, 0x0F, 0xE0, 0x3F, 0xC0, - 0x7F, 0x80, 0x7C, 0x07, 0xE1, 0xFE, 0x7F, 0x87, 0xE0, 0x38, 0x00, 0x00, - 0x00, 0x0F, 0xC1, 0xFF, 0x8F, 0xFC, 0xF1, 0xFF, 0x07, 0xF0, 0x3C, 0x01, - 0xE0, 0x1E, 0x01, 0xE0, 0x3E, 0x03, 0xE0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, - 0x00, 0x07, 0x80, 0x3C, 0x01, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x03, 0xFF, - 0x80, 0x3C, 0x0F, 0x01, 0xC0, 0x0E, 0x0E, 0x00, 0x1C, 0x70, 0xF7, 0x73, - 0x87, 0xF8, 0xCC, 0x31, 0xE3, 0x61, 0x87, 0x0D, 0x8C, 0x1C, 0x3C, 0x30, - 0x61, 0xB1, 0x81, 0x86, 0xC6, 0x0C, 0x3B, 0x18, 0x71, 0xCC, 0x63, 0xCE, - 0x31, 0xFB, 0xF0, 0xE3, 0xCF, 0x01, 0xC0, 0x00, 0x03, 0xC0, 0xC0, 0x07, - 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x1F, 0x80, - 0x1F, 0xC0, 0x0F, 0xE0, 0x0F, 0xF0, 0x07, 0x7C, 0x07, 0x1E, 0x03, 0x8F, - 0x03, 0x87, 0x83, 0xC3, 0xC1, 0xFF, 0xE1, 0xFF, 0xF0, 0xFF, 0xFC, 0xF0, - 0x1E, 0x70, 0x0F, 0x78, 0x07, 0xB8, 0x03, 0xC0, 0x0F, 0xFE, 0x0F, 0xFF, - 0x87, 0xFF, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x3C, 0xF0, 0x3C, 0x7F, - 0xFC, 0x3F, 0xFC, 0x1F, 0xFF, 0x0E, 0x07, 0xCF, 0x01, 0xE7, 0x80, 0xF3, - 0x80, 0x79, 0xC0, 0x79, 0xFF, 0xF8, 0xFF, 0xFC, 0x7F, 0xF8, 0x00, 0x01, - 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0xC3, 0xE1, 0xF3, 0xC0, 0x79, 0xE0, 0x3D, - 0xE0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x0F, 0x00, 0xE7, 0x80, 0xF3, 0xE0, 0xF0, 0xFF, 0xF8, 0x3F, 0xF0, 0x07, - 0xE0, 0x00, 0x1F, 0xFC, 0x0F, 0xFF, 0x87, 0xFF, 0xC3, 0x81, 0xF1, 0xC0, - 0x79, 0xE0, 0x3C, 0xF0, 0x1E, 0x78, 0x0F, 0x38, 0x07, 0x9C, 0x03, 0xDE, - 0x03, 0xCF, 0x01, 0xE7, 0x81, 0xF3, 0x80, 0xF1, 0xC1, 0xF1, 0xFF, 0xF0, - 0xFF, 0xF0, 0x7F, 0xE0, 0x00, 0x0F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1C, - 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x70, 0x00, 0x70, 0x00, 0xFF, - 0xF8, 0xFF, 0xF8, 0xFF, 0xF8, 0x1F, 0xFF, 0x1F, 0xFE, 0x1F, 0xFE, 0x1C, - 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3F, 0xF8, 0x3F, 0xF8, 0x3F, - 0xF8, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, - 0x00, 0xF0, 0x00, 0xE0, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0x03, 0xFF, 0xC3, - 0xE0, 0xF3, 0xC0, 0x39, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0xF0, 0x7F, - 0x78, 0x3F, 0xBC, 0x1F, 0xDE, 0x01, 0xCF, 0x00, 0xE7, 0xC0, 0xF1, 0xF0, - 0xF8, 0xFF, 0xFC, 0x3F, 0xEC, 0x07, 0xE6, 0x00, 0x1E, 0x03, 0x8F, 0x01, - 0xC7, 0x01, 0xE3, 0x80, 0xF3, 0xC0, 0x79, 0xE0, 0x38, 0xF0, 0x1C, 0x7F, - 0xFE, 0x3F, 0xFF, 0x3F, 0xFF, 0x9E, 0x03, 0x8F, 0x01, 0xC7, 0x01, 0xE3, - 0x80, 0xF3, 0xC0, 0x71, 0xE0, 0x38, 0xF0, 0x3C, 0x70, 0x1E, 0x00, 0x1E, - 0x3C, 0x78, 0xE1, 0xC7, 0x8F, 0x1E, 0x38, 0x71, 0xE3, 0xC7, 0x8E, 0x1C, - 0x78, 0xF1, 0xE0, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, - 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xC0, 0x07, 0x3C, 0x3C, - 0xF0, 0xF3, 0xC3, 0x8F, 0x1E, 0x3F, 0xF8, 0x7F, 0xC0, 0xFC, 0x00, 0x1E, - 0x07, 0xC7, 0x83, 0xE1, 0xE1, 0xE0, 0x70, 0xF0, 0x1C, 0x78, 0x0F, 0x3C, - 0x03, 0xDE, 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x07, 0xDE, 0x01, - 0xE7, 0xC0, 0x78, 0xF0, 0x1C, 0x3E, 0x0F, 0x07, 0x83, 0xC0, 0xF0, 0xF0, - 0x3C, 0x38, 0x07, 0x80, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xC0, - 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x07, - 0x80, 0x38, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF7, 0xFF, 0x80, 0x1F, 0x03, - 0xF1, 0xF0, 0x3F, 0x1F, 0x07, 0xF1, 0xF0, 0x7F, 0x3F, 0x0F, 0xE3, 0xF0, - 0xEE, 0x3B, 0x1E, 0xE3, 0xB1, 0xDE, 0x3B, 0x1D, 0xE7, 0xB3, 0x9C, 0x7B, - 0x39, 0xC7, 0x37, 0x9C, 0x73, 0x73, 0xCF, 0x3F, 0x3C, 0xF3, 0xE3, 0x8F, - 0x3E, 0x38, 0xE3, 0xC3, 0x8E, 0x3C, 0x78, 0x1E, 0x03, 0x87, 0xC0, 0xE1, - 0xF0, 0x38, 0x7C, 0x1E, 0x1F, 0x87, 0x8F, 0xE1, 0xC3, 0xB8, 0x70, 0xEF, - 0x1C, 0x39, 0xCF, 0x1E, 0x73, 0xC7, 0x8E, 0xE1, 0xC3, 0xB8, 0x70, 0xEE, - 0x1C, 0x1F, 0x8F, 0x07, 0xE3, 0xC1, 0xF0, 0xE0, 0x3C, 0x38, 0x0F, 0x00, - 0x01, 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0xC3, 0xE3, 0xE3, 0xC0, 0xF9, 0xE0, - 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x03, 0xDE, - 0x01, 0xEF, 0x00, 0xF7, 0xC0, 0xF1, 0xF0, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, - 0x07, 0xE0, 0x00, 0x1F, 0xFC, 0x1F, 0xFE, 0x1F, 0xFF, 0x1C, 0x1F, 0x1C, - 0x0F, 0x3C, 0x0F, 0x3C, 0x0F, 0x3C, 0x1E, 0x3F, 0xFC, 0x3F, 0xFC, 0x7F, - 0xF0, 0x78, 0x00, 0x78, 0x00, 0x70, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, - 0x00, 0xF0, 0x00, 0x01, 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0xC3, 0xE3, 0xE3, - 0xC0, 0xF9, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, - 0xFC, 0x03, 0xDE, 0x09, 0xEF, 0x0E, 0xE7, 0xC7, 0xF1, 0xF1, 0xF0, 0xFF, - 0xF8, 0x3F, 0xFE, 0x07, 0xE6, 0x00, 0x02, 0x00, 0x0F, 0xFE, 0x0F, 0xFF, - 0x87, 0xFF, 0xE3, 0x81, 0xF1, 0xC0, 0x78, 0xE0, 0x3C, 0xF0, 0x1C, 0x78, - 0x1E, 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xC7, 0x81, 0xE3, - 0x80, 0xF1, 0xC0, 0xF1, 0xE0, 0x78, 0xF0, 0x3C, 0x78, 0x1F, 0x00, 0x03, - 0xF8, 0x0F, 0xFE, 0x1F, 0xFF, 0x1E, 0x1F, 0x3C, 0x0F, 0x3C, 0x0F, 0x3C, - 0x00, 0x3F, 0x00, 0x1F, 0xF0, 0x0F, 0xFC, 0x01, 0xFE, 0x00, 0x3E, 0xF0, - 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0x7F, 0xF8, 0x7F, 0xF0, 0x1F, 0xC0, 0x7F, - 0xFE, 0xFF, 0xFD, 0xFF, 0xF8, 0x1C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, - 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xE0, 0x01, - 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x38, 0x00, 0x1E, 0x07, 0x1C, - 0x0F, 0x3C, 0x0F, 0x3C, 0x0F, 0x3C, 0x0E, 0x38, 0x0E, 0x78, 0x1E, 0x78, - 0x1E, 0x78, 0x1E, 0x78, 0x1C, 0x70, 0x1C, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, - 0x38, 0xF8, 0x78, 0xFF, 0xF0, 0x7F, 0xE0, 0x1F, 0x80, 0xF0, 0x1F, 0xE0, - 0x39, 0xC0, 0xF3, 0x81, 0xC7, 0x07, 0x8E, 0x0E, 0x1C, 0x3C, 0x3C, 0x70, - 0x79, 0xE0, 0xF3, 0x80, 0xEF, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0xE0, 0x0F, - 0x80, 0x1F, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x70, 0x7F, 0x87, 0x83, - 0xFC, 0x3C, 0x3D, 0xE1, 0xE1, 0xEF, 0x1F, 0x0E, 0x78, 0xD8, 0xF3, 0xC6, - 0xC7, 0x0E, 0x76, 0x78, 0x73, 0x33, 0x83, 0xB9, 0x9C, 0x1D, 0xCD, 0xC0, - 0xEC, 0x6E, 0x07, 0xE3, 0xE0, 0x3E, 0x1F, 0x01, 0xF0, 0xF0, 0x0F, 0x87, - 0x80, 0x78, 0x38, 0x03, 0xC1, 0xC0, 0x00, 0x0F, 0x03, 0xC3, 0xC1, 0xE0, - 0xF8, 0xF0, 0x1E, 0x78, 0x07, 0x9E, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x0F, - 0xC0, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x0F, 0xF0, - 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x80, - 0x78, 0x1E, 0xF0, 0x79, 0xE0, 0xF3, 0xC3, 0xC3, 0xCF, 0x07, 0x9E, 0x0F, - 0x78, 0x0F, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x3C, 0x00, 0x70, 0x00, 0xE0, - 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x1F, 0xFF, - 0x0F, 0xFF, 0x87, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x03, - 0xE0, 0x03, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, - 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xFF, 0xF0, 0xFF, 0xF8, 0x7F, 0xFC, - 0x00, 0x0F, 0xC3, 0xF0, 0xFC, 0x38, 0x1E, 0x07, 0x01, 0xC0, 0x70, 0x1C, - 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x0F, - 0x03, 0x80, 0xFC, 0x3F, 0x0F, 0xC0, 0x08, 0x88, 0xC4, 0x44, 0x66, 0x66, - 0x66, 0x62, 0x22, 0x33, 0x33, 0x30, 0x0F, 0xC3, 0xF0, 0xFC, 0x07, 0x03, - 0xC0, 0xE0, 0x38, 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x1C, 0x07, 0x03, 0xC0, - 0xE0, 0x38, 0x0E, 0x03, 0x81, 0xE0, 0x70, 0xFC, 0x3F, 0x0F, 0xC0, 0x03, - 0x80, 0xF0, 0x1E, 0x07, 0xE1, 0xDC, 0x3B, 0x8E, 0x71, 0x86, 0x70, 0xFC, - 0x1F, 0x83, 0x80, 0x7F, 0xFE, 0xFF, 0xFC, 0xE6, 0x30, 0x07, 0xE0, 0xFF, - 0x8F, 0xFE, 0x70, 0xE0, 0x07, 0x03, 0xF8, 0xFF, 0xCF, 0x9E, 0xF0, 0xF7, - 0x8F, 0x3F, 0xF8, 0xFF, 0xC3, 0xDF, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, - 0x00, 0xF0, 0x01, 0xE0, 0x03, 0x9F, 0x07, 0xFF, 0x0F, 0xFF, 0x3E, 0x3E, - 0x78, 0x3C, 0xF0, 0x79, 0xC0, 0xF3, 0x81, 0xEF, 0x07, 0x9F, 0x1F, 0x3F, - 0xFC, 0x7F, 0xF0, 0xEF, 0x80, 0x07, 0xC0, 0xFF, 0x8F, 0xFE, 0xF8, 0xF7, - 0x87, 0xB8, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0xF7, 0x8F, 0x1F, 0xF8, 0xFF, - 0x81, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x03, - 0xC0, 0xF7, 0x87, 0xFE, 0x1F, 0xFC, 0x7C, 0x78, 0xF0, 0x73, 0xC0, 0xE7, - 0x81, 0x8F, 0x07, 0x1E, 0x0E, 0x3E, 0x3C, 0x7F, 0xF8, 0x7F, 0xE0, 0x7D, - 0xC0, 0x07, 0xC0, 0xFF, 0x8F, 0xFE, 0xF0, 0xF7, 0x87, 0xFF, 0xFF, 0xFF, - 0xFE, 0x00, 0xF0, 0x07, 0xC7, 0x9F, 0xF8, 0xFF, 0x81, 0xF0, 0x00, 0x07, - 0x87, 0xC7, 0xE3, 0xC1, 0xC3, 0xF9, 0xFC, 0x78, 0x3C, 0x1C, 0x0E, 0x07, - 0x07, 0x83, 0x81, 0xC0, 0xE0, 0xF0, 0x78, 0x00, 0x03, 0xDE, 0x1F, 0xF8, - 0x7F, 0xF1, 0xF1, 0xE3, 0xC1, 0xCF, 0x03, 0x9E, 0x06, 0x3C, 0x0C, 0x78, - 0x38, 0xF8, 0xF1, 0xFF, 0xC1, 0xFF, 0x81, 0xF7, 0x00, 0x0E, 0x3C, 0x3C, - 0x78, 0xF0, 0x7F, 0xC0, 0x7E, 0x00, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x07, - 0x00, 0x3C, 0x00, 0xF7, 0xC3, 0xBF, 0x8F, 0xFF, 0x3C, 0x3D, 0xE0, 0xE7, - 0x83, 0x9C, 0x0E, 0x70, 0x79, 0xC1, 0xEF, 0x07, 0x3C, 0x1C, 0xE0, 0x73, - 0x83, 0xC0, 0x0E, 0x3C, 0x70, 0x00, 0x03, 0x8F, 0x1E, 0x38, 0x71, 0xE3, - 0xC7, 0x0E, 0x1C, 0x78, 0xF1, 0xC0, 0x03, 0xC0, 0xE0, 0x38, 0x00, 0x00, - 0x01, 0xE0, 0x70, 0x1C, 0x07, 0x03, 0xC0, 0xF0, 0x38, 0x0E, 0x03, 0x81, - 0xE0, 0x70, 0x1C, 0x07, 0x03, 0xC0, 0xF0, 0xF8, 0x3E, 0x0F, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0x87, 0x87, 0x1E, - 0x0E, 0x78, 0x3D, 0xE0, 0x7F, 0x80, 0xFE, 0x01, 0xFE, 0x03, 0xFC, 0x0F, - 0x38, 0x1E, 0x78, 0x38, 0xF0, 0x70, 0xF0, 0xE1, 0xE0, 0x0E, 0x3C, 0x78, - 0xE1, 0xC3, 0x8F, 0x1E, 0x38, 0x71, 0xE3, 0xC7, 0x0E, 0x1C, 0x78, 0xF1, - 0xC0, 0x1C, 0xF1, 0xE0, 0xEF, 0xDF, 0x87, 0xFF, 0xFE, 0x7C, 0x78, 0xF3, - 0xC3, 0x87, 0x9C, 0x1C, 0x38, 0xE1, 0xE1, 0xC7, 0x0E, 0x0E, 0x78, 0x70, - 0xF3, 0xC3, 0x87, 0x9C, 0x3C, 0x38, 0xE1, 0xE1, 0xC7, 0x0E, 0x0E, 0x00, - 0x3D, 0xF0, 0xEF, 0xE3, 0xFF, 0xCF, 0x0F, 0x78, 0x39, 0xC0, 0xE7, 0x03, - 0x9C, 0x1E, 0xF0, 0x7B, 0xC1, 0xCE, 0x07, 0x38, 0x1C, 0xE0, 0xF0, 0x07, - 0xE0, 0x7F, 0xE3, 0xFF, 0x9F, 0x1F, 0x78, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, - 0x1F, 0xF0, 0x7B, 0xE3, 0xE7, 0xFF, 0x1F, 0xF8, 0x1F, 0x80, 0x0E, 0x7C, - 0x0F, 0xFE, 0x0F, 0xFF, 0x1F, 0x1F, 0x1E, 0x0F, 0x1E, 0x0F, 0x1C, 0x0F, - 0x1C, 0x0F, 0x3C, 0x1E, 0x3E, 0x3E, 0x3F, 0xFC, 0x3F, 0xF8, 0x7B, 0xE0, - 0x78, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x07, 0xBC, - 0x7F, 0xF3, 0xFF, 0x9F, 0x1E, 0x78, 0x3B, 0xC0, 0xEF, 0x03, 0x3C, 0x0C, - 0xF0, 0x73, 0xE3, 0xCF, 0xFF, 0x1F, 0xF8, 0x3C, 0xE0, 0x03, 0x80, 0x1E, - 0x00, 0x78, 0x01, 0xC0, 0x07, 0x00, 0x3D, 0xCE, 0xE3, 0xF8, 0xF0, 0x78, - 0x1E, 0x07, 0x01, 0xC0, 0xF0, 0x3C, 0x0E, 0x03, 0x80, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x7F, 0xFF, 0x0F, 0xF0, 0x0F, 0xE0, 0x7F, 0xC1, 0xFE, 0x03, - 0xEE, 0x1E, 0xFF, 0xC7, 0xFC, 0x3F, 0x00, 0x1E, 0x1E, 0x1C, 0x7F, 0xFF, - 0x3C, 0x38, 0x38, 0x38, 0x78, 0x78, 0x70, 0x7C, 0xF8, 0x78, 0x38, 0x3C, - 0xE0, 0xE3, 0x83, 0x9E, 0x0E, 0x70, 0x79, 0xC1, 0xE7, 0x07, 0x3C, 0x1C, - 0xF0, 0xF3, 0xE7, 0xCF, 0xFF, 0x1F, 0xF8, 0x3C, 0xE0, 0xF0, 0x77, 0x87, - 0xBC, 0x38, 0xE3, 0xC7, 0x1C, 0x39, 0xE1, 0xCE, 0x0E, 0xE0, 0x77, 0x03, - 0xF0, 0x0F, 0x80, 0x78, 0x03, 0xC0, 0x00, 0xF1, 0xC3, 0xF8, 0xE3, 0xFC, - 0xF1, 0xDE, 0x79, 0xEF, 0x3C, 0xE7, 0xB6, 0x73, 0xDB, 0x70, 0xED, 0xB8, - 0x7C, 0xF8, 0x3E, 0x7C, 0x1F, 0x3C, 0x0F, 0x1E, 0x07, 0x8E, 0x00, 0x0F, - 0x1E, 0x0F, 0x3C, 0x0F, 0x38, 0x07, 0x70, 0x07, 0xF0, 0x03, 0xE0, 0x03, - 0xC0, 0x07, 0xC0, 0x0F, 0xE0, 0x1E, 0xE0, 0x3C, 0xF0, 0x3C, 0xF0, 0x78, - 0x78, 0x3C, 0x1C, 0x78, 0x78, 0xF0, 0xE1, 0xE3, 0xC1, 0xC7, 0x03, 0x9E, - 0x07, 0x38, 0x0E, 0xE0, 0x1D, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0x78, 0x00, - 0xF0, 0x01, 0xC0, 0x07, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xE0, 0x00, 0x1F, - 0xF9, 0xFF, 0xCF, 0xFC, 0x01, 0xE0, 0x3E, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3F, 0xF9, 0xFF, 0xCF, 0xFC, 0x00, 0x07, 0x87, 0xC3, - 0xE3, 0xC1, 0xC0, 0xE0, 0x70, 0x38, 0x3C, 0x1C, 0x0E, 0x1E, 0x0F, 0x03, - 0x81, 0xC0, 0xE0, 0x70, 0x78, 0x38, 0x1C, 0x0F, 0x87, 0xC1, 0xC0, 0x0C, - 0x30, 0x86, 0x18, 0x61, 0x8C, 0x30, 0xC3, 0x0C, 0x61, 0x86, 0x18, 0x63, - 0x0C, 0x30, 0xC2, 0x00, 0x00, 0x07, 0x07, 0xC3, 0xE0, 0x70, 0x38, 0x3C, - 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0xE0, 0x70, 0x78, 0x38, 0x1C, - 0x0E, 0x07, 0x07, 0x8F, 0x87, 0xC3, 0xC0, 0x3C, 0x07, 0xE0, 0xC7, 0x30, - 0x7E, 0x01, 0xC0}; - -const GFXglyph FreeSansBoldOblique12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 7, 0, 1}, // 0x20 ' ' - {0, 7, 17, 8, 3, -16}, // 0x21 '!' - {15, 10, 6, 11, 4, -17}, // 0x22 '"' - {23, 15, 16, 13, 1, -15}, // 0x23 '#' - {53, 15, 21, 13, 1, -17}, // 0x24 '$' - {93, 18, 18, 21, 3, -17}, // 0x25 '%' - {134, 15, 17, 17, 2, -16}, // 0x26 '&' - {166, 4, 6, 6, 4, -17}, // 0x27 ''' - {169, 9, 22, 8, 2, -17}, // 0x28 '(' - {194, 9, 22, 8, -1, -16}, // 0x29 ')' - {219, 8, 8, 9, 3, -17}, // 0x2A '*' - {227, 12, 11, 14, 2, -10}, // 0x2B '+' - {244, 5, 7, 7, 1, -2}, // 0x2C ',' - {249, 7, 3, 8, 2, -7}, // 0x2D '-' - {252, 4, 3, 7, 2, -2}, // 0x2E '.' - {254, 10, 17, 7, 0, -16}, // 0x2F '/' - {276, 13, 17, 13, 2, -16}, // 0x30 '0' - {304, 9, 17, 13, 4, -16}, // 0x31 '1' - {324, 15, 17, 13, 1, -16}, // 0x32 '2' - {356, 13, 17, 13, 2, -16}, // 0x33 '3' - {384, 13, 17, 13, 1, -16}, // 0x34 '4' - {412, 14, 17, 13, 1, -16}, // 0x35 '5' - {442, 13, 17, 13, 2, -16}, // 0x36 '6' - {470, 13, 17, 13, 3, -16}, // 0x37 '7' - {498, 14, 17, 13, 1, -16}, // 0x38 '8' - {528, 14, 17, 13, 2, -16}, // 0x39 '9' - {558, 6, 12, 8, 3, -11}, // 0x3A ':' - {567, 7, 16, 8, 2, -11}, // 0x3B ';' - {581, 13, 12, 14, 2, -11}, // 0x3C '<' - {601, 14, 9, 14, 1, -9}, // 0x3D '=' - {617, 13, 12, 14, 1, -10}, // 0x3E '>' - {637, 13, 18, 15, 4, -17}, // 0x3F '?' - {667, 22, 21, 23, 2, -17}, // 0x40 '@' - {725, 17, 18, 17, 0, -17}, // 0x41 'A' - {764, 17, 18, 17, 2, -17}, // 0x42 'B' - {803, 17, 18, 17, 3, -17}, // 0x43 'C' - {842, 17, 18, 17, 2, -17}, // 0x44 'D' - {881, 16, 18, 16, 2, -17}, // 0x45 'E' - {917, 16, 18, 15, 2, -17}, // 0x46 'F' - {953, 17, 18, 19, 3, -17}, // 0x47 'G' - {992, 17, 18, 17, 2, -17}, // 0x48 'H' - {1031, 7, 18, 7, 2, -17}, // 0x49 'I' - {1047, 14, 18, 13, 1, -17}, // 0x4A 'J' - {1079, 18, 18, 17, 2, -17}, // 0x4B 'K' - {1120, 13, 18, 15, 2, -17}, // 0x4C 'L' - {1150, 20, 18, 20, 2, -17}, // 0x4D 'M' - {1195, 18, 18, 17, 2, -17}, // 0x4E 'N' - {1236, 17, 18, 19, 3, -17}, // 0x4F 'O' - {1275, 16, 18, 16, 2, -17}, // 0x50 'P' - {1311, 17, 19, 19, 3, -17}, // 0x51 'Q' - {1352, 17, 18, 17, 2, -17}, // 0x52 'R' - {1391, 16, 18, 16, 2, -17}, // 0x53 'S' - {1427, 15, 18, 15, 3, -17}, // 0x54 'T' - {1461, 16, 18, 17, 3, -17}, // 0x55 'U' - {1497, 15, 18, 16, 4, -17}, // 0x56 'V' - {1531, 21, 18, 23, 4, -17}, // 0x57 'W' - {1579, 18, 18, 16, 1, -17}, // 0x58 'X' - {1620, 15, 18, 16, 4, -17}, // 0x59 'Y' - {1654, 17, 18, 15, 1, -17}, // 0x5A 'Z' - {1693, 10, 23, 8, 1, -17}, // 0x5B '[' - {1722, 4, 23, 7, 3, -22}, // 0x5C '\' - {1734, 10, 23, 8, 0, -17}, // 0x5D ']' - {1763, 11, 11, 14, 3, -16}, // 0x5E '^' - {1779, 15, 2, 13, -2, 4}, // 0x5F '_' - {1783, 4, 3, 8, 4, -17}, // 0x60 '`' - {1785, 13, 13, 13, 1, -12}, // 0x61 'a' - {1807, 15, 18, 15, 1, -17}, // 0x62 'b' - {1841, 13, 13, 13, 2, -12}, // 0x63 'c' - {1863, 15, 18, 15, 2, -17}, // 0x64 'd' - {1897, 13, 13, 13, 2, -12}, // 0x65 'e' - {1919, 9, 18, 8, 2, -17}, // 0x66 'f' - {1940, 15, 18, 15, 1, -12}, // 0x67 'g' - {1974, 14, 18, 15, 2, -17}, // 0x68 'h' - {2006, 7, 18, 7, 2, -17}, // 0x69 'i' - {2022, 10, 23, 7, -1, -17}, // 0x6A 'j' - {2051, 15, 18, 13, 1, -17}, // 0x6B 'k' - {2085, 7, 18, 7, 2, -17}, // 0x6C 'l' - {2101, 21, 13, 21, 1, -12}, // 0x6D 'm' - {2136, 14, 13, 15, 2, -12}, // 0x6E 'n' - {2159, 14, 13, 15, 2, -12}, // 0x6F 'o' - {2182, 16, 18, 15, 0, -12}, // 0x70 'p' - {2218, 14, 18, 15, 2, -12}, // 0x71 'q' - {2250, 10, 13, 9, 2, -12}, // 0x72 'r' - {2267, 12, 13, 13, 3, -12}, // 0x73 's' - {2287, 8, 15, 8, 2, -14}, // 0x74 't' - {2302, 14, 13, 15, 2, -12}, // 0x75 'u' - {2325, 13, 13, 13, 3, -12}, // 0x76 'v' - {2347, 17, 13, 19, 3, -12}, // 0x77 'w' - {2375, 16, 13, 13, 0, -12}, // 0x78 'x' - {2401, 15, 18, 13, 1, -12}, // 0x79 'y' - {2435, 13, 13, 12, 1, -12}, // 0x7A 'z' - {2457, 9, 23, 9, 3, -17}, // 0x7B '{' - {2483, 6, 23, 7, 1, -17}, // 0x7C '|' - {2501, 9, 23, 9, 0, -17}, // 0x7D '}' - {2527, 12, 5, 14, 2, -7}}; // 0x7E '~' - -const GFXfont FreeSansBoldOblique12pt7b PROGMEM = { - (uint8_t *)FreeSansBoldOblique12pt7bBitmaps, - (GFXglyph *)FreeSansBoldOblique12pt7bGlyphs, 0x20, 0x7E, 29}; - -// Approx. 3207 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique18pt7b.h deleted file mode 100644 index 441c6b5..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique18pt7b.h +++ /dev/null @@ -1,547 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBoldOblique18pt7bBitmaps[] PROGMEM = { - 0x06, 0x01, 0xC0, 0x7C, 0x1F, 0x0F, 0xC3, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, - 0xC0, 0xF0, 0x7C, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1C, 0x07, 0x01, 0xC0, - 0x60, 0x7C, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x00, 0x78, 0x7B, 0xC3, 0xFE, - 0x3F, 0xE1, 0xEF, 0x0F, 0x78, 0x7B, 0x83, 0x9C, 0x1C, 0xC0, 0xC0, 0x00, - 0x3C, 0x38, 0x00, 0xF1, 0xE0, 0x07, 0x87, 0x00, 0x1E, 0x3C, 0x00, 0xF0, - 0xE0, 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xFF, 0xF8, - 0x0F, 0x0E, 0x00, 0x3C, 0x78, 0x00, 0xE1, 0xE0, 0x07, 0x8F, 0x00, 0x1C, - 0x3C, 0x07, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0x7F, 0xFF, 0xE3, 0xFF, 0xFF, - 0x01, 0xE3, 0xC0, 0x0F, 0x0E, 0x00, 0x3C, 0x78, 0x01, 0xE1, 0xC0, 0x07, - 0x8F, 0x00, 0x3C, 0x38, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0xFC, - 0x00, 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0xC3, 0xE6, 0x78, 0x78, 0xCF, - 0x1E, 0x39, 0xE3, 0xC7, 0x3C, 0x78, 0xC0, 0x0F, 0x98, 0x01, 0xFF, 0x00, - 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x7F, 0x80, 0x0F, 0xF0, - 0x03, 0xBE, 0x00, 0x67, 0xCF, 0x8C, 0xF9, 0xF1, 0x9F, 0x3E, 0x77, 0xC7, - 0xEF, 0xF8, 0x7F, 0xFE, 0x0F, 0xFF, 0x80, 0xFF, 0xE0, 0x03, 0xE0, 0x00, - 0x38, 0x00, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x07, 0x01, 0xE0, - 0x03, 0x81, 0xFE, 0x00, 0xC0, 0xFF, 0x80, 0x70, 0x7F, 0xF0, 0x38, 0x1E, - 0x3C, 0x1C, 0x0F, 0x07, 0x06, 0x03, 0x81, 0xC3, 0x80, 0xE0, 0xF1, 0xC0, - 0x3C, 0x78, 0xE0, 0x0F, 0xFE, 0x30, 0x01, 0xFF, 0x1C, 0x00, 0x7F, 0x8E, - 0x00, 0x07, 0x83, 0x00, 0x00, 0x01, 0x83, 0xE0, 0x00, 0xE3, 0xFE, 0x00, - 0x71, 0xFF, 0x80, 0x18, 0xFF, 0xF0, 0x0C, 0x3C, 0x3C, 0x07, 0x1C, 0x07, - 0x03, 0x87, 0x01, 0xC0, 0xC1, 0xE1, 0xE0, 0x60, 0x7F, 0xF8, 0x38, 0x0F, - 0xFC, 0x1C, 0x03, 0xFE, 0x06, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x03, - 0xFC, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x80, 0x3F, 0x3C, 0x01, 0xF1, 0xE0, - 0x0F, 0x8F, 0x00, 0x7C, 0xF0, 0x03, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x3F, - 0x00, 0x03, 0xF0, 0x00, 0x7F, 0xC7, 0x8F, 0xFE, 0x3C, 0xFC, 0xFB, 0xCF, - 0x83, 0xFE, 0xF8, 0x1F, 0xE7, 0xC0, 0x7E, 0x3E, 0x03, 0xE1, 0xF0, 0x1F, - 0x0F, 0xE3, 0xFC, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF, 0x87, 0xFE, 0x7C, 0x0F, - 0xE1, 0xF0, 0x7B, 0xFF, 0xEF, 0x7B, 0x9C, 0xC0, 0x00, 0x78, 0x07, 0x80, - 0x78, 0x03, 0x80, 0x3C, 0x03, 0xC0, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0xF0, - 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0xF0, 0x07, - 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, - 0x07, 0x80, 0x1C, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00, 0xE0, 0x07, 0x80, - 0x1C, 0x00, 0x01, 0xC0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0x00, 0x78, - 0x01, 0xC0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, - 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x1E, - 0x00, 0xF0, 0x07, 0x80, 0x78, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x1E, 0x01, - 0xE0, 0x1E, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x03, 0x00, 0x70, 0x07, - 0x04, 0x63, 0xFF, 0xF7, 0xFF, 0x1F, 0x83, 0xF0, 0x3B, 0x87, 0x38, 0x21, - 0x00, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, - 0x00, 0x7C, 0x07, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xE0, - 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x1E, - 0x00, 0x3E, 0x7C, 0xF3, 0xE7, 0xC1, 0x87, 0x0C, 0x39, 0xE3, 0x00, 0x7F, - 0xDF, 0xFF, 0xFB, 0xFE, 0x7D, 0xF7, 0xBE, 0xF8, 0x00, 0x0E, 0x00, 0x18, - 0x00, 0x70, 0x00, 0xC0, 0x03, 0x80, 0x06, 0x00, 0x1C, 0x00, 0x30, 0x00, - 0xE0, 0x01, 0x80, 0x07, 0x00, 0x0C, 0x00, 0x38, 0x00, 0x60, 0x01, 0xC0, - 0x03, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x70, 0x00, 0xC0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x7F, 0xC0, - 0x7F, 0xF8, 0x3F, 0xFE, 0x0F, 0x8F, 0xC7, 0xC1, 0xF1, 0xE0, 0x7C, 0xF8, - 0x1F, 0x3E, 0x07, 0xDF, 0x01, 0xF7, 0xC0, 0x7D, 0xF0, 0x3F, 0x7C, 0x0F, - 0xBF, 0x03, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x1F, 0x3E, 0x07, 0xCF, - 0x81, 0xE3, 0xE0, 0xF8, 0xFC, 0x7C, 0x1F, 0xFF, 0x07, 0xFF, 0x80, 0xFF, - 0xC0, 0x0F, 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x03, 0xE0, 0xFF, - 0x3F, 0xF3, 0xFF, 0x9F, 0xFC, 0x03, 0xE0, 0x1F, 0x01, 0xF0, 0x0F, 0x80, - 0x7C, 0x03, 0xE0, 0x1E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x3E, - 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x3E, 0x00, 0x00, 0x1F, 0x80, - 0x07, 0xFF, 0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xE0, 0x7E, 0x1F, 0x83, 0xE0, - 0x7C, 0x1F, 0x03, 0xE1, 0xF0, 0x1F, 0x0F, 0x80, 0xF8, 0x00, 0x0F, 0x80, - 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xE0, 0x00, 0xFC, - 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFF, 0xE1, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, - 0x7F, 0xFF, 0x80, 0x00, 0x7F, 0x00, 0x1F, 0xFC, 0x03, 0xFF, 0xE0, 0x7F, - 0xFF, 0x0F, 0x83, 0xF0, 0xF0, 0x1F, 0x1F, 0x01, 0xF1, 0xE0, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0xFC, 0x00, 0xFF, 0x80, 0x0F, 0xF0, 0x00, 0xFF, 0x80, - 0x0F, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x7C, - 0xF8, 0x07, 0xCF, 0x80, 0xF8, 0xFC, 0x3F, 0x8F, 0xFF, 0xF0, 0x7F, 0xFE, - 0x03, 0xFF, 0xC0, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, - 0x7F, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, 0xEF, 0x80, 0x3D, 0xF0, 0x0F, - 0x7C, 0x03, 0xCF, 0x80, 0xF1, 0xF0, 0x1C, 0x3E, 0x07, 0x07, 0xC1, 0xE1, - 0xF0, 0x78, 0x3E, 0x1E, 0x07, 0xC3, 0xFF, 0xFE, 0x7F, 0xFF, 0xDF, 0xFF, - 0xFB, 0xFF, 0xFF, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, 0x1F, - 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, 0x03, - 0xFF, 0xF0, 0x3F, 0xFF, 0x07, 0x80, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x00, - 0xF7, 0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x1F, 0xFF, 0x83, 0xF0, 0xFC, - 0x3E, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, - 0x8F, 0x80, 0xF8, 0xF8, 0x1F, 0x8F, 0xC3, 0xF0, 0xFF, 0xFE, 0x07, 0xFF, - 0xC0, 0x3F, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x3F, 0xF0, 0x0F, - 0xFF, 0x03, 0xFF, 0xE0, 0xF8, 0x7E, 0x3E, 0x07, 0xC7, 0x80, 0x01, 0xF0, - 0x00, 0x3C, 0xFC, 0x07, 0xFF, 0xC1, 0xFF, 0xFC, 0x3F, 0xFF, 0xC7, 0xE1, - 0xF8, 0xF8, 0x1F, 0x3E, 0x03, 0xE7, 0x80, 0x7C, 0xF0, 0x0F, 0x9E, 0x01, - 0xE3, 0xC0, 0x7C, 0x78, 0x1F, 0x0F, 0x87, 0xE0, 0xFF, 0xF8, 0x1F, 0xFE, - 0x01, 0xFF, 0x80, 0x0F, 0xC0, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xF9, 0xFF, - 0xFF, 0x7F, 0xFF, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, - 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, - 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x3E, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xFC, 0x07, 0xFF, 0xE0, 0xFF, - 0xFF, 0x0F, 0x81, 0xF1, 0xF0, 0x0F, 0x1E, 0x00, 0xF1, 0xE0, 0x1E, 0x1F, - 0x07, 0xE0, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFF, 0xF8, 0x1F, 0xFF, 0x83, - 0xF0, 0xFC, 0x7C, 0x07, 0xC7, 0xC0, 0x7C, 0xF8, 0x07, 0xCF, 0x80, 0x7C, - 0xF8, 0x0F, 0x8F, 0x80, 0xF8, 0xFC, 0x3F, 0x0F, 0xFF, 0xF0, 0x7F, 0xFE, - 0x03, 0xFF, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x3F, 0xF0, 0x0F, - 0xFF, 0x03, 0xFF, 0xE0, 0xFC, 0x3E, 0x3F, 0x03, 0xC7, 0xC0, 0x79, 0xF0, - 0x0F, 0x3E, 0x01, 0xE7, 0xC0, 0x3C, 0xF8, 0x0F, 0x9F, 0x03, 0xE3, 0xF0, - 0xFC, 0x7F, 0xFF, 0x87, 0xFF, 0xF0, 0x7F, 0xFE, 0x07, 0xE7, 0x80, 0x01, - 0xF0, 0x00, 0x3C, 0x7C, 0x0F, 0x8F, 0xC3, 0xE1, 0xFF, 0xF8, 0x1F, 0xFE, - 0x01, 0xFF, 0x80, 0x0F, 0xC0, 0x00, 0x0F, 0x87, 0xC3, 0xC3, 0xE1, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE1, 0xF0, 0xF0, - 0xF8, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x78, 0x3E, 0x0F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x83, 0xE0, 0xF0, 0x7C, - 0x1F, 0x00, 0xC0, 0x70, 0x18, 0x0E, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x3C, 0x00, 0x3F, 0x80, 0x3F, 0xE0, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, - 0xFC, 0x07, 0xFC, 0x00, 0xFC, 0x00, 0x1F, 0xF0, 0x03, 0xFF, 0x80, 0x1F, - 0xFE, 0x00, 0xFF, 0xF0, 0x03, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x78, 0x00, - 0x03, 0x00, 0x1F, 0xFF, 0xF3, 0xFF, 0xFE, 0x3F, 0xFF, 0xE3, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xC7, 0xFF, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x18, 0x00, 0x03, 0xC0, - 0x00, 0x7F, 0x00, 0x0F, 0xF8, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x3F, - 0xF8, 0x01, 0xFF, 0x00, 0x07, 0xE0, 0x07, 0xFC, 0x07, 0xFF, 0x07, 0xFF, - 0x87, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0x80, 0x07, 0x80, 0x00, 0x80, 0x00, - 0x00, 0x03, 0xF8, 0x03, 0xFF, 0xC1, 0xFF, 0xF8, 0xFF, 0xFE, 0x7E, 0x1F, - 0xDF, 0x03, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xC0, 0x03, 0xE0, - 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, - 0x80, 0x07, 0x80, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xC0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFE, - 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xC0, 0x03, 0xE0, 0x0F, 0x80, 0x00, - 0xF8, 0x0F, 0x00, 0x00, 0x3C, 0x0F, 0x01, 0xF1, 0xCF, 0x0F, 0x03, 0xFD, - 0xC7, 0x8F, 0x03, 0xFF, 0xE1, 0xC7, 0x03, 0xE3, 0xE0, 0xE7, 0x03, 0xC0, - 0xF0, 0x73, 0x83, 0xC0, 0x78, 0x3B, 0x81, 0xE0, 0x38, 0x1D, 0xC1, 0xE0, - 0x1C, 0x1C, 0xC0, 0xF0, 0x1C, 0x0E, 0xE0, 0x70, 0x0E, 0x0F, 0x70, 0x78, - 0x0E, 0x07, 0x38, 0x3C, 0x0F, 0x07, 0x1C, 0x1E, 0x0F, 0x87, 0x8E, 0x0F, - 0x8F, 0xCF, 0x87, 0x07, 0xFF, 0xFF, 0x83, 0xC1, 0xFE, 0x7F, 0x00, 0xE0, - 0x3C, 0x1F, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x01, 0x00, 0x03, 0xF8, 0x07, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x1F, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x0F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x03, - 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x1F, 0x7C, 0x00, 0x7E, 0xF8, 0x00, 0xF9, - 0xF0, 0x03, 0xF3, 0xE0, 0x07, 0xC3, 0xE0, 0x1F, 0x87, 0xC0, 0x3E, 0x0F, - 0x80, 0xF8, 0x1F, 0x01, 0xF0, 0x3E, 0x07, 0xFF, 0xFC, 0x1F, 0xFF, 0xF8, - 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0xF1, 0xF0, 0x03, 0xE7, 0xC0, 0x07, 0xCF, - 0x80, 0x0F, 0xBE, 0x00, 0x1F, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x7C, 0x07, - 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x0F, - 0xC0, 0x3F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, 0x1F, 0x1F, - 0x80, 0x1E, 0x1F, 0x80, 0x3E, 0x1F, 0x00, 0x7C, 0x1F, 0xFF, 0xF8, 0x1F, - 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x3E, 0x00, 0xFC, 0x3E, - 0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x7E, 0x00, 0x7C, 0x7C, 0x00, 0x7C, 0x7C, - 0x00, 0xF8, 0x7C, 0x01, 0xF8, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xF8, 0x01, - 0xFF, 0xFC, 0x03, 0xFF, 0xFE, 0x07, 0xE0, 0x7F, 0x0F, 0xC0, 0x3F, 0x1F, - 0x80, 0x1F, 0x3F, 0x00, 0x1F, 0x3E, 0x00, 0x1F, 0x7E, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x7C, 0xF8, - 0x00, 0x7C, 0xFC, 0x00, 0xF8, 0xFC, 0x01, 0xF8, 0x7F, 0x07, 0xF0, 0x7F, - 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x07, - 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x0F, - 0x80, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0x80, 0x1F, 0x1F, 0x80, 0x1F, 0x1F, - 0x80, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x1F, 0x3F, - 0x00, 0x1F, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, - 0x00, 0x3E, 0x7E, 0x00, 0x7C, 0x7C, 0x00, 0x7C, 0x7C, 0x00, 0xF8, 0x7C, - 0x01, 0xF8, 0x7C, 0x07, 0xF0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xC0, 0xFF, - 0xFF, 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x07, - 0xFF, 0xFE, 0x0F, 0xFF, 0xFE, 0x0F, 0x80, 0x00, 0x0F, 0x80, 0x00, 0x0F, - 0x80, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF0, 0x3F, - 0xFF, 0xF0, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0x07, - 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xF8, - 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0xFF, 0xFE, - 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, - 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xF8, 0x01, 0xFF, 0xFC, 0x03, - 0xFF, 0xFE, 0x07, 0xE0, 0x7E, 0x0F, 0x80, 0x3F, 0x1F, 0x00, 0x1F, 0x3E, - 0x00, 0x1F, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0xF8, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xF8, 0x07, 0xFE, 0xF8, - 0x07, 0xFE, 0xF8, 0x00, 0x3E, 0xF8, 0x00, 0x3E, 0xFC, 0x00, 0x7E, 0xFC, - 0x00, 0x7C, 0x7E, 0x00, 0xFC, 0x7F, 0x83, 0xFC, 0x3F, 0xFF, 0xFC, 0x1F, - 0xFF, 0xBC, 0x0F, 0xFF, 0x38, 0x03, 0xFC, 0x38, 0x03, 0xE0, 0x07, 0xC0, - 0xF8, 0x01, 0xF0, 0x7E, 0x00, 0x7C, 0x1F, 0x00, 0x3F, 0x07, 0xC0, 0x0F, - 0x81, 0xF0, 0x03, 0xE0, 0xFC, 0x00, 0xF8, 0x3E, 0x00, 0x3E, 0x0F, 0x80, - 0x1F, 0x83, 0xE0, 0x07, 0xC0, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFC, 0x1F, - 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0xF8, - 0x3F, 0x00, 0x3E, 0x0F, 0x80, 0x0F, 0x83, 0xE0, 0x07, 0xE0, 0xF8, 0x01, - 0xF0, 0x3E, 0x00, 0x7C, 0x1F, 0x80, 0x1F, 0x07, 0xC0, 0x0F, 0xC1, 0xF0, - 0x03, 0xF0, 0x7C, 0x00, 0xF8, 0x3F, 0x00, 0x3E, 0x00, 0x07, 0xC3, 0xF0, - 0xFC, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x7E, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, - 0x3F, 0x0F, 0xC3, 0xE0, 0xF8, 0x3E, 0x0F, 0x87, 0xE1, 0xF0, 0x7C, 0x1F, - 0x07, 0xC3, 0xF0, 0xFC, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, - 0x01, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, - 0x00, 0x3E, 0x00, 0x07, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x7C, 0x0F, - 0x8F, 0x81, 0xF8, 0xF8, 0x1F, 0x0F, 0x81, 0xF0, 0xF8, 0x1F, 0x0F, 0xC3, - 0xF0, 0xFF, 0xFE, 0x07, 0xFF, 0xC0, 0x3F, 0xF8, 0x01, 0xFC, 0x00, 0x07, - 0xC0, 0x0F, 0xC1, 0xF0, 0x07, 0xE0, 0x7C, 0x03, 0xF0, 0x3F, 0x03, 0xF8, - 0x0F, 0x81, 0xF8, 0x03, 0xE0, 0xFC, 0x00, 0xF8, 0x7E, 0x00, 0x7E, 0x3F, - 0x00, 0x1F, 0x1F, 0x80, 0x07, 0xCF, 0xC0, 0x01, 0xF7, 0xE0, 0x00, 0x7F, - 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, - 0xFE, 0xFC, 0x00, 0x3F, 0x1F, 0x80, 0x1F, 0x87, 0xE0, 0x07, 0xC0, 0xFC, - 0x01, 0xF0, 0x3F, 0x00, 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xFC, 0x0F, 0xC0, - 0x3F, 0x03, 0xE0, 0x0F, 0xE0, 0xF8, 0x01, 0xF8, 0x3E, 0x00, 0x3F, 0x00, - 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x0F, 0xC0, 0x03, - 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, 0x80, 0x07, 0xC0, 0x01, 0xF0, - 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x0F, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0x00, - 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, - 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xE0, 0x03, - 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x07, 0xF8, 0x1F, 0xE0, 0x0F, 0xF0, 0x3F, - 0xC0, 0x3F, 0xE0, 0x7F, 0x80, 0x7F, 0xC0, 0xFF, 0x01, 0xFF, 0x01, 0xFE, - 0x03, 0xFE, 0x07, 0xDC, 0x07, 0x7C, 0x0F, 0xB8, 0x1E, 0xF8, 0x1F, 0x70, - 0x3D, 0xF0, 0x3E, 0xF0, 0xF7, 0xC0, 0xF9, 0xE1, 0xEF, 0x81, 0xF3, 0xC7, - 0x9F, 0x03, 0xE7, 0x8F, 0x3E, 0x07, 0xCF, 0x3C, 0x7C, 0x0F, 0x9E, 0x79, - 0xF0, 0x3E, 0x3C, 0xE3, 0xE0, 0x7C, 0x7B, 0xC7, 0xC0, 0xF8, 0xF7, 0x8F, - 0x81, 0xF1, 0xFE, 0x1E, 0x07, 0xE3, 0xFC, 0x7C, 0x0F, 0x87, 0xF0, 0xF8, - 0x1F, 0x0F, 0xE1, 0xF0, 0x3E, 0x1F, 0x83, 0xE0, 0x7C, 0x3F, 0x0F, 0x81, - 0xF0, 0x7E, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0x7E, 0x00, 0xF8, 0x1F, - 0xC0, 0x1F, 0x03, 0xF8, 0x03, 0xE0, 0x7F, 0x80, 0x7C, 0x0F, 0xF0, 0x1F, - 0x01, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, 0xBC, 0x0F, 0x81, 0xF7, - 0xC1, 0xF0, 0x3E, 0xF8, 0x7C, 0x0F, 0x8F, 0x0F, 0x81, 0xF1, 0xF1, 0xF0, - 0x3E, 0x3E, 0x3E, 0x07, 0xC3, 0xC7, 0xC0, 0xF8, 0x7D, 0xF0, 0x3E, 0x0F, - 0xBE, 0x07, 0xC0, 0xF7, 0xC0, 0xF8, 0x1F, 0xF8, 0x1F, 0x01, 0xFE, 0x03, - 0xC0, 0x3F, 0xC0, 0xF8, 0x07, 0xF8, 0x1F, 0x00, 0x7F, 0x03, 0xE0, 0x0F, - 0xE0, 0x7C, 0x01, 0xF8, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x3F, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x7E, 0x07, 0xF0, - 0x7E, 0x01, 0xF8, 0x7C, 0x00, 0x7E, 0x3E, 0x00, 0x1F, 0x3E, 0x00, 0x0F, - 0x9E, 0x00, 0x07, 0xDF, 0x00, 0x03, 0xEF, 0x80, 0x01, 0xFF, 0x80, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, - 0x1F, 0x7C, 0x00, 0x1F, 0x3E, 0x00, 0x1F, 0x9F, 0x80, 0x0F, 0x87, 0xE0, - 0x0F, 0x83, 0xF8, 0x1F, 0x80, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x0F, - 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, - 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xF0, 0xF8, 0x07, 0xE1, 0xF0, 0x07, 0xC3, - 0xE0, 0x0F, 0x8F, 0xC0, 0x1F, 0x1F, 0x00, 0x3E, 0x3E, 0x00, 0xF8, 0x7C, - 0x01, 0xF0, 0xF8, 0x07, 0xC3, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x0F, 0xFF, - 0xF8, 0x1F, 0xFF, 0x80, 0x3E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x00, - 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x7F, 0x07, - 0xF0, 0x7E, 0x01, 0xF8, 0x7E, 0x00, 0x7E, 0x3E, 0x00, 0x1F, 0x3E, 0x00, - 0x0F, 0x9E, 0x00, 0x07, 0xDF, 0x00, 0x03, 0xEF, 0x80, 0x01, 0xF7, 0x80, - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8, - 0x02, 0x1F, 0x7C, 0x03, 0x9F, 0x3E, 0x03, 0xFF, 0x9F, 0x81, 0xFF, 0x87, - 0xE0, 0x7F, 0x83, 0xF8, 0x3F, 0xC0, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xF0, - 0x0F, 0xFF, 0xFC, 0x01, 0xFE, 0x1C, 0x00, 0x00, 0x0C, 0x00, 0x07, 0xFF, - 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x0F, 0x80, - 0x3F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, 0x1F, 0x0F, 0x80, 0x1F, 0x1F, 0x80, - 0x1E, 0x1F, 0x00, 0x3E, 0x1F, 0x00, 0x7C, 0x1F, 0xFF, 0xF8, 0x1F, 0xFF, - 0xE0, 0x3F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x3E, 0x01, 0xF8, 0x3E, 0x00, - 0xF8, 0x3E, 0x00, 0xF8, 0x7E, 0x00, 0xF8, 0x7C, 0x00, 0xF8, 0x7C, 0x01, - 0xF0, 0x7C, 0x01, 0xF0, 0x7C, 0x01, 0xF0, 0xFC, 0x01, 0xF0, 0xF8, 0x01, - 0xF0, 0xF8, 0x01, 0xF0, 0x00, 0x3F, 0xC0, 0x07, 0xFF, 0xC0, 0x3F, 0xFF, - 0x81, 0xFF, 0xFF, 0x0F, 0xC0, 0xFC, 0x3E, 0x01, 0xF1, 0xF0, 0x07, 0xC7, - 0xC0, 0x1F, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xFF, - 0x80, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x03, 0xFE, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xEF, 0x80, 0x0F, 0xBE, 0x00, 0x3C, 0xFC, - 0x01, 0xF3, 0xF8, 0x1F, 0x87, 0xFF, 0xFE, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, - 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x3E, - 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, - 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xC0, - 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, - 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, - 0x00, 0x0F, 0x80, 0x1F, 0x1F, 0x80, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x00, - 0x3F, 0x1F, 0x00, 0x3E, 0x1F, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x00, - 0x7E, 0x3E, 0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x7C, 0x00, - 0x7C, 0x7C, 0x00, 0xFC, 0x7C, 0x00, 0xF8, 0x7C, 0x00, 0xF8, 0x7C, 0x00, - 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x01, 0xF8, 0xF8, 0x01, 0xF0, 0xF8, 0x01, - 0xF0, 0xF8, 0x03, 0xE0, 0xFE, 0x0F, 0xE0, 0x7F, 0xFF, 0xC0, 0x7F, 0xFF, - 0x80, 0x1F, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0xF0, 0x03, - 0xE7, 0xC0, 0x0F, 0x9F, 0x00, 0x7C, 0x7C, 0x01, 0xF1, 0xF0, 0x0F, 0x87, - 0xC0, 0x3E, 0x1F, 0x01, 0xF0, 0x7C, 0x07, 0x81, 0xF0, 0x3E, 0x03, 0xC0, - 0xF0, 0x0F, 0x07, 0xC0, 0x3E, 0x1E, 0x00, 0xF8, 0xF8, 0x03, 0xE3, 0xC0, - 0x0F, 0x9F, 0x00, 0x3E, 0x78, 0x00, 0xFB, 0xE0, 0x01, 0xEF, 0x00, 0x07, - 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xE0, - 0x00, 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x07, 0xE0, 0x1F, 0xF8, - 0x07, 0xE0, 0x3F, 0xF8, 0x0F, 0xE0, 0x3E, 0xF8, 0x0F, 0xE0, 0x7E, 0xF8, - 0x1F, 0xE0, 0x7C, 0xF8, 0x1F, 0xE0, 0x7C, 0xF8, 0x3F, 0xE0, 0xF8, 0xF8, - 0x3D, 0xE0, 0xF8, 0x78, 0x3D, 0xE1, 0xF0, 0x78, 0x79, 0xE1, 0xF0, 0x78, - 0x79, 0xE1, 0xE0, 0x78, 0xF9, 0xE3, 0xE0, 0x78, 0xF1, 0xE3, 0xC0, 0x79, - 0xF1, 0xE7, 0xC0, 0x79, 0xE1, 0xE7, 0x80, 0x79, 0xE1, 0xE7, 0x80, 0x7B, - 0xC1, 0xEF, 0x80, 0x7B, 0xC1, 0xEF, 0x00, 0x7F, 0x81, 0xFF, 0x00, 0x7F, - 0x81, 0xFE, 0x00, 0x7F, 0x01, 0xFE, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x7F, - 0x01, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x3E, 0x01, 0xF8, 0x00, 0x3C, - 0x01, 0xF0, 0x00, 0x03, 0xF0, 0x07, 0xE0, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x7E, 0x00, 0xFC, 0x1F, 0x80, 0x1F, 0x83, 0xE0, 0x01, 0xF8, 0xF8, 0x00, - 0x3F, 0x3F, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x3E, 0xF8, 0x00, 0x0F, 0xDF, 0x80, 0x03, 0xF3, 0xF0, 0x00, 0xFC, - 0x3F, 0x00, 0x3F, 0x07, 0xE0, 0x07, 0xE0, 0xFC, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x01, 0xF8, 0x1F, 0x80, 0x3F, 0x80, 0x7C, 0x00, 0xFD, 0xF8, 0x07, - 0xE7, 0xE0, 0x1F, 0x1F, 0x80, 0xFC, 0x3E, 0x07, 0xE0, 0xFC, 0x1F, 0x03, - 0xF0, 0xFC, 0x07, 0xC7, 0xE0, 0x1F, 0x1F, 0x00, 0x7E, 0xFC, 0x00, 0xFB, - 0xE0, 0x03, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, - 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x01, - 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, - 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x83, 0xFF, - 0xFF, 0x81, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xE0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, - 0x03, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, - 0xF0, 0x7F, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x1F, - 0xF0, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, - 0x1E, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0x00, - 0x1E, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, - 0xF0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x00, 0xE7, 0x39, 0xCE, 0x31, 0x8C, - 0x63, 0x1C, 0xE7, 0x39, 0xCE, 0x31, 0x8C, 0x63, 0x9C, 0xE7, 0x38, 0x01, - 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x1F, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, - 0x00, 0x3E, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x0F, 0x00, - 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, - 0x00, 0x3E, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x0F, 0x00, - 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x1F, 0xF0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, - 0x00, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0x03, - 0x9E, 0x07, 0x9E, 0x0F, 0x1E, 0x0F, 0x1E, 0x1E, 0x1E, 0x1C, 0x0F, 0x3C, - 0x0F, 0x78, 0x0F, 0x78, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0xF3, 0x8C, 0x71, 0x80, 0x01, 0xFE, 0x01, 0xFF, 0xE0, - 0xFF, 0xF8, 0x7F, 0xFF, 0x1F, 0x0F, 0xC7, 0x81, 0xF0, 0x00, 0x7C, 0x00, - 0xFE, 0x07, 0xFF, 0x87, 0xFF, 0xE3, 0xFE, 0xF9, 0xF0, 0x7C, 0xF8, 0x1F, - 0x3E, 0x0F, 0xCF, 0x87, 0xF3, 0xFF, 0xF8, 0xFF, 0xFE, 0x1F, 0xEF, 0x81, - 0xE3, 0xF0, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, - 0x07, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF9, 0xF8, 0x0F, 0xFF, - 0xC1, 0xFF, 0xFE, 0x1F, 0xFF, 0xE1, 0xFC, 0x3F, 0x1F, 0x83, 0xF1, 0xF0, - 0x1F, 0x3E, 0x01, 0xF3, 0xE0, 0x1F, 0x3C, 0x01, 0xF3, 0xC0, 0x1F, 0x3C, - 0x03, 0xE7, 0xC0, 0x3E, 0x7E, 0x07, 0xC7, 0xF1, 0xFC, 0x7F, 0xFF, 0x87, - 0xFF, 0xF0, 0xFB, 0xFE, 0x0F, 0x9F, 0x80, 0x00, 0xFC, 0x01, 0xFF, 0xC0, - 0xFF, 0xF8, 0x7F, 0xFF, 0x3F, 0x0F, 0xCF, 0x81, 0xF7, 0xC0, 0x7D, 0xF0, - 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x0F, - 0xBE, 0x07, 0xCF, 0xC3, 0xF1, 0xFF, 0xF8, 0x7F, 0xFC, 0x0F, 0xFE, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, - 0x3E, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x7E, 0x7C, - 0x07, 0xFD, 0xF0, 0x3F, 0xFF, 0xC1, 0xFF, 0xFE, 0x0F, 0xE3, 0xF8, 0x3E, - 0x07, 0xE1, 0xF0, 0x1F, 0x87, 0xC0, 0x3C, 0x3E, 0x00, 0xF0, 0xF8, 0x07, - 0xC3, 0xE0, 0x1F, 0x0F, 0x80, 0x7C, 0x3E, 0x03, 0xE0, 0xF8, 0x1F, 0x83, - 0xF0, 0xFE, 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x7E, - 0x7C, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0xE0, 0x3F, 0xFE, 0x0F, 0xFF, 0xE3, - 0xF0, 0x7E, 0x7C, 0x07, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x1F, 0x3F, - 0x07, 0xE3, 0xFF, 0xF8, 0x7F, 0xFE, 0x03, 0xFF, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0xF8, 0x1F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7C, 0x07, 0xC0, 0x3E, 0x0F, - 0xFE, 0x7F, 0xF3, 0xFF, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, - 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x78, 0x07, 0xC0, 0x3E, 0x01, - 0xF0, 0x0F, 0x80, 0xF8, 0x07, 0xC0, 0x00, 0x00, 0x7C, 0x7C, 0x07, 0xFD, - 0xF0, 0x3F, 0xF7, 0x81, 0xFF, 0xFE, 0x0F, 0xE3, 0xF8, 0x3E, 0x07, 0xE1, - 0xF8, 0x0F, 0x87, 0xC0, 0x3C, 0x1E, 0x00, 0xF0, 0xF8, 0x03, 0xC3, 0xE0, - 0x1F, 0x0F, 0x80, 0x78, 0x3E, 0x03, 0xE0, 0xF8, 0x1F, 0x83, 0xF0, 0xFE, - 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xEF, 0x00, 0x3E, 0x7C, 0x00, - 0x01, 0xF0, 0x00, 0x07, 0xC3, 0xE0, 0x3E, 0x0F, 0x80, 0xF8, 0x3F, 0x0F, - 0xC0, 0x7F, 0xFE, 0x00, 0xFF, 0xF0, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x0F, 0x80, 0x00, 0xF8, 0xF8, 0x0F, 0xBF, 0xE0, 0xFF, 0xFF, 0x0F, - 0xFF, 0xF1, 0xFC, 0x3F, 0x1F, 0x81, 0xF1, 0xF0, 0x1F, 0x1F, 0x01, 0xF1, - 0xE0, 0x1F, 0x3E, 0x03, 0xE3, 0xE0, 0x3E, 0x3E, 0x03, 0xE3, 0xE0, 0x3E, - 0x7C, 0x03, 0xE7, 0xC0, 0x7C, 0x7C, 0x07, 0xC7, 0xC0, 0x7C, 0x7C, 0x07, - 0xCF, 0x80, 0x78, 0x07, 0xC1, 0xF0, 0x7C, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, - 0x0F, 0x87, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, 0x3E, 0x00, - 0x00, 0x3E, 0x00, 0x78, 0x01, 0xF0, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0x80, 0x1F, - 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, - 0x1F, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x1F, - 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xF0, 0x1F, 0xC0, 0x3F, 0x80, - 0x7E, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, - 0x0F, 0x80, 0x00, 0x78, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, - 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x07, 0xC7, 0xE0, 0x3E, 0x7E, 0x01, - 0xF7, 0xE0, 0x0F, 0xFE, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x3F, 0xFC, - 0x01, 0xFF, 0xE0, 0x0F, 0xDF, 0x00, 0xFC, 0xFC, 0x07, 0xC3, 0xE0, 0x3E, - 0x1F, 0x01, 0xF0, 0xFC, 0x0F, 0x83, 0xE0, 0xF8, 0x1F, 0x87, 0xC0, 0xFC, - 0x00, 0x07, 0xC1, 0xF0, 0x7C, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x1F, - 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x87, - 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, 0x3E, 0x00, 0x0F, 0x8F, - 0x83, 0xF0, 0x3E, 0xFF, 0x3F, 0xE0, 0xF7, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, - 0xFF, 0x1F, 0xC7, 0xF8, 0x7C, 0x7C, 0x0F, 0x81, 0xF1, 0xF0, 0x3E, 0x07, - 0xCF, 0x81, 0xF0, 0x3E, 0x3E, 0x07, 0xC0, 0xF8, 0xF8, 0x1F, 0x03, 0xE3, - 0xE0, 0x7C, 0x0F, 0x8F, 0x81, 0xF0, 0x3E, 0x7C, 0x0F, 0x81, 0xF1, 0xF0, - 0x3E, 0x07, 0xC7, 0xC0, 0xF8, 0x1F, 0x1F, 0x03, 0xE0, 0x7C, 0x7C, 0x0F, - 0x81, 0xE3, 0xE0, 0x7C, 0x0F, 0x8F, 0x81, 0xF0, 0x3E, 0x00, 0x0F, 0x8F, - 0x80, 0xFB, 0xFE, 0x0F, 0xFF, 0xF1, 0xFF, 0xFF, 0x1F, 0xC3, 0xF1, 0xF8, - 0x1F, 0x1F, 0x01, 0xF1, 0xF0, 0x1F, 0x3E, 0x01, 0xF3, 0xE0, 0x3E, 0x3E, - 0x03, 0xE3, 0xE0, 0x3E, 0x3C, 0x03, 0xE7, 0xC0, 0x3E, 0x7C, 0x07, 0xC7, - 0xC0, 0x7C, 0x7C, 0x07, 0xC7, 0x80, 0x7C, 0xF8, 0x07, 0x80, 0x00, 0xFE, - 0x00, 0x7F, 0xF0, 0x3F, 0xFF, 0x0F, 0xFF, 0xE3, 0xF8, 0xFE, 0x7C, 0x0F, - 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x1F, - 0xFC, 0x03, 0xEF, 0x80, 0x7D, 0xF8, 0x1F, 0x3F, 0x07, 0xE3, 0xFF, 0xF8, - 0x7F, 0xFE, 0x07, 0xFF, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xE7, 0xE0, 0x0F, - 0xBF, 0xC0, 0x7D, 0xFF, 0x81, 0xFF, 0xFE, 0x07, 0xF0, 0xFC, 0x1F, 0x81, - 0xF0, 0x7C, 0x07, 0xC3, 0xE0, 0x1F, 0x0F, 0x80, 0x7C, 0x3E, 0x01, 0xF0, - 0xF0, 0x07, 0xC3, 0xC0, 0x3E, 0x1F, 0x00, 0xF8, 0x7E, 0x07, 0xC1, 0xFC, - 0x7F, 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0xFB, 0xFE, 0x03, 0xE7, 0xE0, - 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1F, - 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x01, - 0xF1, 0xF0, 0x7F, 0xDF, 0x0F, 0xFD, 0xF1, 0xFF, 0xFE, 0x3F, 0x8F, 0xE3, - 0xE0, 0x7E, 0x7C, 0x03, 0xE7, 0xC0, 0x3E, 0xF8, 0x03, 0xCF, 0x80, 0x3C, - 0xF8, 0x07, 0xCF, 0x80, 0x7C, 0xF8, 0x0F, 0x8F, 0x81, 0xF8, 0xFC, 0x3F, - 0x87, 0xFF, 0xF8, 0x7F, 0xFF, 0x83, 0xFF, 0xF0, 0x1F, 0x9F, 0x00, 0x01, - 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, - 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x0F, 0x8E, 0x1F, 0x7C, 0x3F, - 0xF0, 0xFF, 0xE1, 0xFC, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, - 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, - 0x00, 0x7C, 0x00, 0xF0, 0x03, 0xE0, 0x00, 0x01, 0xFC, 0x01, 0xFF, 0xC0, - 0xFF, 0xF8, 0x7F, 0xFF, 0x3F, 0x0F, 0xCF, 0x81, 0xF3, 0xF0, 0x00, 0xFF, - 0x80, 0x3F, 0xFC, 0x07, 0xFF, 0xC0, 0x7F, 0xF8, 0x03, 0xFE, 0x00, 0x1F, - 0xBE, 0x03, 0xEF, 0xC1, 0xFB, 0xFF, 0xFC, 0x7F, 0xFE, 0x0F, 0xFF, 0x00, - 0xFE, 0x00, 0x0F, 0x81, 0xF0, 0x7C, 0x0F, 0x81, 0xF0, 0xFF, 0xBF, 0xF7, - 0xFE, 0x3E, 0x07, 0xC0, 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, - 0xF8, 0x1F, 0x03, 0xE0, 0x7F, 0x0F, 0xE1, 0xFC, 0x1F, 0x80, 0x1F, 0x01, - 0xF1, 0xF0, 0x1F, 0x3E, 0x03, 0xE3, 0xE0, 0x3E, 0x3E, 0x03, 0xE3, 0xE0, - 0x3E, 0x3E, 0x03, 0xE7, 0xC0, 0x7C, 0x7C, 0x07, 0xC7, 0xC0, 0x7C, 0x7C, - 0x07, 0xC7, 0xC0, 0x7C, 0xF8, 0x0F, 0x8F, 0x81, 0xF8, 0xF8, 0x3F, 0x8F, - 0xFF, 0xF8, 0xFF, 0xFF, 0x07, 0xFD, 0xF0, 0x3F, 0x1F, 0x00, 0xF8, 0x0F, - 0xFE, 0x03, 0xEF, 0x81, 0xF3, 0xE0, 0x7C, 0xF8, 0x3E, 0x3E, 0x0F, 0x8F, - 0x87, 0xC1, 0xE1, 0xF0, 0x78, 0xF8, 0x1E, 0x3E, 0x07, 0x9F, 0x01, 0xF7, - 0x80, 0x7F, 0xE0, 0x1F, 0xF0, 0x03, 0xFC, 0x00, 0xFE, 0x00, 0x3F, 0x80, - 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xF8, 0x1F, 0x07, 0xFF, 0x03, 0xE0, 0xFB, - 0xE0, 0xFC, 0x1F, 0x7C, 0x1F, 0x87, 0xCF, 0x87, 0xF0, 0xF9, 0xF0, 0xFE, - 0x3E, 0x3E, 0x3D, 0xC7, 0xC3, 0xC7, 0xB9, 0xF0, 0x79, 0xE7, 0x3E, 0x0F, - 0x3C, 0xE7, 0x81, 0xEF, 0x1D, 0xF0, 0x3D, 0xE3, 0xBC, 0x07, 0xBC, 0x7F, - 0x80, 0xFF, 0x0F, 0xE0, 0x1F, 0xE1, 0xFC, 0x03, 0xF8, 0x3F, 0x00, 0x7F, - 0x07, 0xE0, 0x0F, 0xC0, 0xF8, 0x01, 0xF8, 0x1F, 0x00, 0x00, 0x0F, 0xC1, - 0xF8, 0x3F, 0x07, 0xC0, 0x7C, 0x3E, 0x01, 0xF9, 0xF8, 0x03, 0xEF, 0xC0, - 0x0F, 0xBE, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0x80, 0x01, 0xFC, 0x00, 0x03, - 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x3E, 0xF8, - 0x01, 0xFB, 0xF0, 0x07, 0xC7, 0xC0, 0x3E, 0x1F, 0x81, 0xF8, 0x7E, 0x0F, - 0xC0, 0xF8, 0x00, 0x1F, 0x80, 0x7C, 0x3E, 0x03, 0xE0, 0xF8, 0x0F, 0x03, - 0xE0, 0x7C, 0x0F, 0x81, 0xE0, 0x3E, 0x0F, 0x80, 0xF8, 0x3C, 0x03, 0xE1, - 0xF0, 0x07, 0x87, 0x80, 0x1F, 0x3E, 0x00, 0x7C, 0xF0, 0x01, 0xF7, 0xC0, - 0x07, 0xDE, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x03, - 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, - 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x01, - 0xF8, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3F, - 0xFF, 0x87, 0xFF, 0xE0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, - 0xF0, 0x01, 0xFC, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, - 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xF8, 0xFF, 0xFF, 0x1F, 0xFF, - 0xE3, 0xFF, 0xFC, 0x00, 0x00, 0x7C, 0x03, 0xF0, 0x1F, 0xC0, 0xFE, 0x03, - 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, - 0xE0, 0x0F, 0x80, 0x3C, 0x01, 0xF0, 0x1F, 0x80, 0x70, 0x01, 0xF8, 0x01, - 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xFC, 0x07, 0xE0, 0x0F, 0x80, - 0x1E, 0x00, 0x03, 0x81, 0xC0, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0C, 0x0E, - 0x07, 0x03, 0x81, 0xC0, 0xC0, 0xE0, 0x70, 0x38, 0x18, 0x1C, 0x0E, 0x07, - 0x03, 0x81, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x18, 0x1C, 0x0E, 0x07, 0x01, - 0x80, 0x80, 0x00, 0x00, 0x01, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0xFE, 0x00, - 0x78, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, - 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x7E, 0x00, 0x38, 0x07, 0xE0, - 0x3E, 0x00, 0xF0, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, - 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x01, 0xF8, 0x0F, 0xE0, 0x3F, 0x00, - 0xF8, 0x00, 0x0F, 0x00, 0x1F, 0xC1, 0xDF, 0xF0, 0xEE, 0x3F, 0xE6, 0x07, - 0xF0, 0x01, 0xE0}; - -const GFXglyph FreeSansBoldOblique18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 10, 0, 1}, // 0x20 ' ' - {0, 10, 25, 12, 4, -24}, // 0x21 '!' - {32, 13, 9, 17, 6, -25}, // 0x22 '"' - {47, 22, 24, 19, 1, -23}, // 0x23 '#' - {113, 19, 31, 19, 2, -26}, // 0x24 '$' - {187, 26, 26, 31, 5, -25}, // 0x25 '%' - {272, 21, 25, 25, 3, -24}, // 0x26 '&' - {338, 5, 9, 8, 6, -25}, // 0x27 ''' - {344, 13, 33, 12, 3, -25}, // 0x28 '(' - {398, 13, 33, 12, -1, -25}, // 0x29 ')' - {452, 12, 11, 14, 5, -25}, // 0x2A '*' - {469, 18, 16, 20, 3, -15}, // 0x2B '+' - {505, 7, 11, 10, 1, -4}, // 0x2C ',' - {515, 10, 4, 12, 2, -10}, // 0x2D '-' - {520, 6, 5, 10, 2, -4}, // 0x2E '.' - {524, 15, 25, 10, 0, -24}, // 0x2F '/' - {571, 18, 25, 19, 3, -24}, // 0x30 '0' - {628, 13, 25, 19, 6, -24}, // 0x31 '1' - {669, 21, 25, 19, 1, -24}, // 0x32 '2' - {735, 20, 25, 19, 2, -24}, // 0x33 '3' - {798, 19, 25, 19, 2, -24}, // 0x34 '4' - {858, 20, 24, 19, 2, -23}, // 0x35 '5' - {918, 19, 25, 19, 3, -24}, // 0x36 '6' - {978, 19, 24, 19, 5, -23}, // 0x37 '7' - {1035, 20, 25, 19, 2, -24}, // 0x38 '8' - {1098, 19, 25, 19, 2, -24}, // 0x39 '9' - {1158, 9, 18, 12, 4, -17}, // 0x3A ':' - {1179, 10, 24, 12, 3, -17}, // 0x3B ';' - {1209, 19, 17, 20, 3, -16}, // 0x3C '<' - {1250, 20, 12, 20, 2, -13}, // 0x3D '=' - {1280, 19, 17, 20, 1, -15}, // 0x3E '>' - {1321, 18, 26, 21, 6, -25}, // 0x3F '?' - {1380, 33, 31, 34, 3, -25}, // 0x40 '@' - {1508, 23, 26, 25, 1, -25}, // 0x41 'A' - {1583, 24, 26, 25, 3, -25}, // 0x42 'B' - {1661, 24, 26, 25, 4, -25}, // 0x43 'C' - {1739, 24, 26, 25, 3, -25}, // 0x44 'D' - {1817, 24, 26, 23, 3, -25}, // 0x45 'E' - {1895, 23, 26, 21, 3, -25}, // 0x46 'F' - {1970, 24, 26, 27, 4, -25}, // 0x47 'G' - {2048, 26, 26, 25, 2, -25}, // 0x48 'H' - {2133, 10, 26, 10, 2, -25}, // 0x49 'I' - {2166, 20, 26, 19, 2, -25}, // 0x4A 'J' - {2231, 26, 26, 25, 3, -25}, // 0x4B 'K' - {2316, 18, 26, 21, 3, -25}, // 0x4C 'L' - {2375, 31, 26, 29, 2, -25}, // 0x4D 'M' - {2476, 27, 26, 25, 2, -25}, // 0x4E 'N' - {2564, 25, 26, 27, 4, -25}, // 0x4F 'O' - {2646, 23, 26, 23, 3, -25}, // 0x50 'P' - {2721, 25, 27, 27, 4, -25}, // 0x51 'Q' - {2806, 24, 26, 25, 3, -25}, // 0x52 'R' - {2884, 22, 26, 23, 3, -25}, // 0x53 'S' - {2956, 21, 26, 21, 5, -25}, // 0x54 'T' - {3025, 24, 26, 25, 4, -25}, // 0x55 'U' - {3103, 22, 26, 23, 6, -25}, // 0x56 'V' - {3175, 32, 26, 33, 6, -25}, // 0x57 'W' - {3279, 27, 26, 23, 1, -25}, // 0x58 'X' - {3367, 22, 26, 23, 6, -25}, // 0x59 'Y' - {3439, 25, 26, 21, 1, -25}, // 0x5A 'Z' - {3521, 15, 33, 12, 1, -25}, // 0x5B '[' - {3583, 5, 25, 10, 5, -24}, // 0x5C '\' - {3599, 15, 33, 12, -1, -25}, // 0x5D ']' - {3661, 16, 15, 20, 4, -23}, // 0x5E '^' - {3691, 21, 3, 19, -2, 5}, // 0x5F '_' - {3699, 5, 5, 12, 6, -25}, // 0x60 '`' - {3703, 18, 19, 19, 2, -18}, // 0x61 'a' - {3746, 20, 26, 21, 2, -25}, // 0x62 'b' - {3811, 18, 19, 19, 3, -18}, // 0x63 'c' - {3854, 22, 26, 21, 3, -25}, // 0x64 'd' - {3926, 19, 19, 19, 2, -18}, // 0x65 'e' - {3972, 13, 26, 12, 3, -25}, // 0x66 'f' - {4015, 22, 27, 21, 1, -18}, // 0x67 'g' - {4090, 20, 26, 21, 2, -25}, // 0x68 'h' - {4155, 10, 26, 10, 2, -25}, // 0x69 'i' - {4188, 15, 34, 10, -2, -25}, // 0x6A 'j' - {4252, 21, 26, 19, 2, -25}, // 0x6B 'k' - {4321, 10, 26, 10, 2, -25}, // 0x6C 'l' - {4354, 30, 19, 31, 2, -18}, // 0x6D 'm' - {4426, 20, 19, 21, 2, -18}, // 0x6E 'n' - {4474, 19, 19, 21, 3, -18}, // 0x6F 'o' - {4520, 22, 27, 21, 0, -18}, // 0x70 'p' - {4595, 20, 27, 21, 3, -18}, // 0x71 'q' - {4663, 15, 19, 14, 2, -18}, // 0x72 'r' - {4699, 18, 19, 19, 2, -18}, // 0x73 's' - {4742, 11, 23, 12, 4, -22}, // 0x74 't' - {4774, 20, 19, 21, 3, -18}, // 0x75 'u' - {4822, 18, 19, 19, 5, -18}, // 0x76 'v' - {4865, 27, 19, 27, 4, -18}, // 0x77 'w' - {4930, 22, 19, 19, 1, -18}, // 0x78 'x' - {4983, 22, 27, 19, 1, -18}, // 0x79 'y' - {5058, 19, 19, 17, 1, -18}, // 0x7A 'z' - {5104, 14, 33, 14, 2, -25}, // 0x7B '{' - {5162, 9, 33, 10, 2, -25}, // 0x7C '|' - {5200, 14, 33, 14, 2, -25}, // 0x7D '}' - {5258, 17, 6, 20, 3, -10}}; // 0x7E '~' - -const GFXfont FreeSansBoldOblique18pt7b PROGMEM = { - (uint8_t *)FreeSansBoldOblique18pt7bBitmaps, - (GFXglyph *)FreeSansBoldOblique18pt7bGlyphs, 0x20, 0x7E, 42}; - -// Approx. 5943 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique24pt7b.h deleted file mode 100644 index a20229d..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique24pt7b.h +++ /dev/null @@ -1,895 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBoldOblique24pt7bBitmaps[] PROGMEM = { - 0x01, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0xFF, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, - 0x80, 0xFE, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0xF8, 0x03, 0xE0, 0x0F, - 0x80, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0xFE, 0x03, 0xF8, 0x00, - 0x7E, 0x0F, 0xDF, 0x83, 0xF7, 0xE0, 0xFF, 0xF0, 0x7E, 0xFC, 0x1F, 0xBF, - 0x07, 0xEF, 0xC1, 0xFB, 0xE0, 0x7C, 0xF8, 0x1F, 0x3C, 0x07, 0x8F, 0x01, - 0xE3, 0x80, 0x70, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x03, - 0xE0, 0xF8, 0x00, 0x1F, 0x07, 0xC0, 0x01, 0xF0, 0x7C, 0x00, 0x0F, 0x83, - 0xE0, 0x00, 0xF8, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, - 0x7F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xE0, 0x0F, - 0x83, 0xE0, 0x00, 0x7C, 0x3E, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, - 0x80, 0x03, 0xE0, 0xF8, 0x00, 0x1F, 0x07, 0xC0, 0x00, 0xF8, 0x7C, 0x00, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, - 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xE0, 0x1F, 0x07, 0xC0, 0x00, 0xF8, 0x3E, - 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x7C, 0x1F, 0x00, 0x07, 0xC1, 0xF0, 0x00, - 0x3E, 0x0F, 0x80, 0x01, 0xF0, 0xF8, 0x00, 0x1F, 0x07, 0xC0, 0x00, 0xF8, - 0x3C, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0E, - 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xE0, 0x1F, - 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0x07, 0xF3, 0x9F, 0xC1, 0xF8, 0xE3, 0xF0, - 0x7C, 0x38, 0xFC, 0x3F, 0x0E, 0x3F, 0x0F, 0xC7, 0x8F, 0xC3, 0xF1, 0xC0, - 0x00, 0xFE, 0x70, 0x00, 0x3F, 0xDC, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x3F, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, - 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x77, 0xF8, 0x00, 0x1C, 0xFE, - 0x00, 0x07, 0x3F, 0x8F, 0xE3, 0xCF, 0xE3, 0xF8, 0xE3, 0xF8, 0xFE, 0x38, - 0xFC, 0x3F, 0x8E, 0x7F, 0x0F, 0xF3, 0x9F, 0xC3, 0xFD, 0xFF, 0xE0, 0x7F, - 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x03, 0x80, - 0x00, 0x01, 0xE0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, - 0x80, 0x7F, 0xE0, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0x1E, 0x01, 0xFF, 0xF0, - 0x01, 0xC0, 0x3F, 0xFF, 0x80, 0x3C, 0x07, 0xE1, 0xF8, 0x07, 0x80, 0x78, - 0x07, 0x80, 0xF0, 0x0F, 0x80, 0x78, 0x0E, 0x00, 0xF0, 0x07, 0x81, 0xC0, - 0x0F, 0x00, 0xF8, 0x3C, 0x00, 0xF0, 0x0F, 0x07, 0x80, 0x0F, 0xC3, 0xF0, - 0xF0, 0x00, 0xFF, 0xFE, 0x0E, 0x00, 0x07, 0xFF, 0xC1, 0xE0, 0x00, 0x7F, - 0xF8, 0x3C, 0x00, 0x03, 0xFF, 0x07, 0x80, 0x00, 0x0F, 0xC0, 0x70, 0x00, - 0x00, 0x00, 0x0E, 0x03, 0xF0, 0x00, 0x01, 0xE0, 0xFF, 0xC0, 0x00, 0x3C, - 0x1F, 0xFE, 0x00, 0x03, 0x83, 0xFF, 0xE0, 0x00, 0x70, 0x7F, 0xFF, 0x00, - 0x0F, 0x0F, 0xC3, 0xF0, 0x01, 0xE0, 0xF0, 0x0F, 0x00, 0x3C, 0x1F, 0x00, - 0xF0, 0x03, 0x81, 0xE0, 0x0F, 0x00, 0x78, 0x1E, 0x01, 0xF0, 0x0F, 0x01, - 0xE0, 0x1E, 0x01, 0xE0, 0x1F, 0x87, 0xE0, 0x1C, 0x01, 0xFF, 0xFC, 0x03, - 0x80, 0x0F, 0xFF, 0x80, 0x78, 0x00, 0xFF, 0xF0, 0x0F, 0x00, 0x07, 0xFE, - 0x01, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x03, 0xFF, 0xF8, 0x00, - 0x3F, 0x9F, 0xC0, 0x03, 0xF8, 0x7E, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0xFE, - 0x1F, 0x00, 0x07, 0xF1, 0xF8, 0x00, 0x3F, 0xCF, 0xC0, 0x01, 0xFE, 0xFC, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0x07, 0xC1, 0xFF, - 0xF8, 0x3E, 0x3F, 0xFF, 0xE3, 0xE3, 0xFE, 0x3F, 0x1F, 0x1F, 0xC1, 0xFD, - 0xF1, 0xFC, 0x07, 0xFF, 0x8F, 0xC0, 0x3F, 0xF8, 0xFE, 0x00, 0xFF, 0xC7, - 0xF0, 0x07, 0xFC, 0x3F, 0x80, 0x1F, 0xC1, 0xFC, 0x00, 0xFE, 0x0F, 0xF0, - 0x1F, 0xF8, 0x7F, 0xC1, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, - 0xFC, 0x3F, 0xFF, 0xCF, 0xE0, 0x7F, 0xF8, 0x7F, 0x80, 0xFF, 0x00, 0x00, - 0x7E, 0xFD, 0xFF, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xE3, 0xC7, 0x00, 0x00, - 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0xC0, 0x07, 0xC0, 0x07, 0xC0, - 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xF0, 0x01, 0xF0, 0x01, 0xF8, - 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x1F, - 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xF0, 0x01, - 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, - 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x1E, - 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x3E, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, - 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x7C, - 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x01, 0xF0, 0x00, - 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, - 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, - 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x07, 0xE0, 0x03, - 0xE0, 0x03, 0xF0, 0x01, 0xF0, 0x01, 0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, - 0x7C, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3F, 0x00, - 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xE0, 0x03, 0x80, 0x07, - 0x00, 0x0E, 0x07, 0x3C, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xFE, 0x0F, 0xE0, - 0x1F, 0xC0, 0x7F, 0x81, 0xEF, 0x87, 0x8F, 0x0E, 0x1E, 0x08, 0x10, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xC7, 0xF1, 0xF8, 0xFE, 0x3F, - 0x8F, 0xE0, 0x38, 0x1C, 0x07, 0x03, 0xC0, 0xE0, 0xF0, 0xFC, 0x3C, 0x0C, - 0x00, 0x7F, 0xFD, 0xFF, 0xF7, 0xFF, 0x9F, 0xFE, 0xFF, 0xFB, 0xFF, 0xE0, - 0x7F, 0x7F, 0x7F, 0x7E, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x70, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x03, - 0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x01, - 0xC0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, - 0x70, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, - 0x38, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, - 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, - 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x1F, 0xFC, 0x00, 0x3F, 0xFF, 0x80, 0x3F, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, - 0x1F, 0xC7, 0xF8, 0x1F, 0xC1, 0xFE, 0x1F, 0xC0, 0x7F, 0x0F, 0xC0, 0x3F, - 0x8F, 0xE0, 0x1F, 0xC7, 0xF0, 0x0F, 0xE3, 0xF0, 0x07, 0xF3, 0xF8, 0x03, - 0xF9, 0xFC, 0x01, 0xFC, 0xFC, 0x01, 0xFE, 0xFE, 0x00, 0xFE, 0x7F, 0x00, - 0x7F, 0x3F, 0x80, 0x3F, 0x9F, 0xC0, 0x1F, 0xCF, 0xE0, 0x1F, 0xEF, 0xE0, - 0x0F, 0xE7, 0xF0, 0x07, 0xF3, 0xF8, 0x03, 0xF9, 0xFC, 0x03, 0xF8, 0xFE, - 0x01, 0xFC, 0x7F, 0x00, 0xFE, 0x3F, 0x80, 0xFE, 0x1F, 0xE0, 0x7F, 0x0F, - 0xF8, 0xFF, 0x03, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0x80, - 0x1F, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x0F, - 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x3F, 0xF9, 0xFF, - 0xF8, 0xFF, 0xFC, 0xFF, 0xFE, 0x7F, 0xFF, 0x00, 0x3F, 0x80, 0x1F, 0x80, - 0x0F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xF8, 0x01, 0xFC, - 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x1F, 0xC0, 0x0F, - 0xE0, 0x07, 0xF0, 0x03, 0xF0, 0x01, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xFF, 0xFF, 0x00, 0xFF, 0x07, 0xFC, 0x07, 0xF0, 0x1F, 0xE0, 0x7F, - 0x00, 0x7F, 0x03, 0xF0, 0x03, 0xF8, 0x1F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, - 0xFE, 0x0F, 0xC0, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xF0, 0x07, - 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xC0, 0xFE, 0x1F, 0xF0, 0x7F, 0x01, 0xFC, - 0x1F, 0x80, 0x7F, 0x07, 0xE0, 0x1F, 0xC3, 0xF0, 0x07, 0xF0, 0xFC, 0x01, - 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x80, 0x01, - 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xFF, 0x80, - 0x01, 0xFF, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x3F, 0xCF, 0xE0, 0x0F, 0xE3, 0xF8, 0x07, 0xF8, 0xFF, 0x83, 0xFC, 0x3F, - 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xE0, - 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x7F, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, 0x3D, 0xFC, 0x00, 0x3C, 0xFE, 0x00, 0x3E, 0x7E, 0x00, - 0x3E, 0x7F, 0x00, 0x1E, 0x3F, 0x80, 0x1E, 0x1F, 0xC0, 0x1E, 0x0F, 0xC0, - 0x1F, 0x07, 0xE0, 0x1F, 0x07, 0xF0, 0x1F, 0x03, 0xF8, 0x1F, 0x01, 0xFC, - 0x0F, 0x80, 0xFC, 0x0F, 0x80, 0xFE, 0x0F, 0x80, 0x7F, 0x07, 0xFF, 0xFF, - 0xF7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, - 0xF0, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x80, 0x7C, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x03, 0xE3, 0xF0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x03, 0xFF, - 0xFF, 0x80, 0x7F, 0xFF, 0xF0, 0x1F, 0xE1, 0xFF, 0x03, 0xF0, 0x1F, 0xE0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0xFE, 0x1F, - 0xC0, 0x3F, 0x83, 0xF8, 0x07, 0xF0, 0x7F, 0x83, 0xFC, 0x0F, 0xFF, 0xFF, - 0x80, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFE, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xFE, - 0x00, 0x1F, 0xFF, 0x80, 0x1F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x1F, 0xC3, - 0xFC, 0x1F, 0x80, 0xFE, 0x0F, 0xC0, 0x3F, 0x0F, 0xC0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0xFC, 0x01, 0xF9, - 0xFF, 0x80, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFC, 0x3F, - 0xE1, 0xFF, 0x1F, 0xE0, 0x7F, 0x8F, 0xE0, 0x1F, 0xCF, 0xE0, 0x0F, 0xE7, - 0xF0, 0x07, 0xF3, 0xF0, 0x03, 0xF9, 0xF8, 0x01, 0xF8, 0xFC, 0x01, 0xFC, - 0x7E, 0x00, 0xFE, 0x3F, 0x00, 0xFE, 0x1F, 0xC0, 0xFF, 0x0F, 0xF0, 0xFF, - 0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, - 0x80, 0x07, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, - 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0x9F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x1F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xE0, - 0x00, 0x03, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x0F, 0xFF, 0x80, 0x07, 0xFF, 0xF0, 0x03, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, - 0xC0, 0xFE, 0x0F, 0xF0, 0x3E, 0x01, 0xFC, 0x1F, 0x80, 0x3F, 0x07, 0xC0, - 0x0F, 0xC1, 0xF0, 0x03, 0xF0, 0x7C, 0x01, 0xF8, 0x1F, 0x00, 0xFC, 0x03, - 0xF0, 0x7F, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, - 0x07, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x81, 0xFE, 0x1F, 0xE0, 0xFE, 0x03, - 0xFC, 0x3F, 0x00, 0x7F, 0x1F, 0xC0, 0x1F, 0xC7, 0xE0, 0x07, 0xF3, 0xF8, - 0x01, 0xFC, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x3F, 0x8F, 0xE0, 0x0F, 0xE3, - 0xFC, 0x07, 0xF0, 0xFF, 0x87, 0xFC, 0x3F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, - 0x00, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xE0, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xFF, 0x00, - 0x3F, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x3F, 0xC3, 0xF8, 0x3F, 0xC0, 0xFE, - 0x1F, 0xC0, 0x3F, 0x1F, 0xC0, 0x1F, 0x8F, 0xE0, 0x0F, 0xC7, 0xE0, 0x07, - 0xE7, 0xF0, 0x03, 0xF3, 0xF8, 0x01, 0xF9, 0xFC, 0x01, 0xFC, 0xFE, 0x00, - 0xFE, 0x7F, 0x00, 0xFE, 0x3F, 0xC0, 0xFF, 0x1F, 0xF0, 0xFF, 0x87, 0xFF, - 0xFF, 0xC3, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0x3F, 0xF3, 0xF0, 0x07, - 0xE3, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x7E, 0x1F, 0xC0, 0x7E, 0x0F, 0xF0, 0xFF, 0x07, 0xFF, 0xFF, 0x01, - 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0xFF, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7E, 0x0F, 0xE0, - 0xFE, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x07, 0xF0, 0x7F, 0x07, - 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x00, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, - 0x7E, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, - 0x03, 0x80, 0x1C, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0xF0, 0x0F, 0xC0, - 0x3C, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xE0, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, - 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, - 0x0F, 0xFF, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x3F, 0xFE, - 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xF8, 0x00, - 0x7F, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x80, 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, - 0xFF, 0xF1, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0x80, 0x04, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF, - 0xF8, 0x00, 0x7F, 0xFF, 0x80, 0x07, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xC0, - 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFF, - 0xC0, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, - 0xE0, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFE, 0x3F, 0xC1, 0xFF, 0x3F, 0x80, 0xFF, 0x7F, 0x00, 0x7F, - 0x7E, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, - 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, - 0x01, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, - 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x1F, 0xF8, 0x00, 0x07, - 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x07, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, - 0x00, 0x0F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xF1, - 0xF1, 0xF0, 0x7C, 0x00, 0xFF, 0xCF, 0x07, 0x87, 0xE0, 0x1F, 0xFF, 0xF8, - 0x3C, 0x7E, 0x01, 0xF8, 0x7F, 0x81, 0xE3, 0xE0, 0x1F, 0x01, 0xF8, 0x0F, - 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x79, 0xF0, 0x1F, 0x00, 0x7C, 0x03, 0xDF, - 0x00, 0xF0, 0x03, 0xE0, 0x1C, 0xF8, 0x0F, 0x80, 0x1E, 0x01, 0xE7, 0xC0, - 0x78, 0x00, 0xF0, 0x0F, 0x3C, 0x07, 0xC0, 0x0F, 0x00, 0xF3, 0xE0, 0x3C, - 0x00, 0x78, 0x07, 0x9F, 0x03, 0xE0, 0x07, 0x80, 0x78, 0xF8, 0x1F, 0x00, - 0x7C, 0x07, 0xC7, 0xC0, 0xF8, 0x07, 0xC0, 0x7C, 0x3E, 0x07, 0xC0, 0x7E, - 0x07, 0xC1, 0xF0, 0x3F, 0x07, 0xF8, 0xFC, 0x0F, 0x81, 0xFF, 0xFF, 0xFF, - 0xC0, 0x7E, 0x07, 0xFF, 0xBF, 0xFC, 0x01, 0xF0, 0x1F, 0xF8, 0xFF, 0x80, - 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x03, 0x80, 0x00, 0x01, 0xFF, - 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, - 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0xFF, - 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x03, 0xFB, - 0xF8, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x07, 0xE3, 0xF8, 0x00, 0x0F, 0xE3, - 0xF8, 0x00, 0x0F, 0xC3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x1F, 0x83, - 0xF8, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x7F, 0x01, - 0xFC, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFF, 0xFF, - 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, - 0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0x00, - 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, - 0x7F, 0x01, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, - 0xFC, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0xFF, 0x03, 0xF8, 0x00, 0xFF, 0x03, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x7E, 0x07, 0xF0, 0x00, - 0xFE, 0x0F, 0xF0, 0x03, 0xFC, 0x0F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xC0, 0x07, 0xFC, 0x1F, 0xC0, 0x01, - 0xFC, 0x1F, 0xC0, 0x01, 0xFC, 0x3F, 0x80, 0x01, 0xFC, 0x3F, 0x80, 0x01, - 0xFC, 0x3F, 0x80, 0x01, 0xFC, 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, - 0xF8, 0x7F, 0x00, 0x0F, 0xF0, 0x7F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFE, - 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, - 0xFC, 0x01, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x01, - 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x7F, 0x1F, 0xE0, 0x00, - 0x7F, 0x1F, 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0xFE, 0x00, 0x03, - 0xF8, 0xFF, 0x00, 0x07, 0xF8, 0xFF, 0x00, 0x07, 0xF0, 0x7F, 0x80, 0x1F, - 0xF0, 0x7F, 0xE0, 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, - 0x80, 0x1F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0xE0, 0x03, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, - 0xFC, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xF8, 0x03, 0xFE, 0x07, 0xF0, 0x01, - 0xFF, 0x07, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0x7F, 0x07, 0xF0, 0x00, - 0x7F, 0x0F, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, - 0x7F, 0x0F, 0xE0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x7F, 0x1F, 0xC0, 0x00, - 0x7F, 0x1F, 0xC0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, - 0xFE, 0x1F, 0xC0, 0x01, 0xFE, 0x3F, 0x80, 0x01, 0xFC, 0x3F, 0x80, 0x01, - 0xFC, 0x3F, 0x80, 0x03, 0xF8, 0x3F, 0x80, 0x07, 0xF8, 0x7F, 0x00, 0x0F, - 0xF0, 0x7F, 0x00, 0x1F, 0xF0, 0x7F, 0x00, 0x7F, 0xE0, 0x7F, 0xFF, 0xFF, - 0xC0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, - 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0xFE, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, - 0xE0, 0x1F, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, - 0xE0, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, - 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, - 0xFE, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, - 0xE0, 0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, - 0xC0, 0x0F, 0xFF, 0xFF, 0xC0, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, - 0xF8, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, - 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFC, 0x07, 0xFC, 0x0F, 0xF8, - 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x1F, 0xC7, 0xF0, - 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x3F, 0xFF, 0x3F, 0x00, 0x1F, 0xFF, 0xBF, 0x80, 0x0F, 0xFF, 0x9F, - 0xC0, 0x07, 0xFF, 0xCF, 0xE0, 0x03, 0xFF, 0xE7, 0xF0, 0x03, 0xFF, 0xF3, - 0xF8, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x01, 0xF8, 0xFF, 0x00, 0x00, 0xFC, - 0x7F, 0x80, 0x00, 0xFE, 0x3F, 0xC0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, - 0x87, 0xFC, 0x00, 0xFF, 0x81, 0xFF, 0x81, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, - 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0xF8, 0x03, 0xFF, 0xFC, - 0x78, 0x00, 0x7F, 0xFC, 0x3C, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x3F, 0x80, - 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x3F, - 0x80, 0xFE, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0xFE, 0x03, 0xF8, 0x00, - 0x3F, 0x80, 0xFF, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0xFE, 0x03, 0xF8, - 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x07, 0xF0, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, - 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, - 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xF8, 0x0F, 0xE0, 0x00, - 0x7F, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x07, 0xF0, - 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x07, - 0xF0, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x01, 0xFC, - 0x07, 0xF0, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, - 0xFE, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x7F, 0x00, 0x07, 0xF0, 0x1F, 0xC0, - 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x07, 0xF0, 0x3F, 0x80, 0xFE, 0x03, 0xF8, - 0x0F, 0xE0, 0x3F, 0x81, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, - 0x0F, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x7F, 0x01, 0xFC, - 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0xFE, - 0x03, 0xF8, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0xFE, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x0F, 0xE0, 0xFE, 0x03, 0xFC, 0x1F, 0xC0, 0x7F, 0x03, 0xF8, 0x0F, 0xE0, - 0xFE, 0x01, 0xFC, 0x1F, 0xC0, 0x3F, 0x83, 0xF8, 0x0F, 0xE0, 0x7F, 0x01, - 0xFC, 0x0F, 0xF0, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xF8, 0x03, - 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x7F, 0x00, 0x1F, 0xF0, 0x03, 0xF8, 0x01, 0xFF, 0x00, 0x1F, 0xC0, 0x1F, - 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xE0, 0x00, 0x7F, - 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x1F, 0xE0, 0x00, 0x1F, 0xC1, 0xFE, 0x00, - 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x0F, 0xE3, 0xFE, 0x00, 0x00, 0x7F, 0x3F, - 0xC0, 0x00, 0x03, 0xFB, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFF, 0xC0, - 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x01, 0xFF, - 0x9F, 0xE0, 0x00, 0x0F, 0xF8, 0xFF, 0x00, 0x00, 0x7F, 0x83, 0xFC, 0x00, - 0x03, 0xF8, 0x1F, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x80, 0x01, 0xFC, 0x01, - 0xFE, 0x00, 0x0F, 0xE0, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x3F, 0xC0, 0x03, - 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0x80, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0x3F, - 0xE0, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x07, 0xFC, 0x03, 0xF8, - 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, - 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, - 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, - 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0x80, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x01, - 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0xE0, 0x3F, 0xF8, 0x00, 0xFF, 0xF0, - 0x1F, 0xFC, 0x00, 0x7F, 0xF8, 0x0F, 0xFE, 0x00, 0x7D, 0xF8, 0x07, 0xEF, - 0x00, 0x3E, 0xFC, 0x03, 0xF7, 0x80, 0x3F, 0xFE, 0x03, 0xFB, 0xC0, 0x1F, - 0x7F, 0x01, 0xFD, 0xE0, 0x1F, 0xBF, 0x00, 0xFE, 0xF0, 0x0F, 0x9F, 0x80, - 0x7E, 0x78, 0x0F, 0xDF, 0xC0, 0x7F, 0x3E, 0x07, 0xCF, 0xE0, 0x3F, 0x9F, - 0x07, 0xE7, 0xF0, 0x1F, 0xCF, 0x83, 0xE3, 0xF0, 0x0F, 0xE7, 0xC3, 0xF1, - 0xF8, 0x07, 0xE3, 0xE1, 0xF9, 0xFC, 0x07, 0xF1, 0xF0, 0xF8, 0xFE, 0x03, - 0xF8, 0xF8, 0xFC, 0x7F, 0x01, 0xFC, 0x7C, 0x7C, 0x3F, 0x00, 0xFC, 0x3E, - 0x7E, 0x1F, 0x80, 0x7E, 0x1F, 0x3E, 0x1F, 0xC0, 0x7F, 0x0F, 0xBF, 0x0F, - 0xE0, 0x3F, 0x87, 0xDF, 0x07, 0xE0, 0x1F, 0xC3, 0xFF, 0x83, 0xF0, 0x0F, - 0xC1, 0xFF, 0xC3, 0xF8, 0x0F, 0xE0, 0xFF, 0xC1, 0xFC, 0x07, 0xF0, 0x7F, - 0xE0, 0xFE, 0x03, 0xF8, 0x3F, 0xE0, 0x7E, 0x01, 0xFC, 0x1F, 0xF0, 0x3F, - 0x00, 0xFC, 0x0F, 0xF0, 0x3F, 0x80, 0xFE, 0x07, 0xF8, 0x1F, 0xC0, 0x7F, - 0x03, 0xF8, 0x0F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xE0, 0x3F, 0xC0, - 0x01, 0xFC, 0x07, 0xFC, 0x00, 0x3F, 0x80, 0xFF, 0x80, 0x07, 0xF0, 0x1F, - 0xF0, 0x00, 0xFC, 0x07, 0xFF, 0x00, 0x3F, 0x80, 0xFF, 0xE0, 0x07, 0xF0, - 0x1F, 0xFC, 0x00, 0xFE, 0x03, 0xFF, 0xC0, 0x1F, 0x80, 0xFF, 0xF8, 0x03, - 0xF0, 0x1F, 0xFF, 0x80, 0xFE, 0x03, 0xFB, 0xF0, 0x1F, 0xC0, 0x7E, 0x7E, - 0x03, 0xF8, 0x0F, 0xC7, 0xE0, 0x7E, 0x03, 0xF8, 0xFC, 0x0F, 0xC0, 0x7F, - 0x1F, 0x83, 0xF8, 0x0F, 0xE1, 0xF8, 0x7F, 0x01, 0xF8, 0x3F, 0x0F, 0xE0, - 0x3F, 0x07, 0xF1, 0xF8, 0x0F, 0xE0, 0x7E, 0x3F, 0x01, 0xFC, 0x0F, 0xCF, - 0xE0, 0x3F, 0x00, 0xFD, 0xFC, 0x07, 0xE0, 0x1F, 0xBF, 0x81, 0xFC, 0x03, - 0xF7, 0xE0, 0x3F, 0x80, 0x3F, 0xFC, 0x07, 0xF0, 0x07, 0xFF, 0x80, 0xFC, - 0x00, 0xFF, 0xF0, 0x1F, 0x80, 0x0F, 0xFC, 0x07, 0xF0, 0x01, 0xFF, 0x80, - 0xFE, 0x00, 0x3F, 0xF0, 0x1F, 0xC0, 0x03, 0xFE, 0x03, 0xF0, 0x00, 0x7F, - 0xC0, 0x7E, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x01, - 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x3F, 0xF0, 0x3F, 0xF8, 0x1F, 0xF0, 0x03, 0xFE, 0x07, 0xF0, 0x00, 0x7F, - 0x83, 0xF8, 0x00, 0x0F, 0xF1, 0xFE, 0x00, 0x03, 0xFC, 0x7F, 0x00, 0x00, - 0x7F, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x1F, 0xDF, 0xC0, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, - 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF3, - 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0xC0, 0x00, 0x7F, - 0x8F, 0xF0, 0x00, 0x1F, 0xC1, 0xFE, 0x00, 0x0F, 0xE0, 0x7F, 0xC0, 0x0F, - 0xF8, 0x1F, 0xFC, 0x0F, 0xFC, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, - 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x1F, - 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x03, - 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xC1, 0xFE, 0x00, 0xFF, 0x83, 0xF8, - 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x1F, 0xC0, - 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, - 0x3F, 0x83, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, - 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFE, - 0x03, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x0F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x3F, 0xF0, 0x3F, - 0xF0, 0x1F, 0xF0, 0x03, 0xFE, 0x07, 0xF8, 0x00, 0x7F, 0x83, 0xFC, 0x00, - 0x0F, 0xF1, 0xFE, 0x00, 0x03, 0xFC, 0x7F, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0x87, 0xF3, 0xF8, 0x00, 0xF1, - 0xFC, 0xFE, 0x00, 0x7C, 0xFE, 0x3F, 0xC0, 0x3F, 0xFF, 0x8F, 0xF0, 0x07, - 0xFF, 0xC1, 0xFE, 0x01, 0xFF, 0xE0, 0x7F, 0xC0, 0x3F, 0xF8, 0x1F, 0xFC, - 0x0F, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x0F, - 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0x9F, 0x80, - 0x01, 0xFF, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0xFF, 0xFF, - 0xF0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, - 0x03, 0xFE, 0x0F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0x3F, 0x83, 0xF8, - 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x0F, 0xC0, 0xFE, 0x00, 0x07, 0xE0, 0xFE, - 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x07, 0xF0, 0x3F, 0x80, 0x0F, 0xF0, 0x1F, - 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, - 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF, 0x01, - 0xFC, 0x00, 0x7F, 0x80, 0xFE, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x0F, 0xE0, - 0x3F, 0x80, 0x07, 0xF0, 0x1F, 0xC0, 0x03, 0xF8, 0x1F, 0xC0, 0x01, 0xFC, - 0x0F, 0xE0, 0x01, 0xFC, 0x07, 0xF0, 0x00, 0xFE, 0x03, 0xF8, 0x00, 0x7F, - 0x01, 0xFC, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x0F, - 0xE0, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, - 0xFF, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xC0, 0x7F, 0xC1, 0xFE, 0x00, 0xFF, - 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x1F, 0xC3, - 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, - 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, - 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x7E, 0x3F, - 0x80, 0x03, 0xF8, 0xFF, 0x00, 0x1F, 0xE3, 0xFF, 0x01, 0xFF, 0x07, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, - 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, - 0x07, 0xF0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0xFE, - 0x0F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0xFE, - 0x0F, 0xE0, 0x01, 0xFC, 0x1F, 0xC0, 0x01, 0xFC, 0x1F, 0xC0, 0x01, 0xFC, - 0x1F, 0xC0, 0x01, 0xFC, 0x1F, 0xC0, 0x01, 0xFC, 0x3F, 0x80, 0x03, 0xF8, - 0x3F, 0x80, 0x03, 0xF8, 0x3F, 0x80, 0x03, 0xF8, 0x3F, 0x80, 0x03, 0xF8, - 0x3F, 0x80, 0x07, 0xF0, 0x7F, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x07, 0xF0, - 0x7F, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x0F, 0xE0, - 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, - 0xFE, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x3F, 0x80, - 0xFF, 0xC0, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFE, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xE7, - 0xF0, 0x00, 0x7F, 0x1F, 0xC0, 0x01, 0xFC, 0x7F, 0x00, 0x0F, 0xE1, 0xFC, - 0x00, 0x3F, 0x87, 0xF0, 0x01, 0xFC, 0x1F, 0xC0, 0x07, 0xF0, 0x3F, 0x00, - 0x3F, 0x80, 0xFC, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xF0, 0x0F, 0xC0, 0x1F, - 0x80, 0x3F, 0x80, 0xFE, 0x00, 0xFE, 0x03, 0xF0, 0x03, 0xF8, 0x1F, 0xC0, - 0x0F, 0xE0, 0x7E, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7E, 0x0F, 0xC0, 0x01, - 0xF8, 0x7E, 0x00, 0x07, 0xE1, 0xF8, 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x7E, - 0x3F, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0xFE, 0x00, 0x7F, 0x80, 0x1F, 0xFF, 0xC0, 0x0F, 0xF0, 0x03, 0xFB, 0xF8, - 0x01, 0xFE, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0xC0, 0x1F, 0xCF, 0xE0, 0x0F, - 0xF8, 0x03, 0xF9, 0xFC, 0x03, 0xFF, 0x00, 0xFE, 0x3F, 0x80, 0x7F, 0xE0, - 0x1F, 0xC7, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x7E, 0x03, 0xFF, 0x80, 0xFE, - 0x0F, 0xC0, 0x7D, 0xF0, 0x1F, 0x81, 0xF8, 0x1F, 0xBE, 0x07, 0xF0, 0x3F, - 0x03, 0xE7, 0xC0, 0xFC, 0x07, 0xE0, 0xFC, 0xF8, 0x3F, 0x80, 0xFC, 0x1F, - 0x1F, 0x07, 0xE0, 0x1F, 0x83, 0xE3, 0xE0, 0xFC, 0x03, 0xF0, 0xFC, 0x7C, - 0x3F, 0x00, 0x7E, 0x1F, 0x0F, 0x87, 0xE0, 0x0F, 0xC7, 0xE1, 0xF1, 0xF8, - 0x01, 0xF8, 0xF8, 0x3E, 0x3F, 0x00, 0x3F, 0x3F, 0x07, 0xCF, 0xC0, 0x07, - 0xE7, 0xC0, 0xF9, 0xF8, 0x00, 0xFC, 0xF8, 0x1F, 0x3E, 0x00, 0x1F, 0xBE, - 0x03, 0xEF, 0xC0, 0x01, 0xF7, 0xC0, 0x7D, 0xF0, 0x00, 0x3F, 0xF8, 0x0F, - 0xFE, 0x00, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x3F, 0xF0, - 0x00, 0x1F, 0xF0, 0x07, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x00, - 0x7F, 0x80, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0x01, 0xFC, - 0x00, 0x7F, 0x80, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x07, 0xFC, 0x00, 0xFF, - 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x7F, 0x80, 0x03, 0xFC, - 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0xFF, 0x07, 0xF8, 0x00, - 0x03, 0xFC, 0x3F, 0x80, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x00, 0x7F, 0x3F, - 0xC0, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFE, - 0x00, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x00, 0xFF, 0x3F, 0xC0, 0x00, 0x0F, - 0xF1, 0xFE, 0x00, 0x00, 0xFF, 0x07, 0xF8, 0x00, 0x07, 0xF0, 0x3F, 0xC0, - 0x00, 0x7F, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x07, 0xF8, 0x00, 0x7F, 0x80, - 0x3F, 0xC0, 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x7F, 0x80, 0x07, 0xF8, 0x07, - 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x7F, - 0xBF, 0xC0, 0x07, 0xF8, 0xFE, 0x00, 0x3F, 0x87, 0xF8, 0x03, 0xFC, 0x3F, - 0xC0, 0x3F, 0xC0, 0xFE, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, 0xC1, - 0xFE, 0x00, 0xFE, 0x0F, 0xE0, 0x07, 0xF0, 0xFE, 0x00, 0x3F, 0x8F, 0xE0, - 0x00, 0xFE, 0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x01, - 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, - 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, - 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, - 0xC0, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0x80, - 0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7E, 0x00, 0x03, 0xF0, - 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, - 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, - 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0xC0, - 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, - 0xC0, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xC0, - 0x0F, 0xFE, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x80, 0x3F, 0xFC, 0x00, 0x81, - 0xC3, 0xC7, 0x8F, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0xC7, 0x8F, 0x1E, - 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x8F, 0x1E, 0x3C, 0x38, 0x70, 0xE1, - 0xC3, 0x87, 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0x00, 0x7F, 0xF8, 0x03, 0xFF, - 0xC0, 0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x01, 0xF8, 0x00, - 0x1F, 0xC0, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x03, - 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, - 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, - 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x01, 0xFF, - 0xE0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x3F, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x07, - 0xFC, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x80, 0x3E, 0xFC, 0x01, 0xF3, 0xE0, - 0x1F, 0x1F, 0x01, 0xF8, 0xF8, 0x0F, 0x87, 0xE0, 0xFC, 0x3F, 0x07, 0xC0, - 0xF8, 0x7C, 0x07, 0xC7, 0xE0, 0x3E, 0x3E, 0x01, 0xFB, 0xF0, 0x0F, 0xDF, - 0x00, 0x3F, 0xF0, 0x01, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xE0, 0xF8, 0xF0, 0xF1, 0xE1, - 0xC3, 0xC3, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x7F, 0x03, 0xFC, 0x3F, 0x00, - 0xFE, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x80, 0x1F, - 0xFF, 0xC0, 0x7F, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0xFF, 0xF7, 0xF0, 0xFF, - 0x83, 0xF8, 0xFF, 0x01, 0xF8, 0x7F, 0x00, 0xFC, 0x7F, 0x00, 0xFE, 0x3F, - 0x80, 0x7F, 0x1F, 0xC0, 0x7F, 0x8F, 0xF0, 0xFF, 0x87, 0xFF, 0xFF, 0xC3, - 0xFF, 0xFF, 0xE0, 0xFF, 0xF7, 0xF8, 0x3F, 0xF3, 0xFC, 0x07, 0xE0, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x1F, - 0x9F, 0xFC, 0x03, 0xF7, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, - 0x83, 0xFF, 0x0F, 0xF0, 0x7F, 0x80, 0xFF, 0x0F, 0xE0, 0x1F, 0xE3, 0xF8, - 0x01, 0xFC, 0x7F, 0x00, 0x3F, 0x8F, 0xC0, 0x07, 0xF1, 0xF8, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xCF, 0xC0, 0x03, 0xF9, 0xF8, 0x00, 0xFE, 0x3F, 0x00, - 0x1F, 0xC7, 0xE0, 0x03, 0xF9, 0xFC, 0x00, 0xFE, 0x3F, 0xC0, 0x3F, 0xC7, - 0xF8, 0x0F, 0xF0, 0xFF, 0x83, 0xFC, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, - 0xC0, 0xFF, 0xFF, 0xF0, 0x1F, 0x9F, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0x7F, 0xFF, - 0xE0, 0x7F, 0xFF, 0xF0, 0x7F, 0x83, 0xFC, 0x7F, 0x00, 0xFE, 0x3F, 0x00, - 0x7F, 0x3F, 0x80, 0x3F, 0x9F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x3F, 0x80, 0x3F, 0x9F, - 0xE0, 0x3F, 0x87, 0xF8, 0x3F, 0x83, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xC0, - 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x7F, 0x00, 0x3F, - 0xF3, 0xF8, 0x03, 0xFF, 0xDF, 0x80, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, - 0xE0, 0x3F, 0xC3, 0xFF, 0x03, 0xFC, 0x0F, 0xF8, 0x3F, 0xC0, 0x3F, 0x81, - 0xFC, 0x01, 0xFC, 0x1F, 0xC0, 0x07, 0xE0, 0xFE, 0x00, 0x3F, 0x07, 0xF0, - 0x03, 0xF8, 0x7F, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0xFC, 0x1F, 0xC0, 0x07, - 0xE0, 0xFE, 0x00, 0x3F, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x3F, 0x81, - 0xFC, 0x01, 0xFC, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC3, 0xFF, 0x01, 0xFF, - 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0xCF, - 0xE0, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0xFC, 0x00, - 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x7F, 0x87, 0xF8, - 0x7F, 0x01, 0xFE, 0x7F, 0x00, 0x7F, 0x3F, 0x80, 0x3F, 0xBF, 0x80, 0x1F, - 0xDF, 0xC0, 0x0F, 0xEF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x3F, 0x80, 0x3F, 0x9F, 0xE0, 0x3F, 0x87, 0xF8, 0x3F, 0xC3, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0x80, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFE, - 0x01, 0xFF, 0x80, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x03, 0xF0, 0x01, - 0xFC, 0x03, 0xFF, 0xF1, 0xFF, 0xF8, 0x7F, 0xFE, 0x1F, 0xFF, 0x80, 0xFE, - 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x00, - 0x1F, 0xC0, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, - 0xE0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, - 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xC3, 0xF8, - 0x01, 0xFF, 0x9F, 0x80, 0x1F, 0xFE, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, - 0xFF, 0xFF, 0x01, 0xFE, 0x1F, 0xF8, 0x1F, 0xE0, 0x3F, 0x80, 0xFE, 0x01, - 0xFC, 0x0F, 0xE0, 0x0F, 0xE0, 0x7F, 0x00, 0x3F, 0x07, 0xF0, 0x01, 0xF8, - 0x3F, 0x80, 0x0F, 0x81, 0xF8, 0x00, 0x7C, 0x1F, 0xC0, 0x07, 0xE0, 0xFE, - 0x00, 0x3F, 0x07, 0xF0, 0x01, 0xF0, 0x3F, 0x80, 0x1F, 0x81, 0xFC, 0x00, - 0xFC, 0x0F, 0xE0, 0x0F, 0xE0, 0x7F, 0x80, 0xFF, 0x03, 0xFE, 0x1F, 0xF0, - 0x0F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xF7, 0xE0, 0x07, - 0xFE, 0x7F, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, - 0xFC, 0x0F, 0xE0, 0x0F, 0xC0, 0x7F, 0x00, 0xFE, 0x03, 0xFC, 0x1F, 0xE0, - 0x1F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFC, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x0F, - 0xC0, 0x1F, 0xCF, 0xFE, 0x03, 0xFB, 0xFF, 0xE0, 0x7F, 0xFF, 0xFE, 0x0F, - 0xFF, 0xFF, 0xC3, 0xFF, 0x07, 0xF8, 0x7F, 0x80, 0x7F, 0x0F, 0xE0, 0x0F, - 0xE1, 0xFC, 0x01, 0xFC, 0x7F, 0x00, 0x3F, 0x0F, 0xE0, 0x07, 0xE1, 0xFC, - 0x01, 0xFC, 0x3F, 0x00, 0x3F, 0x87, 0xE0, 0x07, 0xF1, 0xFC, 0x00, 0xFC, - 0x3F, 0x80, 0x1F, 0x87, 0xF0, 0x07, 0xF0, 0xFC, 0x00, 0xFE, 0x1F, 0x80, - 0x1F, 0xC7, 0xF0, 0x03, 0xF0, 0xFE, 0x00, 0x7E, 0x1F, 0xC0, 0x1F, 0xC3, - 0xF0, 0x03, 0xF8, 0xFE, 0x00, 0x7F, 0x1F, 0xC0, 0x0F, 0xC0, 0x01, 0xFC, - 0x07, 0xF0, 0x1F, 0x80, 0x7E, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xE0, 0x3F, 0x80, 0xFE, - 0x03, 0xF8, 0x0F, 0xC0, 0x3F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7E, - 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0xFC, 0x03, 0xF0, 0x1F, 0xC0, 0x7F, - 0x01, 0xFC, 0x07, 0xE0, 0x1F, 0x80, 0xFE, 0x03, 0xF8, 0x00, 0x00, 0x0F, - 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x3F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0xFE, - 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x03, 0xF8, - 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, - 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, - 0x1F, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xC0, 0x0F, - 0xF8, 0x03, 0xFE, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x7F, 0x00, 0xFE, 0x07, 0xE0, 0x3F, 0xC0, 0x7E, 0x07, - 0xF8, 0x0F, 0xE0, 0xFF, 0x00, 0xFE, 0x1F, 0xC0, 0x0F, 0xE3, 0xF8, 0x00, - 0xFC, 0x7F, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFD, 0xFC, 0x00, 0x1F, 0xFF, - 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x00, - 0x3F, 0xFF, 0xC0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xCF, 0xE0, 0x03, 0xF0, - 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x07, 0xF0, 0x7F, 0x00, 0x7F, 0x07, 0xF8, - 0x07, 0xE0, 0x3F, 0x80, 0x7E, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0xC0, 0xFE, - 0x01, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0x80, - 0x7E, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0xFC, 0x03, 0xF0, 0x1F, 0xC0, - 0x7F, 0x01, 0xFC, 0x07, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xC0, - 0x3F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7E, 0x03, 0xF8, 0x0F, 0xE0, - 0x3F, 0x80, 0xFC, 0x03, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xE0, - 0x1F, 0x80, 0xFE, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0xFC, 0x03, 0xF0, 0x07, - 0xE3, 0xFF, 0x0F, 0xFC, 0x07, 0xEF, 0xFF, 0x3F, 0xFE, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8, 0x7F, 0xF0, 0xFF, - 0x0F, 0xE0, 0x3F, 0xC0, 0x7F, 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x1F, 0xC0, - 0x3F, 0x80, 0x7E, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x1F, 0xC0, 0x3F, 0x00, - 0xFE, 0x1F, 0x80, 0x7F, 0x00, 0xFE, 0x3F, 0x80, 0x7F, 0x00, 0xFC, 0x3F, - 0x80, 0x7F, 0x00, 0xFC, 0x3F, 0x80, 0x7E, 0x01, 0xFC, 0x3F, 0x00, 0x7E, - 0x01, 0xFC, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x7F, 0x00, 0xFE, 0x01, 0xF8, - 0x7F, 0x00, 0xFE, 0x01, 0xF8, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x7E, 0x01, - 0xFC, 0x03, 0xF8, 0x7E, 0x01, 0xFC, 0x03, 0xF8, 0xFE, 0x01, 0xFC, 0x03, - 0xF0, 0xFE, 0x01, 0xF8, 0x03, 0xF0, 0xFE, 0x01, 0xF8, 0x07, 0xF0, 0x07, - 0xF0, 0xFE, 0x00, 0xFE, 0x7F, 0xF0, 0x1F, 0x9F, 0xFF, 0x03, 0xFF, 0xFF, - 0xF0, 0xFF, 0xFF, 0xFE, 0x1F, 0xF8, 0x3F, 0xC3, 0xFC, 0x03, 0xF8, 0x7F, - 0x00, 0x7F, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x01, 0xF8, 0x7F, 0x00, 0x3F, - 0x0F, 0xC0, 0x0F, 0xE1, 0xF8, 0x01, 0xFC, 0x7F, 0x00, 0x3F, 0x8F, 0xE0, - 0x07, 0xE1, 0xFC, 0x00, 0xFC, 0x3F, 0x00, 0x3F, 0x87, 0xE0, 0x07, 0xF1, - 0xFC, 0x00, 0xFE, 0x3F, 0x80, 0x1F, 0x87, 0xF0, 0x03, 0xF0, 0xFC, 0x00, - 0xFE, 0x3F, 0x80, 0x1F, 0xC7, 0xF0, 0x03, 0xF8, 0xFE, 0x00, 0x7E, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0x0F, 0xFF, - 0xFC, 0x07, 0xFF, 0xFF, 0x83, 0xFC, 0x1F, 0xE1, 0xFE, 0x03, 0xFC, 0xFF, - 0x00, 0xFF, 0x3F, 0x80, 0x1F, 0xDF, 0xC0, 0x07, 0xF7, 0xF0, 0x01, 0xFD, - 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x03, - 0xFB, 0xF8, 0x00, 0xFE, 0xFE, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0xCF, 0xF0, - 0x0F, 0xF3, 0xFC, 0x07, 0xF8, 0x7F, 0x83, 0xFC, 0x1F, 0xFF, 0xFE, 0x03, - 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0x80, 0x0F, 0xFF, 0x80, 0x00, 0x7F, 0x00, - 0x00, 0x01, 0xFC, 0x3F, 0x00, 0x0F, 0xCF, 0xFE, 0x00, 0x7E, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0x01, 0xFF, 0x87, 0xF8, 0x0F, - 0xF0, 0x1F, 0xE0, 0xFF, 0x00, 0xFF, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x80, - 0x1F, 0xC1, 0xF8, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFE, 0x00, 0x3F, - 0x87, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC1, 0xF8, 0x00, 0xFE, 0x1F, - 0xC0, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0x07, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, - 0x7F, 0x81, 0xFF, 0x87, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, - 0x07, 0xF7, 0xFF, 0xC0, 0x3F, 0x1F, 0xF8, 0x01, 0xF8, 0x7F, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0x0F, 0xFE, 0x7F, 0x01, 0xFF, 0xF7, 0xE0, 0x3F, 0xFF, 0x7E, 0x07, 0xFF, - 0xFF, 0xE0, 0xFF, 0x07, 0xFE, 0x1F, 0xE0, 0x3F, 0xE3, 0xFC, 0x03, 0xFC, - 0x3F, 0x80, 0x1F, 0xC7, 0xF0, 0x01, 0xFC, 0x7F, 0x00, 0x1F, 0xC7, 0xF0, - 0x01, 0xF8, 0xFE, 0x00, 0x1F, 0x8F, 0xE0, 0x03, 0xF8, 0xFE, 0x00, 0x3F, - 0x8F, 0xE0, 0x03, 0xF8, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x07, 0xF0, 0xFE, - 0x00, 0xFF, 0x0F, 0xF0, 0x1F, 0xF0, 0x7F, 0x87, 0xFF, 0x07, 0xFF, 0xFF, - 0xE0, 0x3F, 0xFF, 0x7E, 0x03, 0xFF, 0xEF, 0xE0, 0x1F, 0xFC, 0xFE, 0x00, - 0x7F, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x07, - 0xF0, 0xF0, 0x7F, 0x3F, 0x07, 0xE7, 0xE0, 0x7E, 0xFE, 0x0F, 0xFF, 0xE0, - 0xFF, 0xFE, 0x0F, 0xFC, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, - 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x80, - 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, - 0x00, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x07, - 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0x1F, 0xC0, 0x7F, 0x1F, - 0xC0, 0x7F, 0x1F, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x1F, 0xFF, 0xC0, 0x0F, - 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, - 0x0F, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0xFE, 0xFE, - 0x00, 0xFE, 0xFF, 0x03, 0xFC, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xF8, 0x3F, - 0xFF, 0xE0, 0x1F, 0xFF, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xF0, 0x1F, 0xC0, - 0x7F, 0x01, 0xFC, 0x07, 0xE0, 0x3F, 0x80, 0xFE, 0x1F, 0xFF, 0x7F, 0xFD, - 0xFF, 0xFF, 0xFF, 0xC7, 0xF0, 0x1F, 0xC0, 0x7E, 0x01, 0xF8, 0x0F, 0xE0, - 0x3F, 0x80, 0xFE, 0x03, 0xF0, 0x0F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xE0, - 0x1F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0xF0, 0xFF, 0xC3, 0xFF, - 0x07, 0xFC, 0x0F, 0xE0, 0x0F, 0xC0, 0x0F, 0xE1, 0xF8, 0x01, 0xFC, 0x7F, - 0x00, 0x3F, 0x0F, 0xE0, 0x0F, 0xE1, 0xFC, 0x01, 0xFC, 0x3F, 0x00, 0x3F, - 0x87, 0xE0, 0x07, 0xE1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x3F, 0x87, 0xF0, - 0x07, 0xF0, 0xFC, 0x00, 0xFE, 0x1F, 0x80, 0x1F, 0x87, 0xF0, 0x03, 0xF0, - 0xFE, 0x00, 0xFE, 0x1F, 0x80, 0x1F, 0xC3, 0xF0, 0x03, 0xF0, 0xFE, 0x00, - 0x7E, 0x1F, 0xC0, 0x1F, 0xC3, 0xF8, 0x07, 0xF8, 0x7F, 0x01, 0xFF, 0x0F, - 0xF0, 0x7F, 0xC1, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x03, 0xFF, 0xEF, - 0xE0, 0x3F, 0xF9, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0x7F, - 0x00, 0x3F, 0xBF, 0x80, 0x3F, 0x8F, 0xC0, 0x1F, 0xC7, 0xE0, 0x1F, 0xC3, - 0xF0, 0x0F, 0xC1, 0xFC, 0x0F, 0xE0, 0xFE, 0x07, 0xE0, 0x7F, 0x07, 0xF0, - 0x3F, 0x83, 0xF0, 0x0F, 0xC3, 0xF8, 0x07, 0xE1, 0xF8, 0x03, 0xF1, 0xFC, - 0x01, 0xF8, 0xFC, 0x00, 0xFC, 0xFC, 0x00, 0x7E, 0x7E, 0x00, 0x3F, 0x7E, - 0x00, 0x0F, 0xBF, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x01, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0xFE, 0x03, 0xF8, 0x0F, 0xFF, 0xC0, 0x7F, 0x01, 0xFF, - 0xF8, 0x1F, 0xE0, 0x3F, 0x7F, 0x03, 0xFC, 0x0F, 0xEF, 0xE0, 0xFF, 0x81, - 0xF9, 0xFC, 0x1F, 0xF0, 0x7F, 0x3F, 0x83, 0xFE, 0x0F, 0xC3, 0xF0, 0xFF, - 0xC3, 0xF8, 0x7E, 0x1E, 0xF8, 0x7E, 0x0F, 0xC7, 0xDF, 0x1F, 0xC1, 0xF8, - 0xFB, 0xE3, 0xF0, 0x3F, 0x1E, 0x7C, 0x7E, 0x07, 0xE7, 0xCF, 0x9F, 0x80, - 0xFC, 0xF1, 0xF3, 0xF0, 0x1F, 0xBE, 0x3E, 0xFC, 0x03, 0xF7, 0x87, 0xDF, - 0x80, 0x7E, 0xF0, 0xFF, 0xE0, 0x0F, 0xFE, 0x1F, 0xFC, 0x01, 0xFF, 0x83, - 0xFF, 0x00, 0x3F, 0xF0, 0x7F, 0xE0, 0x07, 0xFC, 0x0F, 0xF8, 0x00, 0x7F, - 0x81, 0xFF, 0x00, 0x0F, 0xF0, 0x3F, 0xC0, 0x01, 0xFC, 0x07, 0xF8, 0x00, - 0x3F, 0x80, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, - 0x80, 0x7F, 0x03, 0xF8, 0x03, 0xF8, 0x3F, 0x80, 0x1F, 0xE3, 0xF8, 0x00, - 0x7F, 0x3F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, - 0xFC, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x1F, 0xFE, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xDF, 0xC0, 0x01, 0xFC, - 0xFE, 0x00, 0x1F, 0xE7, 0xF8, 0x00, 0xFE, 0x1F, 0xC0, 0x0F, 0xE0, 0xFE, - 0x00, 0xFF, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xC0, 0xFF, 0x00, 0xFF, 0x00, - 0x0F, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x3F, 0x83, 0xF8, 0x01, 0xF8, 0x1F, - 0xC0, 0x1F, 0xC0, 0xFE, 0x00, 0xFC, 0x03, 0xF8, 0x0F, 0xE0, 0x1F, 0xC0, - 0x7E, 0x00, 0xFE, 0x07, 0xE0, 0x07, 0xF0, 0x3F, 0x00, 0x3F, 0x83, 0xF0, - 0x01, 0xFC, 0x1F, 0x80, 0x0F, 0xE1, 0xF8, 0x00, 0x3F, 0x0F, 0xC0, 0x01, - 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xC0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, - 0xE0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, - 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0xFF, - 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0x80, - 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, - 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, - 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, - 0xE0, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xF0, 0x07, 0xFC, - 0x01, 0xFE, 0x00, 0xFF, 0x80, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, - 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x3F, 0x00, 0x7F, 0x80, 0x1F, 0x80, 0x07, 0xE0, 0x03, 0xFC, 0x00, 0x3F, - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, - 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x01, - 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x7F, - 0x80, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, - 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0F, 0x00, 0x78, - 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, - 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x70, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x70, - 0x07, 0x80, 0x3C, 0x00, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0x7F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xF0, 0x00, - 0xFF, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x07, 0xF8, 0x03, 0xF0, 0x00, 0xF8, - 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, - 0x80, 0x07, 0xC0, 0x01, 0xF0, 0x07, 0xFC, 0x01, 0xFE, 0x00, 0xFF, 0x80, - 0x3F, 0xC0, 0x0F, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0x80, 0x07, 0xFF, - 0x03, 0xDF, 0xFE, 0x0F, 0xF0, 0x7F, 0xFB, 0x80, 0xFF, 0xE0, 0x01, 0xFF, - 0x00, 0x03, 0xF0}; - -const GFXglyph FreeSansBoldOblique24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 13, 0, 1}, // 0x20 ' ' - {0, 14, 34, 16, 5, -33}, // 0x21 '!' - {60, 18, 12, 22, 8, -33}, // 0x22 '"' - {87, 29, 33, 26, 2, -31}, // 0x23 '#' - {207, 26, 42, 26, 3, -35}, // 0x24 '$' - {344, 36, 34, 42, 6, -32}, // 0x25 '%' - {497, 29, 35, 34, 4, -33}, // 0x26 '&' - {624, 7, 12, 11, 8, -33}, // 0x27 ''' - {635, 17, 44, 16, 4, -33}, // 0x28 '(' - {729, 17, 44, 16, 0, -34}, // 0x29 ')' - {823, 15, 15, 18, 7, -33}, // 0x2A '*' - {852, 24, 22, 27, 4, -21}, // 0x2B '+' - {918, 10, 15, 13, 1, -6}, // 0x2C ',' - {937, 14, 6, 16, 3, -15}, // 0x2D '-' - {948, 8, 7, 13, 3, -6}, // 0x2E '.' - {955, 20, 34, 13, 0, -32}, // 0x2F '/' - {1040, 25, 35, 26, 4, -33}, // 0x30 '0' - {1150, 17, 33, 26, 8, -32}, // 0x31 '1' - {1221, 29, 34, 26, 1, -33}, // 0x32 '2' - {1345, 26, 35, 26, 3, -33}, // 0x33 '3' - {1459, 25, 32, 26, 3, -31}, // 0x34 '4' - {1559, 27, 34, 26, 3, -32}, // 0x35 '5' - {1674, 25, 35, 26, 4, -33}, // 0x36 '6' - {1784, 26, 33, 26, 6, -32}, // 0x37 '7' - {1892, 26, 35, 26, 3, -33}, // 0x38 '8' - {2006, 25, 35, 26, 4, -33}, // 0x39 '9' - {2116, 12, 25, 16, 5, -24}, // 0x3A ':' - {2154, 14, 33, 16, 3, -24}, // 0x3B ';' - {2212, 26, 23, 27, 4, -22}, // 0x3C '<' - {2287, 26, 18, 27, 3, -19}, // 0x3D '=' - {2346, 26, 23, 27, 1, -21}, // 0x3E '>' - {2421, 24, 35, 29, 8, -34}, // 0x3F '?' - {2526, 45, 41, 46, 3, -34}, // 0x40 '@' - {2757, 32, 34, 34, 1, -33}, // 0x41 'A' - {2893, 32, 34, 34, 4, -33}, // 0x42 'B' - {3029, 32, 36, 34, 5, -34}, // 0x43 'C' - {3173, 32, 34, 34, 4, -33}, // 0x44 'D' - {3309, 32, 34, 31, 4, -33}, // 0x45 'E' - {3445, 32, 34, 29, 3, -33}, // 0x46 'F' - {3581, 33, 36, 37, 5, -34}, // 0x47 'G' - {3730, 35, 34, 34, 3, -33}, // 0x48 'H' - {3879, 14, 34, 13, 3, -33}, // 0x49 'I' - {3939, 27, 35, 26, 3, -33}, // 0x4A 'J' - {4058, 37, 34, 34, 3, -33}, // 0x4B 'K' - {4216, 24, 34, 29, 4, -33}, // 0x4C 'L' - {4318, 41, 34, 39, 3, -33}, // 0x4D 'M' - {4493, 35, 34, 34, 3, -33}, // 0x4E 'N' - {4642, 34, 36, 37, 5, -34}, // 0x4F 'O' - {4795, 31, 34, 31, 4, -33}, // 0x50 'P' - {4927, 34, 37, 37, 5, -34}, // 0x51 'Q' - {5085, 33, 34, 34, 4, -33}, // 0x52 'R' - {5226, 30, 36, 31, 4, -34}, // 0x53 'S' - {5361, 28, 34, 29, 7, -33}, // 0x54 'T' - {5480, 32, 35, 34, 6, -33}, // 0x55 'U' - {5620, 30, 34, 31, 8, -33}, // 0x56 'V' - {5748, 43, 34, 44, 8, -33}, // 0x57 'W' - {5931, 37, 34, 31, 1, -33}, // 0x58 'X' - {6089, 29, 34, 31, 9, -33}, // 0x59 'Y' - {6213, 33, 34, 29, 1, -33}, // 0x5A 'Z' - {6354, 21, 43, 16, 1, -33}, // 0x5B '[' - {6467, 7, 36, 13, 6, -34}, // 0x5C '\' - {6499, 21, 43, 16, -1, -33}, // 0x5D ']' - {6612, 21, 20, 27, 6, -32}, // 0x5E '^' - {6665, 29, 4, 26, -3, 6}, // 0x5F '_' - {6680, 7, 7, 16, 8, -35}, // 0x60 '`' - {6687, 25, 26, 26, 2, -24}, // 0x61 'a' - {6769, 27, 35, 29, 3, -33}, // 0x62 'b' - {6888, 25, 26, 26, 4, -24}, // 0x63 'c' - {6970, 29, 35, 29, 4, -33}, // 0x64 'd' - {7097, 25, 26, 26, 3, -24}, // 0x65 'e' - {7179, 18, 34, 16, 4, -33}, // 0x66 'f' - {7256, 29, 35, 29, 2, -24}, // 0x67 'g' - {7383, 27, 34, 29, 3, -33}, // 0x68 'h' - {7498, 14, 34, 13, 3, -33}, // 0x69 'i' - {7558, 19, 44, 13, -2, -33}, // 0x6A 'j' - {7663, 28, 34, 26, 3, -33}, // 0x6B 'k' - {7782, 14, 34, 13, 3, -33}, // 0x6C 'l' - {7842, 40, 25, 42, 3, -24}, // 0x6D 'm' - {7967, 27, 25, 29, 3, -24}, // 0x6E 'n' - {8052, 26, 26, 29, 4, -24}, // 0x6F 'o' - {8137, 29, 35, 29, 1, -24}, // 0x70 'p' - {8264, 28, 35, 29, 3, -24}, // 0x71 'q' - {8387, 20, 25, 18, 3, -24}, // 0x72 'r' - {8450, 24, 26, 26, 3, -24}, // 0x73 's' - {8528, 14, 32, 16, 5, -30}, // 0x74 't' - {8584, 27, 26, 29, 4, -24}, // 0x75 'u' - {8672, 25, 25, 26, 6, -24}, // 0x76 'v' - {8751, 35, 25, 37, 6, -24}, // 0x77 'w' - {8861, 29, 25, 26, 1, -24}, // 0x78 'x' - {8952, 29, 35, 26, 2, -24}, // 0x79 'y' - {9079, 26, 25, 23, 1, -24}, // 0x7A 'z' - {9161, 18, 43, 18, 4, -33}, // 0x7B '{' - {9258, 13, 43, 13, 3, -33}, // 0x7C '|' - {9328, 18, 43, 18, 2, -33}, // 0x7D '}' - {9425, 22, 8, 27, 5, -14}}; // 0x7E '~' - -const GFXfont FreeSansBoldOblique24pt7b PROGMEM = { - (uint8_t *)FreeSansBoldOblique24pt7bBitmaps, - (GFXglyph *)FreeSansBoldOblique24pt7bGlyphs, 0x20, 0x7E, 56}; - -// Approx. 10119 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique9pt7b.h deleted file mode 100644 index ff72f73..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansBoldOblique9pt7b.h +++ /dev/null @@ -1,229 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansBoldOblique9pt7bBitmaps[] PROGMEM = { - 0x21, 0x8E, 0x73, 0x18, 0xC6, 0x21, 0x19, 0xCE, 0x00, 0xEF, 0xDF, 0xBE, - 0x68, 0x80, 0x06, 0xC1, 0x99, 0xFF, 0xBF, 0xF1, 0xB0, 0x66, 0x0C, 0xC7, - 0xFC, 0xFF, 0x8C, 0x83, 0x30, 0x64, 0x00, 0x02, 0x00, 0xF0, 0x7F, 0x1D, - 0x73, 0xEE, 0x78, 0x0F, 0x00, 0xF8, 0x0F, 0xC1, 0xBB, 0xA7, 0x74, 0xEF, - 0xF8, 0xFE, 0x04, 0x00, 0x80, 0x3C, 0x11, 0xF8, 0x8E, 0x66, 0x31, 0x90, - 0xCE, 0x83, 0xF4, 0x07, 0xB0, 0x00, 0x9E, 0x04, 0xFC, 0x26, 0x31, 0x98, - 0xC4, 0x7E, 0x20, 0xF0, 0x07, 0x80, 0xFC, 0x1D, 0xC1, 0xDC, 0x1F, 0x80, - 0xE0, 0x3E, 0x37, 0x77, 0xE3, 0xEE, 0x3C, 0xE3, 0xCF, 0xFE, 0x3C, 0xE0, - 0xFF, 0xE8, 0x06, 0x06, 0x0C, 0x18, 0x38, 0x30, 0x70, 0x60, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x70, 0x30, 0x0C, 0x0E, 0x06, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x06, 0x0E, 0x0C, 0x1C, 0x18, 0x30, 0x60, 0x60, - 0x32, 0xBF, 0x9C, 0xD2, 0x40, 0x0C, 0x06, 0x07, 0x1F, 0xFF, 0xF0, 0xC0, - 0xE0, 0x60, 0x77, 0x72, 0x6C, 0xFF, 0xC0, 0xFC, 0x02, 0x02, 0x04, 0x04, - 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x0F, 0x07, 0xE3, - 0x9D, 0xC7, 0x71, 0xDC, 0x7E, 0x1F, 0x8E, 0xE3, 0xB8, 0xEE, 0x73, 0xF8, - 0x3C, 0x00, 0x04, 0x3B, 0xF7, 0xE1, 0xC3, 0x06, 0x1C, 0x38, 0x70, 0xC1, - 0x87, 0x00, 0x0F, 0x87, 0xFC, 0xE3, 0xB8, 0x70, 0x0E, 0x03, 0x80, 0xF0, - 0x38, 0x1E, 0x07, 0x01, 0xC0, 0x7F, 0xCF, 0xF8, 0x0F, 0xC7, 0xFC, 0xE3, - 0xB8, 0x70, 0x1C, 0x0F, 0x03, 0xF0, 0x0E, 0x01, 0xDC, 0x3B, 0x8E, 0x7F, - 0x83, 0xE0, 0x03, 0xC0, 0xE0, 0x58, 0x2E, 0x13, 0x8C, 0xE6, 0x33, 0xFE, - 0xFF, 0x81, 0xC0, 0x60, 0x18, 0x0F, 0xE3, 0xFC, 0x60, 0x0C, 0x03, 0x78, - 0x7F, 0x9C, 0x70, 0x0E, 0x01, 0xDC, 0x33, 0x8E, 0x7F, 0x83, 0xE0, 0x0F, - 0x07, 0xE3, 0x9D, 0xC0, 0x7F, 0x1F, 0xEF, 0x3B, 0x8E, 0xE3, 0xB8, 0xCE, - 0x71, 0xF8, 0x3C, 0x00, 0x7F, 0xDF, 0xF0, 0x18, 0x0C, 0x06, 0x03, 0x81, - 0xC0, 0x60, 0x38, 0x0C, 0x07, 0x01, 0x80, 0x60, 0x00, 0x0F, 0x83, 0xFC, - 0xE3, 0x9C, 0x73, 0x9C, 0x3F, 0x0F, 0xE3, 0x8E, 0xE1, 0xDC, 0x3B, 0x8E, - 0x7F, 0xC3, 0xE0, 0x0F, 0x83, 0xF8, 0xE3, 0xB8, 0x77, 0x0E, 0xE1, 0xDC, - 0x7B, 0xFE, 0x3D, 0xC0, 0x33, 0x8E, 0x7F, 0x87, 0xC0, 0x77, 0x00, 0x00, - 0x0E, 0xE0, 0x39, 0xC0, 0x00, 0x01, 0xCE, 0x71, 0x19, 0x80, 0x00, 0x00, - 0x70, 0xFD, 0xF8, 0x70, 0x3F, 0x03, 0xF8, 0x1E, 0x01, 0x80, 0x7F, 0xDF, - 0xF0, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x60, 0x1E, 0x07, 0xF0, 0x3F, 0x03, - 0x87, 0xEF, 0xC3, 0x80, 0x00, 0x00, 0x1F, 0x1F, 0xFE, 0x1F, 0x87, 0x01, - 0xC0, 0xE0, 0x70, 0x78, 0x3C, 0x0E, 0x00, 0x00, 0xE0, 0x38, 0x00, 0x00, - 0xFC, 0x00, 0xFF, 0xC0, 0xF0, 0x78, 0x70, 0x07, 0x38, 0x01, 0xCC, 0x3F, - 0x36, 0x31, 0x8D, 0x98, 0x63, 0xC4, 0x11, 0xF3, 0x0C, 0x6C, 0xC6, 0x73, - 0x3E, 0xF8, 0xE7, 0x3C, 0x1E, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0x00, 0x01, - 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0xC0, 0x6F, 0x03, 0x38, 0x31, 0xC3, 0x8E, - 0x1F, 0xF1, 0xFF, 0x8C, 0x1E, 0xE0, 0x76, 0x03, 0x80, 0x1F, 0xF0, 0xFF, - 0xC6, 0x0E, 0x70, 0x73, 0x87, 0x1F, 0xF0, 0xFF, 0x86, 0x0E, 0x70, 0x73, - 0x83, 0x9C, 0x38, 0xFF, 0xC7, 0xF8, 0x00, 0x07, 0xE0, 0xFF, 0x8F, 0x1E, - 0x70, 0x77, 0x00, 0x30, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x03, 0xBC, - 0x38, 0xFF, 0x83, 0xF0, 0x00, 0x1F, 0xE0, 0xFF, 0x86, 0x1E, 0x70, 0x73, - 0x83, 0x9C, 0x1C, 0xC0, 0xE6, 0x07, 0x70, 0x73, 0x83, 0x9C, 0x38, 0xFF, - 0x8F, 0xF0, 0x00, 0x1F, 0xF8, 0xFF, 0x86, 0x00, 0x70, 0x03, 0x80, 0x1F, - 0xF0, 0xFF, 0x86, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xFF, 0xC7, 0xFC, - 0x00, 0x1F, 0xF1, 0xFF, 0x18, 0x03, 0x80, 0x38, 0x03, 0xFC, 0x3F, 0xC7, - 0x00, 0x70, 0x07, 0x00, 0x70, 0x06, 0x00, 0xE0, 0x00, 0x07, 0xC1, 0xFE, - 0x38, 0x77, 0x03, 0x70, 0x0E, 0x00, 0xE1, 0xEE, 0x1E, 0xE0, 0x6E, 0x0E, - 0x70, 0xE7, 0xFC, 0x1F, 0x40, 0x1C, 0x1C, 0x60, 0x63, 0x83, 0x8E, 0x0E, - 0x38, 0x38, 0xFF, 0xC3, 0xFF, 0x1C, 0x1C, 0x70, 0x71, 0xC1, 0xC6, 0x06, - 0x18, 0x38, 0xE0, 0xE0, 0x39, 0xCE, 0x63, 0x39, 0xCE, 0x63, 0x39, 0xCE, - 0x00, 0x00, 0xC0, 0x18, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x00, 0xE0, 0x1C, - 0xE3, 0x9C, 0x73, 0x9C, 0x7F, 0x87, 0xC0, 0x1C, 0x3C, 0x71, 0xC1, 0x8E, - 0x0E, 0x70, 0x3B, 0x80, 0xFC, 0x03, 0xF0, 0x0E, 0xE0, 0x73, 0x81, 0xC7, - 0x07, 0x1C, 0x18, 0x38, 0xE0, 0xF0, 0x1C, 0x07, 0x01, 0x80, 0xE0, 0x38, - 0x0E, 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xFF, 0x7F, 0x80, 0x1E, - 0x1F, 0x1E, 0x1E, 0x3E, 0x1E, 0x3E, 0x3E, 0x36, 0x3E, 0x36, 0x6E, 0x36, - 0x6C, 0x76, 0xCC, 0x76, 0xDC, 0x67, 0x9C, 0x67, 0x98, 0xE7, 0x18, 0xE7, - 0x18, 0x1C, 0x1C, 0x70, 0x63, 0xE1, 0x8F, 0x8E, 0x3E, 0x38, 0xDC, 0xC3, - 0x33, 0x1C, 0xEC, 0x71, 0xF1, 0xC7, 0xC6, 0x1E, 0x18, 0x38, 0xE0, 0xE0, - 0x07, 0xC0, 0xFF, 0x8E, 0x1E, 0xE0, 0x77, 0x03, 0xF0, 0x1F, 0x80, 0xFC, - 0x07, 0xE0, 0x77, 0x03, 0xBC, 0x38, 0xFF, 0x81, 0xF0, 0x00, 0x1F, 0xF0, - 0xFF, 0xC6, 0x0E, 0x70, 0x73, 0x83, 0x9C, 0x38, 0xFF, 0x87, 0xF8, 0x70, - 0x03, 0x80, 0x1C, 0x00, 0xC0, 0x0E, 0x00, 0x00, 0x07, 0xC0, 0xFF, 0x8F, - 0x1C, 0xE0, 0x77, 0x03, 0xB0, 0x1F, 0x80, 0xFC, 0x06, 0xE1, 0x77, 0x1F, - 0x3C, 0x78, 0xFF, 0xC1, 0xF6, 0x00, 0x20, 0x1F, 0xF0, 0xFF, 0xC6, 0x0E, - 0x70, 0x73, 0x83, 0x9C, 0x38, 0xFF, 0x87, 0xFC, 0x70, 0x73, 0x83, 0x9C, - 0x38, 0xC1, 0xC6, 0x0F, 0x00, 0x07, 0xE0, 0xFF, 0xC7, 0x0E, 0x70, 0x73, - 0x80, 0x1F, 0x80, 0x7F, 0x80, 0x7E, 0x00, 0x77, 0x03, 0xBC, 0x38, 0xFF, - 0xC3, 0xF8, 0x00, 0xFF, 0xDF, 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x06, - 0x01, 0xC0, 0x38, 0x07, 0x00, 0xC0, 0x18, 0x07, 0x00, 0x38, 0x31, 0xC1, - 0x8C, 0x1C, 0xE0, 0xE7, 0x07, 0x38, 0x31, 0xC3, 0x9C, 0x1C, 0xE0, 0xE7, - 0x06, 0x38, 0x70, 0xFF, 0x03, 0xE0, 0x00, 0xE0, 0xFC, 0x1D, 0x87, 0x30, - 0xC6, 0x38, 0xC6, 0x19, 0xC3, 0xB0, 0x7E, 0x0F, 0x80, 0xF0, 0x1C, 0x03, - 0x00, 0xE1, 0xC3, 0xF1, 0xE3, 0xB8, 0xF1, 0xDC, 0x78, 0xCE, 0x6C, 0xE7, - 0x36, 0x63, 0xB3, 0x70, 0xD9, 0xB0, 0x7C, 0xD8, 0x3C, 0x78, 0x1E, 0x3C, - 0x0E, 0x1C, 0x07, 0x0E, 0x00, 0x0E, 0x1C, 0x38, 0xE0, 0xE7, 0x01, 0xD8, - 0x07, 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xC0, 0x77, 0x01, 0x8E, - 0x0E, 0x38, 0x70, 0xF0, 0xE0, 0xEE, 0x39, 0xC7, 0x39, 0xC3, 0x70, 0x7C, - 0x0F, 0x80, 0xE0, 0x1C, 0x03, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x3F, 0xF3, - 0xFF, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x3C, 0x07, - 0x80, 0x70, 0x0F, 0xFC, 0xFF, 0xC0, 0x0F, 0x0F, 0x0C, 0x1C, 0x18, 0x18, - 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x78, 0x78, 0x12, - 0x4C, 0x92, 0x49, 0x26, 0xD9, 0x20, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x0C, - 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x30, 0xF0, 0xF0, 0x06, - 0x0E, 0x0E, 0x1B, 0x33, 0x33, 0x63, 0x63, 0xFF, 0xE0, 0xCC, 0x1F, 0x8F, - 0xF3, 0x1C, 0x06, 0x1F, 0x9F, 0xEE, 0x3B, 0x9C, 0xFF, 0x1D, 0xC0, 0x18, - 0x03, 0x00, 0xE0, 0x1D, 0xC3, 0xFC, 0x71, 0xDC, 0x3B, 0x87, 0x70, 0xEE, - 0x39, 0xCF, 0x7F, 0xCF, 0xE0, 0x0F, 0x0F, 0xF7, 0x1D, 0xC0, 0xE0, 0x38, - 0x0E, 0x03, 0x8E, 0x7F, 0x0F, 0x80, 0x00, 0x60, 0x06, 0x00, 0x61, 0xEE, - 0x3F, 0xE7, 0x9C, 0x71, 0xCE, 0x1C, 0xE1, 0xCE, 0x1C, 0xE3, 0x87, 0xF8, - 0x7F, 0x80, 0x1F, 0x0F, 0xE7, 0x1D, 0xC7, 0xFF, 0xFF, 0xFE, 0x03, 0x8E, - 0x7F, 0x0F, 0x80, 0x1C, 0xF3, 0x3F, 0xFD, 0xC7, 0x18, 0x63, 0x8E, 0x30, - 0xC0, 0x0F, 0x71, 0xFE, 0x3C, 0xE3, 0x8E, 0x70, 0xE7, 0x0E, 0x70, 0xC7, - 0x1C, 0x3F, 0xC3, 0xFC, 0x01, 0xCE, 0x38, 0x7F, 0x03, 0xE0, 0x18, 0x03, - 0x00, 0xE0, 0x1D, 0xE3, 0xFE, 0x71, 0xCC, 0x3B, 0x86, 0x70, 0xCC, 0x39, - 0x87, 0x30, 0xEE, 0x18, 0x39, 0xC0, 0x63, 0x39, 0xCE, 0x63, 0x39, 0xCE, - 0x00, 0x06, 0x06, 0x00, 0x0E, 0x0E, 0x0C, 0x0C, 0x1C, 0x1C, 0x1C, 0x18, - 0x18, 0x38, 0x38, 0x30, 0x70, 0xE0, 0x18, 0x03, 0x00, 0xE0, 0x1C, 0xE3, - 0x38, 0x6E, 0x1F, 0x83, 0xF0, 0x7E, 0x0E, 0xE1, 0x9C, 0x73, 0x8E, 0x38, - 0x39, 0xCE, 0x63, 0x39, 0xCE, 0x63, 0x39, 0xCE, 0x00, 0x3B, 0x9E, 0x3F, - 0xFF, 0x39, 0xC7, 0x71, 0xC6, 0x71, 0x86, 0x71, 0x8E, 0x63, 0x8E, 0x63, - 0x8C, 0xE3, 0x8C, 0xE3, 0x1C, 0x3B, 0xC7, 0xFC, 0xE3, 0xB8, 0x77, 0x0C, - 0xE1, 0x98, 0x73, 0x0E, 0xE1, 0xDC, 0x30, 0x0F, 0x87, 0xF9, 0xE7, 0xB8, - 0x7E, 0x0F, 0xC1, 0xF8, 0x77, 0x9E, 0x7F, 0x87, 0xC0, 0x1D, 0xE1, 0xFE, - 0x1C, 0x73, 0x87, 0x38, 0x73, 0x87, 0x38, 0xE3, 0x8E, 0x7F, 0xC7, 0xF8, - 0x60, 0x06, 0x00, 0x60, 0x0E, 0x00, 0x1E, 0xE7, 0xFD, 0xE7, 0x38, 0xEE, - 0x1D, 0xC3, 0xB8, 0x77, 0x1C, 0x7F, 0x8F, 0xF0, 0x0E, 0x01, 0x80, 0x30, - 0x06, 0x00, 0x3B, 0x36, 0x38, 0x70, 0x70, 0x70, 0x60, 0x60, 0xE0, 0xE0, - 0x3E, 0x3F, 0xF8, 0xFC, 0x0F, 0xC3, 0xF8, 0x3D, 0x8E, 0xFE, 0x3E, 0x00, - 0x38, 0xCF, 0xFE, 0x71, 0x86, 0x38, 0xE3, 0x8F, 0x3C, 0x31, 0xDC, 0x77, - 0x19, 0x86, 0x63, 0xB8, 0xEE, 0x33, 0x9C, 0xFF, 0x1F, 0xC0, 0xE1, 0x98, - 0xE6, 0x31, 0x9C, 0x66, 0x1B, 0x86, 0xC1, 0xF0, 0x78, 0x0E, 0x00, 0xE7, - 0x1B, 0x9C, 0xEE, 0x73, 0x3B, 0xDC, 0xEB, 0x63, 0xAD, 0x8F, 0xBC, 0x1C, - 0xF0, 0x73, 0xC1, 0xCE, 0x00, 0x1C, 0xE1, 0xCC, 0x0D, 0x80, 0xF8, 0x0F, - 0x00, 0xF0, 0x1F, 0x03, 0xB8, 0x33, 0x87, 0x38, 0x70, 0xCE, 0x38, 0xC6, - 0x19, 0xC3, 0x30, 0x66, 0x0F, 0x81, 0xF0, 0x3C, 0x03, 0x80, 0x60, 0x18, - 0x0F, 0x01, 0xC0, 0x00, 0x1F, 0xCF, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x03, - 0x81, 0xC0, 0x7F, 0xBF, 0xE0, 0x0E, 0x38, 0x61, 0x83, 0x06, 0x0C, 0x78, - 0xF0, 0xC1, 0x83, 0x0E, 0x1C, 0x38, 0x78, 0x70, 0x18, 0xC4, 0x21, 0x18, - 0xC4, 0x21, 0x18, 0xC4, 0x23, 0x18, 0x80, 0x1C, 0x3C, 0x38, 0x70, 0xE1, - 0x83, 0x06, 0x1E, 0x5C, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0xE0, 0x71, 0x8E}; - -const GFXglyph FreeSansBoldOblique9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 5, 13, 6, 2, -12}, // 0x21 '!' - {9, 7, 5, 9, 3, -12}, // 0x22 '"' - {14, 11, 12, 10, 1, -11}, // 0x23 '#' - {31, 11, 16, 10, 1, -13}, // 0x24 '$' - {53, 14, 13, 16, 2, -12}, // 0x25 '%' - {76, 12, 13, 13, 2, -12}, // 0x26 '&' - {96, 3, 5, 4, 3, -12}, // 0x27 ''' - {98, 8, 17, 6, 2, -12}, // 0x28 '(' - {115, 8, 17, 6, -2, -13}, // 0x29 ')' - {132, 6, 6, 7, 3, -12}, // 0x2A '*' - {137, 9, 8, 11, 2, -7}, // 0x2B '+' - {146, 4, 6, 5, 0, -2}, // 0x2C ',' - {149, 5, 2, 6, 1, -5}, // 0x2D '-' - {151, 3, 2, 5, 1, -1}, // 0x2E '.' - {152, 8, 13, 5, 0, -12}, // 0x2F '/' - {165, 10, 13, 10, 1, -12}, // 0x30 '0' - {182, 7, 13, 10, 3, -12}, // 0x31 '1' - {194, 11, 13, 10, 1, -12}, // 0x32 '2' - {212, 11, 13, 10, 1, -12}, // 0x33 '3' - {230, 10, 12, 10, 1, -11}, // 0x34 '4' - {245, 11, 13, 10, 1, -12}, // 0x35 '5' - {263, 10, 13, 10, 2, -12}, // 0x36 '6' - {280, 10, 13, 10, 2, -12}, // 0x37 '7' - {297, 11, 13, 10, 1, -12}, // 0x38 '8' - {315, 11, 13, 10, 1, -12}, // 0x39 '9' - {333, 4, 9, 6, 2, -8}, // 0x3A ':' - {338, 5, 12, 6, 1, -8}, // 0x3B ';' - {346, 10, 9, 11, 1, -8}, // 0x3C '<' - {358, 10, 6, 11, 1, -6}, // 0x3D '=' - {366, 10, 9, 11, 1, -7}, // 0x3E '>' - {378, 10, 13, 11, 3, -12}, // 0x3F '?' - {395, 18, 16, 18, 1, -13}, // 0x40 '@' - {431, 13, 13, 13, 0, -12}, // 0x41 'A' - {453, 13, 13, 13, 1, -12}, // 0x42 'B' - {475, 13, 13, 13, 2, -12}, // 0x43 'C' - {497, 13, 13, 13, 1, -12}, // 0x44 'D' - {519, 13, 13, 12, 1, -12}, // 0x45 'E' - {541, 12, 13, 11, 1, -12}, // 0x46 'F' - {561, 12, 13, 14, 2, -12}, // 0x47 'G' - {581, 14, 13, 13, 1, -12}, // 0x48 'H' - {604, 5, 13, 5, 1, -12}, // 0x49 'I' - {613, 11, 13, 10, 1, -12}, // 0x4A 'J' - {631, 14, 13, 13, 1, -12}, // 0x4B 'K' - {654, 10, 13, 11, 1, -12}, // 0x4C 'L' - {671, 16, 13, 15, 1, -12}, // 0x4D 'M' - {697, 14, 13, 13, 1, -12}, // 0x4E 'N' - {720, 13, 13, 14, 2, -12}, // 0x4F 'O' - {742, 13, 13, 12, 1, -12}, // 0x50 'P' - {764, 13, 14, 14, 2, -12}, // 0x51 'Q' - {787, 13, 13, 13, 1, -12}, // 0x52 'R' - {809, 13, 13, 12, 1, -12}, // 0x53 'S' - {831, 11, 13, 11, 3, -12}, // 0x54 'T' - {849, 13, 13, 13, 2, -12}, // 0x55 'U' - {871, 11, 13, 12, 3, -12}, // 0x56 'V' - {889, 17, 13, 17, 3, -12}, // 0x57 'W' - {917, 14, 13, 12, 0, -12}, // 0x58 'X' - {940, 11, 13, 12, 3, -12}, // 0x59 'Y' - {958, 12, 13, 11, 1, -12}, // 0x5A 'Z' - {978, 8, 17, 6, 0, -12}, // 0x5B '[' - {995, 3, 17, 5, 2, -16}, // 0x5C '\' - {1002, 8, 17, 6, 0, -13}, // 0x5D ']' - {1019, 8, 8, 11, 2, -12}, // 0x5E '^' - {1027, 11, 1, 10, -1, 4}, // 0x5F '_' - {1029, 3, 2, 6, 3, -12}, // 0x60 '`' - {1030, 10, 10, 10, 1, -9}, // 0x61 'a' - {1043, 11, 13, 11, 1, -12}, // 0x62 'b' - {1061, 10, 10, 10, 1, -9}, // 0x63 'c' - {1074, 12, 13, 11, 1, -12}, // 0x64 'd' - {1094, 10, 10, 10, 1, -9}, // 0x65 'e' - {1107, 6, 13, 6, 2, -12}, // 0x66 'f' - {1117, 12, 14, 11, 0, -9}, // 0x67 'g' - {1138, 11, 13, 11, 1, -12}, // 0x68 'h' - {1156, 5, 13, 5, 1, -12}, // 0x69 'i' - {1165, 8, 17, 5, -1, -12}, // 0x6A 'j' - {1182, 11, 13, 10, 1, -12}, // 0x6B 'k' - {1200, 5, 13, 5, 1, -12}, // 0x6C 'l' - {1209, 16, 10, 16, 1, -9}, // 0x6D 'm' - {1229, 11, 10, 11, 1, -9}, // 0x6E 'n' - {1243, 11, 10, 11, 1, -9}, // 0x6F 'o' - {1257, 12, 14, 11, 0, -9}, // 0x70 'p' - {1278, 11, 14, 11, 1, -9}, // 0x71 'q' - {1298, 8, 10, 7, 1, -9}, // 0x72 'r' - {1308, 9, 10, 10, 2, -9}, // 0x73 's' - {1320, 6, 12, 6, 2, -11}, // 0x74 't' - {1329, 10, 10, 11, 2, -9}, // 0x75 'u' - {1342, 10, 10, 10, 2, -9}, // 0x76 'v' - {1355, 14, 10, 14, 2, -9}, // 0x77 'w' - {1373, 12, 10, 10, 0, -9}, // 0x78 'x' - {1388, 11, 14, 10, 1, -9}, // 0x79 'y' - {1408, 10, 10, 9, 0, -9}, // 0x7A 'z' - {1421, 7, 17, 7, 2, -12}, // 0x7B '{' - {1436, 5, 17, 5, 1, -12}, // 0x7C '|' - {1447, 7, 17, 7, 0, -13}, // 0x7D '}' - {1462, 8, 2, 11, 2, -4}}; // 0x7E '~' - -const GFXfont FreeSansBoldOblique9pt7b PROGMEM = { - (uint8_t *)FreeSansBoldOblique9pt7bBitmaps, - (GFXglyph *)FreeSansBoldOblique9pt7bGlyphs, 0x20, 0x7E, 22}; - -// Approx. 2136 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique12pt7b.h deleted file mode 100644 index ce55f4d..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique12pt7b.h +++ /dev/null @@ -1,304 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansOblique12pt7bBitmaps[] PROGMEM = { - 0x0C, 0x61, 0x86, 0x18, 0x63, 0x0C, 0x30, 0xC2, 0x18, 0x61, 0x00, 0x00, - 0xC3, 0x00, 0xCF, 0x3C, 0xE2, 0x8A, 0x20, 0x01, 0x8C, 0x03, 0x18, 0x06, - 0x60, 0x18, 0xC0, 0x31, 0x83, 0xFF, 0x87, 0xFF, 0x03, 0x18, 0x0C, 0x60, - 0x18, 0xC0, 0x23, 0x03, 0xFF, 0x8F, 0xFF, 0x02, 0x30, 0x0C, 0x60, 0x18, - 0x80, 0x63, 0x00, 0xC6, 0x00, 0x00, 0x80, 0x3F, 0x03, 0xFC, 0x32, 0x73, - 0x91, 0x99, 0x8C, 0xCC, 0x06, 0x60, 0x3E, 0x00, 0x7E, 0x01, 0xFC, 0x0C, - 0xEC, 0x43, 0x62, 0x1B, 0x11, 0x9D, 0x9C, 0x7F, 0xC1, 0xF8, 0x02, 0x00, - 0x10, 0x01, 0x80, 0x00, 0x00, 0x01, 0x83, 0xC0, 0x60, 0xFC, 0x18, 0x30, - 0xC2, 0x0C, 0x18, 0xC1, 0x83, 0x30, 0x38, 0xCC, 0x03, 0xF1, 0x00, 0x3C, - 0x40, 0x00, 0x18, 0xF0, 0x06, 0x3F, 0x01, 0x8C, 0x30, 0x23, 0x06, 0x0C, - 0x60, 0xC3, 0x0E, 0x30, 0xC0, 0xFC, 0x10, 0x0F, 0x00, 0x01, 0xE0, 0x3F, - 0x81, 0x8C, 0x18, 0x60, 0xC3, 0x06, 0x30, 0x1F, 0x00, 0xE0, 0x1F, 0x01, - 0xDC, 0xD8, 0x6D, 0x81, 0xEC, 0x0E, 0x60, 0x73, 0x87, 0xCF, 0xE6, 0x3E, - 0x38, 0xFE, 0xA0, 0x03, 0x06, 0x04, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x60, - 0x60, 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x40, 0x60, - 0x60, 0x20, 0x04, 0x06, 0x06, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x20, 0x60, - 0xC0, 0x0C, 0x0C, 0x49, 0x7F, 0x3C, 0x3C, 0x6C, 0x00, 0x03, 0x00, 0x30, - 0x03, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0xC0, - 0x0C, 0x00, 0x77, 0x22, 0x6C, 0xFF, 0xF0, 0xFC, 0x00, 0x40, 0x30, 0x08, - 0x06, 0x01, 0x00, 0xC0, 0x20, 0x18, 0x04, 0x02, 0x00, 0x80, 0x40, 0x10, - 0x08, 0x02, 0x01, 0x00, 0xC0, 0x20, 0x00, 0x07, 0xC0, 0xFE, 0x1C, 0x73, - 0x83, 0x30, 0x36, 0x03, 0x60, 0x36, 0x03, 0xC0, 0x7C, 0x07, 0xC0, 0x6C, - 0x06, 0xC0, 0xEC, 0x0C, 0xE3, 0x87, 0xF0, 0x3E, 0x00, 0x02, 0x0C, 0x77, - 0xEF, 0xC1, 0x83, 0x0C, 0x18, 0x30, 0x61, 0xC3, 0x06, 0x0C, 0x18, 0x60, - 0x03, 0xF0, 0x1F, 0xE0, 0xE1, 0xC7, 0x03, 0x18, 0x0C, 0x00, 0x30, 0x01, - 0x80, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x78, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x06, 0x00, 0x1F, 0xFC, 0xFF, 0xE0, 0x07, 0xC0, 0xFE, 0x1C, 0x73, 0x03, - 0x30, 0x30, 0x03, 0x00, 0xE0, 0x7C, 0x07, 0xC0, 0x0E, 0x00, 0x60, 0x06, - 0xC0, 0x6C, 0x0C, 0xE1, 0xC7, 0xF8, 0x3E, 0x00, 0x00, 0x60, 0x06, 0x00, - 0xE0, 0x1E, 0x03, 0xE0, 0x6C, 0x0C, 0xC1, 0x8C, 0x30, 0xC6, 0x1C, 0xC1, - 0x8F, 0xFF, 0xFF, 0xE0, 0x18, 0x03, 0x00, 0x30, 0x03, 0x00, 0x0F, 0xF8, - 0x7F, 0xC6, 0x00, 0x30, 0x01, 0x00, 0x1B, 0xC0, 0xFF, 0x06, 0x1C, 0x60, - 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x0C, 0x60, 0x63, 0x86, 0x0F, 0xE0, - 0x3E, 0x00, 0x03, 0xC0, 0xFE, 0x1C, 0x73, 0x83, 0x30, 0x06, 0x00, 0x67, - 0x87, 0xFC, 0xF0, 0xEE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x4C, 0x0C, 0xE1, - 0x87, 0xF8, 0x3E, 0x00, 0x3F, 0xFB, 0xFF, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, - 0x00, 0xC0, 0x06, 0x00, 0x60, 0x06, 0x00, 0x70, 0x03, 0x00, 0x30, 0x03, - 0x80, 0x18, 0x01, 0xC0, 0x0C, 0x00, 0xE0, 0x00, 0x07, 0xC0, 0xFE, 0x1C, - 0x73, 0x03, 0x30, 0x33, 0x03, 0x38, 0x61, 0xFC, 0x3F, 0xC7, 0x0E, 0x60, - 0x6C, 0x06, 0xC0, 0x6C, 0x0C, 0xE1, 0xC7, 0xF8, 0x3E, 0x00, 0x07, 0xC1, - 0xFE, 0x38, 0x73, 0x03, 0x60, 0x36, 0x03, 0x60, 0x36, 0x07, 0x70, 0xF3, - 0xFE, 0x1E, 0x60, 0x0E, 0x00, 0xCC, 0x1C, 0xE3, 0x87, 0xF0, 0x3C, 0x00, - 0x39, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x39, 0xC0, 0x1C, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x1C, 0x20, 0x86, 0x30, 0x00, 0x00, 0x01, 0xC0, - 0x3C, 0x0F, 0x81, 0xE0, 0x7C, 0x03, 0x80, 0x0F, 0x00, 0x1F, 0x00, 0x3E, - 0x00, 0x38, 0x00, 0x40, 0x7F, 0xFB, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, - 0x7F, 0xF0, 0x20, 0x01, 0xC0, 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x00, 0x1C, - 0x03, 0xE0, 0x78, 0x1F, 0x03, 0xC0, 0x38, 0x00, 0x00, 0x00, 0x0F, 0x87, - 0xF9, 0xC3, 0xB0, 0x3C, 0x06, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x01, 0xC0, - 0x30, 0x0C, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x3F, 0x80, 0x01, 0xFF, 0xE0, 0x0F, 0x01, 0xE0, 0x38, 0x00, 0xE0, 0xE0, - 0x00, 0xC3, 0x87, 0x81, 0xCE, 0x1F, 0xB1, 0x98, 0x71, 0xC3, 0x61, 0x83, - 0x86, 0xC6, 0x06, 0x0F, 0x0C, 0x0C, 0x3E, 0x30, 0x30, 0x6C, 0x60, 0x61, - 0xD8, 0xC1, 0x87, 0x31, 0xC7, 0x1C, 0x61, 0xF7, 0xF0, 0x63, 0xCF, 0x80, - 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x78, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xDC, 0x01, 0xCC, - 0x01, 0x8C, 0x03, 0x8C, 0x03, 0x0C, 0x06, 0x0C, 0x0E, 0x0E, 0x0F, 0xFE, - 0x1F, 0xFE, 0x18, 0x06, 0x38, 0x06, 0x30, 0x06, 0x70, 0x06, 0x60, 0x07, - 0x0F, 0xF8, 0x1F, 0xF8, 0x60, 0x38, 0xC0, 0x31, 0x80, 0x63, 0x00, 0xCE, - 0x03, 0x18, 0x0C, 0x3F, 0xF0, 0x7F, 0xF0, 0xC0, 0x73, 0x00, 0x66, 0x00, - 0xCC, 0x01, 0x98, 0x06, 0x70, 0x1C, 0xFF, 0xF1, 0xFF, 0x80, 0x01, 0xF8, - 0x07, 0xFE, 0x0E, 0x0E, 0x1C, 0x03, 0x38, 0x03, 0x30, 0x00, 0x60, 0x00, - 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x06, - 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x78, 0x3F, 0xF0, 0x1F, 0x80, 0x0F, 0xF8, - 0x1F, 0xFC, 0x18, 0x0E, 0x18, 0x07, 0x18, 0x03, 0x18, 0x03, 0x38, 0x03, - 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x70, 0x06, 0x70, 0x06, 0x60, 0x0C, - 0x60, 0x0C, 0x60, 0x18, 0xE0, 0x78, 0xFF, 0xE0, 0xFF, 0x80, 0x0F, 0xFF, - 0x1F, 0xFE, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x38, 0x00, - 0x30, 0x00, 0x3F, 0xFC, 0x3F, 0xF8, 0x70, 0x00, 0x70, 0x00, 0x60, 0x00, - 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xFF, 0xF8, 0xFF, 0xF8, 0x0F, 0xFE, - 0x3F, 0xFC, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x0E, 0x00, 0x18, - 0x00, 0x3F, 0xF0, 0x7F, 0xE1, 0xC0, 0x03, 0x80, 0x06, 0x00, 0x0C, 0x00, - 0x18, 0x00, 0x70, 0x00, 0xC0, 0x01, 0x80, 0x00, 0x01, 0xF8, 0x07, 0xFE, - 0x0E, 0x0F, 0x18, 0x03, 0x30, 0x03, 0x70, 0x00, 0x60, 0x00, 0x60, 0x00, - 0xC0, 0x7F, 0xC0, 0x7E, 0xC0, 0x02, 0xC0, 0x06, 0xC0, 0x06, 0xE0, 0x0E, - 0x60, 0x1E, 0x78, 0x3C, 0x3F, 0xE4, 0x0F, 0x84, 0x0C, 0x01, 0x8E, 0x00, - 0xC6, 0x00, 0xE3, 0x00, 0x61, 0x80, 0x30, 0xC0, 0x18, 0xE0, 0x0C, 0x60, - 0x0E, 0x3F, 0xFE, 0x1F, 0xFF, 0x1C, 0x01, 0x8E, 0x01, 0xC6, 0x00, 0xE3, - 0x00, 0x61, 0x80, 0x31, 0xC0, 0x18, 0xC0, 0x1C, 0x60, 0x0C, 0x00, 0x0C, - 0x71, 0x86, 0x18, 0x63, 0x8C, 0x30, 0xC3, 0x1C, 0x61, 0x86, 0x18, 0xE3, - 0x00, 0x00, 0x18, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x38, 0x01, - 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x38, 0x01, 0x8C, 0x0C, 0x60, 0x63, - 0x07, 0x1C, 0x70, 0x7F, 0x01, 0xF0, 0x00, 0x0C, 0x03, 0x87, 0x01, 0xC1, - 0x80, 0xE0, 0x60, 0x60, 0x18, 0x70, 0x06, 0x38, 0x03, 0x9C, 0x00, 0xCE, - 0x00, 0x37, 0x80, 0x0F, 0x70, 0x07, 0x8C, 0x01, 0xC3, 0x80, 0x60, 0x60, - 0x18, 0x1C, 0x06, 0x03, 0x03, 0x80, 0xE0, 0xC0, 0x18, 0x30, 0x07, 0x00, - 0x0C, 0x03, 0x80, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x0E, 0x01, 0x80, 0x30, - 0x06, 0x01, 0xC0, 0x38, 0x06, 0x00, 0xC0, 0x18, 0x07, 0x00, 0xFF, 0xFF, - 0xFC, 0x0E, 0x00, 0x71, 0xE0, 0x0F, 0x1E, 0x00, 0xF1, 0xE0, 0x1E, 0x1E, - 0x01, 0xE1, 0xE0, 0x36, 0x3B, 0x03, 0x63, 0x30, 0x6E, 0x33, 0x0E, 0xC3, - 0x30, 0xCC, 0x33, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x31, 0xC6, 0x33, 0x18, - 0x61, 0xE1, 0x8E, 0x1E, 0x18, 0xC1, 0xC1, 0x8C, 0x1C, 0x38, 0x0C, 0x01, - 0x8F, 0x00, 0xC7, 0x80, 0x63, 0xE0, 0x71, 0xF0, 0x30, 0xD8, 0x18, 0xEE, - 0x0C, 0x63, 0x06, 0x31, 0xC7, 0x18, 0xE3, 0x0C, 0x31, 0x8C, 0x1C, 0xC6, - 0x06, 0x63, 0x03, 0xF1, 0x80, 0xF1, 0xC0, 0x78, 0xC0, 0x3C, 0x60, 0x0E, - 0x00, 0x01, 0xF8, 0x03, 0xFF, 0x03, 0x83, 0xC3, 0x80, 0x63, 0x00, 0x3B, - 0x80, 0x0D, 0x80, 0x06, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, - 0xF8, 0x00, 0x6C, 0x00, 0x36, 0x00, 0x31, 0x80, 0x30, 0xF0, 0x78, 0x3F, - 0xF0, 0x07, 0xE0, 0x00, 0x0F, 0xF8, 0x3F, 0xF8, 0x60, 0x38, 0xC0, 0x31, - 0x80, 0x63, 0x00, 0xCE, 0x03, 0x18, 0x0E, 0x3F, 0xF8, 0x7F, 0xE1, 0xC0, - 0x03, 0x80, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x70, 0x00, 0xC0, 0x01, - 0x80, 0x00, 0x00, 0xFC, 0x01, 0xFF, 0xC0, 0xF0, 0x78, 0x70, 0x06, 0x38, - 0x01, 0xCC, 0x00, 0x36, 0x00, 0x0D, 0x80, 0x03, 0xC0, 0x00, 0xF0, 0x00, - 0x3C, 0x00, 0x1B, 0x00, 0x06, 0xC0, 0x03, 0x38, 0x1D, 0xC6, 0x03, 0xE1, - 0xE0, 0xF0, 0x3F, 0xFE, 0x03, 0xF1, 0xC0, 0x00, 0x20, 0x0F, 0xFC, 0x1F, - 0xFE, 0x18, 0x07, 0x18, 0x03, 0x18, 0x03, 0x18, 0x03, 0x38, 0x06, 0x30, - 0x0C, 0x3F, 0xF8, 0x3F, 0xF8, 0x70, 0x1C, 0x70, 0x0C, 0x60, 0x0C, 0x60, - 0x0C, 0x60, 0x18, 0xE0, 0x18, 0xC0, 0x18, 0xC0, 0x1C, 0x03, 0xF8, 0x1F, - 0xF8, 0x70, 0x38, 0xC0, 0x33, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x1E, 0x00, - 0x1F, 0xC0, 0x0F, 0xF0, 0x01, 0xF0, 0x00, 0xEC, 0x00, 0xD8, 0x01, 0xB0, - 0x06, 0x70, 0x38, 0x7F, 0xE0, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x70, - 0x01, 0xC0, 0x06, 0x00, 0x18, 0x00, 0x60, 0x03, 0x80, 0x0C, 0x00, 0x30, - 0x00, 0xC0, 0x03, 0x00, 0x1C, 0x00, 0x60, 0x01, 0x80, 0x06, 0x00, 0x18, - 0x00, 0xE0, 0x00, 0x18, 0x03, 0x38, 0x03, 0x30, 0x07, 0x30, 0x06, 0x30, - 0x06, 0x70, 0x06, 0x70, 0x0E, 0x60, 0x0C, 0x60, 0x0C, 0x60, 0x0C, 0xE0, - 0x0C, 0xC0, 0x1C, 0xC0, 0x18, 0xC0, 0x18, 0xC0, 0x38, 0xE0, 0x70, 0x7F, - 0xE0, 0x1F, 0x80, 0xC0, 0x0F, 0xC0, 0x1B, 0x80, 0x73, 0x00, 0xC6, 0x03, - 0x0C, 0x06, 0x18, 0x18, 0x30, 0x70, 0x60, 0xC0, 0xE3, 0x81, 0xC6, 0x01, - 0x9C, 0x03, 0x30, 0x06, 0xE0, 0x0D, 0x80, 0x1E, 0x00, 0x3C, 0x00, 0x70, - 0x00, 0xC0, 0x70, 0x1F, 0x01, 0xC0, 0x6C, 0x0F, 0x03, 0xB0, 0x3C, 0x0C, - 0xC1, 0xF0, 0x73, 0x06, 0xC1, 0x8C, 0x3B, 0x06, 0x30, 0xC6, 0x30, 0xC7, - 0x18, 0xC3, 0x18, 0x67, 0x0C, 0xE1, 0x98, 0x33, 0x06, 0xE0, 0xDC, 0x1B, - 0x03, 0x60, 0x6C, 0x07, 0x81, 0xE0, 0x1C, 0x07, 0x80, 0x70, 0x1C, 0x01, - 0x80, 0x70, 0x00, 0x07, 0x00, 0xE0, 0xE0, 0x38, 0x0C, 0x0E, 0x01, 0xC3, - 0x80, 0x18, 0xE0, 0x03, 0x98, 0x00, 0x36, 0x00, 0x07, 0x80, 0x00, 0xF0, - 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x01, 0xDC, 0x00, 0x73, 0x80, 0x1C, 0x30, - 0x03, 0x07, 0x00, 0xC0, 0x60, 0x38, 0x0E, 0x0E, 0x00, 0xC0, 0xE0, 0x06, - 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x38, 0x30, 0x70, 0x38, 0x60, 0x18, 0xC0, - 0x1D, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, - 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x0F, 0xFF, - 0x87, 0xFF, 0x80, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, - 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, - 0xC0, 0x01, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xF8, 0x7F, 0xFC, - 0x00, 0x07, 0xC1, 0xE0, 0x60, 0x18, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x1C, - 0x06, 0x01, 0x80, 0x60, 0x18, 0x0E, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x06, - 0x01, 0x80, 0x60, 0x1E, 0x07, 0x80, 0x93, 0x6C, 0x92, 0x49, 0x24, 0xDB, - 0x24, 0x07, 0x81, 0xE0, 0x18, 0x06, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x03, - 0x01, 0xC0, 0x60, 0x18, 0x06, 0x01, 0x80, 0xE0, 0x30, 0x0C, 0x03, 0x00, - 0xC0, 0x60, 0x18, 0x1E, 0x0F, 0x80, 0x03, 0x01, 0xC0, 0xD8, 0x36, 0x19, - 0x84, 0x63, 0x19, 0x83, 0x60, 0xC0, 0xFF, 0xFC, 0xE6, 0x23, 0x07, 0xC3, - 0xFC, 0xE3, 0x98, 0x30, 0x06, 0x01, 0x87, 0xF3, 0xC6, 0xC0, 0xD8, 0x3B, - 0x0E, 0x7F, 0x77, 0xCC, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0xF0, 0x7F, 0xC3, 0x87, 0x38, 0x19, 0x80, 0xCC, 0x06, 0x60, 0x32, - 0x03, 0xB0, 0x19, 0xC1, 0xCE, 0x1C, 0x7F, 0xC3, 0x7C, 0x00, 0x0F, 0x83, - 0xF8, 0xE3, 0xB8, 0x36, 0x07, 0xC0, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x1B, - 0x86, 0x3F, 0xC3, 0xE0, 0x00, 0x0C, 0x00, 0x60, 0x01, 0x80, 0x06, 0x00, - 0x18, 0x3E, 0x61, 0xFF, 0x0E, 0x3C, 0x70, 0x71, 0x80, 0xCE, 0x07, 0x30, - 0x18, 0xC0, 0x63, 0x01, 0x8C, 0x0E, 0x38, 0x78, 0x7F, 0xC0, 0xFB, 0x00, - 0x07, 0xC1, 0xFE, 0x38, 0x77, 0x03, 0x60, 0x37, 0xFF, 0xFF, 0xFC, 0x00, - 0xC0, 0x0C, 0x06, 0xE1, 0xC7, 0xF8, 0x3E, 0x00, 0x07, 0x0F, 0x1C, 0x18, - 0x18, 0x7E, 0x7E, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, - 0xC0, 0xC0, 0x03, 0xCC, 0x3F, 0xA1, 0xC7, 0x8E, 0x0E, 0x30, 0x38, 0xC0, - 0xC6, 0x03, 0x18, 0x0C, 0x60, 0x71, 0x81, 0xC7, 0x0E, 0x0F, 0xF8, 0x1E, - 0x60, 0x03, 0x80, 0x0C, 0x30, 0x70, 0x7F, 0x80, 0xF8, 0x00, 0x0C, 0x00, - 0xC0, 0x0C, 0x01, 0x80, 0x18, 0x01, 0x9E, 0x1F, 0xF1, 0xC7, 0x38, 0x33, - 0x03, 0x30, 0x33, 0x07, 0x30, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0xC6, - 0x0C, 0x18, 0xC0, 0x00, 0x18, 0xC6, 0x33, 0x18, 0xC6, 0x31, 0x98, 0xC6, - 0x00, 0x01, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x18, 0x1C, 0x0C, 0x06, 0x03, - 0x01, 0x81, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x18, 0x0C, 0x06, 0x03, 0x03, - 0x87, 0x83, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x30, 0x01, 0x80, 0x0C, - 0x18, 0x61, 0x83, 0x38, 0x33, 0x81, 0xB8, 0x0F, 0xC0, 0x77, 0x03, 0x18, - 0x30, 0xC1, 0x87, 0x0C, 0x18, 0x60, 0xE3, 0x03, 0x00, 0x18, 0xC6, 0x63, - 0x18, 0xC6, 0x33, 0x18, 0xC6, 0x31, 0x98, 0xC6, 0x00, 0x1B, 0xE3, 0xC3, - 0xFD, 0xFC, 0xF1, 0xE1, 0x9C, 0x18, 0x33, 0x03, 0x06, 0x60, 0xC0, 0xCC, - 0x18, 0x3B, 0x83, 0x06, 0x60, 0x60, 0xCC, 0x0C, 0x19, 0x83, 0x03, 0x30, - 0x60, 0xE6, 0x0C, 0x18, 0x1B, 0xE1, 0xFF, 0x3C, 0x73, 0x83, 0x30, 0x33, - 0x03, 0x30, 0x77, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x0C, 0x60, 0xC0, - 0x07, 0xC1, 0xFE, 0x38, 0x77, 0x03, 0x60, 0x3E, 0x03, 0xC0, 0x3C, 0x06, - 0xC0, 0x6C, 0x0E, 0xE1, 0xC7, 0xF8, 0x3E, 0x00, 0x0C, 0xF0, 0x3F, 0xE0, - 0xE1, 0xC7, 0x03, 0x1C, 0x0C, 0x60, 0x31, 0x80, 0xCE, 0x07, 0x38, 0x18, - 0xE0, 0xE3, 0xC7, 0x0F, 0xF8, 0x77, 0xC1, 0x80, 0x06, 0x00, 0x18, 0x00, - 0x60, 0x03, 0x80, 0x00, 0x0F, 0x98, 0xFF, 0xCE, 0x3C, 0xE0, 0xE6, 0x03, - 0x70, 0x1B, 0x01, 0x98, 0x0C, 0xC0, 0x66, 0x07, 0x38, 0x78, 0xFF, 0x83, - 0xCC, 0x00, 0x60, 0x07, 0x00, 0x38, 0x01, 0x80, 0x0C, 0x00, 0x1B, 0x8F, - 0xCF, 0x07, 0x03, 0x01, 0x80, 0xC0, 0xE0, 0x60, 0x30, 0x18, 0x0C, 0x06, - 0x00, 0x0F, 0xC1, 0xFF, 0x30, 0x76, 0x03, 0x60, 0x07, 0x80, 0x3F, 0x80, - 0x7E, 0x00, 0x6C, 0x06, 0xE0, 0xCF, 0xF8, 0x3E, 0x00, 0x18, 0x30, 0x67, - 0xEF, 0xC6, 0x0C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x18, 0x3C, 0x38, 0x30, - 0x33, 0x03, 0x30, 0x37, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0xC0, - 0xEC, 0x0C, 0xC3, 0xCF, 0xFC, 0x7C, 0xC0, 0xC0, 0x78, 0x1B, 0x03, 0x60, - 0xC6, 0x18, 0xC6, 0x19, 0xC3, 0x30, 0x6C, 0x0D, 0x81, 0xE0, 0x3C, 0x03, - 0x00, 0xC1, 0xC3, 0xE1, 0xE1, 0xB0, 0xF0, 0xD8, 0x78, 0xCC, 0x6C, 0x66, - 0x36, 0x63, 0x33, 0x30, 0x99, 0xB0, 0x58, 0xD8, 0x2C, 0x78, 0x1C, 0x3C, - 0x0E, 0x1C, 0x06, 0x0E, 0x00, 0x0C, 0x1C, 0x30, 0xE0, 0xE3, 0x01, 0x98, - 0x07, 0xC0, 0x0E, 0x00, 0x30, 0x01, 0xE0, 0x0F, 0x80, 0x73, 0x01, 0x8C, - 0x0C, 0x38, 0x60, 0x60, 0x18, 0x0C, 0x60, 0x61, 0x83, 0x86, 0x0C, 0x1C, - 0x60, 0x31, 0x80, 0xCC, 0x03, 0x30, 0x0D, 0x80, 0x36, 0x00, 0xF0, 0x03, - 0x80, 0x06, 0x00, 0x30, 0x00, 0xC0, 0x06, 0x00, 0xF0, 0x03, 0x80, 0x00, - 0x1F, 0xF1, 0xFF, 0x00, 0x70, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, - 0x18, 0x03, 0x00, 0x60, 0x0F, 0xFC, 0xFF, 0xC0, 0x07, 0x0E, 0x18, 0x18, - 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x60, 0x0C, 0x30, 0x82, 0x08, 0x61, - 0x84, 0x10, 0x43, 0x0C, 0x20, 0x86, 0x18, 0x41, 0x04, 0x30, 0xC2, 0x00, - 0x00, 0x06, 0x07, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x06, 0x03, - 0x01, 0xC0, 0xE0, 0x60, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x06, 0x03, 0x01, - 0x83, 0x83, 0x80, 0x38, 0x0F, 0x82, 0x38, 0x83, 0xE0, 0x38}; - -const GFXglyph FreeSansOblique12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 7, 0, 1}, // 0x20 ' ' - {0, 6, 18, 7, 3, -17}, // 0x21 '!' - {14, 6, 6, 9, 4, -16}, // 0x22 '"' - {19, 15, 18, 13, 1, -17}, // 0x23 '#' - {53, 13, 21, 13, 2, -17}, // 0x24 '$' - {88, 19, 17, 21, 3, -16}, // 0x25 '%' - {129, 13, 17, 16, 2, -16}, // 0x26 '&' - {157, 2, 6, 5, 4, -16}, // 0x27 ''' - {159, 8, 23, 8, 3, -17}, // 0x28 '(' - {182, 8, 23, 8, 0, -16}, // 0x29 ')' - {205, 8, 8, 9, 4, -17}, // 0x2A '*' - {213, 12, 11, 14, 2, -10}, // 0x2B '+' - {230, 4, 6, 7, 1, -1}, // 0x2C ',' - {233, 6, 2, 8, 2, -7}, // 0x2D '-' - {235, 3, 2, 7, 2, -1}, // 0x2E '.' - {236, 10, 18, 7, 0, -17}, // 0x2F '/' - {259, 12, 17, 13, 2, -16}, // 0x30 '0' - {285, 7, 17, 13, 5, -16}, // 0x31 '1' - {300, 14, 17, 13, 1, -16}, // 0x32 '2' - {330, 12, 17, 13, 2, -16}, // 0x33 '3' - {356, 12, 17, 13, 2, -16}, // 0x34 '4' - {382, 13, 17, 13, 2, -16}, // 0x35 '5' - {410, 12, 17, 13, 2, -16}, // 0x36 '6' - {436, 13, 17, 13, 3, -16}, // 0x37 '7' - {464, 12, 17, 13, 2, -16}, // 0x38 '8' - {490, 12, 17, 13, 2, -16}, // 0x39 '9' - {516, 5, 12, 7, 3, -11}, // 0x3A ':' - {524, 6, 16, 7, 2, -11}, // 0x3B ';' - {536, 13, 12, 14, 2, -11}, // 0x3C '<' - {556, 13, 6, 14, 2, -8}, // 0x3D '=' - {566, 13, 12, 14, 1, -10}, // 0x3E '>' - {586, 11, 18, 13, 4, -17}, // 0x3F '?' - {611, 23, 21, 24, 2, -17}, // 0x40 '@' - {672, 16, 18, 16, 0, -17}, // 0x41 'A' - {708, 15, 18, 16, 2, -17}, // 0x42 'B' - {742, 16, 18, 17, 2, -17}, // 0x43 'C' - {778, 16, 18, 17, 2, -17}, // 0x44 'D' - {814, 16, 18, 16, 2, -17}, // 0x45 'E' - {850, 15, 18, 14, 2, -17}, // 0x46 'F' - {884, 16, 18, 19, 3, -17}, // 0x47 'G' - {920, 17, 18, 17, 2, -17}, // 0x48 'H' - {959, 6, 18, 7, 2, -17}, // 0x49 'I' - {973, 13, 18, 12, 1, -17}, // 0x4A 'J' - {1003, 18, 18, 16, 2, -17}, // 0x4B 'K' - {1044, 11, 18, 13, 2, -17}, // 0x4C 'L' - {1069, 20, 18, 20, 2, -17}, // 0x4D 'M' - {1114, 17, 18, 18, 2, -17}, // 0x4E 'N' - {1153, 17, 18, 18, 2, -17}, // 0x4F 'O' - {1192, 15, 18, 15, 2, -17}, // 0x50 'P' - {1226, 18, 19, 19, 2, -17}, // 0x51 'Q' - {1269, 16, 18, 17, 2, -17}, // 0x52 'R' - {1305, 15, 18, 16, 2, -17}, // 0x53 'S' - {1339, 14, 18, 15, 4, -17}, // 0x54 'T' - {1371, 16, 18, 17, 3, -17}, // 0x55 'U' - {1407, 15, 18, 15, 4, -17}, // 0x56 'V' - {1441, 22, 18, 22, 4, -17}, // 0x57 'W' - {1491, 19, 18, 16, 0, -17}, // 0x58 'X' - {1534, 16, 18, 16, 4, -17}, // 0x59 'Y' - {1570, 17, 18, 15, 1, -17}, // 0x5A 'Z' - {1609, 10, 23, 7, 0, -17}, // 0x5B '[' - {1638, 3, 18, 7, 4, -17}, // 0x5C '\' - {1645, 10, 23, 7, -1, -16}, // 0x5D ']' - {1674, 10, 9, 11, 2, -16}, // 0x5E '^' - {1686, 14, 1, 13, -1, 4}, // 0x5F '_' - {1688, 4, 4, 8, 4, -17}, // 0x60 '`' - {1690, 11, 13, 13, 2, -12}, // 0x61 'a' - {1708, 13, 18, 13, 1, -17}, // 0x62 'b' - {1738, 11, 13, 12, 2, -12}, // 0x63 'c' - {1756, 14, 18, 13, 2, -17}, // 0x64 'd' - {1788, 12, 13, 13, 2, -12}, // 0x65 'e' - {1808, 8, 18, 6, 2, -17}, // 0x66 'f' - {1826, 14, 18, 13, 1, -12}, // 0x67 'g' - {1858, 12, 18, 13, 1, -17}, // 0x68 'h' - {1885, 5, 18, 5, 2, -17}, // 0x69 'i' - {1897, 9, 23, 6, -1, -17}, // 0x6A 'j' - {1923, 13, 18, 12, 1, -17}, // 0x6B 'k' - {1953, 5, 18, 5, 2, -17}, // 0x6C 'l' - {1965, 19, 13, 20, 1, -12}, // 0x6D 'm' - {1996, 12, 13, 13, 1, -12}, // 0x6E 'n' - {2016, 12, 13, 13, 2, -12}, // 0x6F 'o' - {2036, 14, 18, 14, 0, -12}, // 0x70 'p' - {2068, 13, 18, 13, 2, -12}, // 0x71 'q' - {2098, 9, 13, 8, 1, -12}, // 0x72 'r' - {2113, 12, 13, 12, 1, -12}, // 0x73 's' - {2133, 7, 16, 6, 2, -15}, // 0x74 't' - {2147, 12, 13, 13, 2, -12}, // 0x75 'u' - {2167, 11, 13, 12, 3, -12}, // 0x76 'v' - {2185, 17, 13, 17, 3, -12}, // 0x77 'w' - {2213, 14, 13, 12, 0, -12}, // 0x78 'x' - {2236, 14, 18, 11, 0, -12}, // 0x79 'y' - {2268, 12, 13, 12, 1, -12}, // 0x7A 'z' - {2288, 8, 23, 8, 3, -17}, // 0x7B '{' - {2311, 6, 23, 6, 1, -17}, // 0x7C '|' - {2329, 9, 23, 8, -1, -16}, // 0x7D '}' - {2355, 11, 5, 14, 3, -10}}; // 0x7E '~' - -const GFXfont FreeSansOblique12pt7b PROGMEM = { - (uint8_t *)FreeSansOblique12pt7bBitmaps, - (GFXglyph *)FreeSansOblique12pt7bGlyphs, 0x20, 0x7E, 29}; - -// Approx. 3034 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique18pt7b.h deleted file mode 100644 index f85b07f..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique18pt7b.h +++ /dev/null @@ -1,520 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansOblique18pt7bBitmaps[] PROGMEM = { - 0x03, 0x83, 0x81, 0xC0, 0xE0, 0x70, 0x78, 0x38, 0x1C, 0x0E, 0x07, 0x07, - 0x83, 0x81, 0xC0, 0xE0, 0x60, 0x30, 0x30, 0x18, 0x0C, 0x04, 0x00, 0x00, - 0x01, 0xC0, 0xE0, 0x70, 0x78, 0x00, 0x71, 0xDC, 0x7F, 0x3F, 0x8E, 0xE3, - 0xB8, 0xEC, 0x33, 0x0C, 0xC3, 0x00, 0x00, 0x38, 0x70, 0x01, 0xC3, 0x80, - 0x0C, 0x18, 0x00, 0xE1, 0xC0, 0x06, 0x0C, 0x00, 0x70, 0xE0, 0x03, 0x87, - 0x03, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x80, 0x60, 0xC0, 0x07, - 0x0E, 0x00, 0x30, 0x60, 0x03, 0x87, 0x00, 0x18, 0x30, 0x1F, 0xFF, 0xF8, - 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x07, 0x0E, 0x00, 0x30, 0x70, 0x03, 0x87, - 0x00, 0x1C, 0x38, 0x00, 0xC1, 0x80, 0x0E, 0x1C, 0x00, 0x60, 0xC0, 0x00, - 0x00, 0x0C, 0x00, 0x07, 0xF8, 0x01, 0xFF, 0xC0, 0x3F, 0xFE, 0x07, 0x99, - 0xF0, 0xF1, 0x87, 0x0E, 0x18, 0x71, 0xC1, 0x87, 0x1C, 0x38, 0x01, 0xC3, - 0x00, 0x1C, 0x30, 0x01, 0xE3, 0x00, 0x0F, 0xB0, 0x00, 0xFF, 0x80, 0x03, - 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x6F, 0xC0, 0x06, 0x3C, 0x00, 0xC1, 0xCE, - 0x0C, 0x1C, 0xE0, 0xC1, 0xCE, 0x0C, 0x38, 0xF1, 0xC3, 0x8F, 0x98, 0xF0, - 0x7F, 0xFE, 0x03, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0x30, 0x00, 0x03, 0x00, - 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0xE0, 0x03, - 0x81, 0xFC, 0x00, 0xC0, 0xFF, 0x00, 0x60, 0x70, 0xE0, 0x38, 0x38, 0x18, - 0x1C, 0x0C, 0x06, 0x0E, 0x03, 0x01, 0x83, 0x00, 0xC0, 0xE1, 0x80, 0x38, - 0x70, 0xE0, 0x0F, 0xF8, 0x70, 0x01, 0xFC, 0x18, 0x00, 0x3E, 0x0C, 0x00, - 0x00, 0x06, 0x07, 0x80, 0x03, 0x87, 0xF8, 0x00, 0xC3, 0xFE, 0x00, 0x61, - 0xE1, 0xC0, 0x30, 0x60, 0x30, 0x1C, 0x30, 0x0C, 0x0E, 0x0C, 0x03, 0x03, - 0x03, 0x01, 0x81, 0x80, 0xE1, 0xE0, 0xC0, 0x1F, 0xF0, 0x70, 0x07, 0xF8, - 0x18, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x07, 0xF8, 0x00, 0xFF, 0xC0, - 0x1E, 0x3C, 0x03, 0xC1, 0xC0, 0x38, 0x1C, 0x03, 0x81, 0xC0, 0x38, 0x38, - 0x03, 0xC7, 0x00, 0x1D, 0xE0, 0x01, 0xFC, 0x00, 0x1F, 0x00, 0x07, 0xF0, - 0x01, 0xF7, 0x87, 0x3C, 0x3C, 0xE7, 0x81, 0xCE, 0x70, 0x1F, 0xCE, 0x00, - 0xFC, 0xE0, 0x07, 0x8E, 0x00, 0x78, 0xF0, 0x1F, 0x8F, 0x87, 0xFC, 0x7F, - 0xF9, 0xC3, 0xFE, 0x1E, 0x1F, 0x80, 0xE0, 0x77, 0xFE, 0xEE, 0xCC, 0xC0, - 0x00, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x80, 0x30, 0x06, 0x00, 0xE0, - 0x0C, 0x01, 0xC0, 0x18, 0x03, 0x80, 0x38, 0x07, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, - 0xE0, 0x0E, 0x00, 0xE0, 0x06, 0x00, 0x70, 0x07, 0x00, 0x30, 0x03, 0x00, - 0x18, 0x00, 0x01, 0x80, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0xE0, 0x06, 0x00, - 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x07, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xC0, 0x1C, 0x03, - 0x80, 0x38, 0x03, 0x00, 0x70, 0x06, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x30, - 0x06, 0x00, 0xC0, 0x00, 0x06, 0x01, 0x84, 0x47, 0xF7, 0xFF, 0xCF, 0xC1, - 0xE0, 0xD8, 0x67, 0x18, 0xC0, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x0F, 0x00, - 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x70, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x0E, 0x00, 0x3B, 0xDC, 0x21, 0x18, 0x98, 0xFF, 0xFF, - 0xFF, 0xE0, 0x7F, 0xFE, 0x00, 0x06, 0x00, 0x18, 0x00, 0x30, 0x00, 0xC0, - 0x01, 0x80, 0x06, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x60, 0x01, 0x80, 0x03, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x60, 0x00, 0xC0, 0x03, 0x00, 0x06, 0x00, - 0x18, 0x00, 0x20, 0x00, 0xC0, 0x03, 0x00, 0x06, 0x00, 0x18, 0x00, 0x30, - 0x00, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x7F, 0xC0, 0x7F, 0xF8, - 0x3E, 0x1E, 0x0F, 0x03, 0xC7, 0x80, 0x71, 0xC0, 0x1C, 0xE0, 0x07, 0x38, - 0x01, 0xDE, 0x00, 0x77, 0x00, 0x1D, 0xC0, 0x0F, 0x70, 0x03, 0xFC, 0x00, - 0xEE, 0x00, 0x3B, 0x80, 0x0E, 0xE0, 0x07, 0xB8, 0x01, 0xCE, 0x00, 0xF3, - 0x80, 0x38, 0xF0, 0x1E, 0x1E, 0x1F, 0x07, 0xFF, 0x80, 0xFF, 0xC0, 0x0F, - 0x80, 0x00, 0x00, 0xC0, 0x70, 0x3C, 0x3E, 0xFF, 0xBF, 0xEF, 0xF8, 0x1E, - 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x07, - 0x81, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0xE0, 0x38, 0x00, 0x00, 0x3F, - 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xE0, 0x7C, 0x1E, 0x07, 0x80, 0xF0, 0xF0, - 0x07, 0x0E, 0x00, 0x70, 0xE0, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, - 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x03, 0xF0, 0x00, 0xFC, 0x00, - 0x1F, 0x00, 0x07, 0xC0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0x80, 0x00, - 0x70, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF, 0xFF, - 0x00, 0x00, 0x7E, 0x00, 0x3F, 0xF0, 0x0F, 0xFF, 0x03, 0xC1, 0xF0, 0x70, - 0x0E, 0x1C, 0x01, 0xC3, 0x80, 0x38, 0xE0, 0x07, 0x00, 0x01, 0xC0, 0x00, - 0xF0, 0x03, 0xFC, 0x00, 0x7F, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x9C, 0x00, 0x73, 0x80, 0x1E, 0x70, 0x03, - 0x8F, 0x00, 0xF1, 0xF0, 0x7C, 0x1F, 0xFF, 0x01, 0xFF, 0xC0, 0x0F, 0xC0, - 0x00, 0x00, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x1F, - 0x80, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xDC, 0x01, 0xE7, 0x00, 0x71, 0xC0, - 0x38, 0xF0, 0x1C, 0x38, 0x0E, 0x0E, 0x07, 0x03, 0x83, 0x80, 0xE1, 0xC0, - 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x70, 0x00, 0x38, - 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x01, 0xFF, - 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xE0, 0x78, 0x00, 0x07, 0x00, 0x00, 0x70, - 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0xFC, 0x01, 0xFF, 0xF0, 0x1F, - 0xFF, 0x83, 0xE0, 0x78, 0x3C, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, - 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x18, 0x00, 0x03, 0x8E, 0x00, 0x78, - 0xE0, 0x0F, 0x0F, 0x81, 0xE0, 0x7F, 0xFC, 0x03, 0xFF, 0x80, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x3F, 0xF0, 0x0F, 0xFF, 0x03, 0xE1, 0xF0, 0xF0, - 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x01, 0xE0, 0x00, 0x38, 0x00, 0x07, 0x1F, - 0x01, 0xCF, 0xF8, 0x3B, 0xFF, 0x87, 0xE0, 0xF8, 0xF0, 0x0F, 0x3C, 0x00, - 0xE7, 0x80, 0x1C, 0xE0, 0x03, 0x9C, 0x00, 0x73, 0x80, 0x1C, 0x70, 0x03, - 0x8F, 0x00, 0xE0, 0xF0, 0x78, 0x1F, 0xFF, 0x01, 0xFF, 0x80, 0x0F, 0xC0, - 0x00, 0x3F, 0xFF, 0xCF, 0xFF, 0xF7, 0xFF, 0xFC, 0x00, 0x0E, 0x00, 0x07, - 0x00, 0x03, 0x80, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, - 0x0E, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x1C, - 0x00, 0x0E, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x38, 0x00, - 0x1E, 0x00, 0x07, 0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x3F, 0xF0, 0x1F, 0xFF, 0x07, 0xC1, 0xF0, 0xE0, 0x0E, 0x38, 0x01, - 0xC7, 0x00, 0x38, 0xE0, 0x0E, 0x1C, 0x01, 0xC3, 0xC0, 0xF0, 0x3F, 0xFC, - 0x03, 0xFE, 0x01, 0xFF, 0xF0, 0x7C, 0x1E, 0x1E, 0x01, 0xE3, 0x80, 0x1C, - 0xE0, 0x03, 0x9C, 0x00, 0x73, 0x80, 0x0E, 0x70, 0x03, 0x8F, 0x00, 0xF1, - 0xF0, 0x7C, 0x1F, 0xFF, 0x01, 0xFF, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x3F, 0xF0, 0x1F, 0xFF, 0x07, 0xC1, 0xE0, 0xE0, 0x1E, 0x38, 0x01, - 0xC7, 0x00, 0x39, 0xC0, 0x07, 0x38, 0x00, 0xE7, 0x00, 0x3C, 0xE0, 0x07, - 0x9E, 0x01, 0xE3, 0xE0, 0xFC, 0x3F, 0xFB, 0x83, 0xFE, 0xF0, 0x3F, 0x1C, - 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x1C, 0x70, 0x07, 0x8E, 0x01, 0xE1, - 0xE0, 0xF8, 0x1F, 0xFE, 0x01, 0xFF, 0x80, 0x0F, 0xC0, 0x00, 0x0E, 0x3C, - 0x78, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0xF1, 0xE3, 0x80, 0x07, 0x0F, 0x0F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x78, 0x70, 0x10, 0x10, - 0x30, 0x20, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x1C, 0x00, 0x1F, 0x80, 0x1F, - 0xC0, 0x0F, 0xC0, 0x0F, 0xE0, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0xF0, 0x00, - 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, - 0x00, 0x0F, 0xC0, 0x00, 0x78, 0x00, 0x01, 0x00, 0x7F, 0xFF, 0xDF, 0xFF, - 0xF7, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFB, - 0xFF, 0xFE, 0xFF, 0xFF, 0x80, 0x10, 0x00, 0x03, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, - 0x00, 0x01, 0xE0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x7E, 0x00, - 0x7F, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xF8, - 0x0F, 0xFC, 0x1F, 0xFE, 0x3C, 0x1F, 0x78, 0x07, 0x70, 0x07, 0xE0, 0x07, - 0xE0, 0x07, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, - 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x0E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, - 0x3C, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, - 0xFF, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x0F, 0x80, 0x03, 0xE0, 0x0F, - 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x3C, 0x0F, 0x01, 0xF0, 0x0F, 0x0F, - 0x03, 0xFD, 0xC7, 0x8F, 0x03, 0xFE, 0xE1, 0xC7, 0x03, 0xC3, 0x60, 0xE7, - 0x03, 0xC0, 0xF0, 0x77, 0x83, 0xC0, 0x70, 0x3B, 0x83, 0xC0, 0x78, 0x1D, - 0xC1, 0xC0, 0x38, 0x1F, 0xC1, 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x1C, 0x0F, - 0x70, 0x70, 0x0E, 0x07, 0x38, 0x38, 0x0E, 0x07, 0x9C, 0x1C, 0x0F, 0x07, - 0x8E, 0x0F, 0x0F, 0x8F, 0x87, 0x03, 0xFD, 0xFF, 0x83, 0xC1, 0xFC, 0xFF, - 0x80, 0xE0, 0x7C, 0x3F, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x07, 0x00, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x01, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFF, - 0x00, 0x01, 0xDE, 0x00, 0x07, 0x9C, 0x00, 0x0E, 0x38, 0x00, 0x3C, 0x70, - 0x00, 0x70, 0xF0, 0x01, 0xC1, 0xE0, 0x07, 0x83, 0xC0, 0x0E, 0x07, 0x80, - 0x38, 0x07, 0x00, 0x70, 0x0E, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFC, 0x0F, - 0xFF, 0xF8, 0x1C, 0x00, 0xF0, 0x70, 0x01, 0xE1, 0xE0, 0x01, 0xC3, 0x80, - 0x03, 0x8F, 0x00, 0x07, 0x1C, 0x00, 0x0E, 0x78, 0x00, 0x1E, 0xE0, 0x00, - 0x3C, 0x07, 0xFF, 0xC0, 0x3F, 0xFF, 0x81, 0xFF, 0xFC, 0x0E, 0x00, 0xF0, - 0xF0, 0x03, 0x87, 0x00, 0x1C, 0x38, 0x00, 0xE1, 0xC0, 0x07, 0x0E, 0x00, - 0x70, 0xF0, 0x03, 0x87, 0x00, 0x78, 0x3F, 0xFF, 0x81, 0xFF, 0xF8, 0x0F, - 0xFF, 0xF0, 0xE0, 0x03, 0xC7, 0x00, 0x0E, 0x38, 0x00, 0x71, 0xC0, 0x03, - 0x9E, 0x00, 0x1C, 0xE0, 0x00, 0xE7, 0x00, 0x0E, 0x38, 0x00, 0xF1, 0xC0, - 0x0F, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x1F, - 0x80, 0x03, 0xFF, 0x80, 0x1F, 0xFF, 0x01, 0xF8, 0x3E, 0x07, 0x80, 0x38, - 0x38, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x38, 0x00, 0x01, 0xE0, - 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, - 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x7B, 0x80, 0x01, 0xCE, - 0x00, 0x0F, 0x3C, 0x00, 0x38, 0x70, 0x01, 0xE1, 0xE0, 0x0F, 0x07, 0xC0, - 0xF8, 0x0F, 0xFF, 0xC0, 0x1F, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xFF, - 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x38, 0x03, 0xE0, 0xF0, 0x03, - 0xC1, 0xC0, 0x03, 0x83, 0x80, 0x03, 0x87, 0x00, 0x07, 0x1E, 0x00, 0x0E, - 0x3C, 0x00, 0x1C, 0x70, 0x00, 0x38, 0xE0, 0x00, 0x71, 0xC0, 0x00, 0xE7, - 0x80, 0x03, 0x8F, 0x00, 0x07, 0x1C, 0x00, 0x0E, 0x38, 0x00, 0x3C, 0x70, - 0x00, 0x71, 0xE0, 0x01, 0xE3, 0x80, 0x03, 0x87, 0x00, 0x0E, 0x0E, 0x00, - 0x3C, 0x1C, 0x01, 0xF0, 0x7F, 0xFF, 0xC0, 0xFF, 0xFE, 0x01, 0xFF, 0xF0, - 0x00, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x38, 0x00, - 0x00, 0xF0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0x81, - 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x70, 0x00, 0x01, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, - 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF, - 0xC1, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, - 0xC1, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, - 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xC0, 0x00, 0x07, 0xFF, - 0xF0, 0x1F, 0xFF, 0xC0, 0xFF, 0xFF, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, - 0x38, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1C, 0x00, 0x00, 0x70, - 0x00, 0x01, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xF8, 0x01, 0xFF, - 0xFC, 0x03, 0xE0, 0x3E, 0x07, 0x80, 0x0E, 0x0F, 0x00, 0x0F, 0x1E, 0x00, - 0x07, 0x1C, 0x00, 0x07, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x70, 0x00, 0x00, 0xF0, 0x07, 0xFE, 0xE0, 0x07, 0xFE, 0xE0, 0x07, - 0xFE, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, 0x00, - 0x1C, 0xF0, 0x00, 0x3C, 0x70, 0x00, 0x7C, 0x78, 0x00, 0xFC, 0x3E, 0x03, - 0xDC, 0x1F, 0xFF, 0x98, 0x0F, 0xFE, 0x18, 0x03, 0xF8, 0x18, 0x07, 0x00, - 0x07, 0x83, 0x80, 0x03, 0xC1, 0xC0, 0x01, 0xC0, 0xE0, 0x00, 0xE0, 0xF0, - 0x00, 0x70, 0x70, 0x00, 0x78, 0x38, 0x00, 0x3C, 0x1C, 0x00, 0x1C, 0x1E, - 0x00, 0x0E, 0x0F, 0x00, 0x07, 0x07, 0x00, 0x07, 0x83, 0xFF, 0xFF, 0x81, - 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xE0, 0xE0, 0x00, 0x70, 0x70, 0x00, 0x78, - 0x38, 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x1E, 0x00, 0x0E, 0x0E, 0x00, 0x0F, - 0x07, 0x00, 0x07, 0x83, 0x80, 0x03, 0x81, 0xC0, 0x01, 0xC1, 0xE0, 0x00, - 0xE0, 0xE0, 0x00, 0xF0, 0x70, 0x00, 0x78, 0x00, 0x07, 0x0F, 0x0F, 0x0E, - 0x0E, 0x0E, 0x0E, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x3C, 0x3C, 0x38, 0x38, - 0x38, 0x38, 0x78, 0x70, 0x70, 0x70, 0x70, 0xF0, 0xF0, 0xE0, 0x00, 0x01, - 0xC0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, - 0x1C, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x1E, - 0x1C, 0x07, 0x0E, 0x01, 0xC3, 0x80, 0x70, 0xE0, 0x3C, 0x38, 0x0E, 0x0F, - 0x0F, 0x81, 0xFF, 0xC0, 0x7F, 0xE0, 0x07, 0xE0, 0x00, 0x07, 0x00, 0x07, - 0x83, 0x80, 0x07, 0x81, 0xC0, 0x0F, 0x00, 0xE0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0x70, 0x0F, 0x00, 0x38, 0x0F, 0x00, 0x1C, 0x1F, 0x00, 0x1E, 0x1E, - 0x00, 0x0F, 0x1E, 0x00, 0x07, 0x1E, 0x00, 0x03, 0x9F, 0x00, 0x01, 0xDF, - 0xC0, 0x01, 0xFC, 0xE0, 0x00, 0xFC, 0x78, 0x00, 0x7C, 0x1C, 0x00, 0x3C, - 0x0F, 0x00, 0x1C, 0x07, 0x80, 0x1E, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, - 0x00, 0x38, 0x03, 0x80, 0x1E, 0x01, 0xC0, 0x07, 0x01, 0xE0, 0x03, 0xC0, - 0xE0, 0x00, 0xE0, 0x70, 0x00, 0x78, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, - 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x78, 0x00, 0x70, 0x00, 0x70, - 0x00, 0x70, 0x00, 0x70, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, - 0xC0, 0x00, 0xF8, 0x3E, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x7E, 0x0F, 0x80, - 0x03, 0xF0, 0xFC, 0x00, 0x3F, 0x07, 0x70, 0x01, 0xF8, 0x3B, 0x80, 0x1D, - 0xC1, 0xDC, 0x00, 0xEE, 0x0E, 0xE0, 0x0E, 0xE0, 0xE7, 0x00, 0x77, 0x07, - 0x38, 0x07, 0x38, 0x39, 0xC0, 0x31, 0xC1, 0xCE, 0x03, 0x9E, 0x1E, 0x38, - 0x38, 0xE0, 0xE1, 0xC1, 0xC7, 0x07, 0x0E, 0x1C, 0x38, 0x38, 0x70, 0xE1, - 0xC1, 0xC3, 0x8E, 0x1E, 0x1E, 0x1C, 0x70, 0xE0, 0xE0, 0xE7, 0x07, 0x07, - 0x07, 0x38, 0x38, 0x38, 0x1F, 0x81, 0xC1, 0xC0, 0xF8, 0x1E, 0x1C, 0x07, - 0xC0, 0xE0, 0xE0, 0x3C, 0x07, 0x07, 0x01, 0xE0, 0x38, 0x00, 0x07, 0x80, - 0x03, 0x83, 0xE0, 0x01, 0xC1, 0xF0, 0x00, 0xE0, 0xF8, 0x00, 0xE0, 0xFE, - 0x00, 0x70, 0x7F, 0x00, 0x38, 0x3B, 0xC0, 0x1C, 0x1D, 0xE0, 0x1E, 0x0E, - 0x70, 0x0E, 0x0E, 0x3C, 0x07, 0x07, 0x0E, 0x03, 0x83, 0x87, 0x81, 0xC1, - 0xC3, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0x78, 0x70, 0x70, 0x1C, 0x38, - 0x38, 0x0F, 0x1C, 0x1C, 0x07, 0x9E, 0x1E, 0x01, 0xCE, 0x0E, 0x00, 0xF7, - 0x07, 0x00, 0x3B, 0x83, 0x80, 0x1F, 0xC1, 0xC0, 0x07, 0xC1, 0xC0, 0x03, - 0xE0, 0xE0, 0x01, 0xF0, 0x70, 0x00, 0x78, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x03, 0xE0, 0x7C, 0x07, 0x80, 0x1E, 0x0F, - 0x00, 0x0E, 0x1C, 0x00, 0x0F, 0x3C, 0x00, 0x07, 0x38, 0x00, 0x07, 0x70, - 0x00, 0x07, 0x70, 0x00, 0x07, 0x70, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xE0, - 0x00, 0x0F, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x0E, 0xE0, - 0x00, 0x1C, 0xE0, 0x00, 0x1C, 0xF0, 0x00, 0x38, 0x70, 0x00, 0x78, 0x78, - 0x00, 0xF0, 0x3E, 0x07, 0xE0, 0x1F, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x03, - 0xF8, 0x00, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0xC0, 0x7F, 0xFF, 0x81, 0xC0, - 0x1F, 0x0F, 0x00, 0x3C, 0x38, 0x00, 0x70, 0xE0, 0x01, 0xC3, 0x80, 0x07, - 0x1E, 0x00, 0x1C, 0x78, 0x00, 0xE1, 0xC0, 0x07, 0x87, 0x00, 0x3C, 0x1F, - 0xFF, 0xE0, 0xFF, 0xFF, 0x03, 0xFF, 0xF0, 0x0E, 0x00, 0x00, 0x38, 0x00, - 0x00, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, - 0xC0, 0x00, 0x07, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFF, 0x00, - 0x7C, 0x07, 0xC0, 0x78, 0x00, 0xF0, 0x78, 0x00, 0x38, 0x78, 0x00, 0x1E, - 0x78, 0x00, 0x07, 0x38, 0x00, 0x03, 0xBC, 0x00, 0x01, 0xDC, 0x00, 0x00, - 0xEE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x1D, 0xC0, 0x00, 0x0E, 0xE0, 0x00, 0x0F, 0x70, 0x00, 0x07, 0x38, 0x00, - 0x87, 0x9E, 0x00, 0xE7, 0x87, 0x00, 0x7F, 0x83, 0xC0, 0x1F, 0x80, 0xF8, - 0x1F, 0x80, 0x3F, 0xFF, 0xE0, 0x0F, 0xFF, 0x78, 0x01, 0xFE, 0x1E, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0xF8, - 0x1F, 0xFF, 0xF0, 0x38, 0x00, 0xF0, 0xF0, 0x00, 0xE1, 0xC0, 0x01, 0xC3, - 0x80, 0x03, 0x87, 0x00, 0x07, 0x1E, 0x00, 0x0E, 0x3C, 0x00, 0x38, 0x70, - 0x00, 0xF0, 0xE0, 0x03, 0xC1, 0xFF, 0xFE, 0x07, 0xFF, 0xF8, 0x0F, 0xFF, - 0xF8, 0x1C, 0x00, 0x78, 0x38, 0x00, 0x70, 0x70, 0x00, 0xE1, 0xE0, 0x01, - 0xC3, 0x80, 0x03, 0x87, 0x00, 0x06, 0x0E, 0x00, 0x1C, 0x1C, 0x00, 0x38, - 0x78, 0x00, 0x70, 0xE0, 0x00, 0xE1, 0xC0, 0x01, 0xE0, 0x00, 0x3F, 0xC0, - 0x07, 0xFF, 0xC0, 0x3F, 0xFF, 0x81, 0xF0, 0x1E, 0x0F, 0x00, 0x3C, 0x38, - 0x00, 0x71, 0xC0, 0x01, 0xC7, 0x00, 0x07, 0x1C, 0x00, 0x00, 0x78, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x07, 0xFF, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xF3, 0x80, 0x01, 0xCE, 0x00, - 0x07, 0x38, 0x00, 0x18, 0xE0, 0x00, 0xE3, 0xC0, 0x07, 0x07, 0x80, 0x7C, - 0x1F, 0xFF, 0xE0, 0x3F, 0xFE, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, - 0x01, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0xC0, - 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x78, - 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F, - 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, - 0xE0, 0x00, 0x0E, 0x00, 0x0F, 0x0E, 0x00, 0x0F, 0x0E, 0x00, 0x0E, 0x0E, - 0x00, 0x0E, 0x1E, 0x00, 0x0E, 0x1C, 0x00, 0x1E, 0x1C, 0x00, 0x1C, 0x1C, - 0x00, 0x1C, 0x3C, 0x00, 0x1C, 0x3C, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x38, - 0x00, 0x38, 0x38, 0x00, 0x38, 0x78, 0x00, 0x38, 0x70, 0x00, 0x78, 0x70, - 0x00, 0x78, 0x70, 0x00, 0x70, 0xF0, 0x00, 0x70, 0xF0, 0x00, 0x70, 0xE0, - 0x00, 0xF0, 0xE0, 0x00, 0xE0, 0xF0, 0x03, 0xE0, 0x78, 0x0F, 0xC0, 0x7F, - 0xFF, 0x80, 0x1F, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0xE0, 0x00, 0x3F, 0x80, - 0x03, 0xFC, 0x00, 0x1D, 0xE0, 0x01, 0xE7, 0x00, 0x0E, 0x38, 0x00, 0xE1, - 0xC0, 0x07, 0x0E, 0x00, 0x70, 0x70, 0x07, 0x83, 0xC0, 0x38, 0x1E, 0x03, - 0xC0, 0xF0, 0x1C, 0x03, 0x81, 0xE0, 0x1C, 0x0E, 0x00, 0xE0, 0xF0, 0x07, - 0x07, 0x00, 0x3C, 0x70, 0x01, 0xE3, 0x80, 0x0F, 0x38, 0x00, 0x39, 0xC0, - 0x01, 0xDC, 0x00, 0x0E, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0xE0, 0x07, 0x80, - 0x1E, 0xE0, 0x07, 0xC0, 0x1E, 0xE0, 0x0F, 0xC0, 0x1C, 0xE0, 0x0F, 0xC0, - 0x3C, 0xE0, 0x1F, 0xC0, 0x38, 0xE0, 0x1D, 0xC0, 0x78, 0xE0, 0x3D, 0xC0, - 0x70, 0xE0, 0x39, 0xC0, 0xF0, 0xE0, 0x79, 0xC0, 0xE0, 0xE0, 0x71, 0xC0, - 0xE0, 0xE0, 0xF1, 0xC1, 0xC0, 0xE0, 0xE1, 0xC1, 0xC0, 0xE1, 0xE1, 0xC3, - 0xC0, 0x61, 0xC1, 0xC3, 0x80, 0x63, 0xC1, 0xC7, 0x80, 0x63, 0x80, 0xE7, - 0x00, 0x67, 0x80, 0xEF, 0x00, 0x67, 0x00, 0xEE, 0x00, 0x7F, 0x00, 0xEE, - 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x7C, 0x00, 0xF8, - 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x78, 0x00, 0xF8, 0x00, 0x78, 0x00, 0xF0, - 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x78, 0x00, 0xF0, 0x07, 0x80, 0x1C, 0x00, - 0xF0, 0x07, 0x80, 0x0F, 0x01, 0xE0, 0x01, 0xE0, 0x78, 0x00, 0x1C, 0x1E, - 0x00, 0x03, 0xC7, 0x80, 0x00, 0x39, 0xE0, 0x00, 0x07, 0xB8, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xF3, 0x80, 0x00, 0x3C, - 0x78, 0x00, 0x0F, 0x0F, 0x00, 0x03, 0xC0, 0xF0, 0x00, 0x70, 0x1E, 0x00, - 0x1E, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x03, 0xC0, 0x78, 0x00, - 0x78, 0x1E, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x3C, 0xE0, 0x00, 0x71, 0xE0, - 0x01, 0xE3, 0xC0, 0x07, 0x83, 0xC0, 0x1E, 0x07, 0x80, 0x78, 0x07, 0x00, - 0xE0, 0x0F, 0x03, 0xC0, 0x1E, 0x0F, 0x00, 0x1C, 0x3C, 0x00, 0x3C, 0xF0, - 0x00, 0x39, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0xF8, 0x00, - 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, - 0x1C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xC0, 0x00, 0x03, - 0x80, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x81, - 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x00, 0x01, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, - 0x00, 0x38, 0x03, 0xC0, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x03, 0xC0, - 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, - 0x00, 0x38, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, - 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x00, - 0xCC, 0xCC, 0xCC, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x62, 0x33, 0x33, - 0x33, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x00, 0x70, 0x07, 0x00, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0xE0, - 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, - 0xC0, 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x1E, 0x00, 0xE0, - 0x07, 0x03, 0xF8, 0x1F, 0xC0, 0xFC, 0x00, 0x00, 0xF0, 0x03, 0xC0, 0x1F, - 0x00, 0x7C, 0x03, 0xB8, 0x1C, 0xE0, 0x63, 0x83, 0x8E, 0x1C, 0x38, 0x60, - 0x73, 0x81, 0xCC, 0x07, 0x70, 0x1F, 0x80, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0xF1, 0xC3, 0x86, 0x0C, 0x00, 0xFE, 0x01, 0xFF, 0xE0, 0xFF, - 0xFC, 0x3C, 0x0F, 0x1C, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x0E, - 0x00, 0x1F, 0x83, 0xFF, 0xE3, 0xFE, 0x39, 0xF0, 0x1E, 0xF0, 0x07, 0x38, - 0x01, 0xCE, 0x00, 0xF3, 0xC0, 0xFC, 0xFF, 0xF7, 0x9F, 0xF1, 0xE1, 0xF0, - 0x38, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0xF0, - 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x71, 0xF0, 0x0E, 0xFF, 0x83, 0xFF, - 0xF8, 0x7F, 0x0F, 0x0F, 0x80, 0xF1, 0xE0, 0x0E, 0x38, 0x01, 0xCF, 0x00, - 0x39, 0xE0, 0x07, 0x38, 0x00, 0xE7, 0x00, 0x38, 0xE0, 0x07, 0x3C, 0x00, - 0xE7, 0x80, 0x38, 0xF8, 0x0F, 0x1F, 0x87, 0xC3, 0xFF, 0xF0, 0xE7, 0xFC, - 0x1C, 0x7E, 0x00, 0x01, 0xF8, 0x07, 0xFC, 0x0F, 0xFE, 0x1E, 0x0F, 0x3C, - 0x07, 0x78, 0x07, 0x70, 0x07, 0x70, 0x00, 0xF0, 0x00, 0xE0, 0x00, 0xE0, - 0x00, 0xE0, 0x00, 0xE0, 0x0E, 0xE0, 0x1C, 0xF0, 0x3C, 0x78, 0x78, 0x7F, - 0xF0, 0x3F, 0xE0, 0x0F, 0x80, 0x00, 0x00, 0x70, 0x00, 0x0F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x01, 0xE0, 0x1F, - 0x1C, 0x07, 0xFD, 0xC0, 0xFF, 0xDC, 0x1E, 0x0F, 0xC3, 0xC0, 0x7C, 0x38, - 0x07, 0x87, 0x00, 0x38, 0x70, 0x03, 0x8F, 0x00, 0x38, 0xE0, 0x07, 0x8E, - 0x00, 0x70, 0xE0, 0x07, 0x0E, 0x00, 0xF0, 0xE0, 0x0F, 0x0F, 0x01, 0xF0, - 0x78, 0x7E, 0x07, 0xFF, 0xE0, 0x3F, 0xEE, 0x01, 0xF8, 0xE0, 0x01, 0xF8, - 0x03, 0xFF, 0x03, 0xFF, 0xC3, 0xC1, 0xF3, 0xC0, 0x79, 0xC0, 0x1D, 0xC0, - 0x0E, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x0E, - 0x00, 0x07, 0x00, 0x73, 0xC0, 0x78, 0xF0, 0x78, 0x7F, 0xF8, 0x1F, 0xF8, - 0x03, 0xF0, 0x00, 0x01, 0xE0, 0x7C, 0x1F, 0x83, 0x80, 0x70, 0x1C, 0x03, - 0x83, 0xFC, 0x7F, 0x8F, 0xF0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, - 0xE0, 0x1C, 0x00, 0x00, 0xFC, 0x60, 0x7F, 0xCC, 0x1F, 0xFF, 0x87, 0xC3, - 0xF1, 0xE0, 0x3E, 0x38, 0x03, 0x8E, 0x00, 0x71, 0xC0, 0x0E, 0x38, 0x01, - 0xCE, 0x00, 0x79, 0xC0, 0x0E, 0x38, 0x01, 0xC7, 0x00, 0x78, 0xE0, 0x0F, - 0x1E, 0x03, 0xC1, 0xE1, 0xF8, 0x3F, 0xFF, 0x03, 0xFE, 0xE0, 0x1F, 0x1C, - 0x00, 0x03, 0x00, 0x00, 0xE0, 0x00, 0x18, 0x38, 0x07, 0x07, 0x83, 0xC0, - 0x7F, 0xF8, 0x0F, 0xFC, 0x00, 0x7E, 0x00, 0x00, 0x07, 0x00, 0x01, 0xC0, - 0x00, 0x70, 0x00, 0x1C, 0x00, 0x0F, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, - 0x38, 0xFC, 0x0E, 0xFF, 0x87, 0xFF, 0xF1, 0xF8, 0x3C, 0x7C, 0x07, 0x1E, - 0x01, 0xC7, 0x00, 0x73, 0xC0, 0x1C, 0xE0, 0x0F, 0x38, 0x03, 0x8E, 0x00, - 0xE3, 0x80, 0x39, 0xE0, 0x0E, 0x70, 0x07, 0x9C, 0x01, 0xC7, 0x00, 0x71, - 0xC0, 0x1C, 0xE0, 0x07, 0x38, 0x03, 0x80, 0x07, 0x07, 0x0F, 0x0E, 0x00, - 0x00, 0x00, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x78, 0x70, 0x70, 0x70, 0x70, 0xF0, 0xE0, 0xE0, 0x00, 0x3C, 0x00, - 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x00, - 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, - 0x38, 0x00, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x0F, 0x00, - 0x38, 0x00, 0xE0, 0x1F, 0x80, 0x7C, 0x03, 0xE0, 0x00, 0x07, 0x00, 0x00, - 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x1C, 0x00, 0x03, - 0x80, 0x00, 0x70, 0x1E, 0x0E, 0x07, 0x83, 0xC1, 0xE0, 0x70, 0x70, 0x0E, - 0x1C, 0x01, 0xCF, 0x00, 0x3B, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x80, 0x3E, - 0x70, 0x07, 0x8E, 0x00, 0xE0, 0xE0, 0x38, 0x1C, 0x07, 0x03, 0xC0, 0xE0, - 0x38, 0x1C, 0x07, 0x03, 0x80, 0xF0, 0xE0, 0x0E, 0x1C, 0x01, 0xE0, 0x07, - 0x07, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x78, 0x70, 0x70, 0x70, 0x70, 0xF0, 0xE0, - 0xE0, 0x1E, 0x7C, 0x0F, 0x83, 0xBF, 0xE7, 0xF8, 0x7F, 0xFD, 0xFF, 0x8F, - 0xC3, 0xF0, 0xF1, 0xE0, 0x3C, 0x0E, 0x38, 0x07, 0x01, 0xCF, 0x01, 0xE0, - 0x39, 0xC0, 0x38, 0x07, 0x38, 0x07, 0x00, 0xE7, 0x00, 0xE0, 0x1C, 0xE0, - 0x1C, 0x07, 0x3C, 0x07, 0x00, 0xE7, 0x00, 0xE0, 0x1C, 0xE0, 0x1C, 0x03, - 0x9C, 0x03, 0x80, 0xF3, 0x80, 0x70, 0x1C, 0x70, 0x1C, 0x03, 0x9C, 0x03, - 0x80, 0x73, 0x80, 0x70, 0x0E, 0x00, 0x1E, 0x3E, 0x07, 0x7F, 0xE1, 0xFF, - 0xF8, 0x7E, 0x0F, 0x1F, 0x01, 0xC7, 0x80, 0x73, 0xC0, 0x1C, 0xE0, 0x07, - 0x38, 0x03, 0xCE, 0x00, 0xE3, 0x80, 0x39, 0xE0, 0x0E, 0x70, 0x03, 0x9C, - 0x01, 0xC7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x38, 0x01, 0xCE, 0x00, - 0xE0, 0x01, 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0xC3, 0xE1, 0xE3, 0xC0, 0x79, - 0xC0, 0x1D, 0xC0, 0x0E, 0xE0, 0x07, 0x70, 0x03, 0xF0, 0x01, 0xF8, 0x01, - 0xDC, 0x00, 0xEE, 0x00, 0x77, 0x00, 0x73, 0xC0, 0x78, 0xF0, 0xF8, 0x7F, - 0xF8, 0x1F, 0xF8, 0x03, 0xF0, 0x00, 0x03, 0x8F, 0x80, 0x1D, 0xFF, 0x01, - 0xFF, 0xFC, 0x0F, 0xC1, 0xE0, 0x7C, 0x07, 0x83, 0xC0, 0x1C, 0x1C, 0x00, - 0xE1, 0xE0, 0x07, 0x0E, 0x00, 0x38, 0x70, 0x01, 0xC3, 0x80, 0x1E, 0x1C, - 0x00, 0xE1, 0xE0, 0x07, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x83, 0xF0, 0xF8, - 0x3F, 0xFF, 0x81, 0xDF, 0xF8, 0x0E, 0x3F, 0x00, 0x70, 0x00, 0x03, 0x80, - 0x00, 0x3C, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0xF8, 0xF0, 0x7F, 0xEE, 0x0F, 0xFF, 0xE1, 0xF0, - 0xFE, 0x3C, 0x07, 0xE3, 0x80, 0x3E, 0x70, 0x03, 0xC7, 0x00, 0x3C, 0x70, - 0x03, 0xCE, 0x00, 0x3C, 0xE0, 0x07, 0x8E, 0x00, 0x78, 0xE0, 0x07, 0x8E, - 0x00, 0xF8, 0xF0, 0x1F, 0x87, 0x87, 0xF0, 0x7F, 0xF7, 0x03, 0xFE, 0x70, - 0x0F, 0x8F, 0x00, 0x00, 0xF0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x01, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x04, 0x00, 0x1E, - 0x78, 0xE7, 0xC7, 0x7C, 0x3F, 0x01, 0xF0, 0x0F, 0x00, 0xF0, 0x07, 0x00, - 0x38, 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, - 0x00, 0x70, 0x07, 0x00, 0x38, 0x00, 0x01, 0xF8, 0x07, 0xFE, 0x0F, 0xFF, - 0x1E, 0x0F, 0x3C, 0x07, 0x38, 0x07, 0x38, 0x00, 0x3C, 0x00, 0x3F, 0x80, - 0x1F, 0xF8, 0x07, 0xFC, 0x00, 0x7E, 0x00, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x3C, 0x7F, 0xF8, 0x7F, 0xF0, 0x1F, 0xC0, 0x0E, 0x03, 0x80, 0xE0, - 0x38, 0x7F, 0xDF, 0xEF, 0xF8, 0x70, 0x1C, 0x0E, 0x03, 0x80, 0xE0, 0x38, - 0x1E, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x0F, 0x03, 0x80, 0xFC, 0x3F, 0x07, - 0x80, 0x1C, 0x03, 0xC7, 0x00, 0xE1, 0xC0, 0x38, 0xF0, 0x0E, 0x38, 0x03, - 0x8E, 0x00, 0xE3, 0x80, 0x70, 0xE0, 0x1C, 0x78, 0x07, 0x1C, 0x01, 0xC7, - 0x00, 0x71, 0xC0, 0x3C, 0x70, 0x0E, 0x38, 0x07, 0x8E, 0x03, 0xE3, 0x81, - 0xF8, 0xFF, 0xFE, 0x1F, 0xFF, 0x03, 0xF1, 0xC0, 0xE0, 0x07, 0xE0, 0x0F, - 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x1C, 0x70, 0x38, 0x70, 0x38, 0x70, 0x70, - 0x70, 0xF0, 0x70, 0xE0, 0x71, 0xC0, 0x71, 0xC0, 0x33, 0x80, 0x3B, 0x80, - 0x3F, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0xE0, 0x1C, - 0x07, 0xE0, 0x3C, 0x0E, 0xE0, 0x3C, 0x0E, 0xE0, 0x7C, 0x1C, 0xE0, 0x7C, - 0x1C, 0xE0, 0xEC, 0x38, 0xE0, 0xEC, 0x38, 0x61, 0xCC, 0x70, 0x61, 0xCC, - 0x70, 0x63, 0x8C, 0xE0, 0x73, 0x8C, 0xE0, 0x77, 0x0C, 0xC0, 0x77, 0x0D, - 0xC0, 0x7E, 0x0D, 0x80, 0x7E, 0x0F, 0x80, 0x7C, 0x0F, 0x80, 0x7C, 0x0F, - 0x00, 0x78, 0x0F, 0x00, 0x78, 0x0E, 0x00, 0x0E, 0x00, 0xE1, 0xE0, 0x38, - 0x1C, 0x0E, 0x03, 0xC3, 0x80, 0x38, 0xE0, 0x07, 0xBC, 0x00, 0x77, 0x00, - 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, 0xF8, 0x00, - 0x77, 0x80, 0x1E, 0x70, 0x07, 0x8F, 0x00, 0xE0, 0xE0, 0x38, 0x1C, 0x0E, - 0x01, 0xC3, 0x80, 0x38, 0x00, 0x0E, 0x00, 0x70, 0xF0, 0x0F, 0x07, 0x00, - 0xE0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x38, 0x07, 0x03, 0x80, 0x70, - 0x70, 0x07, 0x07, 0x00, 0x70, 0xE0, 0x03, 0x9E, 0x00, 0x39, 0xC0, 0x03, - 0xB8, 0x00, 0x3B, 0x80, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xE0, 0x00, - 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, - 0x07, 0x00, 0x00, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, - 0x00, 0x07, 0xFF, 0xC0, 0xFF, 0xF8, 0x3F, 0xFF, 0x00, 0x01, 0xC0, 0x00, - 0x70, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x1C, - 0x00, 0x07, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, - 0x03, 0xC0, 0x00, 0x7F, 0xFE, 0x1F, 0xFF, 0xC3, 0xFF, 0xF8, 0x00, 0x00, - 0x70, 0x1F, 0x01, 0xF0, 0x3C, 0x03, 0x80, 0x38, 0x07, 0x00, 0x70, 0x07, - 0x00, 0x70, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE0, 0x3C, 0x0F, 0x80, 0xE0, - 0x0F, 0x00, 0x78, 0x03, 0x80, 0x38, 0x03, 0x80, 0x38, 0x03, 0x80, 0x38, - 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x0E, 0x00, 0xF8, 0x0F, 0x80, 0x78, - 0x00, 0x01, 0x80, 0xC0, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x06, 0x03, - 0x01, 0x81, 0xC0, 0xC0, 0x60, 0x30, 0x18, 0x18, 0x0C, 0x06, 0x03, 0x01, - 0x81, 0x80, 0xC0, 0x60, 0x30, 0x38, 0x18, 0x0C, 0x06, 0x03, 0x03, 0x01, - 0x80, 0xC0, 0x00, 0x01, 0xE0, 0x1F, 0x01, 0xF0, 0x07, 0x00, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, - 0x01, 0xE0, 0x0F, 0x00, 0x70, 0x1F, 0x03, 0xC0, 0x78, 0x07, 0x00, 0x70, - 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xC0, 0x1C, 0x03, 0xC0, - 0xF8, 0x0F, 0x80, 0xE0, 0x00, 0x1C, 0x00, 0x3F, 0x00, 0x7F, 0x83, 0x63, - 0xC7, 0xC1, 0xFE, 0x00, 0xFC, 0x00, 0x78}; - -const GFXglyph FreeSansOblique18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 10, 0, 1}, // 0x20 ' ' - {0, 9, 26, 10, 4, -25}, // 0x21 '!' - {30, 10, 9, 12, 6, -24}, // 0x22 '"' - {42, 21, 25, 19, 2, -24}, // 0x23 '#' - {108, 20, 31, 19, 2, -26}, // 0x24 '$' - {186, 26, 25, 31, 5, -24}, // 0x25 '%' - {268, 20, 25, 23, 3, -24}, // 0x26 '&' - {331, 4, 9, 7, 6, -24}, // 0x27 ''' - {336, 12, 33, 12, 4, -25}, // 0x28 '(' - {386, 12, 33, 12, -1, -24}, // 0x29 ')' - {436, 10, 10, 14, 6, -25}, // 0x2A '*' - {449, 18, 16, 20, 3, -15}, // 0x2B '+' - {485, 5, 8, 10, 2, -2}, // 0x2C ',' - {490, 9, 3, 12, 3, -10}, // 0x2D '-' - {494, 4, 4, 10, 3, -3}, // 0x2E '.' - {496, 15, 26, 10, 0, -25}, // 0x2F '/' - {545, 18, 25, 19, 3, -24}, // 0x30 '0' - {602, 10, 25, 19, 7, -24}, // 0x31 '1' - {634, 20, 25, 19, 2, -24}, // 0x32 '2' - {697, 19, 25, 19, 2, -24}, // 0x33 '3' - {757, 18, 25, 19, 2, -24}, // 0x34 '4' - {814, 20, 25, 19, 2, -24}, // 0x35 '5' - {877, 19, 25, 19, 3, -24}, // 0x36 '6' - {937, 18, 25, 19, 5, -24}, // 0x37 '7' - {994, 19, 25, 19, 3, -24}, // 0x38 '8' - {1054, 19, 25, 19, 2, -24}, // 0x39 '9' - {1114, 7, 19, 10, 4, -18}, // 0x3A ':' - {1131, 8, 24, 10, 3, -18}, // 0x3B ';' - {1155, 19, 17, 20, 3, -16}, // 0x3C '<' - {1196, 18, 9, 20, 3, -12}, // 0x3D '=' - {1217, 19, 17, 20, 2, -15}, // 0x3E '>' - {1258, 16, 26, 19, 6, -25}, // 0x3F '?' - {1310, 33, 31, 36, 3, -25}, // 0x40 '@' - {1438, 23, 26, 23, 0, -25}, // 0x41 'A' - {1513, 21, 26, 23, 3, -25}, // 0x42 'B' - {1582, 22, 26, 25, 4, -25}, // 0x43 'C' - {1654, 23, 26, 25, 3, -25}, // 0x44 'D' - {1729, 23, 26, 23, 3, -25}, // 0x45 'E' - {1804, 22, 26, 21, 3, -25}, // 0x46 'F' - {1876, 24, 26, 27, 4, -25}, // 0x47 'G' - {1954, 25, 26, 25, 3, -25}, // 0x48 'H' - {2036, 8, 26, 10, 4, -25}, // 0x49 'I' - {2062, 18, 26, 18, 2, -25}, // 0x4A 'J' - {2121, 25, 26, 23, 3, -25}, // 0x4B 'K' - {2203, 16, 26, 19, 3, -25}, // 0x4C 'L' - {2255, 29, 26, 30, 3, -25}, // 0x4D 'M' - {2350, 25, 26, 26, 3, -25}, // 0x4E 'N' - {2432, 24, 26, 27, 4, -25}, // 0x4F 'O' - {2510, 22, 26, 23, 3, -25}, // 0x50 'P' - {2582, 25, 28, 27, 4, -25}, // 0x51 'Q' - {2670, 23, 26, 25, 3, -25}, // 0x52 'R' - {2745, 22, 26, 23, 3, -25}, // 0x53 'S' - {2817, 20, 26, 21, 6, -25}, // 0x54 'T' - {2882, 24, 26, 25, 4, -25}, // 0x55 'U' - {2960, 21, 26, 23, 6, -25}, // 0x56 'V' - {3029, 32, 26, 33, 6, -25}, // 0x57 'W' - {3133, 27, 26, 23, 1, -25}, // 0x58 'X' - {3221, 23, 26, 24, 6, -25}, // 0x59 'Y' - {3296, 25, 26, 21, 1, -25}, // 0x5A 'Z' - {3378, 13, 33, 10, 1, -25}, // 0x5B '[' - {3432, 4, 26, 10, 5, -25}, // 0x5C '\' - {3445, 13, 33, 10, -1, -24}, // 0x5D ']' - {3499, 14, 14, 16, 3, -24}, // 0x5E '^' - {3524, 21, 2, 19, -2, 5}, // 0x5F '_' - {3530, 6, 5, 12, 6, -25}, // 0x60 '`' - {3534, 18, 19, 19, 2, -18}, // 0x61 'a' - {3577, 19, 26, 20, 2, -25}, // 0x62 'b' - {3639, 16, 19, 18, 3, -18}, // 0x63 'c' - {3677, 20, 26, 20, 3, -25}, // 0x64 'd' - {3742, 17, 19, 19, 3, -18}, // 0x65 'e' - {3783, 11, 26, 9, 2, -25}, // 0x66 'f' - {3819, 19, 27, 19, 2, -18}, // 0x67 'g' - {3884, 18, 26, 19, 2, -25}, // 0x68 'h' - {3943, 8, 26, 8, 2, -25}, // 0x69 'i' - {3969, 14, 34, 8, -2, -25}, // 0x6A 'j' - {4029, 19, 26, 18, 2, -25}, // 0x6B 'k' - {4091, 8, 26, 8, 2, -25}, // 0x6C 'l' - {4117, 27, 19, 29, 2, -18}, // 0x6D 'm' - {4182, 18, 19, 19, 2, -18}, // 0x6E 'n' - {4225, 17, 19, 19, 3, -18}, // 0x6F 'o' - {4266, 21, 26, 20, 0, -18}, // 0x70 'p' - {4335, 20, 27, 19, 2, -18}, // 0x71 'q' - {4403, 13, 19, 11, 2, -18}, // 0x72 'r' - {4434, 16, 19, 18, 2, -18}, // 0x73 's' - {4472, 10, 23, 9, 3, -22}, // 0x74 't' - {4501, 18, 19, 19, 3, -18}, // 0x75 'u' - {4544, 16, 19, 17, 4, -18}, // 0x76 'v' - {4582, 24, 19, 25, 4, -18}, // 0x77 'w' - {4639, 19, 19, 17, 1, -18}, // 0x78 'x' - {4685, 20, 27, 17, 0, -18}, // 0x79 'y' - {4753, 19, 19, 17, 1, -18}, // 0x7A 'z' - {4799, 12, 33, 12, 3, -25}, // 0x7B '{' - {4849, 9, 33, 9, 2, -25}, // 0x7C '|' - {4887, 12, 33, 12, 0, -24}, // 0x7D '}' - {4937, 16, 7, 20, 5, -15}}; // 0x7E '~' - -const GFXfont FreeSansOblique18pt7b PROGMEM = { - (uint8_t *)FreeSansOblique18pt7bBitmaps, - (GFXglyph *)FreeSansOblique18pt7bGlyphs, 0x20, 0x7E, 42}; - -// Approx. 5623 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique24pt7b.h deleted file mode 100644 index 805aefa..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique24pt7b.h +++ /dev/null @@ -1,842 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansOblique24pt7bBitmaps[] PROGMEM = { - 0x01, 0xE0, 0x3C, 0x0F, 0x81, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x3C, 0x07, - 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x03, - 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x38, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1E, 0x07, 0x80, 0xF0, 0x1E, 0x00, 0x78, - 0x7B, 0xC3, 0xDE, 0x1F, 0xE1, 0xEF, 0x0F, 0x78, 0x7B, 0xC3, 0xDC, 0x1C, - 0xE0, 0xE7, 0x07, 0x30, 0x31, 0x81, 0x80, 0x00, 0x07, 0x81, 0xC0, 0x00, - 0x78, 0x3C, 0x00, 0x07, 0x03, 0xC0, 0x00, 0xF0, 0x38, 0x00, 0x0E, 0x07, - 0x80, 0x01, 0xE0, 0x70, 0x00, 0x1E, 0x0F, 0x00, 0x01, 0xC0, 0xF0, 0x00, - 0x3C, 0x0E, 0x00, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, - 0xFE, 0x00, 0x70, 0x3C, 0x00, 0x0F, 0x03, 0x80, 0x00, 0xF0, 0x78, 0x00, - 0x0E, 0x07, 0x80, 0x01, 0xE0, 0x70, 0x00, 0x1C, 0x0F, 0x00, 0x03, 0xC0, - 0xE0, 0x00, 0x3C, 0x1E, 0x00, 0x03, 0x81, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0x03, 0x80, 0x00, 0xE0, - 0x78, 0x00, 0x1E, 0x07, 0x00, 0x01, 0xC0, 0xF0, 0x00, 0x1C, 0x0F, 0x00, - 0x03, 0xC0, 0xE0, 0x00, 0x38, 0x1E, 0x00, 0x07, 0x81, 0xC0, 0x00, 0x78, - 0x3C, 0x00, 0x07, 0x03, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0x00, 0x7F, - 0xFF, 0xE0, 0x1F, 0x18, 0xF8, 0x0F, 0x8E, 0x1F, 0x07, 0xC3, 0x83, 0xC1, - 0xE0, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x3C, 0x0C, 0x0F, 0x0F, 0x07, 0x00, - 0x03, 0xC1, 0xC0, 0x00, 0xF0, 0x70, 0x00, 0x3E, 0x1C, 0x00, 0x0F, 0xE6, - 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xFE, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x3F, 0xFC, 0x00, 0x03, 0xFF, 0x80, 0x01, 0xC7, 0xF0, 0x00, 0x70, 0x7C, - 0x00, 0x1C, 0x0F, 0x00, 0x06, 0x03, 0xCF, 0x03, 0x80, 0xF3, 0xC0, 0xE0, - 0x3C, 0xF0, 0x38, 0x0E, 0x3C, 0x0E, 0x07, 0x8F, 0x03, 0x01, 0xE3, 0xE1, - 0xC0, 0xF0, 0xF8, 0x70, 0x78, 0x1F, 0x9C, 0xFC, 0x03, 0xFF, 0xFE, 0x00, - 0x7F, 0xFF, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0E, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x80, 0x1F, 0x00, 0x00, 0x70, 0x07, 0xFC, 0x00, 0x0E, - 0x00, 0xFF, 0xE0, 0x01, 0xC0, 0x1E, 0x1E, 0x00, 0x3C, 0x03, 0x80, 0xF0, - 0x03, 0x80, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x0E, 0x00, 0xE0, - 0x07, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x3C, 0x00, 0xE0, 0x0E, 0x03, 0x80, - 0x0E, 0x00, 0xE0, 0x70, 0x00, 0xF0, 0x1C, 0x0E, 0x00, 0x07, 0x87, 0xC1, - 0xE0, 0x00, 0x7F, 0xF8, 0x1C, 0x00, 0x03, 0xFE, 0x03, 0x80, 0x00, 0x0F, - 0x80, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x1F, - 0x00, 0x00, 0x1C, 0x07, 0xFC, 0x00, 0x03, 0x80, 0xFF, 0xE0, 0x00, 0x70, - 0x1E, 0x1E, 0x00, 0x0F, 0x03, 0x80, 0xF0, 0x00, 0xE0, 0x70, 0x07, 0x00, - 0x1C, 0x07, 0x00, 0x70, 0x03, 0x80, 0xE0, 0x07, 0x00, 0x70, 0x0E, 0x00, - 0x70, 0x0F, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x1C, 0x00, - 0xF0, 0x1C, 0x03, 0x80, 0x07, 0x87, 0xC0, 0x70, 0x00, 0x7F, 0xF8, 0x07, - 0x00, 0x03, 0xFE, 0x00, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, - 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0xF8, 0x7C, 0x00, 0x78, 0x0F, - 0x00, 0x1E, 0x03, 0xC0, 0x0F, 0x00, 0xF0, 0x03, 0xC0, 0x3C, 0x00, 0xF0, - 0x1E, 0x00, 0x3C, 0x07, 0x80, 0x0F, 0x87, 0xC0, 0x01, 0xE3, 0xE0, 0x00, - 0x7F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFF, 0x00, 0x01, 0xFB, 0xE0, 0x70, 0xF8, 0x7C, 0x1C, 0x7C, 0x1F, - 0x0E, 0x3C, 0x03, 0xE3, 0x9E, 0x00, 0x79, 0xE7, 0x80, 0x1F, 0xF3, 0xC0, - 0x03, 0xF8, 0xF0, 0x00, 0xFE, 0x3C, 0x00, 0x1F, 0x0F, 0x00, 0x07, 0xC3, - 0xE0, 0x03, 0xF8, 0xF8, 0x03, 0xFE, 0x3F, 0x83, 0xF7, 0xC7, 0xFF, 0xF8, - 0xF0, 0xFF, 0xFC, 0x3E, 0x1F, 0xFC, 0x07, 0x81, 0xFC, 0x00, 0x00, 0x7B, - 0xDF, 0xEF, 0x7B, 0xDC, 0xE7, 0x31, 0x80, 0x00, 0x0E, 0x00, 0x38, 0x00, - 0xE0, 0x03, 0x80, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0x80, - 0x0F, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x0E, - 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, - 0x1C, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, - 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x30, 0x00, 0x70, 0x00, 0xE0, - 0x00, 0xC0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, - 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, - 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x01, 0xE0, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x3C, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x07, - 0x00, 0x0E, 0x00, 0x3C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0x80, 0x0F, 0x00, - 0x1C, 0x00, 0x78, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x1C, 0x00, 0x70, - 0x01, 0xC0, 0x07, 0x00, 0x00, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x18, 0xE3, - 0x7B, 0xBF, 0xFF, 0xF3, 0xFF, 0x01, 0xE0, 0x1F, 0xC0, 0xF7, 0x07, 0x9E, - 0x1C, 0x38, 0x20, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x78, - 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, - 0x00, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE0, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, - 0x78, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3E, 0x7C, 0xF9, 0xE7, - 0xC1, 0x83, 0x0C, 0x18, 0x63, 0xC6, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0x7D, 0xF7, 0xBE, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x01, 0xC0, 0x00, - 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, - 0x00, 0x30, 0x00, 0x03, 0x80, 0x00, 0x18, 0x00, 0x01, 0xC0, 0x00, 0x0C, - 0x00, 0x00, 0xE0, 0x00, 0x06, 0x00, 0x00, 0x70, 0x00, 0x03, 0x00, 0x00, - 0x38, 0x00, 0x01, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, 0x0E, 0x00, - 0x00, 0x60, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x38, - 0x00, 0x01, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, 0x0E, 0x00, 0x00, - 0x60, 0x00, 0x07, 0x00, 0x00, 0x30, 0x00, 0x03, 0x80, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, - 0xE0, 0x3F, 0x0F, 0xC0, 0xF8, 0x07, 0x81, 0xE0, 0x0F, 0x87, 0x80, 0x0F, - 0x1F, 0x00, 0x1E, 0x3C, 0x00, 0x3C, 0x78, 0x00, 0x79, 0xE0, 0x00, 0xF3, - 0xC0, 0x01, 0xE7, 0x80, 0x07, 0xDE, 0x00, 0x0F, 0xBC, 0x00, 0x1E, 0x78, - 0x00, 0x3C, 0xF0, 0x00, 0x79, 0xE0, 0x00, 0xF7, 0x80, 0x03, 0xEF, 0x00, - 0x07, 0xDE, 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0x78, 0x00, 0x7C, 0xF0, 0x00, - 0xF1, 0xE0, 0x03, 0xE3, 0xC0, 0x07, 0x87, 0xC0, 0x1F, 0x0F, 0x80, 0x7C, - 0x0F, 0xC3, 0xF0, 0x1F, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x1F, 0xFC, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x18, 0x01, 0xC0, 0x1C, 0x01, 0xE0, 0x1F, 0x0F, - 0xFB, 0xFF, 0xDF, 0xFC, 0xFF, 0xE0, 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3C, - 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, - 0x78, 0x07, 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3C, - 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3C, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x0F, - 0xC0, 0xFC, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, 0xF8, 0x1F, 0x00, 0x0F, - 0x03, 0xC0, 0x01, 0xE0, 0xF8, 0x00, 0x3C, 0x1E, 0x00, 0x07, 0x80, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, - 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x3F, 0xFF, 0x80, 0x3F, - 0xFF, 0xE0, 0x1F, 0x81, 0xF8, 0x1F, 0x00, 0x7C, 0x1F, 0x00, 0x1E, 0x0F, - 0x00, 0x0F, 0x0F, 0x80, 0x07, 0x87, 0x80, 0x03, 0xC0, 0x00, 0x03, 0xC0, - 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xE0, - 0x00, 0x3F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x79, 0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x3C, 0x00, - 0x0F, 0x1E, 0x00, 0x0F, 0x0F, 0x80, 0x1F, 0x83, 0xF0, 0x3F, 0x81, 0xFF, - 0xFF, 0x80, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xBC, - 0x00, 0x0F, 0xBC, 0x00, 0x1F, 0x7C, 0x00, 0x3E, 0x78, 0x00, 0x7C, 0x78, - 0x00, 0xF8, 0x78, 0x00, 0xF0, 0x78, 0x01, 0xE0, 0xF0, 0x03, 0xC0, 0xF0, - 0x07, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x1E, 0x01, 0xF0, 0x3C, 0x01, 0xE0, - 0x78, 0x01, 0xE0, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, - 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, - 0x00, 0x0F, 0x80, 0x00, 0x7F, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x03, 0xFF, - 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC7, 0xE0, 0x00, 0xF7, 0xFF, 0x80, 0x1F, - 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x80, 0xFE, 0x03, 0xF0, 0x1F, 0x00, 0x3F, - 0x03, 0xC0, 0x03, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x1E, 0x1E, 0x00, 0x03, 0xC3, 0xC0, 0x00, 0xF0, 0x7C, 0x00, - 0x3C, 0x0F, 0x80, 0x0F, 0x80, 0xFC, 0x07, 0xE0, 0x1F, 0xFF, 0xF8, 0x01, - 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xFE, 0x01, 0xF8, - 0x3E, 0x03, 0xE0, 0x1F, 0x07, 0xC0, 0x1F, 0x0F, 0x80, 0x0F, 0x0F, 0x00, - 0x0F, 0x1F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x1F, - 0x80, 0x3C, 0x7F, 0xE0, 0x3D, 0xFF, 0xF0, 0x7B, 0xFF, 0xF8, 0x7F, 0xC1, - 0xF8, 0x7F, 0x00, 0x7C, 0x7E, 0x00, 0x7C, 0xFC, 0x00, 0x3C, 0xF8, 0x00, - 0x3C, 0xF8, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x38, 0xF0, 0x00, - 0x78, 0xF0, 0x00, 0x78, 0xF0, 0x00, 0xF0, 0xF8, 0x01, 0xF0, 0x7C, 0x03, - 0xE0, 0x7E, 0x0F, 0xC0, 0x3F, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0x0F, 0xFE, - 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x03, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, - 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x03, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x1F, - 0xFF, 0x80, 0x1F, 0xFF, 0xE0, 0x1F, 0x81, 0xF8, 0x1F, 0x00, 0x7C, 0x0F, - 0x00, 0x1E, 0x0F, 0x00, 0x0F, 0x07, 0x80, 0x07, 0x83, 0xC0, 0x03, 0xC1, - 0xE0, 0x03, 0xC0, 0xF8, 0x03, 0xC0, 0x7E, 0x07, 0xC0, 0x1F, 0xFF, 0xC0, - 0x07, 0xFF, 0xC0, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x07, 0xE0, 0x7E, - 0x07, 0xC0, 0x0F, 0x07, 0x80, 0x07, 0xC7, 0xC0, 0x01, 0xE3, 0xC0, 0x00, - 0xF3, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x1C, 0x78, 0x00, - 0x1E, 0x3C, 0x00, 0x0F, 0x1F, 0x00, 0x0F, 0x0F, 0xC0, 0x0F, 0x83, 0xF0, - 0x3F, 0x81, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0xFC, - 0x03, 0xFF, 0xFC, 0x07, 0xF0, 0x7E, 0x07, 0xC0, 0x3E, 0x0F, 0x80, 0x1F, - 0x0F, 0x00, 0x0F, 0x1E, 0x00, 0x0F, 0x1E, 0x00, 0x0F, 0x3C, 0x00, 0x0F, - 0x3C, 0x00, 0x0F, 0x3C, 0x00, 0x1F, 0x3C, 0x00, 0x1F, 0x3C, 0x00, 0x3F, - 0x3E, 0x00, 0x7E, 0x3E, 0x00, 0xFE, 0x1F, 0x83, 0xFE, 0x1F, 0xFF, 0xFE, - 0x0F, 0xFF, 0xBC, 0x07, 0xFE, 0x3C, 0x01, 0xF8, 0x7C, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF0, 0xF0, 0x01, 0xF0, - 0xF0, 0x03, 0xE0, 0xF8, 0x07, 0xC0, 0xFC, 0x1F, 0xC0, 0x7F, 0xFF, 0x80, - 0x3F, 0xFE, 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xC1, 0xF0, - 0x78, 0x3E, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1F, - 0x07, 0x83, 0xE0, 0xF8, 0x00, 0x03, 0xE0, 0x7C, 0x0F, 0x03, 0xE0, 0x7C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x7C, 0x0F, - 0x81, 0xE0, 0x7C, 0x01, 0x80, 0x30, 0x0C, 0x01, 0x80, 0x60, 0x3C, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, - 0x07, 0xFC, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x07, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0E, - 0x00, 0x00, 0x00, 0x80, 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xE3, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, - 0xC7, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF8, 0x04, 0x00, 0x00, 0x01, 0xC0, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x01, - 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x3F, 0xF8, 0x0F, 0xFF, 0xC1, 0xFF, 0xFE, 0x1F, 0x03, 0xE3, 0xE0, - 0x1F, 0x7C, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x01, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x0F, 0x80, - 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x7F, 0xE0, 0x0F, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, - 0xFC, 0x00, 0x00, 0x01, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0xF8, - 0x00, 0xFC, 0x00, 0x3E, 0x0F, 0x80, 0x1F, 0xF9, 0xE1, 0xF0, 0x78, 0x03, - 0xFF, 0xCF, 0x07, 0x87, 0xC0, 0x3F, 0x0F, 0xF0, 0x3C, 0x7C, 0x03, 0xE0, - 0x3F, 0x01, 0xE3, 0xC0, 0x3E, 0x01, 0xF8, 0x0F, 0x3E, 0x03, 0xE0, 0x0F, - 0x80, 0x79, 0xE0, 0x1E, 0x00, 0x7C, 0x03, 0xDF, 0x01, 0xE0, 0x03, 0xC0, - 0x3E, 0xF0, 0x1F, 0x00, 0x3E, 0x01, 0xE7, 0x80, 0xF0, 0x01, 0xE0, 0x0F, - 0x38, 0x07, 0x80, 0x0F, 0x00, 0xFB, 0xC0, 0x78, 0x00, 0xF0, 0x07, 0x9E, - 0x03, 0xC0, 0x07, 0x80, 0x7C, 0xF0, 0x1E, 0x00, 0x78, 0x07, 0xC7, 0x80, - 0xF0, 0x07, 0xC0, 0x7E, 0x3C, 0x07, 0x80, 0x7C, 0x07, 0xE1, 0xE0, 0x3E, - 0x07, 0xE0, 0x7E, 0x0F, 0x00, 0xF8, 0x7F, 0x8F, 0xC0, 0x7C, 0x07, 0xFF, - 0x7F, 0xFC, 0x01, 0xE0, 0x1F, 0xF1, 0xFF, 0x80, 0x0F, 0x00, 0x7E, 0x0F, - 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0xF8, 0x00, 0x00, - 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xDF, 0x00, 0x00, 0x1E, - 0x7C, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x03, 0xC7, 0xC0, 0x00, 0x0F, 0x1F, - 0x00, 0x00, 0x78, 0x3C, 0x00, 0x03, 0xE0, 0xF0, 0x00, 0x0F, 0x03, 0xE0, - 0x00, 0x78, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x0F, 0x00, 0xF8, 0x00, - 0x3C, 0x03, 0xE0, 0x01, 0xE0, 0x0F, 0x80, 0x0F, 0x80, 0x1E, 0x00, 0x3C, - 0x00, 0x7C, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, - 0xFF, 0x00, 0xFF, 0xFF, 0xFC, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x03, - 0xC0, 0xF8, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0xF8, - 0xF8, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x0F, 0x9F, 0x00, 0x00, 0x3E, 0xF8, - 0x00, 0x00, 0x7B, 0xE0, 0x00, 0x01, 0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x0F, - 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xE0, 0x3E, 0x00, - 0x1F, 0x81, 0xE0, 0x00, 0x7C, 0x0F, 0x00, 0x01, 0xE0, 0x78, 0x00, 0x0F, - 0x03, 0xC0, 0x00, 0x78, 0x3C, 0x00, 0x03, 0xC1, 0xE0, 0x00, 0x3C, 0x0F, - 0x00, 0x01, 0xE0, 0x78, 0x00, 0x1E, 0x07, 0xC0, 0x03, 0xE0, 0x3F, 0xFF, - 0xFC, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, - 0x07, 0x80, 0x01, 0xF0, 0x3C, 0x00, 0x07, 0xC1, 0xE0, 0x00, 0x1E, 0x0F, - 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x07, 0x87, 0x80, 0x00, 0x3C, 0x3C, 0x00, - 0x01, 0xE1, 0xE0, 0x00, 0x1E, 0x1F, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x0F, - 0x87, 0x80, 0x00, 0xF8, 0x3C, 0x00, 0x1F, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x1F, - 0xFF, 0xFC, 0x00, 0xFE, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xE0, 0x3E, 0x00, - 0x07, 0x81, 0xF0, 0x00, 0x1E, 0x07, 0x80, 0x00, 0x3C, 0x3C, 0x00, 0x00, - 0xF1, 0xF0, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x3C, 0xF0, 0x00, 0x01, 0xF3, 0xC0, 0x00, 0x07, - 0x8F, 0x80, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0xF0, 0x7C, 0x00, 0x07, 0xC1, - 0xF0, 0x00, 0x3E, 0x03, 0xE0, 0x03, 0xF0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, - 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x07, 0xFF, - 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0x80, 0x3E, 0x00, 0x3F, 0x80, 0x78, 0x00, - 0x1F, 0x80, 0xF0, 0x00, 0x1F, 0x03, 0xE0, 0x00, 0x1E, 0x07, 0xC0, 0x00, - 0x3E, 0x0F, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x00, - 0xF0, 0xF8, 0x00, 0x01, 0xE1, 0xF0, 0x00, 0x03, 0xC3, 0xC0, 0x00, 0x07, - 0x87, 0x80, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x3C, 0x3E, 0x00, 0x00, 0x78, - 0x7C, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x01, 0xE1, 0xE0, 0x00, 0x07, 0x87, - 0xC0, 0x00, 0x0F, 0x0F, 0x80, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x78, 0x3C, - 0x00, 0x01, 0xF0, 0x78, 0x00, 0x03, 0xC1, 0xF0, 0x00, 0x0F, 0x03, 0xE0, - 0x00, 0x3E, 0x07, 0x80, 0x01, 0xF8, 0x0F, 0x00, 0x0F, 0xE0, 0x1F, 0xFF, - 0xFF, 0x80, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, - 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xE0, 0x3E, 0x00, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, - 0x07, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0x80, - 0x7F, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, - 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFF, 0xFE, 0x03, 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xF0, 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x07, - 0xFF, 0xFF, 0xC0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xC0, 0x00, 0xF8, 0x0F, - 0xC0, 0x00, 0x3E, 0x07, 0x80, 0x00, 0x1F, 0x07, 0x80, 0x00, 0x07, 0x87, - 0xC0, 0x00, 0x03, 0xC3, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x1F, 0xFF, - 0xBC, 0x00, 0x0F, 0xFF, 0xDE, 0x00, 0x0F, 0xFF, 0xEF, 0x00, 0x07, 0xFF, - 0xF7, 0x80, 0x00, 0x00, 0x73, 0xC0, 0x00, 0x00, 0x39, 0xE0, 0x00, 0x00, - 0x3C, 0xF0, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x1F, 0x3E, 0x00, 0x00, - 0x0F, 0x8F, 0x00, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x0F, 0xC3, 0xF0, 0x00, - 0x0F, 0xE0, 0xFC, 0x00, 0x1F, 0xF0, 0x7F, 0x80, 0x7F, 0x78, 0x1F, 0xFF, - 0xFE, 0x38, 0x03, 0xFF, 0xFE, 0x1C, 0x00, 0xFF, 0xFC, 0x0E, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0xF0, 0x00, 0x03, 0xC0, - 0x78, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0xF0, - 0x1E, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x3C, 0x0F, 0x80, 0x00, 0x3E, - 0x07, 0xC0, 0x00, 0x1F, 0x03, 0xC0, 0x00, 0x0F, 0x01, 0xE0, 0x00, 0x07, - 0x80, 0xF0, 0x00, 0x03, 0xC0, 0xF8, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x01, - 0xF0, 0x3C, 0x00, 0x00, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xFC, 0x0F, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x03, 0xC0, 0x00, - 0x0F, 0x01, 0xE0, 0x00, 0x07, 0x81, 0xF0, 0x00, 0x07, 0xC0, 0xF8, 0x00, - 0x03, 0xE0, 0x78, 0x00, 0x01, 0xE0, 0x3C, 0x00, 0x00, 0xF0, 0x1E, 0x00, - 0x00, 0x78, 0x1F, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x3C, 0x07, 0x80, - 0x00, 0x1E, 0x03, 0xC0, 0x00, 0x0F, 0x01, 0xE0, 0x00, 0x0F, 0x81, 0xF0, - 0x00, 0x07, 0xC0, 0xF0, 0x00, 0x03, 0xC0, 0x78, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xE0, 0x3C, 0x07, 0x81, 0xF0, 0x3E, 0x07, - 0x80, 0xF0, 0x1E, 0x07, 0xC0, 0xF8, 0x1E, 0x03, 0xC0, 0x78, 0x1F, 0x03, - 0xE0, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x0F, 0x81, 0xE0, 0x3C, 0x07, 0x81, - 0xF0, 0x3E, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0xC0, 0xF8, 0x1E, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, - 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0xF0, - 0x01, 0xE0, 0x78, 0x00, 0xF0, 0x78, 0x00, 0xF8, 0x3C, 0x00, 0x78, 0x1E, - 0x00, 0x3C, 0x0F, 0x00, 0x3E, 0x07, 0xC0, 0x3E, 0x03, 0xF0, 0x7E, 0x00, - 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0x0F, 0xC0, 0x78, 0x00, 0x07, 0xC0, 0x1E, 0x00, - 0x03, 0xE0, 0x0F, 0x80, 0x03, 0xF0, 0x03, 0xE0, 0x01, 0xF8, 0x00, 0xF0, - 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x07, - 0xC0, 0x3F, 0x00, 0x01, 0xE0, 0x1F, 0x80, 0x00, 0x78, 0x0F, 0x80, 0x00, - 0x1E, 0x07, 0xC0, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x03, 0xE3, 0xF0, 0x00, - 0x00, 0xF1, 0xFC, 0x00, 0x00, 0x3C, 0xFF, 0x00, 0x00, 0x0F, 0x7F, 0xE0, - 0x00, 0x07, 0xFE, 0xF8, 0x00, 0x01, 0xFE, 0x1E, 0x00, 0x00, 0x7F, 0x07, - 0xC0, 0x00, 0x1F, 0x80, 0xF0, 0x00, 0x0F, 0xC0, 0x3E, 0x00, 0x03, 0xE0, - 0x07, 0x80, 0x00, 0xF0, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x0F, - 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x78, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0x03, 0xE0, 0x07, 0x80, 0x00, 0xF8, - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0xF0, 0x00, 0x07, 0xC0, 0x3C, 0x00, 0x00, - 0xF8, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF8, - 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x01, 0xF0, 0x00, - 0x07, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x0F, - 0x80, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x7C, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, - 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, - 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, - 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xE0, - 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x0F, 0xF0, - 0x00, 0x03, 0xF8, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x3F, 0xC0, 0x00, 0x1F, - 0xC0, 0x7F, 0x80, 0x00, 0x7F, 0x80, 0xFF, 0x00, 0x00, 0xEF, 0x03, 0xFE, - 0x00, 0x03, 0xFE, 0x07, 0xBC, 0x00, 0x0F, 0x78, 0x0F, 0x3C, 0x00, 0x1E, - 0xF0, 0x1E, 0x78, 0x00, 0x79, 0xE0, 0x3C, 0xF0, 0x00, 0xF3, 0xC0, 0xF9, - 0xE0, 0x03, 0xCF, 0x81, 0xE3, 0xC0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0x1E, - 0x3C, 0x07, 0x8F, 0x00, 0x38, 0x78, 0x1F, 0x1E, 0x00, 0xF0, 0xF0, 0x3C, - 0x1E, 0x03, 0xC3, 0xE0, 0x78, 0x3C, 0x07, 0x87, 0x80, 0xF0, 0x78, 0x1E, - 0x0F, 0x01, 0xE0, 0xF0, 0x3C, 0x1E, 0x07, 0xC1, 0xE0, 0xF0, 0x7C, 0x0F, - 0x03, 0xC1, 0xE0, 0xF0, 0x1E, 0x07, 0x87, 0x81, 0xE0, 0x3C, 0x0F, 0x0E, - 0x03, 0xC0, 0x78, 0x0F, 0x3C, 0x07, 0x81, 0xF0, 0x1E, 0x70, 0x1F, 0x03, - 0xC0, 0x3D, 0xE0, 0x3C, 0x07, 0x80, 0x7F, 0x80, 0x78, 0x0F, 0x00, 0xFF, - 0x00, 0xF0, 0x3E, 0x01, 0xFC, 0x01, 0xE0, 0x78, 0x03, 0xF8, 0x07, 0xC0, - 0xF0, 0x07, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x01, 0xF0, - 0x00, 0x03, 0xC0, 0x7E, 0x00, 0x01, 0xF0, 0x3F, 0x80, 0x00, 0x78, 0x0F, - 0xE0, 0x00, 0x1E, 0x03, 0xFC, 0x00, 0x07, 0x80, 0xFF, 0x00, 0x03, 0xE0, - 0x3F, 0xE0, 0x00, 0xF0, 0x1F, 0xF8, 0x00, 0x3C, 0x07, 0x9E, 0x00, 0x0F, - 0x01, 0xE7, 0xC0, 0x03, 0xC0, 0x78, 0xF0, 0x01, 0xF0, 0x1E, 0x3E, 0x00, - 0x78, 0x0F, 0x87, 0x80, 0x1E, 0x03, 0xC1, 0xF0, 0x07, 0x80, 0xF0, 0x7C, - 0x01, 0xE0, 0x3C, 0x0F, 0x00, 0xF8, 0x1F, 0x03, 0xE0, 0x3C, 0x07, 0x80, - 0x78, 0x0F, 0x01, 0xE0, 0x1F, 0x03, 0xC0, 0x78, 0x07, 0xC1, 0xF0, 0x1E, - 0x00, 0xF8, 0x78, 0x0F, 0x80, 0x3E, 0x1E, 0x03, 0xC0, 0x07, 0x87, 0x80, - 0xF0, 0x01, 0xF1, 0xE0, 0x3C, 0x00, 0x3C, 0xF8, 0x0F, 0x00, 0x0F, 0xBC, - 0x07, 0xC0, 0x03, 0xEF, 0x01, 0xE0, 0x00, 0x7F, 0xC0, 0x78, 0x00, 0x1F, - 0xF0, 0x1E, 0x00, 0x03, 0xFC, 0x0F, 0x80, 0x00, 0xFE, 0x03, 0xC0, 0x00, - 0x1F, 0x80, 0xF0, 0x00, 0x07, 0xE0, 0x3C, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFC, 0x00, - 0x0F, 0xFF, 0xFF, 0x80, 0x0F, 0xF0, 0x1F, 0xC0, 0x0F, 0xC0, 0x03, 0xF0, - 0x0F, 0x80, 0x00, 0xFC, 0x0F, 0x80, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x0F, - 0x07, 0x80, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0x00, - 0xF3, 0xC0, 0x00, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x3D, 0xE0, 0x00, 0x00, - 0x1E, 0xF0, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x03, 0xDE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, - 0x00, 0xF7, 0x80, 0x00, 0x00, 0xFB, 0xC0, 0x00, 0x00, 0x79, 0xE0, 0x00, - 0x00, 0x3C, 0xF0, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x1E, 0x3E, 0x00, - 0x00, 0x1F, 0x0F, 0x00, 0x00, 0x1F, 0x07, 0xC0, 0x00, 0x1F, 0x03, 0xF0, - 0x00, 0x1F, 0x00, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x7F, 0x80, 0x1F, - 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFE, 0x00, - 0x7F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xE0, 0x3E, 0x00, 0x3F, 0x81, 0xE0, - 0x00, 0x7C, 0x0F, 0x00, 0x01, 0xE0, 0xF8, 0x00, 0x0F, 0x07, 0xC0, 0x00, - 0x78, 0x3C, 0x00, 0x03, 0xC1, 0xE0, 0x00, 0x1E, 0x0F, 0x00, 0x01, 0xE0, - 0xF8, 0x00, 0x0F, 0x07, 0xC0, 0x00, 0xF8, 0x3C, 0x00, 0x0F, 0x81, 0xE0, - 0x01, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, - 0x80, 0x3F, 0xFF, 0xF0, 0x01, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, - 0x80, 0x0F, 0xF0, 0x1F, 0xC0, 0x0F, 0xC0, 0x03, 0xF0, 0x0F, 0xC0, 0x00, - 0xFC, 0x0F, 0x80, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x0F, 0x07, 0x80, 0x00, - 0x07, 0xC7, 0xC0, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0x00, 0xF3, 0xC0, 0x00, - 0x00, 0x79, 0xE0, 0x00, 0x00, 0x3D, 0xE0, 0x00, 0x00, 0x1E, 0xF0, 0x00, - 0x00, 0x0F, 0x78, 0x00, 0x00, 0x07, 0xB8, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x03, 0xDE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x00, 0xF7, 0x80, - 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x3C, 0xF0, - 0x00, 0x00, 0x3C, 0x78, 0x00, 0x08, 0x3E, 0x3E, 0x00, 0x0E, 0x1E, 0x0F, - 0x00, 0x0F, 0x9F, 0x07, 0xC0, 0x07, 0xFF, 0x03, 0xF0, 0x01, 0xFF, 0x00, - 0xFC, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xE0, - 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x7E, 0x00, 0x0F, 0xF0, 0x1F, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xC0, 0x07, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFE, - 0x03, 0xE0, 0x00, 0xFC, 0x0F, 0x00, 0x01, 0xF0, 0x3C, 0x00, 0x03, 0xC1, - 0xF0, 0x00, 0x0F, 0x07, 0xC0, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0xF0, 0x78, - 0x00, 0x03, 0xC1, 0xE0, 0x00, 0x1E, 0x0F, 0x80, 0x00, 0x78, 0x3E, 0x00, - 0x03, 0xE0, 0xF0, 0x00, 0x1F, 0x03, 0xC0, 0x01, 0xF8, 0x0F, 0xFF, 0xFF, - 0xC0, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF0, - 0x1E, 0x00, 0x07, 0xE0, 0xF8, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x1E, 0x0F, - 0x00, 0x00, 0x78, 0x3C, 0x00, 0x01, 0xE0, 0xF0, 0x00, 0x07, 0x87, 0xC0, - 0x00, 0x1E, 0x1F, 0x00, 0x00, 0xF0, 0x78, 0x00, 0x03, 0xC1, 0xE0, 0x00, - 0x0F, 0x07, 0x80, 0x00, 0x3C, 0x3E, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x03, - 0xC3, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xC0, 0x7F, 0x01, - 0xF0, 0x00, 0xFC, 0x0F, 0x00, 0x03, 0xE0, 0xF0, 0x00, 0x0F, 0x07, 0x00, - 0x00, 0x78, 0x78, 0x00, 0x03, 0xC3, 0xC0, 0x00, 0x1E, 0x1E, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, - 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3C, 0xF0, 0x00, 0x01, 0xE7, - 0x80, 0x00, 0x0F, 0x3C, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x07, 0x8F, 0x00, - 0x00, 0x3C, 0x7C, 0x00, 0x03, 0xC1, 0xF0, 0x00, 0x7C, 0x0F, 0xE0, 0x1F, - 0xC0, 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xF8, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, - 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x03, 0xC0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0x3C, 0x1E, - 0x00, 0x00, 0xF8, 0x7C, 0x00, 0x01, 0xF0, 0xF8, 0x00, 0x03, 0xC1, 0xE0, - 0x00, 0x07, 0x83, 0xC0, 0x00, 0x0F, 0x0F, 0x80, 0x00, 0x3E, 0x1F, 0x00, - 0x00, 0x7C, 0x3C, 0x00, 0x00, 0xF0, 0x78, 0x00, 0x01, 0xE0, 0xF0, 0x00, - 0x03, 0xC3, 0xE0, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x1F, 0x0F, 0x00, 0x00, - 0x3C, 0x1E, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x01, 0xF0, 0xF8, 0x00, 0x03, - 0xE1, 0xF0, 0x00, 0x07, 0x83, 0xC0, 0x00, 0x0F, 0x07, 0x80, 0x00, 0x1E, - 0x1F, 0x00, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0xF8, 0x78, 0x00, 0x01, 0xE0, - 0xF0, 0x00, 0x03, 0xC1, 0xE0, 0x00, 0x0F, 0x83, 0xC0, 0x00, 0x1E, 0x07, - 0x80, 0x00, 0x7C, 0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x80, 0x07, 0xE0, 0x1F, - 0xC0, 0x7F, 0x80, 0x1F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x0F, 0xBE, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x07, 0xC7, 0x80, 0x00, - 0x3C, 0x3C, 0x00, 0x03, 0xE1, 0xE0, 0x00, 0x1E, 0x0F, 0x80, 0x01, 0xF0, - 0x7C, 0x00, 0x0F, 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x80, 0x78, - 0x00, 0x78, 0x03, 0xC0, 0x07, 0xC0, 0x1E, 0x00, 0x3C, 0x00, 0xF0, 0x03, - 0xE0, 0x07, 0xC0, 0x1E, 0x00, 0x3E, 0x01, 0xF0, 0x01, 0xF0, 0x0F, 0x00, - 0x07, 0x80, 0xF0, 0x00, 0x3C, 0x07, 0x80, 0x01, 0xE0, 0x78, 0x00, 0x0F, - 0x07, 0xC0, 0x00, 0x7C, 0x3C, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x1F, 0x1E, - 0x00, 0x00, 0xF9, 0xF0, 0x00, 0x03, 0xCF, 0x00, 0x00, 0x1E, 0xF0, 0x00, - 0x00, 0xF7, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x1F, 0x00, 0x03, 0xDE, 0x00, 0x07, 0xE0, 0x00, 0xFB, 0xC0, 0x00, - 0xFC, 0x00, 0x1E, 0x78, 0x00, 0x3F, 0x80, 0x07, 0xCF, 0x00, 0x07, 0xF0, - 0x00, 0xF9, 0xE0, 0x01, 0xFE, 0x00, 0x3E, 0x3C, 0x00, 0x7F, 0xC0, 0x07, - 0xC7, 0x80, 0x0F, 0x78, 0x01, 0xF0, 0xF0, 0x03, 0xEF, 0x00, 0x3E, 0x1E, - 0x00, 0x79, 0xE0, 0x0F, 0x83, 0xC0, 0x1F, 0x3C, 0x01, 0xF0, 0x78, 0x03, - 0xC7, 0x80, 0x3C, 0x0F, 0x00, 0xF8, 0xF0, 0x0F, 0x80, 0xE0, 0x1E, 0x1E, - 0x01, 0xE0, 0x1C, 0x07, 0xC1, 0xC0, 0x7C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, - 0x00, 0x70, 0x3E, 0x07, 0x83, 0xE0, 0x0E, 0x07, 0x80, 0xF0, 0x78, 0x01, - 0xC1, 0xF0, 0x1E, 0x1F, 0x00, 0x3C, 0x3C, 0x03, 0xC3, 0xE0, 0x07, 0x8F, - 0x80, 0x78, 0x78, 0x00, 0xF1, 0xE0, 0x0F, 0x1F, 0x00, 0x1E, 0x7C, 0x01, - 0xE3, 0xC0, 0x03, 0xCF, 0x00, 0x3C, 0xF8, 0x00, 0x7B, 0xE0, 0x07, 0x9E, - 0x00, 0x0F, 0x78, 0x00, 0xF7, 0xC0, 0x01, 0xFF, 0x00, 0x1E, 0xF0, 0x00, - 0x3F, 0xC0, 0x03, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0x80, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x7C, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x07, 0xC0, 0x00, 0x3E, 0x00, - 0x7C, 0x00, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, - 0x00, 0x01, 0xF0, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x7C, 0x00, 0x00, 0xF8, - 0x0F, 0x80, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, - 0x07, 0xC3, 0xE0, 0x00, 0x00, 0x7C, 0x7C, 0x00, 0x00, 0x03, 0xEF, 0x80, - 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x0F, 0xBE, 0x00, - 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x00, 0x3E, 0x1F, 0x00, 0x00, 0x03, 0xE1, - 0xF0, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, - 0xF0, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x03, 0xE0, - 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x03, 0xF0, 0x03, 0xF0, 0x00, - 0x1F, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x0F, 0xC0, 0x00, 0x0F, 0x80, 0xF8, - 0x00, 0x00, 0x7D, 0xF0, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x1F, 0x1F, 0x80, - 0x00, 0xF8, 0x3E, 0x00, 0x03, 0xE0, 0xF8, 0x00, 0x1F, 0x01, 0xF0, 0x00, - 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x3E, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x07, 0xC1, 0xF0, 0x00, - 0x0F, 0x0F, 0x80, 0x00, 0x3E, 0x7C, 0x00, 0x00, 0x79, 0xE0, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, - 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x1F, - 0xF0, 0x07, 0xFC, 0x01, 0xFE, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, - 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, - 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, - 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, 0x00, - 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x1E, - 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x0F, 0x00, - 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, - 0xE0, 0x00, 0x7F, 0xC0, 0x3F, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xE3, - 0x8E, 0x38, 0xE1, 0x86, 0x18, 0x61, 0x87, 0x1C, 0x71, 0xC7, 0x0C, 0x30, - 0xC3, 0x0C, 0x38, 0xE3, 0x8E, 0x38, 0x61, 0x86, 0x18, 0x61, 0xC7, 0x1C, - 0x71, 0xC0, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x07, 0xFC, 0x03, 0xFE, 0x00, - 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, - 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, - 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, - 0x3C, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, - 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x00, - 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x03, - 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x7F, 0x80, 0x3F, 0xE0, - 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1F, 0x00, - 0x1F, 0xC0, 0x0E, 0xE0, 0x0E, 0x70, 0x0F, 0x38, 0x07, 0x1C, 0x07, 0x0E, - 0x03, 0x83, 0x83, 0x81, 0xC3, 0xC0, 0xE1, 0xC0, 0x71, 0xC0, 0x39, 0xE0, - 0x0E, 0xE0, 0x07, 0xF0, 0x03, 0xF0, 0x01, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0x78, 0x3C, 0x1C, 0x0E, 0x0E, 0x07, 0x00, - 0x1F, 0xE0, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x7E, - 0x07, 0xE1, 0xF0, 0x07, 0xC3, 0xC0, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xF0, 0x00, 0x07, 0xE0, 0x0F, 0xFF, - 0xC0, 0xFF, 0xFF, 0x07, 0xFF, 0x9E, 0x1F, 0xC0, 0x3C, 0x7C, 0x00, 0x78, - 0xF0, 0x00, 0xF3, 0xC0, 0x03, 0xC7, 0x80, 0x07, 0x8F, 0x00, 0x1F, 0x1E, - 0x00, 0x7E, 0x3F, 0x07, 0xFC, 0x3F, 0xFF, 0x7E, 0x7F, 0xFC, 0xFC, 0x7F, - 0xF0, 0xF8, 0x3F, 0x00, 0xF0, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x83, 0xE0, 0x03, 0xC7, 0xFC, - 0x01, 0xEF, 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0xF7, 0x83, 0xF0, 0x7F, 0x00, - 0xF8, 0x3F, 0x00, 0x3E, 0x1F, 0x00, 0x0F, 0x1F, 0x80, 0x07, 0x8F, 0x80, - 0x03, 0xC7, 0x80, 0x01, 0xE3, 0xC0, 0x00, 0xF1, 0xE0, 0x00, 0x79, 0xF0, - 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0x78, 0x00, 0x1E, 0x3C, 0x00, 0x0F, 0x1E, - 0x00, 0x0F, 0x9F, 0x00, 0x07, 0x8F, 0xC0, 0x07, 0xC7, 0xE0, 0x07, 0xC3, - 0xF8, 0x07, 0xC1, 0xFE, 0x0F, 0xC1, 0xEF, 0xFF, 0xE0, 0xF3, 0xFF, 0xC0, - 0x78, 0xFF, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x03, 0xFF, - 0x80, 0x3F, 0xFF, 0x01, 0xFF, 0xFE, 0x0F, 0xE0, 0xF8, 0x7E, 0x01, 0xF1, - 0xF0, 0x03, 0xCF, 0x80, 0x0F, 0x3C, 0x00, 0x3D, 0xF0, 0x00, 0x07, 0x80, - 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x0F, 0x3C, - 0x00, 0x3C, 0xF8, 0x01, 0xE1, 0xF0, 0x0F, 0x87, 0xE0, 0xFC, 0x0F, 0xFF, - 0xE0, 0x3F, 0xFF, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x3F, 0x07, 0x80, 0x1F, 0xF8, 0xF0, 0x0F, 0xFF, 0x3E, 0x03, - 0xFF, 0xF7, 0x80, 0xFC, 0x1F, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xC0, 0x0F, - 0xC1, 0xF0, 0x01, 0xF0, 0x3C, 0x00, 0x3E, 0x0F, 0x80, 0x07, 0xC1, 0xE0, - 0x00, 0x78, 0x3C, 0x00, 0x1F, 0x0F, 0x80, 0x03, 0xC1, 0xE0, 0x00, 0x78, - 0x3C, 0x00, 0x0F, 0x07, 0x80, 0x01, 0xE0, 0xF0, 0x00, 0x7C, 0x1E, 0x00, - 0x0F, 0x03, 0xC0, 0x03, 0xE0, 0x78, 0x00, 0x7C, 0x0F, 0x80, 0x1F, 0x80, - 0xF8, 0x07, 0xF0, 0x1F, 0x83, 0xFC, 0x03, 0xFF, 0xFF, 0x80, 0x3F, 0xFE, - 0xF0, 0x03, 0xFF, 0x1E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x01, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0xFE, 0x0F, 0xC1, - 0xF0, 0x07, 0xC7, 0xC0, 0x0F, 0x8F, 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0x78, - 0x00, 0x3D, 0xE0, 0x00, 0x7B, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xBF, 0xFF, 0xFF, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xC0, 0x00, 0x07, 0x80, 0x03, 0xCF, 0x80, 0x0F, 0x0F, 0x80, 0x3E, - 0x1F, 0x81, 0xF8, 0x1F, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x1F, 0xFC, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x3E, 0x01, 0xFC, 0x07, 0xF8, 0x0F, 0xE0, 0x3E, - 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x07, 0xC0, 0x7F, 0xF0, 0xFF, 0xE3, - 0xFF, 0xC0, 0x78, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x3E, - 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x0F, 0x80, 0x1E, 0x00, - 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, - 0xFE, 0x3C, 0x01, 0xFF, 0xE7, 0x00, 0xFF, 0xFE, 0xE0, 0x1F, 0x83, 0xFC, - 0x07, 0xC0, 0x3F, 0x81, 0xF0, 0x03, 0xF0, 0x3C, 0x00, 0x7C, 0x0F, 0x00, - 0x0F, 0x81, 0xE0, 0x01, 0xF0, 0x78, 0x00, 0x3E, 0x0F, 0x00, 0x07, 0xC1, - 0xE0, 0x00, 0xF0, 0x38, 0x00, 0x1E, 0x0F, 0x00, 0x03, 0xC1, 0xE0, 0x00, - 0xF8, 0x3C, 0x00, 0x1F, 0x07, 0x80, 0x03, 0xC0, 0xF0, 0x00, 0xF8, 0x1E, - 0x00, 0x3F, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0x01, 0xF8, 0x07, 0xE0, 0xFF, - 0x00, 0x7F, 0xFD, 0xE0, 0x0F, 0xFF, 0x3C, 0x00, 0xFF, 0xCF, 0x00, 0x07, - 0xE1, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x01, 0xE0, 0x03, 0xE0, - 0x3C, 0x00, 0xF8, 0x07, 0xE0, 0x7F, 0x00, 0x7F, 0xFF, 0xC0, 0x0F, 0xFF, - 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x78, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x83, 0xF0, 0x0F, - 0x1F, 0xF0, 0x1E, 0xFF, 0xF0, 0x3F, 0xFF, 0xE0, 0xFF, 0x87, 0xE1, 0xFC, - 0x07, 0xC3, 0xF0, 0x07, 0x87, 0xC0, 0x0F, 0x1F, 0x00, 0x1E, 0x3E, 0x00, - 0x3C, 0x78, 0x00, 0x78, 0xF0, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0xC0, 0x07, - 0x8F, 0x00, 0x0F, 0x1E, 0x00, 0x1E, 0x3C, 0x00, 0x78, 0x78, 0x00, 0xF1, - 0xE0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, 0x80, 0x0F, 0x8F, 0x00, 0x1E, 0x1E, - 0x00, 0x3C, 0x78, 0x00, 0x78, 0xF0, 0x00, 0xF1, 0xE0, 0x03, 0xC0, 0x01, - 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x03, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, - 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x00, 0x00, 0x07, - 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x01, 0xE0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, - 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, - 0x07, 0x80, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, - 0xC0, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, - 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x01, 0xF0, 0x00, - 0x78, 0x00, 0x3E, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x0F, 0xE0, 0x03, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x0F, 0x81, 0xE0, 0x0F, 0x80, - 0xF0, 0x0F, 0x80, 0xF0, 0x1F, 0x00, 0x78, 0x1F, 0x00, 0x3C, 0x1F, 0x00, - 0x1E, 0x1F, 0x00, 0x1F, 0x1F, 0x00, 0x0F, 0x1E, 0x00, 0x07, 0xBF, 0x80, - 0x03, 0xFF, 0xC0, 0x01, 0xFD, 0xE0, 0x01, 0xFC, 0xF8, 0x00, 0xFC, 0x3C, - 0x00, 0x7C, 0x1F, 0x00, 0x3C, 0x07, 0x80, 0x1E, 0x03, 0xC0, 0x1F, 0x01, - 0xF0, 0x0F, 0x00, 0x78, 0x07, 0x80, 0x3E, 0x03, 0xC0, 0x0F, 0x01, 0xE0, - 0x07, 0x81, 0xE0, 0x03, 0xE0, 0xF0, 0x00, 0xF0, 0x78, 0x00, 0x7C, 0x00, - 0x01, 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x3C, 0x07, - 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x03, - 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, - 0xF0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x00, 0x00, - 0x07, 0xE0, 0x1F, 0x80, 0xF9, 0xFF, 0x07, 0xFC, 0x0F, 0x3F, 0xF8, 0xFF, - 0xE0, 0xF7, 0xFF, 0x9F, 0xFF, 0x0F, 0xF0, 0xFF, 0xC3, 0xF0, 0xFC, 0x07, - 0xF8, 0x1F, 0x1F, 0x80, 0x3F, 0x00, 0xF1, 0xF0, 0x03, 0xE0, 0x0F, 0x1E, - 0x00, 0x3C, 0x00, 0xF1, 0xE0, 0x03, 0xC0, 0x0F, 0x1E, 0x00, 0x3C, 0x00, - 0xF1, 0xE0, 0x07, 0x80, 0x0F, 0x3C, 0x00, 0x78, 0x01, 0xF3, 0xC0, 0x07, - 0x80, 0x1E, 0x3C, 0x00, 0x78, 0x01, 0xE3, 0xC0, 0x0F, 0x80, 0x1E, 0x3C, - 0x00, 0xF0, 0x01, 0xE7, 0xC0, 0x0F, 0x00, 0x3C, 0x78, 0x00, 0xF0, 0x03, - 0xC7, 0x80, 0x0F, 0x00, 0x3C, 0x78, 0x01, 0xE0, 0x03, 0xC7, 0x80, 0x1E, - 0x00, 0x3C, 0xF8, 0x01, 0xE0, 0x07, 0x8F, 0x00, 0x1E, 0x00, 0x78, 0xF0, - 0x01, 0xE0, 0x07, 0x8F, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x07, 0xE0, 0x1F, - 0x3F, 0xF0, 0x3C, 0xFF, 0xF0, 0x7B, 0xFF, 0xE0, 0xFF, 0x07, 0xE1, 0xF8, - 0x07, 0xC7, 0xE0, 0x07, 0x8F, 0x80, 0x0F, 0x1F, 0x00, 0x1E, 0x3C, 0x00, - 0x3C, 0x78, 0x00, 0x78, 0xF0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, 0x80, 0x07, - 0x8F, 0x00, 0x0F, 0x1E, 0x00, 0x3E, 0x3C, 0x00, 0x78, 0xF0, 0x00, 0xF1, - 0xE0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, 0x80, 0x0F, 0x8F, 0x00, 0x1E, 0x3E, - 0x00, 0x3C, 0x78, 0x00, 0x78, 0xF0, 0x00, 0xF1, 0xE0, 0x03, 0xC0, 0x00, - 0x1F, 0x80, 0x01, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0xFE, - 0x0F, 0xC1, 0xF0, 0x0F, 0x87, 0xC0, 0x0F, 0x8F, 0x00, 0x0F, 0x3C, 0x00, - 0x1E, 0x78, 0x00, 0x3D, 0xE0, 0x00, 0x7B, 0xC0, 0x00, 0xF7, 0x80, 0x01, - 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0x78, 0x00, 0x1E, 0xF0, 0x00, 0x3D, - 0xE0, 0x00, 0xF3, 0xC0, 0x01, 0xE7, 0x80, 0x07, 0x8F, 0x80, 0x1F, 0x0F, - 0x80, 0x7C, 0x1F, 0x83, 0xF8, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x1F, - 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x3C, 0x7F, 0xE0, - 0x07, 0xBF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x3D, 0xE0, 0xFC, 0x07, 0xF0, - 0x0F, 0x80, 0xFC, 0x00, 0xF8, 0x1F, 0x00, 0x0F, 0x07, 0xC0, 0x01, 0xE0, - 0xF8, 0x00, 0x3C, 0x1F, 0x00, 0x07, 0x83, 0xC0, 0x00, 0xF0, 0x78, 0x00, - 0x1E, 0x1F, 0x00, 0x03, 0xC3, 0xC0, 0x00, 0xF0, 0x78, 0x00, 0x1E, 0x0F, - 0x00, 0x03, 0xC3, 0xE0, 0x00, 0xF8, 0x7C, 0x00, 0x1E, 0x0F, 0x80, 0x07, - 0xC1, 0xF8, 0x01, 0xF0, 0x3F, 0x80, 0x7C, 0x0F, 0xF8, 0x3F, 0x81, 0xEF, - 0xFF, 0xE0, 0x3C, 0xFF, 0xF8, 0x07, 0x8F, 0xFC, 0x00, 0xF0, 0xFE, 0x00, - 0x3E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x03, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, - 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x3F, - 0xF8, 0xF0, 0x1F, 0xFF, 0x3C, 0x0F, 0xFF, 0xDF, 0x07, 0xE0, 0xFF, 0x83, - 0xE0, 0x1F, 0xE1, 0xF0, 0x03, 0xF8, 0x78, 0x00, 0xFE, 0x3C, 0x00, 0x1F, - 0x8F, 0x00, 0x07, 0xC7, 0x80, 0x01, 0xF1, 0xE0, 0x00, 0x7C, 0x78, 0x00, - 0x1F, 0x3C, 0x00, 0x0F, 0x8F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0xF8, 0xF0, - 0x00, 0x3E, 0x3C, 0x00, 0x1F, 0x8F, 0x00, 0x0F, 0xC3, 0xC0, 0x03, 0xF0, - 0xF8, 0x01, 0xFC, 0x1F, 0x00, 0xFF, 0x07, 0xE0, 0xFF, 0xC0, 0xFF, 0xFD, - 0xE0, 0x1F, 0xFE, 0x78, 0x03, 0xFF, 0x3E, 0x00, 0x3F, 0x0F, 0x80, 0x00, - 0x03, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0x87, 0xCF, 0xC3, 0xCF, 0xE1, 0xEF, - 0xE0, 0xFF, 0x80, 0x7F, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x0F, - 0x00, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, - 0x03, 0xC0, 0x03, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x07, 0xFF, 0x00, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0xFC, - 0x1F, 0x87, 0x80, 0x3C, 0x7C, 0x01, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x00, - 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xE0, 0x03, 0xFF, - 0xC0, 0x07, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xBC, - 0x00, 0x3D, 0xE0, 0x01, 0xEF, 0x00, 0x1F, 0x7C, 0x01, 0xF3, 0xF0, 0x1F, - 0x8F, 0xFF, 0xF8, 0x7F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFE, 0x00, 0x03, - 0xC0, 0x1E, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC1, 0xFF, 0xEF, 0xFF, - 0x7F, 0xF0, 0x78, 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, - 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x3C, 0x01, 0xE0, - 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3C, 0x01, 0xE0, 0x0F, 0xF0, 0x7F, 0x81, - 0xF8, 0x07, 0xC0, 0x0F, 0x00, 0x0F, 0x0F, 0x00, 0x1E, 0x0F, 0x00, 0x1E, - 0x1F, 0x00, 0x1E, 0x1E, 0x00, 0x1E, 0x1E, 0x00, 0x1E, 0x1E, 0x00, 0x3C, - 0x1E, 0x00, 0x3C, 0x3E, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x3C, 0x00, 0x3C, - 0x3C, 0x00, 0x7C, 0x3C, 0x00, 0x78, 0x78, 0x00, 0x78, 0x78, 0x00, 0x78, - 0x78, 0x00, 0x78, 0x78, 0x00, 0xF8, 0x78, 0x00, 0xF0, 0xF0, 0x01, 0xF0, - 0xF0, 0x03, 0xF0, 0xF0, 0x07, 0xF0, 0xF8, 0x1F, 0xF0, 0xFF, 0xFF, 0xE0, - 0x7F, 0xFD, 0xE0, 0x3F, 0xF1, 0xE0, 0x1F, 0xC0, 0x00, 0xF0, 0x00, 0x7F, - 0xC0, 0x01, 0xEF, 0x00, 0x0F, 0xBC, 0x00, 0x3C, 0x78, 0x01, 0xE1, 0xE0, - 0x07, 0x87, 0x80, 0x3C, 0x1E, 0x01, 0xF0, 0x78, 0x07, 0x81, 0xE0, 0x3E, - 0x07, 0x80, 0xF0, 0x1E, 0x07, 0x80, 0x38, 0x1E, 0x00, 0xF0, 0xF0, 0x03, - 0xC7, 0xC0, 0x0F, 0x1E, 0x00, 0x3C, 0xF0, 0x00, 0xF3, 0xC0, 0x03, 0xDE, - 0x00, 0x07, 0x78, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, - 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x07, 0xC0, 0x0F, 0x78, 0x03, - 0xE0, 0x0F, 0xBC, 0x03, 0xF0, 0x07, 0x9E, 0x01, 0xF8, 0x03, 0xCF, 0x00, - 0xFC, 0x03, 0xC7, 0x80, 0xFE, 0x01, 0xE3, 0xC0, 0x77, 0x01, 0xE0, 0xE0, - 0x7B, 0x80, 0xF0, 0x70, 0x39, 0xC0, 0xF0, 0x38, 0x3C, 0xE0, 0x78, 0x1C, - 0x1E, 0x78, 0x78, 0x0F, 0x1E, 0x3C, 0x3C, 0x07, 0x8F, 0x1E, 0x3C, 0x03, - 0xC7, 0x0F, 0x1E, 0x01, 0xE7, 0x87, 0x9E, 0x00, 0xF3, 0x81, 0xCF, 0x00, - 0x7B, 0xC0, 0xEF, 0x00, 0x3D, 0xC0, 0x77, 0x80, 0x1F, 0xE0, 0x3F, 0x80, - 0x0F, 0xF0, 0x1F, 0xC0, 0x07, 0xF0, 0x0F, 0xC0, 0x01, 0xF8, 0x07, 0xE0, - 0x00, 0xF8, 0x03, 0xE0, 0x00, 0x7C, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0xF0, - 0x00, 0x00, 0x03, 0xC0, 0x07, 0xC0, 0xF8, 0x01, 0xE0, 0x1E, 0x00, 0xF0, - 0x07, 0x80, 0x78, 0x00, 0xF0, 0x3C, 0x00, 0x3C, 0x1F, 0x00, 0x0F, 0x8F, - 0x80, 0x01, 0xE7, 0xC0, 0x00, 0x7D, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x07, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xF7, 0x80, 0x00, 0xF9, 0xF0, - 0x00, 0x3C, 0x3C, 0x00, 0x1E, 0x0F, 0x80, 0x0F, 0x01, 0xE0, 0x07, 0x80, - 0x7C, 0x03, 0xE0, 0x0F, 0x01, 0xF0, 0x03, 0xE0, 0xF8, 0x00, 0x78, 0x00, - 0x03, 0xC0, 0x01, 0xE0, 0x78, 0x00, 0x78, 0x0F, 0x00, 0x0F, 0x01, 0xE0, - 0x03, 0xC0, 0x3C, 0x00, 0x78, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x07, 0xC0, - 0x0F, 0x00, 0xF0, 0x01, 0xE0, 0x3C, 0x00, 0x3C, 0x07, 0x80, 0x07, 0x81, - 0xE0, 0x00, 0xF0, 0x3C, 0x00, 0x1E, 0x0F, 0x00, 0x03, 0xC1, 0xC0, 0x00, - 0x3C, 0x78, 0x00, 0x07, 0x9E, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x1E, 0xF0, - 0x00, 0x03, 0xDE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xE0, - 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, - 0x00, 0x01, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x01, 0xE0, - 0x00, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, - 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, - 0x00, 0x03, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x7E, 0x00, 0xFE, - 0x00, 0xF0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, - 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF8, 0x00, - 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, - 0x38, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x78, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x7C, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x60, 0x06, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0x80, 0x38, 0x03, 0x80, 0x38, 0x03, 0x00, - 0x30, 0x07, 0x00, 0x70, 0x07, 0x00, 0x60, 0x0E, 0x00, 0xE0, 0x0E, 0x00, - 0xE0, 0x0C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0x80, 0x38, 0x03, - 0x80, 0x38, 0x03, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x60, 0x0E, - 0x00, 0xE0, 0x06, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x0F, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x1E, - 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x1C, - 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0F, - 0x00, 0x07, 0x00, 0x1F, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF0, - 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xE0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, - 0x0F, 0x00, 0x7F, 0x00, 0x7E, 0x00, 0xF8, 0x00, 0x0F, 0x00, 0x01, 0xFE, - 0x00, 0xCF, 0xFC, 0x0E, 0xE3, 0xF0, 0xE6, 0x07, 0xFF, 0x60, 0x0F, 0xF0, - 0x00, 0x1E, 0x00}; - -const GFXglyph FreeSansOblique24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 13, 0, 1}, // 0x20 ' ' - {0, 11, 34, 13, 6, -33}, // 0x21 '!' - {47, 13, 12, 17, 8, -32}, // 0x22 '"' - {67, 28, 34, 26, 3, -32}, // 0x23 '#' - {186, 26, 42, 26, 3, -35}, // 0x24 '$' - {323, 36, 34, 42, 6, -32}, // 0x25 '%' - {476, 26, 34, 31, 4, -32}, // 0x26 '&' - {587, 5, 12, 9, 8, -32}, // 0x27 ''' - {595, 15, 44, 16, 5, -33}, // 0x28 '(' - {678, 15, 44, 16, 1, -33}, // 0x29 ')' - {761, 14, 13, 18, 8, -33}, // 0x2A '*' - {784, 23, 22, 27, 5, -20}, // 0x2B '+' - {848, 7, 12, 13, 3, -4}, // 0x2C ',' - {859, 12, 4, 16, 5, -14}, // 0x2D '-' - {865, 6, 5, 13, 4, -4}, // 0x2E '.' - {869, 21, 35, 13, -1, -33}, // 0x2F '/' - {961, 23, 34, 26, 5, -32}, // 0x30 '0' - {1059, 13, 33, 26, 10, -32}, // 0x31 '1' - {1113, 27, 33, 26, 2, -32}, // 0x32 '2' - {1225, 25, 34, 26, 3, -32}, // 0x33 '3' - {1332, 24, 33, 26, 3, -32}, // 0x34 '4' - {1431, 27, 34, 26, 3, -32}, // 0x35 '5' - {1546, 24, 34, 26, 4, -32}, // 0x36 '6' - {1648, 26, 33, 26, 6, -32}, // 0x37 '7' - {1756, 25, 34, 26, 3, -32}, // 0x38 '8' - {1863, 24, 34, 26, 4, -32}, // 0x39 '9' - {1965, 10, 25, 13, 5, -24}, // 0x3A ':' - {1997, 11, 32, 13, 4, -24}, // 0x3B ';' - {2041, 26, 23, 27, 4, -22}, // 0x3C '<' - {2116, 26, 12, 27, 3, -16}, // 0x3D '=' - {2155, 26, 23, 27, 2, -21}, // 0x3E '>' - {2230, 20, 35, 26, 9, -34}, // 0x3F '?' - {2318, 45, 42, 48, 4, -34}, // 0x40 '@' - {2555, 30, 34, 31, 1, -33}, // 0x41 'A' - {2683, 29, 34, 31, 4, -33}, // 0x42 'B' - {2807, 30, 36, 33, 5, -34}, // 0x43 'C' - {2942, 31, 34, 33, 4, -33}, // 0x44 'D' - {3074, 31, 34, 31, 4, -33}, // 0x45 'E' - {3206, 30, 34, 28, 4, -33}, // 0x46 'F' - {3334, 33, 36, 37, 5, -34}, // 0x47 'G' - {3483, 33, 34, 34, 4, -33}, // 0x48 'H' - {3624, 11, 34, 13, 5, -33}, // 0x49 'I' - {3671, 25, 35, 24, 2, -33}, // 0x4A 'J' - {3781, 34, 34, 31, 4, -33}, // 0x4B 'K' - {3926, 22, 34, 26, 4, -33}, // 0x4C 'L' - {4020, 39, 34, 40, 4, -33}, // 0x4D 'M' - {4186, 34, 34, 34, 4, -33}, // 0x4E 'N' - {4331, 33, 36, 36, 5, -34}, // 0x4F 'O' - {4480, 29, 34, 30, 4, -33}, // 0x50 'P' - {4604, 33, 38, 36, 5, -34}, // 0x51 'Q' - {4761, 30, 34, 33, 4, -33}, // 0x52 'R' - {4889, 29, 36, 31, 4, -34}, // 0x53 'S' - {5020, 28, 34, 29, 7, -33}, // 0x54 'T' - {5139, 31, 35, 34, 6, -33}, // 0x55 'U' - {5275, 29, 34, 30, 8, -33}, // 0x56 'V' - {5399, 43, 34, 44, 8, -33}, // 0x57 'W' - {5582, 36, 34, 31, 1, -33}, // 0x58 'X' - {5735, 30, 34, 32, 8, -33}, // 0x59 'Y' - {5863, 34, 34, 29, 1, -33}, // 0x5A 'Z' - {6008, 18, 44, 13, 1, -33}, // 0x5B '[' - {6107, 6, 35, 13, 7, -33}, // 0x5C '\' - {6134, 18, 44, 13, -1, -33}, // 0x5D ']' - {6233, 17, 18, 22, 6, -32}, // 0x5E '^' - {6272, 29, 2, 26, -3, 7}, // 0x5F '_' - {6280, 8, 7, 16, 8, -34}, // 0x60 '`' - {6287, 23, 27, 26, 3, -25}, // 0x61 'a' - {6365, 25, 35, 26, 3, -33}, // 0x62 'b' - {6475, 22, 27, 24, 4, -25}, // 0x63 'c' - {6550, 27, 35, 26, 4, -33}, // 0x64 'd' - {6669, 23, 27, 26, 4, -25}, // 0x65 'e' - {6747, 15, 34, 12, 3, -33}, // 0x66 'f' - {6811, 27, 36, 26, 2, -25}, // 0x67 'g' - {6933, 23, 34, 25, 3, -33}, // 0x68 'h' - {7031, 11, 34, 10, 3, -33}, // 0x69 'i' - {7078, 18, 44, 11, -2, -33}, // 0x6A 'j' - {7177, 25, 34, 24, 3, -33}, // 0x6B 'k' - {7284, 11, 34, 10, 3, -33}, // 0x6C 'l' - {7331, 36, 26, 38, 3, -25}, // 0x6D 'm' - {7448, 23, 26, 25, 3, -25}, // 0x6E 'n' - {7523, 23, 27, 26, 4, -25}, // 0x6F 'o' - {7601, 27, 36, 26, 1, -25}, // 0x70 'p' - {7723, 26, 36, 26, 3, -25}, // 0x71 'q' - {7840, 17, 26, 15, 3, -25}, // 0x72 'r' - {7896, 21, 27, 24, 3, -25}, // 0x73 's' - {7967, 13, 32, 12, 4, -30}, // 0x74 't' - {8019, 24, 26, 25, 4, -24}, // 0x75 'u' - {8097, 22, 25, 23, 6, -24}, // 0x76 'v' - {8166, 33, 25, 34, 6, -24}, // 0x77 'w' - {8270, 26, 25, 23, 1, -24}, // 0x78 'x' - {8352, 27, 35, 23, 0, -24}, // 0x79 'y' - {8471, 25, 25, 23, 1, -24}, // 0x7A 'z' - {8550, 16, 44, 16, 5, -33}, // 0x7B '{' - {8638, 12, 44, 12, 3, -33}, // 0x7C '|' - {8704, 16, 44, 16, -1, -33}, // 0x7D '}' - {8792, 21, 7, 27, 6, -19}}; // 0x7E '~' - -const GFXfont FreeSansOblique24pt7b PROGMEM = { - (uint8_t *)FreeSansOblique24pt7bBitmaps, - (GFXglyph *)FreeSansOblique24pt7bGlyphs, 0x20, 0x7E, 56}; - -// Approx. 9483 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique9pt7b.h deleted file mode 100644 index 0b5db81..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSansOblique9pt7b.h +++ /dev/null @@ -1,222 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSansOblique9pt7bBitmaps[] PROGMEM = { - 0x10, 0x84, 0x22, 0x10, 0x84, 0x42, 0x10, 0x08, 0x00, 0xDE, 0xE5, 0x20, - 0x06, 0x40, 0x88, 0x13, 0x06, 0x43, 0xFE, 0x32, 0x04, 0x40, 0x98, 0x32, - 0x1F, 0xF0, 0x98, 0x22, 0x04, 0xC0, 0x02, 0x01, 0xF8, 0x6B, 0x99, 0x33, - 0x40, 0x68, 0x0F, 0x00, 0xF8, 0x07, 0xC1, 0x1B, 0x23, 0x64, 0x4E, 0x98, - 0xFC, 0x04, 0x00, 0x80, 0x3C, 0x08, 0xCC, 0x23, 0x18, 0x86, 0x32, 0x0C, - 0x64, 0x19, 0x90, 0x1E, 0x40, 0x01, 0x1E, 0x02, 0x66, 0x09, 0x8C, 0x23, - 0x18, 0x86, 0x62, 0x07, 0x80, 0x0F, 0x06, 0x63, 0x18, 0xC6, 0x3F, 0x07, - 0x03, 0xC1, 0xB3, 0xC7, 0xB0, 0xCC, 0x33, 0x3E, 0x79, 0x80, 0xFA, 0x04, - 0x10, 0x60, 0x83, 0x04, 0x18, 0x30, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x10, - 0x30, 0x20, 0x08, 0x18, 0x10, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x18, 0x30, - 0x41, 0x82, 0x0C, 0x10, 0x40, 0x19, 0x73, 0x16, 0x48, 0x04, 0x04, 0x02, - 0x1F, 0xF0, 0x80, 0x80, 0x40, 0x20, 0x6D, 0x28, 0xF0, 0xC0, 0x01, 0x02, - 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x0F, - 0x19, 0xC8, 0x6C, 0x36, 0x1A, 0x0F, 0x05, 0x86, 0xC3, 0x61, 0xB1, 0x9C, - 0x87, 0x80, 0x08, 0xCD, 0xE3, 0x18, 0xC4, 0x23, 0x18, 0xC4, 0x00, 0x07, - 0x83, 0x1C, 0x41, 0x98, 0x30, 0x06, 0x01, 0x80, 0x60, 0x38, 0x1C, 0x06, - 0x01, 0x80, 0x20, 0x0F, 0xF8, 0x0F, 0x86, 0x73, 0x0C, 0x83, 0x00, 0xC0, - 0x60, 0xE0, 0x06, 0x01, 0xB0, 0x6C, 0x13, 0x8C, 0x7C, 0x00, 0x00, 0x80, - 0xC0, 0xE0, 0xA0, 0x90, 0x98, 0x8C, 0x86, 0xFF, 0x81, 0x01, 0x80, 0xC0, - 0x60, 0x0F, 0xC3, 0x00, 0x40, 0x08, 0x03, 0x00, 0x7F, 0x1C, 0x70, 0x06, - 0x00, 0xC0, 0x1B, 0x06, 0x71, 0x87, 0xE0, 0x0F, 0x86, 0x73, 0x0D, 0x80, - 0x60, 0x1F, 0xCF, 0x3B, 0x86, 0xC1, 0xB0, 0x6C, 0x33, 0x98, 0x3C, 0x00, - 0x7F, 0xC0, 0x20, 0x10, 0x0C, 0x06, 0x01, 0x00, 0x80, 0x60, 0x10, 0x0C, - 0x02, 0x01, 0x80, 0x40, 0x00, 0x0F, 0x86, 0x73, 0x0C, 0xC3, 0x30, 0xCC, - 0x61, 0xE1, 0x86, 0x41, 0xB0, 0x6C, 0x13, 0x8C, 0x3E, 0x00, 0x0F, 0x06, - 0x73, 0x0D, 0x83, 0x60, 0xD8, 0x77, 0x3C, 0xFE, 0x01, 0x80, 0x6C, 0x33, - 0x98, 0x7C, 0x00, 0x30, 0x00, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x00, - 0x0C, 0x62, 0x11, 0x00, 0x00, 0x01, 0xC3, 0x8F, 0x0C, 0x07, 0x00, 0xE0, - 0x1E, 0x01, 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x40, 0x3C, 0x03, 0x80, - 0x70, 0x18, 0x78, 0xE1, 0xC0, 0x00, 0x00, 0x1F, 0x30, 0xD0, 0x78, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xFE, - 0x00, 0xC0, 0xE0, 0xC0, 0x18, 0x61, 0xD3, 0x31, 0x9C, 0xD8, 0xC2, 0x36, - 0x31, 0x8F, 0x18, 0x67, 0xC6, 0x11, 0xB1, 0x8C, 0xCC, 0x67, 0x63, 0x0E, - 0xF0, 0x60, 0x00, 0x1C, 0x00, 0x01, 0x81, 0x00, 0x1F, 0xC0, 0x01, 0xC0, - 0x1C, 0x03, 0xC0, 0x24, 0x06, 0x60, 0x46, 0x0C, 0x61, 0x86, 0x1F, 0xE3, - 0x06, 0x20, 0x26, 0x03, 0x40, 0x30, 0x1F, 0xE1, 0x87, 0x30, 0x33, 0x03, - 0x30, 0x23, 0x06, 0x3F, 0xC6, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x0C, - 0x7F, 0x80, 0x07, 0xC1, 0x86, 0x30, 0x32, 0x03, 0x60, 0x04, 0x00, 0xC0, - 0x0C, 0x00, 0xC0, 0x6C, 0x06, 0xC0, 0xC6, 0x18, 0x3E, 0x00, 0x1F, 0xE0, - 0xC1, 0x84, 0x06, 0x60, 0x33, 0x01, 0x98, 0x0C, 0x80, 0x64, 0x02, 0x60, - 0x33, 0x01, 0x98, 0x18, 0x81, 0x87, 0xF0, 0x00, 0x1F, 0xF1, 0x80, 0x10, - 0x03, 0x00, 0x30, 0x03, 0x00, 0x3F, 0xE2, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x04, 0x00, 0x7F, 0xC0, 0x1F, 0xF1, 0x80, 0x10, 0x03, 0x00, 0x30, 0x03, - 0x00, 0x3F, 0xC2, 0x00, 0x60, 0x06, 0x00, 0x60, 0x04, 0x00, 0x40, 0x00, - 0x07, 0xE0, 0xE1, 0x8C, 0x06, 0xC0, 0x36, 0x00, 0x60, 0x03, 0x07, 0xF8, - 0x02, 0xC0, 0x36, 0x01, 0x98, 0x1C, 0xE1, 0xC1, 0xF2, 0x00, 0x18, 0x08, - 0xC0, 0xC4, 0x06, 0x60, 0x33, 0x01, 0x18, 0x18, 0xFF, 0xC4, 0x06, 0x60, - 0x23, 0x01, 0x18, 0x18, 0x80, 0xC4, 0x06, 0x00, 0x33, 0x32, 0x26, 0x66, - 0x44, 0xCC, 0xC0, 0x00, 0xC0, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x30, - 0x0C, 0x03, 0x30, 0xCC, 0x63, 0x18, 0x7C, 0x00, 0x18, 0x18, 0x60, 0xC1, - 0x0E, 0x0C, 0x60, 0x33, 0x00, 0xD8, 0x03, 0xF0, 0x0C, 0xC0, 0x61, 0x81, - 0x86, 0x06, 0x0C, 0x10, 0x30, 0x40, 0x60, 0x18, 0x0C, 0x04, 0x06, 0x03, - 0x01, 0x80, 0xC0, 0x40, 0x60, 0x30, 0x18, 0x08, 0x07, 0xF8, 0x18, 0x06, - 0x18, 0x0E, 0x18, 0x0E, 0x34, 0x1E, 0x34, 0x36, 0x34, 0x34, 0x24, 0x64, - 0x24, 0x6C, 0x64, 0xCC, 0x64, 0x8C, 0x65, 0x88, 0x43, 0x08, 0x43, 0x18, - 0x18, 0x08, 0xE0, 0x47, 0x06, 0x6C, 0x33, 0x61, 0x99, 0x08, 0x8C, 0xC4, - 0x66, 0x61, 0xB3, 0x0D, 0x18, 0x38, 0x81, 0xC4, 0x06, 0x00, 0x07, 0xC0, - 0xC3, 0x8C, 0x0E, 0xC0, 0x36, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, - 0x36, 0x01, 0xB8, 0x18, 0xE1, 0x81, 0xF0, 0x00, 0x1F, 0xE1, 0x83, 0x10, - 0x33, 0x03, 0x30, 0x33, 0x06, 0x3F, 0xC2, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x04, 0x00, 0x40, 0x00, 0x07, 0xC0, 0xC3, 0x8C, 0x0E, 0xC0, 0x36, 0x01, - 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x36, 0x09, 0xB8, 0x78, 0xE3, 0x81, - 0xF6, 0x00, 0x10, 0x1F, 0xF0, 0xC0, 0xC4, 0x06, 0x60, 0x33, 0x01, 0x18, - 0x18, 0xFF, 0x04, 0x0C, 0x60, 0x63, 0x03, 0x18, 0x18, 0x80, 0xC4, 0x06, - 0x00, 0x07, 0xC1, 0x87, 0x30, 0x33, 0x03, 0x30, 0x03, 0xC0, 0x0F, 0xC0, - 0x1E, 0x00, 0x6C, 0x06, 0xC0, 0x46, 0x0C, 0x3F, 0x00, 0xFF, 0xC3, 0x00, - 0xC0, 0x20, 0x18, 0x06, 0x01, 0x80, 0x60, 0x10, 0x0C, 0x03, 0x00, 0xC0, - 0x20, 0x00, 0x30, 0x13, 0x03, 0x20, 0x36, 0x03, 0x60, 0x26, 0x06, 0x60, - 0x64, 0x06, 0xC0, 0x6C, 0x04, 0xC0, 0xCE, 0x18, 0x3E, 0x00, 0xC0, 0x78, - 0x0B, 0x03, 0x20, 0xC4, 0x18, 0xC6, 0x18, 0x83, 0x30, 0x64, 0x0D, 0x80, - 0xA0, 0x1C, 0x03, 0x00, 0xC1, 0x83, 0xC1, 0x83, 0xC3, 0x86, 0xC2, 0x86, - 0xC6, 0x84, 0xC4, 0x8C, 0xCC, 0xC8, 0xC8, 0xD8, 0xD8, 0xD0, 0xD0, 0xF0, - 0x70, 0xE0, 0x60, 0xE0, 0x60, 0xE0, 0x0C, 0x0C, 0x30, 0x60, 0x63, 0x01, - 0x98, 0x02, 0xC0, 0x0E, 0x00, 0x38, 0x01, 0xE0, 0x0C, 0x80, 0x33, 0x01, - 0x8C, 0x0C, 0x18, 0x60, 0x60, 0xC0, 0x66, 0x0C, 0x60, 0xC2, 0x18, 0x33, - 0x03, 0x60, 0x1C, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x00, 0x30, - 0x00, 0x1F, 0xF0, 0x07, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, - 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x00, 0xFF, 0xC0, 0x0E, 0x10, 0x20, - 0x41, 0x02, 0x04, 0x08, 0x20, 0x40, 0x81, 0x04, 0x08, 0x10, 0x20, 0xE0, - 0xAA, 0xA9, 0x55, 0x40, 0x0E, 0x08, 0x10, 0x20, 0x41, 0x02, 0x04, 0x08, - 0x20, 0x40, 0x81, 0x04, 0x08, 0x10, 0xE0, 0x0C, 0x18, 0x51, 0xA2, 0x4C, - 0x50, 0x80, 0xFF, 0xE0, 0xC8, 0x80, 0x0F, 0x86, 0x33, 0x0C, 0x03, 0x03, - 0xDF, 0xEE, 0x0B, 0x02, 0xC1, 0x9F, 0xE0, 0x10, 0x04, 0x01, 0x00, 0xDC, - 0x39, 0x88, 0x32, 0x0D, 0x83, 0x40, 0xD0, 0x64, 0x1B, 0x8C, 0xBC, 0x00, - 0x1F, 0x18, 0xD8, 0x6C, 0x0C, 0x06, 0x03, 0x01, 0x86, 0x66, 0x3E, 0x00, - 0x00, 0x20, 0x08, 0x01, 0x0F, 0x23, 0x14, 0xC1, 0x18, 0x26, 0x04, 0xC0, - 0x98, 0x23, 0x04, 0x71, 0x87, 0xD0, 0x0F, 0x0C, 0x76, 0x0D, 0x83, 0xFF, - 0xF0, 0x0C, 0x03, 0x06, 0x63, 0x0F, 0x80, 0x1C, 0xC2, 0x1E, 0x20, 0x84, - 0x10, 0x41, 0x04, 0x20, 0x80, 0x0F, 0x46, 0x33, 0x0C, 0xC1, 0x60, 0xD8, - 0x26, 0x09, 0x86, 0x71, 0x8F, 0xE0, 0x10, 0x04, 0xC2, 0x1F, 0x00, 0x10, - 0x04, 0x01, 0x00, 0x9F, 0x39, 0x88, 0x22, 0x09, 0x02, 0x40, 0x90, 0x44, - 0x12, 0x04, 0x81, 0x00, 0x10, 0x02, 0x22, 0x64, 0x44, 0x48, 0x80, 0x04, - 0x00, 0x01, 0x08, 0x20, 0x82, 0x08, 0x41, 0x04, 0x10, 0x42, 0x08, 0xE0, - 0x10, 0x08, 0x04, 0x04, 0x32, 0x31, 0x20, 0xA0, 0xB8, 0x6C, 0x22, 0x11, - 0x90, 0xC8, 0x30, 0x11, 0x22, 0x22, 0x64, 0x44, 0x48, 0x80, 0x2F, 0x3C, - 0x63, 0x8C, 0x86, 0x19, 0x08, 0x44, 0x10, 0x88, 0x21, 0x10, 0x82, 0x21, - 0x04, 0x82, 0x11, 0x04, 0x20, 0x00, 0x0B, 0xF3, 0x18, 0x82, 0x20, 0x90, - 0x24, 0x09, 0x04, 0x41, 0x20, 0x48, 0x10, 0x0F, 0x0C, 0x76, 0x0D, 0x83, - 0xC0, 0xF0, 0x3C, 0x1B, 0x06, 0xE3, 0x0F, 0x00, 0x17, 0xC3, 0x1C, 0x41, - 0x98, 0x32, 0x06, 0x40, 0xC8, 0x33, 0x06, 0x71, 0x8B, 0xC1, 0x00, 0x20, - 0x08, 0x01, 0x00, 0x00, 0x1E, 0xCC, 0x66, 0x09, 0x82, 0xC0, 0xB0, 0x4C, - 0x13, 0x04, 0x63, 0x0F, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x2C, 0x60, - 0x81, 0x04, 0x08, 0x10, 0x20, 0x81, 0x00, 0x1E, 0x33, 0x63, 0x60, 0x70, - 0x1E, 0x03, 0xC3, 0xC6, 0x7C, 0x22, 0xF2, 0x44, 0x44, 0xCC, 0xCE, 0x21, - 0x20, 0x90, 0x48, 0x24, 0x12, 0x13, 0x09, 0x84, 0xE6, 0x3E, 0x00, 0xC1, - 0xE1, 0xB0, 0xC8, 0xC4, 0x43, 0x61, 0xA0, 0xF0, 0x70, 0x18, 0x00, 0xC7, - 0x1E, 0x38, 0xB3, 0xCD, 0x96, 0x4C, 0xB6, 0x6D, 0xB1, 0x4D, 0x0E, 0x78, - 0x63, 0x83, 0x1C, 0x00, 0x10, 0xC3, 0x10, 0x24, 0x07, 0x80, 0xE0, 0x1C, - 0x07, 0x81, 0x90, 0x23, 0x08, 0x20, 0x30, 0x46, 0x18, 0x42, 0x08, 0xC1, - 0x10, 0x24, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x00, 0x60, 0x08, 0x03, 0x01, - 0xC0, 0x00, 0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, - 0x7F, 0x00, 0x18, 0x88, 0x42, 0x10, 0x88, 0xC3, 0x18, 0x88, 0x42, 0x18, - 0xE0, 0x11, 0x22, 0x22, 0x24, 0x44, 0x4C, 0x88, 0x88, 0x00, 0x38, 0xC2, - 0x10, 0x88, 0xC6, 0x18, 0x88, 0x42, 0x10, 0x88, 0xC0, 0x70, 0x4E, 0x41, - 0xC0}; - -const GFXglyph FreeSansOblique9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 5, 13, 5, 2, -12}, // 0x21 '!' - {9, 5, 4, 6, 3, -12}, // 0x22 '"' - {12, 11, 13, 10, 1, -12}, // 0x23 '#' - {30, 11, 16, 10, 1, -13}, // 0x24 '$' - {52, 15, 13, 16, 2, -12}, // 0x25 '%' - {77, 10, 13, 12, 2, -12}, // 0x26 '&' - {94, 2, 4, 3, 3, -12}, // 0x27 ''' - {95, 7, 17, 6, 2, -12}, // 0x28 '(' - {110, 7, 17, 6, -1, -12}, // 0x29 ')' - {125, 6, 5, 7, 3, -12}, // 0x2A '*' - {129, 9, 8, 11, 2, -7}, // 0x2B '+' - {138, 3, 5, 5, 1, -1}, // 0x2C ',' - {140, 4, 1, 6, 2, -4}, // 0x2D '-' - {141, 2, 1, 5, 2, 0}, // 0x2E '.' - {142, 8, 13, 5, 0, -12}, // 0x2F '/' - {155, 9, 13, 10, 2, -12}, // 0x30 '0' - {170, 5, 13, 10, 4, -12}, // 0x31 '1' - {179, 11, 13, 10, 1, -12}, // 0x32 '2' - {197, 10, 13, 10, 1, -12}, // 0x33 '3' - {214, 9, 13, 10, 1, -12}, // 0x34 '4' - {229, 11, 13, 10, 1, -12}, // 0x35 '5' - {247, 10, 13, 10, 2, -12}, // 0x36 '6' - {264, 10, 13, 10, 2, -12}, // 0x37 '7' - {281, 10, 13, 10, 1, -12}, // 0x38 '8' - {298, 10, 13, 10, 1, -12}, // 0x39 '9' - {315, 4, 9, 5, 2, -8}, // 0x3A ':' - {320, 5, 12, 5, 1, -8}, // 0x3B ';' - {328, 9, 9, 11, 2, -8}, // 0x3C '<' - {339, 10, 4, 11, 1, -5}, // 0x3D '=' - {344, 9, 9, 11, 1, -7}, // 0x3E '>' - {355, 9, 13, 10, 3, -12}, // 0x3F '?' - {370, 18, 16, 18, 1, -12}, // 0x40 '@' - {406, 12, 13, 12, 0, -12}, // 0x41 'A' - {426, 12, 13, 12, 1, -12}, // 0x42 'B' - {446, 12, 13, 13, 2, -12}, // 0x43 'C' - {466, 13, 13, 13, 1, -12}, // 0x44 'D' - {488, 12, 13, 12, 1, -12}, // 0x45 'E' - {508, 12, 13, 11, 1, -12}, // 0x46 'F' - {528, 13, 13, 14, 2, -12}, // 0x47 'G' - {550, 13, 13, 13, 1, -12}, // 0x48 'H' - {572, 4, 13, 5, 2, -12}, // 0x49 'I' - {579, 10, 13, 9, 1, -12}, // 0x4A 'J' - {596, 14, 13, 12, 1, -12}, // 0x4B 'K' - {619, 9, 13, 10, 1, -12}, // 0x4C 'L' - {634, 16, 13, 15, 1, -12}, // 0x4D 'M' - {660, 13, 13, 13, 1, -12}, // 0x4E 'N' - {682, 13, 13, 14, 2, -12}, // 0x4F 'O' - {704, 12, 13, 12, 1, -12}, // 0x50 'P' - {724, 13, 14, 14, 2, -12}, // 0x51 'Q' - {747, 13, 13, 13, 1, -12}, // 0x52 'R' - {769, 12, 13, 12, 1, -12}, // 0x53 'S' - {789, 10, 13, 11, 3, -12}, // 0x54 'T' - {806, 12, 13, 13, 2, -12}, // 0x55 'U' - {826, 11, 13, 12, 3, -12}, // 0x56 'V' - {844, 16, 13, 17, 3, -12}, // 0x57 'W' - {870, 14, 13, 12, 0, -12}, // 0x58 'X' - {893, 12, 13, 12, 3, -12}, // 0x59 'Y' - {913, 12, 13, 11, 1, -12}, // 0x5A 'Z' - {933, 7, 17, 5, 0, -12}, // 0x5B '[' - {948, 2, 13, 5, 3, -12}, // 0x5C '\' - {952, 7, 17, 5, 0, -12}, // 0x5D ']' - {967, 7, 7, 8, 2, -12}, // 0x5E '^' - {974, 11, 1, 10, -1, 3}, // 0x5F '_' - {976, 3, 3, 6, 3, -12}, // 0x60 '`' - {978, 10, 10, 10, 1, -9}, // 0x61 'a' - {991, 10, 13, 10, 1, -12}, // 0x62 'b' - {1008, 9, 10, 9, 1, -9}, // 0x63 'c' - {1020, 11, 13, 10, 1, -12}, // 0x64 'd' - {1038, 10, 10, 10, 1, -9}, // 0x65 'e' - {1051, 6, 13, 5, 1, -12}, // 0x66 'f' - {1061, 10, 14, 10, 0, -9}, // 0x67 'g' - {1079, 10, 13, 10, 1, -12}, // 0x68 'h' - {1096, 4, 13, 4, 1, -12}, // 0x69 'i' - {1103, 6, 17, 4, -1, -12}, // 0x6A 'j' - {1116, 9, 13, 9, 1, -12}, // 0x6B 'k' - {1131, 4, 13, 4, 1, -12}, // 0x6C 'l' - {1138, 15, 10, 15, 1, -9}, // 0x6D 'm' - {1157, 10, 11, 10, 1, -10}, // 0x6E 'n' - {1171, 10, 10, 10, 1, -9}, // 0x6F 'o' - {1184, 11, 14, 10, 0, -9}, // 0x70 'p' - {1204, 10, 14, 10, 1, -9}, // 0x71 'q' - {1222, 7, 10, 6, 1, -9}, // 0x72 'r' - {1231, 8, 10, 9, 1, -9}, // 0x73 's' - {1241, 4, 12, 5, 2, -11}, // 0x74 't' - {1247, 9, 10, 10, 2, -9}, // 0x75 'u' - {1259, 9, 10, 9, 2, -9}, // 0x76 'v' - {1271, 13, 10, 13, 2, -9}, // 0x77 'w' - {1288, 11, 10, 9, 0, -9}, // 0x78 'x' - {1302, 11, 14, 9, 0, -9}, // 0x79 'y' - {1322, 9, 10, 9, 1, -9}, // 0x7A 'z' - {1334, 5, 17, 6, 2, -12}, // 0x7B '{' - {1345, 4, 17, 5, 1, -12}, // 0x7C '|' - {1354, 5, 17, 6, 0, -12}, // 0x7D '}' - {1365, 9, 3, 11, 2, -7}}; // 0x7E '~' - -const GFXfont FreeSansOblique9pt7b PROGMEM = { - (uint8_t *)FreeSansOblique9pt7bBitmaps, - (GFXglyph *)FreeSansOblique9pt7bGlyphs, 0x20, 0x7E, 22}; - -// Approx. 2041 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif12pt7b.h deleted file mode 100644 index 22cb53d..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif12pt7b.h +++ /dev/null @@ -1,261 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerif12pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFE, 0xA8, 0x3F, 0xCF, 0x3C, 0xF3, 0x8A, 0x20, 0x0C, 0x40, 0xC4, - 0x08, 0x40, 0x8C, 0x08, 0xC7, 0xFF, 0x18, 0x81, 0x88, 0x10, 0x81, 0x08, - 0xFF, 0xE1, 0x18, 0x31, 0x03, 0x10, 0x31, 0x02, 0x10, 0x04, 0x07, 0xC6, - 0x5B, 0x12, 0xC4, 0xB1, 0x0F, 0x41, 0xF0, 0x1E, 0x01, 0xE0, 0x58, 0x13, - 0x84, 0xE1, 0x3C, 0x4F, 0x96, 0x3F, 0x01, 0x00, 0x00, 0x04, 0x03, 0x83, - 0x03, 0x9F, 0x81, 0xC2, 0x20, 0x60, 0x90, 0x38, 0x24, 0x0C, 0x12, 0x03, - 0x0D, 0x00, 0xC6, 0x47, 0x9E, 0x23, 0x10, 0x09, 0x84, 0x04, 0xE1, 0x03, - 0x30, 0x40, 0x8C, 0x20, 0x43, 0x08, 0x10, 0xC4, 0x08, 0x1E, 0x00, 0x03, - 0xC0, 0x02, 0x30, 0x03, 0x08, 0x01, 0x84, 0x00, 0xC4, 0x00, 0x7C, 0xF8, - 0x1C, 0x38, 0x1E, 0x08, 0x33, 0x0C, 0x31, 0xC4, 0x10, 0x74, 0x18, 0x3A, - 0x0C, 0x0E, 0x07, 0x03, 0x83, 0xC3, 0xE2, 0x7E, 0x3E, 0xFF, 0xA0, 0x04, - 0x21, 0x08, 0x61, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC1, 0x04, 0x18, 0x20, - 0x40, 0x81, 0x81, 0x02, 0x04, 0x18, 0x20, 0x83, 0x0C, 0x30, 0xC3, 0x0C, - 0x30, 0x86, 0x10, 0x84, 0x20, 0x30, 0xB3, 0xD7, 0x54, 0x38, 0x7C, 0xD3, - 0x30, 0x30, 0x10, 0x04, 0x00, 0x80, 0x10, 0x02, 0x00, 0x41, 0xFF, 0xC1, - 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x00, 0xDF, 0x95, 0x00, 0xFC, 0xFC, - 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, - 0x10, 0x60, 0xC0, 0x1E, 0x0C, 0xC6, 0x19, 0x86, 0xC0, 0xB0, 0x3C, 0x0F, - 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xD8, 0x66, 0x18, 0xCC, 0x1E, - 0x00, 0x11, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, - 0x0C, 0xFC, 0x1E, 0x18, 0xC4, 0x1A, 0x06, 0x01, 0x80, 0x60, 0x10, 0x0C, - 0x02, 0x01, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x1F, 0xF8, 0x1E, 0x18, 0xE8, - 0x18, 0x06, 0x01, 0x00, 0x80, 0xF0, 0x7E, 0x03, 0xC0, 0x70, 0x0C, 0x03, - 0x00, 0xC0, 0x6E, 0x11, 0xF8, 0x01, 0x00, 0xC0, 0x70, 0x2C, 0x0B, 0x04, - 0xC2, 0x30, 0x8C, 0x43, 0x20, 0xC8, 0x33, 0xFF, 0x03, 0x00, 0xC0, 0x30, - 0x0C, 0x00, 0x03, 0xF1, 0x00, 0x40, 0x18, 0x0F, 0x80, 0xF8, 0x0E, 0x01, - 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x20, 0x1B, 0x8C, 0x7C, 0x00, 0x01, - 0xC3, 0xC1, 0xC0, 0xC0, 0x70, 0x18, 0x0E, 0xF3, 0xCE, 0xC1, 0xF0, 0x3C, - 0x0F, 0x03, 0xC0, 0xD8, 0x36, 0x08, 0xC6, 0x1E, 0x00, 0x3F, 0xD0, 0x38, - 0x08, 0x06, 0x01, 0x80, 0x40, 0x10, 0x0C, 0x02, 0x00, 0x80, 0x20, 0x10, - 0x04, 0x01, 0x00, 0x80, 0x20, 0x1F, 0x18, 0x6C, 0x0F, 0x03, 0xC0, 0xF8, - 0x67, 0x30, 0xF0, 0x1E, 0x09, 0xE6, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, 0x0D, - 0x86, 0x1F, 0x00, 0x1E, 0x08, 0xC6, 0x1B, 0x02, 0xC0, 0xF0, 0x3C, 0x0F, - 0x03, 0xE0, 0xDC, 0x73, 0xEC, 0x06, 0x01, 0x80, 0xC0, 0x70, 0x38, 0x38, - 0x18, 0x00, 0xFC, 0x00, 0x3F, 0xCC, 0xC0, 0x00, 0x00, 0x06, 0x77, 0x12, - 0x40, 0x00, 0x00, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x07, 0x00, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x00, 0x10, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x0E, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x30, 0x0E, 0x07, 0x81, 0xE0, 0x78, 0x0E, 0x00, - 0x00, 0x00, 0x7C, 0x86, 0x83, 0xC3, 0x03, 0x03, 0x06, 0x0C, 0x08, 0x08, - 0x10, 0x10, 0x00, 0x00, 0x30, 0x30, 0x30, 0x03, 0xF0, 0x06, 0x06, 0x06, - 0x00, 0x86, 0x00, 0x26, 0x0E, 0xD3, 0x0C, 0xC7, 0x0C, 0x63, 0x84, 0x31, - 0xC6, 0x18, 0xE3, 0x08, 0x71, 0x8C, 0x4C, 0xC6, 0x46, 0x3D, 0xC1, 0x80, - 0x00, 0x30, 0x10, 0x07, 0xF0, 0x00, 0x80, 0x00, 0x60, 0x00, 0x70, 0x00, - 0x38, 0x00, 0x2E, 0x00, 0x13, 0x00, 0x19, 0xC0, 0x08, 0x60, 0x04, 0x38, - 0x04, 0x0C, 0x03, 0xFF, 0x03, 0x03, 0x81, 0x00, 0xE1, 0x80, 0x70, 0xC0, - 0x3D, 0xF0, 0x3F, 0xFF, 0x83, 0x0C, 0x30, 0x63, 0x06, 0x30, 0x63, 0x06, - 0x30, 0xC3, 0xF0, 0x30, 0xE3, 0x06, 0x30, 0x33, 0x03, 0x30, 0x33, 0x07, - 0x30, 0xEF, 0xFC, 0x07, 0xE2, 0x38, 0x3C, 0xC0, 0x3B, 0x00, 0x36, 0x00, - 0x38, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x03, - 0x00, 0x06, 0x00, 0x06, 0x00, 0x47, 0x03, 0x03, 0xF8, 0xFF, 0xC0, 0x30, - 0x78, 0x30, 0x1C, 0x30, 0x0E, 0x30, 0x06, 0x30, 0x03, 0x30, 0x03, 0x30, - 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x06, 0x30, 0x06, 0x30, - 0x0C, 0x30, 0x78, 0xFF, 0xC0, 0xFF, 0xFC, 0xC0, 0x33, 0x00, 0x4C, 0x00, - 0x30, 0x00, 0xC0, 0x43, 0x03, 0x0F, 0xFC, 0x30, 0x30, 0xC0, 0x43, 0x00, - 0x0C, 0x00, 0x30, 0x08, 0xC0, 0x23, 0x03, 0xBF, 0xFE, 0xFF, 0xFC, 0xC0, - 0x33, 0x00, 0x4C, 0x00, 0x30, 0x00, 0xC0, 0x43, 0x03, 0x0F, 0xFC, 0x30, - 0x30, 0xC0, 0x43, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x3F, - 0x00, 0x07, 0xE4, 0x1C, 0x3C, 0x30, 0x0C, 0x60, 0x0C, 0x60, 0x04, 0xC0, - 0x00, 0xC0, 0x00, 0xC0, 0x3F, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0x60, - 0x0C, 0x60, 0x0C, 0x30, 0x0C, 0x1C, 0x1C, 0x07, 0xE0, 0xFC, 0x3F, 0x30, - 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x3F, - 0xFC, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, - 0x0C, 0x30, 0x0C, 0xFC, 0x3F, 0xFC, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, - 0xC3, 0x0C, 0x30, 0xC3, 0x3F, 0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xC8, 0xF0, 0xFC, 0xFE, 0x30, - 0x38, 0x30, 0x20, 0x30, 0x40, 0x30, 0x80, 0x33, 0x00, 0x36, 0x00, 0x3E, - 0x00, 0x37, 0x00, 0x33, 0x80, 0x31, 0xC0, 0x30, 0xE0, 0x30, 0x70, 0x30, - 0x38, 0x30, 0x3C, 0xFC, 0x7F, 0xFC, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, - 0xC0, 0x01, 0x80, 0x03, 0x00, 0x26, 0x00, 0x8C, 0x07, 0x7F, 0xFE, 0xF8, - 0x01, 0xE7, 0x00, 0x70, 0xE0, 0x0E, 0x1E, 0x03, 0xC2, 0xC0, 0x58, 0x5C, - 0x1B, 0x09, 0x82, 0x61, 0x38, 0x4C, 0x27, 0x11, 0x84, 0x72, 0x30, 0x8E, - 0xC6, 0x10, 0xD0, 0xC2, 0x1E, 0x18, 0x41, 0x83, 0x1C, 0x30, 0x67, 0xC4, - 0x3F, 0xF0, 0x1F, 0x78, 0x0E, 0x3C, 0x04, 0x3E, 0x04, 0x2E, 0x04, 0x27, - 0x04, 0x23, 0x84, 0x23, 0xC4, 0x21, 0xE4, 0x20, 0xE4, 0x20, 0x74, 0x20, - 0x3C, 0x20, 0x1C, 0x20, 0x0C, 0x70, 0x0C, 0xF8, 0x04, 0x07, 0xC0, 0x30, - 0x60, 0xC0, 0x63, 0x00, 0x66, 0x00, 0xD8, 0x00, 0xF0, 0x01, 0xE0, 0x03, - 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1B, 0x00, 0x66, 0x00, 0xC6, 0x03, 0x06, - 0x0C, 0x03, 0xE0, 0xFF, 0x83, 0x0E, 0x30, 0x73, 0x03, 0x30, 0x33, 0x03, - 0x30, 0x63, 0x0E, 0x3F, 0x83, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, - 0x30, 0x0F, 0xC0, 0x0F, 0xE0, 0x18, 0x30, 0x30, 0x18, 0x60, 0x0C, 0x60, - 0x0C, 0xC0, 0x06, 0xC0, 0x06, 0xC0, 0x06, 0xC0, 0x06, 0xC0, 0x06, 0xC0, - 0x06, 0x60, 0x0C, 0x60, 0x0C, 0x30, 0x18, 0x18, 0x30, 0x07, 0xC0, 0x03, - 0xC0, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1F, 0xFF, 0x80, 0x61, 0xC0, 0xC1, - 0xC1, 0x81, 0x83, 0x03, 0x06, 0x06, 0x0C, 0x1C, 0x18, 0x70, 0x3F, 0x80, - 0x67, 0x00, 0xC7, 0x01, 0x8F, 0x03, 0x0F, 0x06, 0x0E, 0x0C, 0x0E, 0x7E, - 0x0F, 0x1F, 0x46, 0x19, 0x81, 0x30, 0x27, 0x02, 0xF0, 0x0F, 0x00, 0xF8, - 0x07, 0xC0, 0x38, 0x03, 0xC0, 0x34, 0x06, 0x80, 0xDC, 0x32, 0x7C, 0xFF, - 0xFF, 0x86, 0x0E, 0x0C, 0x1C, 0x18, 0x10, 0x30, 0x00, 0x60, 0x00, 0xC0, - 0x01, 0x80, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, - 0x60, 0x00, 0xC0, 0x07, 0xE0, 0xFC, 0x1F, 0x30, 0x0E, 0x30, 0x04, 0x30, - 0x04, 0x30, 0x04, 0x30, 0x04, 0x30, 0x04, 0x30, 0x04, 0x30, 0x04, 0x30, - 0x04, 0x30, 0x04, 0x30, 0x04, 0x30, 0x04, 0x18, 0x08, 0x1C, 0x18, 0x07, - 0xE0, 0xFE, 0x0F, 0x9C, 0x03, 0x0E, 0x01, 0x83, 0x00, 0x81, 0xC0, 0x40, - 0x60, 0x40, 0x38, 0x20, 0x0C, 0x30, 0x07, 0x10, 0x01, 0x98, 0x00, 0xE8, - 0x00, 0x34, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x00, 0xFC, - 0xFC, 0x3D, 0xE1, 0xC0, 0x63, 0x83, 0x01, 0x86, 0x0E, 0x04, 0x1C, 0x18, - 0x10, 0x70, 0x70, 0x80, 0xC3, 0xC2, 0x03, 0x8B, 0x08, 0x06, 0x6E, 0x40, - 0x1D, 0x19, 0x00, 0x74, 0x78, 0x00, 0xE1, 0xE0, 0x03, 0x83, 0x80, 0x0E, - 0x0C, 0x00, 0x10, 0x10, 0x00, 0x40, 0x40, 0x7F, 0x1F, 0x9E, 0x03, 0x07, - 0x03, 0x01, 0xC3, 0x00, 0x71, 0x00, 0x19, 0x00, 0x0F, 0x00, 0x03, 0x80, - 0x01, 0xE0, 0x01, 0xB0, 0x01, 0x9C, 0x00, 0x87, 0x00, 0x81, 0xC0, 0x80, - 0xE0, 0xC0, 0x79, 0xF8, 0x7F, 0xFE, 0x1F, 0x78, 0x0C, 0x38, 0x08, 0x1C, - 0x18, 0x0E, 0x10, 0x06, 0x20, 0x07, 0x60, 0x03, 0xC0, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x07, - 0xE0, 0x7F, 0xFB, 0x00, 0xC8, 0x07, 0x20, 0x38, 0x01, 0xC0, 0x07, 0x00, - 0x38, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x38, 0x05, - 0xC0, 0x3E, 0x01, 0xBF, 0xFE, 0xFE, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, - 0x8C, 0x63, 0x18, 0xC6, 0x31, 0xF0, 0xC1, 0x81, 0x03, 0x06, 0x04, 0x0C, - 0x18, 0x10, 0x30, 0x60, 0x40, 0xC1, 0x81, 0x03, 0x06, 0xF8, 0xC6, 0x31, - 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC7, 0xF0, 0x0C, 0x07, - 0x01, 0x60, 0xD8, 0x23, 0x18, 0xC4, 0x1B, 0x06, 0x80, 0xC0, 0xFF, 0xF0, - 0xC7, 0x0C, 0x30, 0x3E, 0x31, 0x8C, 0x30, 0x0C, 0x03, 0x07, 0xC6, 0x33, - 0x0C, 0xC3, 0x31, 0xC7, 0xB8, 0x20, 0x38, 0x06, 0x01, 0x80, 0x60, 0x18, - 0x06, 0xF1, 0xC6, 0x61, 0xD8, 0x36, 0x0D, 0x83, 0x60, 0xD8, 0x26, 0x19, - 0x84, 0x3E, 0x00, 0x1E, 0x23, 0x63, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE1, - 0x72, 0x3C, 0x00, 0x80, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x61, 0xD8, 0x8E, - 0x61, 0xB0, 0x6C, 0x1B, 0x06, 0xC1, 0xB0, 0x6E, 0x19, 0xCE, 0x3D, 0xC0, - 0x1E, 0x08, 0xE4, 0x1B, 0xFE, 0xC0, 0x30, 0x0C, 0x03, 0x81, 0x60, 0x9C, - 0x41, 0xE0, 0x0F, 0x08, 0xC4, 0x06, 0x03, 0x01, 0x81, 0xF0, 0x60, 0x30, - 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0xFC, 0x00, 0x1F, 0x03, - 0x1F, 0x60, 0xC6, 0x0C, 0x60, 0xC3, 0x18, 0x1F, 0x02, 0x00, 0x40, 0x07, - 0xFC, 0x40, 0x24, 0x02, 0xC0, 0x2C, 0x04, 0xE0, 0x83, 0xF0, 0x30, 0x1E, - 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0D, 0xE1, 0xCE, 0x30, 0xC6, 0x18, - 0xC3, 0x18, 0x63, 0x0C, 0x61, 0x8C, 0x31, 0x86, 0x79, 0xE0, 0x31, 0x80, - 0x00, 0x09, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDF, 0x0C, 0x30, 0x00, 0x00, - 0x31, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xF2, 0xF0, - 0x20, 0x1C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0xFB, 0x08, 0x62, - 0x0C, 0x81, 0xE0, 0x3E, 0x06, 0xE0, 0xCE, 0x18, 0xC3, 0x0E, 0xF3, 0xE0, - 0x13, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0xF8, 0xF7, - 0x8F, 0x0E, 0x3C, 0xE3, 0x0C, 0x18, 0xC3, 0x06, 0x30, 0xC1, 0x8C, 0x30, - 0x63, 0x0C, 0x18, 0xC3, 0x06, 0x30, 0xC1, 0x8C, 0x30, 0x67, 0x9E, 0x3C, - 0xF7, 0x87, 0x18, 0xC3, 0x18, 0x63, 0x0C, 0x61, 0x8C, 0x31, 0x86, 0x30, - 0xC6, 0x19, 0xE7, 0x80, 0x1E, 0x18, 0xE4, 0x1B, 0x03, 0xC0, 0xF0, 0x3C, - 0x0F, 0x03, 0x60, 0x9C, 0x41, 0xE0, 0x77, 0x87, 0x18, 0xC3, 0x98, 0x33, - 0x06, 0x60, 0xCC, 0x19, 0x83, 0x30, 0xC7, 0x10, 0xDC, 0x18, 0x03, 0x00, - 0x60, 0x0C, 0x07, 0xE0, 0x1E, 0x8C, 0xE6, 0x1B, 0x06, 0xC1, 0xB0, 0x6C, - 0x1B, 0x06, 0xE1, 0x98, 0xE3, 0xD8, 0x06, 0x01, 0x80, 0x60, 0x18, 0x1F, - 0x37, 0x7B, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x7C, 0x7B, - 0x0E, 0x1C, 0x1E, 0x0F, 0x07, 0xC3, 0x87, 0x8A, 0xE0, 0x21, 0x8F, 0x98, - 0x61, 0x86, 0x18, 0x61, 0x86, 0x19, 0x38, 0xE3, 0x98, 0x66, 0x19, 0x86, - 0x61, 0x98, 0x66, 0x19, 0x86, 0x61, 0x9C, 0xE3, 0xDC, 0xF8, 0xEE, 0x08, - 0xC1, 0x18, 0x41, 0x88, 0x32, 0x03, 0x40, 0x68, 0x06, 0x00, 0xC0, 0x10, - 0x00, 0xF3, 0xE7, 0x61, 0x83, 0x70, 0xC2, 0x30, 0xC2, 0x30, 0xC4, 0x19, - 0x64, 0x19, 0x68, 0x0E, 0x38, 0x0E, 0x38, 0x0C, 0x30, 0x04, 0x10, 0xFB, - 0xC6, 0x30, 0x64, 0x0F, 0x00, 0xC0, 0x0C, 0x03, 0xC0, 0x98, 0x21, 0x8C, - 0x3B, 0xCF, 0x80, 0xF8, 0xEE, 0x08, 0xC1, 0x18, 0x41, 0x88, 0x31, 0x03, - 0x40, 0x68, 0x06, 0x00, 0xC0, 0x08, 0x02, 0x00, 0x40, 0x10, 0x1E, 0x03, - 0x80, 0x7F, 0x90, 0xE0, 0x30, 0x18, 0x0E, 0x03, 0x01, 0xC0, 0xE0, 0x30, - 0x5C, 0x3F, 0xF8, 0x19, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0xB0, 0x63, 0x18, - 0xC6, 0x31, 0x8C, 0x61, 0x80, 0xFF, 0xFF, 0x80, 0xC3, 0x18, 0xC6, 0x31, - 0x8C, 0x63, 0x06, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xCC, 0x00, 0x38, 0x06, - 0x62, 0x41, 0xC0}; - -const GFXglyph FreeSerif12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 2, 16, 8, 3, -15}, // 0x21 '!' - {4, 6, 6, 10, 1, -15}, // 0x22 '"' - {9, 12, 16, 12, 0, -15}, // 0x23 '#' - {33, 10, 18, 12, 1, -16}, // 0x24 '$' - {56, 18, 17, 20, 1, -16}, // 0x25 '%' - {95, 17, 16, 19, 1, -15}, // 0x26 '&' - {129, 2, 6, 5, 1, -15}, // 0x27 ''' - {131, 6, 20, 8, 1, -15}, // 0x28 '(' - {146, 6, 20, 8, 1, -15}, // 0x29 ')' - {161, 8, 10, 12, 3, -14}, // 0x2A '*' - {171, 11, 11, 14, 1, -10}, // 0x2B '+' - {187, 3, 6, 6, 2, -2}, // 0x2C ',' - {190, 6, 1, 8, 1, -5}, // 0x2D '-' - {191, 2, 3, 6, 2, -2}, // 0x2E '.' - {192, 7, 17, 7, 0, -16}, // 0x2F '/' - {207, 10, 17, 12, 1, -16}, // 0x30 '0' - {229, 6, 17, 12, 3, -16}, // 0x31 '1' - {242, 10, 15, 12, 1, -14}, // 0x32 '2' - {261, 10, 16, 12, 1, -15}, // 0x33 '3' - {281, 10, 16, 12, 1, -15}, // 0x34 '4' - {301, 10, 17, 12, 1, -16}, // 0x35 '5' - {323, 10, 17, 12, 1, -16}, // 0x36 '6' - {345, 10, 16, 12, 0, -15}, // 0x37 '7' - {365, 10, 17, 12, 1, -16}, // 0x38 '8' - {387, 10, 18, 12, 1, -16}, // 0x39 '9' - {410, 2, 12, 6, 2, -11}, // 0x3A ':' - {413, 4, 15, 6, 2, -11}, // 0x3B ';' - {421, 12, 13, 14, 1, -12}, // 0x3C '<' - {441, 12, 6, 14, 1, -8}, // 0x3D '=' - {450, 12, 13, 14, 1, -11}, // 0x3E '>' - {470, 8, 17, 11, 2, -16}, // 0x3F '?' - {487, 17, 16, 21, 2, -15}, // 0x40 '@' - {521, 17, 16, 17, 0, -15}, // 0x41 'A' - {555, 12, 16, 15, 1, -15}, // 0x42 'B' - {579, 15, 16, 16, 1, -15}, // 0x43 'C' - {609, 16, 16, 17, 0, -15}, // 0x44 'D' - {641, 14, 16, 15, 0, -15}, // 0x45 'E' - {669, 14, 16, 14, 0, -15}, // 0x46 'F' - {697, 16, 16, 17, 1, -15}, // 0x47 'G' - {729, 16, 16, 17, 0, -15}, // 0x48 'H' - {761, 6, 16, 8, 1, -15}, // 0x49 'I' - {773, 8, 16, 9, 0, -15}, // 0x4A 'J' - {789, 16, 16, 17, 1, -15}, // 0x4B 'K' - {821, 15, 16, 15, 0, -15}, // 0x4C 'L' - {851, 19, 16, 21, 1, -15}, // 0x4D 'M' - {889, 16, 16, 17, 1, -15}, // 0x4E 'N' - {921, 15, 16, 17, 1, -15}, // 0x4F 'O' - {951, 12, 16, 14, 0, -15}, // 0x50 'P' - {975, 16, 20, 17, 1, -15}, // 0x51 'Q' - {1015, 15, 16, 16, 0, -15}, // 0x52 'R' - {1045, 11, 16, 13, 0, -15}, // 0x53 'S' - {1067, 15, 16, 15, 0, -15}, // 0x54 'T' - {1097, 16, 16, 17, 1, -15}, // 0x55 'U' - {1129, 17, 16, 17, 0, -15}, // 0x56 'V' - {1163, 22, 16, 23, 0, -15}, // 0x57 'W' - {1207, 17, 16, 17, 0, -15}, // 0x58 'X' - {1241, 16, 16, 17, 0, -15}, // 0x59 'Y' - {1273, 14, 16, 15, 1, -15}, // 0x5A 'Z' - {1301, 5, 20, 8, 2, -15}, // 0x5B '[' - {1314, 7, 17, 7, 0, -16}, // 0x5C '\' - {1329, 5, 20, 8, 1, -15}, // 0x5D ']' - {1342, 10, 9, 11, 1, -15}, // 0x5E '^' - {1354, 12, 1, 12, 0, 3}, // 0x5F '_' - {1356, 5, 4, 6, 0, -15}, // 0x60 '`' - {1359, 10, 11, 10, 1, -10}, // 0x61 'a' - {1373, 10, 17, 12, 1, -16}, // 0x62 'b' - {1395, 8, 11, 11, 1, -10}, // 0x63 'c' - {1406, 10, 17, 12, 1, -16}, // 0x64 'd' - {1428, 10, 11, 11, 1, -10}, // 0x65 'e' - {1442, 9, 17, 9, 0, -16}, // 0x66 'f' - {1462, 12, 16, 11, 0, -10}, // 0x67 'g' - {1486, 11, 17, 12, 0, -16}, // 0x68 'h' - {1510, 5, 16, 7, 0, -15}, // 0x69 'i' - {1520, 6, 21, 8, 0, -15}, // 0x6A 'j' - {1536, 11, 17, 12, 1, -16}, // 0x6B 'k' - {1560, 5, 17, 6, 0, -16}, // 0x6C 'l' - {1571, 18, 11, 19, 0, -10}, // 0x6D 'm' - {1596, 11, 11, 12, 0, -10}, // 0x6E 'n' - {1612, 10, 11, 12, 1, -10}, // 0x6F 'o' - {1626, 11, 16, 12, 0, -10}, // 0x70 'p' - {1648, 10, 16, 12, 1, -10}, // 0x71 'q' - {1668, 8, 11, 8, 0, -10}, // 0x72 'r' - {1679, 7, 11, 9, 1, -10}, // 0x73 's' - {1689, 6, 13, 7, 1, -12}, // 0x74 't' - {1699, 10, 11, 12, 1, -10}, // 0x75 'u' - {1713, 11, 11, 11, 0, -10}, // 0x76 'v' - {1729, 16, 11, 16, 0, -10}, // 0x77 'w' - {1751, 11, 11, 12, 0, -10}, // 0x78 'x' - {1767, 11, 16, 11, 0, -10}, // 0x79 'y' - {1789, 10, 11, 10, 0, -10}, // 0x7A 'z' - {1803, 5, 21, 12, 2, -16}, // 0x7B '{' - {1817, 1, 17, 5, 2, -16}, // 0x7C '|' - {1820, 5, 21, 12, 5, -15}, // 0x7D '}' - {1834, 12, 3, 12, 0, -6}}; // 0x7E '~' - -const GFXfont FreeSerif12pt7b PROGMEM = {(uint8_t *)FreeSerif12pt7bBitmaps, - (GFXglyph *)FreeSerif12pt7bGlyphs, - 0x20, 0x7E, 29}; - -// Approx. 2511 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif18pt7b.h deleted file mode 100644 index 3fd1ba5..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif18pt7b.h +++ /dev/null @@ -1,431 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerif18pt7bBitmaps[] PROGMEM = { - 0x6F, 0xFF, 0xFF, 0xFE, 0x66, 0x66, 0x66, 0x64, 0x40, 0x00, 0x6F, 0xF6, - 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0x46, 0x42, 0x42, 0x42, 0x03, 0x06, 0x01, - 0x83, 0x00, 0xC1, 0x80, 0x61, 0xC0, 0x30, 0xC0, 0x38, 0x60, 0x18, 0x30, - 0xFF, 0xFF, 0x7F, 0xFF, 0x83, 0x06, 0x01, 0x86, 0x00, 0xC3, 0x00, 0xC1, - 0x87, 0xFF, 0xFF, 0xFF, 0xFE, 0x18, 0x30, 0x0C, 0x18, 0x06, 0x18, 0x06, - 0x0C, 0x03, 0x06, 0x01, 0x83, 0x00, 0xC1, 0x80, 0x60, 0xC0, 0x02, 0x00, - 0x10, 0x03, 0xE0, 0x64, 0xE6, 0x23, 0x61, 0x1B, 0x08, 0x58, 0x42, 0xE2, - 0x03, 0x90, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x01, 0xF0, 0x0F, 0xC0, 0x4E, - 0x02, 0x38, 0x10, 0xE0, 0x87, 0x04, 0x3C, 0x21, 0xE1, 0x1B, 0xC9, 0xCF, - 0xFC, 0x1F, 0x80, 0x10, 0x00, 0x80, 0x07, 0x80, 0x20, 0x0F, 0xF0, 0x70, - 0x0F, 0x07, 0xD0, 0x0F, 0x02, 0x18, 0x07, 0x01, 0x18, 0x07, 0x00, 0x8C, - 0x03, 0x80, 0x4C, 0x01, 0x80, 0x44, 0x00, 0xC0, 0x26, 0x00, 0x60, 0x22, - 0x0F, 0x30, 0x33, 0x1F, 0xCC, 0x73, 0x1E, 0x37, 0xF1, 0x8E, 0x19, 0xE1, - 0x8E, 0x04, 0x00, 0x86, 0x02, 0x00, 0xC7, 0x01, 0x00, 0xC3, 0x80, 0x80, - 0x61, 0x80, 0x80, 0x60, 0xC0, 0x40, 0x30, 0x60, 0x40, 0x30, 0x38, 0xE0, - 0x30, 0x0F, 0xE0, 0x18, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x61, 0x80, 0x00, 0x60, 0x60, 0x00, 0x30, 0x30, 0x00, 0x18, 0x18, - 0x00, 0x0C, 0x0C, 0x00, 0x06, 0x0C, 0x00, 0x03, 0x8E, 0x00, 0x01, 0xCE, - 0x00, 0x00, 0x7C, 0x3F, 0xC0, 0x38, 0x07, 0x80, 0x3E, 0x03, 0x80, 0x77, - 0x01, 0x80, 0x73, 0xC0, 0x80, 0xF0, 0xF0, 0xC0, 0x70, 0x7C, 0xC0, 0x78, - 0x1E, 0x40, 0x3C, 0x07, 0xC0, 0x1E, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x0F, - 0xC0, 0xFF, 0x0D, 0xF0, 0xC7, 0xFC, 0x7F, 0xC1, 0xFC, 0x1F, 0x80, 0x3C, - 0x00, 0xFF, 0xFE, 0x92, 0x40, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, - 0xC0, 0x60, 0x70, 0x30, 0x18, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, - 0x70, 0x38, 0x0C, 0x06, 0x03, 0x80, 0xC0, 0x60, 0x18, 0x0C, 0x03, 0x00, - 0xC0, 0x30, 0x0C, 0x80, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x60, 0x18, 0x0C, - 0x07, 0x01, 0x80, 0xC0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, - 0xE0, 0x60, 0x30, 0x38, 0x18, 0x0C, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x00, 0x0C, 0x00, 0xC0, 0x0C, 0x0C, 0x46, 0xE4, 0xF7, 0x5E, 0x1F, 0x00, - 0xC0, 0x17, 0x8E, 0x4E, 0xE4, 0xFC, 0xC6, 0x0C, 0x00, 0xC0, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x6F, 0xFF, - 0x11, 0x24, 0x80, 0xFF, 0xFF, 0x6F, 0xF6, 0x00, 0xC0, 0x60, 0x18, 0x06, - 0x03, 0x80, 0xC0, 0x30, 0x1C, 0x06, 0x01, 0x80, 0xE0, 0x30, 0x0C, 0x07, - 0x01, 0x80, 0x60, 0x38, 0x0C, 0x03, 0x01, 0xC0, 0x60, 0x18, 0x0E, 0x03, - 0x00, 0x03, 0xE0, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x38, 0x1C, 0x78, - 0x1E, 0x70, 0x0E, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, - 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x70, 0x0E, 0x70, - 0x0E, 0x78, 0x1E, 0x38, 0x1C, 0x38, 0x1C, 0x1C, 0x38, 0x0C, 0x30, 0x03, - 0xC0, 0x06, 0x03, 0x83, 0xE3, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, - 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, - 0xE0, 0x38, 0x0E, 0x03, 0x81, 0xE1, 0xFF, 0x07, 0xC0, 0x1F, 0xF0, 0x3F, - 0xF8, 0x70, 0xF8, 0x60, 0x3C, 0xC0, 0x3C, 0x80, 0x1C, 0x00, 0x1C, 0x00, - 0x1C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x30, 0x00, 0x60, 0x00, - 0xC0, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x01, 0x10, - 0x02, 0x3F, 0xFE, 0x7F, 0xFC, 0xFF, 0xFC, 0x0F, 0xC0, 0xFF, 0x0C, 0x3C, - 0x80, 0xE4, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x04, 0x00, 0x40, 0x04, 0x00, - 0xF8, 0x1F, 0xE0, 0x0F, 0x00, 0x1C, 0x00, 0xE0, 0x03, 0x00, 0x18, 0x00, - 0xC0, 0x06, 0x00, 0x60, 0x03, 0x78, 0x73, 0xFF, 0x0F, 0xC0, 0x00, 0x30, - 0x00, 0x30, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xB0, 0x01, 0x30, 0x03, 0x30, - 0x06, 0x30, 0x04, 0x30, 0x08, 0x30, 0x18, 0x30, 0x10, 0x30, 0x20, 0x30, - 0x60, 0x30, 0xC0, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x7F, 0xC3, - 0xFE, 0x1F, 0xE1, 0x80, 0x08, 0x00, 0xC0, 0x07, 0xC0, 0x7F, 0x81, 0xFF, - 0x00, 0xFC, 0x01, 0xE0, 0x07, 0x80, 0x1C, 0x00, 0x60, 0x03, 0x00, 0x18, - 0x00, 0xC0, 0x06, 0x00, 0x60, 0x07, 0x78, 0x73, 0xFF, 0x0F, 0xC0, 0x00, - 0x0E, 0x00, 0xF8, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x7C, 0x00, 0x79, 0xF0, 0x7F, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, - 0x1F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x70, 0x0F, 0x78, - 0x0F, 0x78, 0x0E, 0x3C, 0x1E, 0x1E, 0x3C, 0x0F, 0xF8, 0x07, 0xE0, 0x3F, - 0xFD, 0xFF, 0xF7, 0xFF, 0xF0, 0x06, 0x80, 0x18, 0x00, 0x60, 0x03, 0x00, - 0x0C, 0x00, 0x30, 0x01, 0x80, 0x06, 0x00, 0x18, 0x00, 0xE0, 0x03, 0x00, - 0x0C, 0x00, 0x70, 0x01, 0x80, 0x06, 0x00, 0x38, 0x00, 0xC0, 0x03, 0x00, - 0x1C, 0x00, 0x60, 0x00, 0x0F, 0x83, 0xFC, 0x70, 0xE6, 0x07, 0xC0, 0x3C, - 0x03, 0xC0, 0x3E, 0x03, 0x70, 0x67, 0x8C, 0x3D, 0x81, 0xF0, 0x0F, 0x81, - 0x7C, 0x21, 0xE6, 0x0E, 0xC0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x36, - 0x06, 0x70, 0xE3, 0xFC, 0x0F, 0x80, 0x07, 0xC0, 0x1F, 0xF0, 0x3C, 0x78, - 0x38, 0x3C, 0x78, 0x1E, 0x70, 0x1E, 0xF0, 0x0E, 0xF0, 0x0F, 0xF0, 0x0F, - 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF8, 0x0F, 0x78, 0x0F, 0x3C, 0x3F, - 0x1F, 0xEE, 0x0F, 0x9E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x78, - 0x00, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x70, 0x00, 0x6F, 0xF6, - 0x00, 0x00, 0x00, 0x00, 0x06, 0xFF, 0x60, 0x67, 0xBC, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x19, 0xEF, 0x78, 0x42, 0x22, 0x20, 0x00, 0x00, 0xC0, - 0x00, 0xF0, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, - 0x03, 0xF0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, - 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xC0, - 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x80, - 0x00, 0x3C, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0xF0, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x00, 0xF0, - 0x00, 0x30, 0x00, 0x00, 0x1F, 0x81, 0xFF, 0x18, 0x7D, 0x81, 0xEC, 0x07, - 0xF0, 0x3F, 0x81, 0xE0, 0x0F, 0x00, 0x70, 0x03, 0x80, 0x38, 0x01, 0x80, - 0x08, 0x00, 0xC0, 0x04, 0x00, 0x20, 0x02, 0x00, 0x10, 0x00, 0x80, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x3C, 0x01, 0xE0, 0x07, 0x00, 0x00, 0x7F, 0x00, - 0x01, 0xFF, 0xC0, 0x07, 0x80, 0xF0, 0x0F, 0x00, 0x38, 0x1C, 0x00, 0x1C, - 0x38, 0x00, 0x0C, 0x38, 0x00, 0x06, 0x70, 0x1E, 0x02, 0x70, 0x3F, 0xE3, - 0xF0, 0x71, 0xE1, 0xE0, 0xE0, 0xC1, 0xE0, 0xC0, 0xC1, 0xE0, 0xC1, 0xC1, - 0xE1, 0x81, 0xC1, 0xE1, 0x81, 0x83, 0xE1, 0x83, 0x82, 0xE1, 0x83, 0x86, - 0x71, 0xC7, 0x8C, 0x70, 0xF9, 0xF8, 0x38, 0xF0, 0xF0, 0x3C, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x80, 0x70, 0x03, 0xFF, 0xE0, 0x00, 0x7F, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x5C, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x8E, 0x00, - 0x01, 0x8F, 0x00, 0x01, 0x87, 0x00, 0x03, 0x07, 0x80, 0x03, 0x03, 0x80, - 0x02, 0x03, 0xC0, 0x06, 0x03, 0xC0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, - 0x0C, 0x01, 0xE0, 0x18, 0x00, 0xF0, 0x18, 0x00, 0xF0, 0x30, 0x00, 0x78, - 0x30, 0x00, 0x78, 0x70, 0x00, 0x7C, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x03, - 0xFF, 0xF8, 0x1E, 0x0F, 0xC1, 0xE0, 0x3C, 0x1E, 0x01, 0xE1, 0xE0, 0x1E, - 0x1E, 0x01, 0xE1, 0xE0, 0x1E, 0x1E, 0x03, 0xC1, 0xE0, 0x78, 0x1F, 0xFE, - 0x01, 0xFF, 0xF0, 0x1E, 0x07, 0xC1, 0xE0, 0x1E, 0x1E, 0x00, 0xF1, 0xE0, - 0x0F, 0x1E, 0x00, 0xF1, 0xE0, 0x0F, 0x1E, 0x00, 0xF1, 0xE0, 0x1E, 0x1E, - 0x07, 0xE3, 0xFF, 0xF8, 0xFF, 0xFE, 0x00, 0x00, 0xFE, 0x08, 0x0F, 0xFF, - 0x60, 0xFC, 0x1F, 0x87, 0xC0, 0x1E, 0x3C, 0x00, 0x38, 0xF0, 0x00, 0x67, - 0x80, 0x01, 0x9E, 0x00, 0x02, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, - 0x00, 0x02, 0x1F, 0x00, 0x38, 0x3F, 0x03, 0x80, 0x7F, 0xFC, 0x00, 0x3F, - 0x80, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x78, 0x3F, 0x80, 0xF0, 0x0F, - 0x81, 0xE0, 0x0F, 0x83, 0xC0, 0x0F, 0x07, 0x80, 0x0F, 0x0F, 0x00, 0x1E, - 0x1E, 0x00, 0x1E, 0x3C, 0x00, 0x3C, 0x78, 0x00, 0x78, 0xF0, 0x00, 0xF1, - 0xE0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, 0x80, 0x07, 0x8F, 0x00, 0x1E, 0x1E, - 0x00, 0x3C, 0x3C, 0x00, 0xF0, 0x78, 0x01, 0xE0, 0xF0, 0x0F, 0x81, 0xE0, - 0x7E, 0x07, 0xFF, 0xF0, 0x3F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x87, 0xFF, - 0xF8, 0x3C, 0x01, 0x83, 0xC0, 0x08, 0x3C, 0x00, 0x83, 0xC0, 0x00, 0x3C, - 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x02, 0x03, 0xC0, 0x60, 0x3F, 0xFE, 0x03, - 0xFF, 0xE0, 0x3C, 0x06, 0x03, 0xC0, 0x20, 0x3C, 0x00, 0x03, 0xC0, 0x00, - 0x3C, 0x00, 0x03, 0xC0, 0x01, 0x3C, 0x00, 0x23, 0xC0, 0x06, 0x3C, 0x01, - 0xE7, 0xFF, 0xFE, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xBF, 0xFF, 0xCF, 0x00, - 0x67, 0x80, 0x13, 0xC0, 0x09, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, - 0x02, 0x1E, 0x03, 0x0F, 0xFF, 0x87, 0xFF, 0xC3, 0xC0, 0x61, 0xE0, 0x10, - 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, - 0x03, 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x00, 0x00, 0xFE, 0x04, 0x07, 0xFF, - 0xB8, 0x1F, 0x03, 0xF0, 0xF8, 0x01, 0xE3, 0xE0, 0x01, 0xC7, 0x80, 0x01, - 0x9E, 0x00, 0x01, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, - 0xC0, 0x00, 0x07, 0x80, 0x07, 0xFF, 0x00, 0x07, 0xDE, 0x00, 0x07, 0xBC, - 0x00, 0x0F, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xF0, - 0x00, 0xF1, 0xF0, 0x01, 0xE1, 0xF0, 0x03, 0xC1, 0xF8, 0x1F, 0x00, 0xFF, - 0xFC, 0x00, 0x3F, 0x80, 0xFF, 0x03, 0xFD, 0xF8, 0x07, 0xE3, 0xC0, 0x0F, - 0x0F, 0x00, 0x3C, 0x3C, 0x00, 0xF0, 0xF0, 0x03, 0xC3, 0xC0, 0x0F, 0x0F, - 0x00, 0x3C, 0x3C, 0x00, 0xF0, 0xF0, 0x03, 0xC3, 0xFF, 0xFF, 0x0F, 0xFF, - 0xFC, 0x3C, 0x00, 0xF0, 0xF0, 0x03, 0xC3, 0xC0, 0x0F, 0x0F, 0x00, 0x3C, - 0x3C, 0x00, 0xF0, 0xF0, 0x03, 0xC3, 0xC0, 0x0F, 0x0F, 0x00, 0x3C, 0x3C, - 0x00, 0xF1, 0xF8, 0x07, 0xEF, 0xF0, 0x3F, 0xC0, 0xFF, 0xBF, 0x0F, 0x07, - 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC3, 0xF3, 0xFE, 0x0F, 0xF0, - 0x7E, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC6, 0x38, 0xF3, 0x8F, 0xF0, 0x7C, 0x00, 0xFF, 0x07, 0xFC, - 0xFC, 0x03, 0xC0, 0xF0, 0x07, 0x01, 0xE0, 0x1C, 0x03, 0xC0, 0x60, 0x07, - 0x81, 0x80, 0x0F, 0x06, 0x00, 0x1E, 0x18, 0x00, 0x3C, 0x60, 0x00, 0x79, - 0x80, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xDF, 0x00, 0x07, 0x8F, - 0x00, 0x0F, 0x0F, 0x00, 0x1E, 0x0F, 0x00, 0x3C, 0x0F, 0x00, 0x78, 0x0F, - 0x00, 0xF0, 0x1F, 0x01, 0xE0, 0x1F, 0x03, 0xC0, 0x1F, 0x0F, 0xC0, 0x3F, - 0x3F, 0xC1, 0xFF, 0x80, 0xFF, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x1E, - 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, - 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x04, 0xF0, - 0x01, 0x1E, 0x00, 0x63, 0xC0, 0x3C, 0xFF, 0xFF, 0xBF, 0xFF, 0xE0, 0xFC, - 0x00, 0x03, 0xF9, 0xF0, 0x00, 0x1F, 0x87, 0x80, 0x01, 0xF8, 0x3E, 0x00, - 0x0F, 0xC1, 0xF0, 0x00, 0x5E, 0x0B, 0xC0, 0x06, 0xF0, 0x5E, 0x00, 0x37, - 0x82, 0x78, 0x03, 0x3C, 0x13, 0xC0, 0x19, 0xE0, 0x8F, 0x01, 0x8F, 0x04, - 0x78, 0x0C, 0x78, 0x21, 0xE0, 0xC3, 0xC1, 0x0F, 0x06, 0x1E, 0x08, 0x3C, - 0x60, 0xF0, 0x41, 0xE3, 0x07, 0x82, 0x07, 0xB0, 0x3C, 0x10, 0x3D, 0x81, - 0xE0, 0x81, 0xF8, 0x0F, 0x04, 0x07, 0xC0, 0x78, 0x20, 0x3C, 0x03, 0xC1, - 0x00, 0xE0, 0x1E, 0x1C, 0x06, 0x01, 0xFB, 0xF8, 0x10, 0x1F, 0xE0, 0xFC, - 0x00, 0xFE, 0x78, 0x00, 0x70, 0x78, 0x00, 0x40, 0xF8, 0x00, 0x81, 0xF8, - 0x01, 0x02, 0xF8, 0x02, 0x04, 0xF8, 0x04, 0x08, 0xF0, 0x08, 0x11, 0xF0, - 0x10, 0x21, 0xF0, 0x20, 0x41, 0xF0, 0x40, 0x81, 0xF0, 0x81, 0x01, 0xF1, - 0x02, 0x01, 0xE2, 0x04, 0x03, 0xE4, 0x08, 0x03, 0xE8, 0x10, 0x03, 0xF0, - 0x20, 0x03, 0xE0, 0x40, 0x03, 0xC0, 0x80, 0x03, 0x81, 0x00, 0x07, 0x07, - 0x00, 0x06, 0x3F, 0x80, 0x04, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xFF, 0x00, - 0x3E, 0x0F, 0x80, 0xF0, 0x07, 0x83, 0xC0, 0x07, 0x87, 0x80, 0x07, 0x1E, - 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, - 0x07, 0xF8, 0x00, 0x0F, 0x78, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xE0, 0x01, - 0xE1, 0xE0, 0x03, 0xC1, 0xE0, 0x0F, 0x01, 0xF0, 0x7C, 0x00, 0xFF, 0xE0, - 0x00, 0x7F, 0x00, 0xFF, 0xF8, 0x1F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x1E, - 0x3C, 0x07, 0xCF, 0x00, 0xF3, 0xC0, 0x3C, 0xF0, 0x0F, 0x3C, 0x03, 0xCF, - 0x01, 0xF3, 0xC0, 0x78, 0xF0, 0x7C, 0x3F, 0xFE, 0x0F, 0xFE, 0x03, 0xC0, - 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, - 0x3C, 0x00, 0x1F, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xFF, - 0x00, 0x3E, 0x0F, 0x80, 0xF0, 0x07, 0x83, 0xC0, 0x07, 0x87, 0x80, 0x0F, - 0x1E, 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x1D, 0xE0, 0x00, 0x3F, - 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, - 0x00, 0x07, 0xF8, 0x00, 0x0F, 0x70, 0x00, 0x1C, 0xF0, 0x00, 0x79, 0xE0, - 0x00, 0xF1, 0xE0, 0x03, 0xC1, 0xC0, 0x07, 0x01, 0xC0, 0x1C, 0x01, 0xE0, - 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0xF0, - 0x03, 0xFF, 0xF0, 0x0F, 0x07, 0xC0, 0x78, 0x1E, 0x03, 0xC0, 0x78, 0x1E, - 0x03, 0xC0, 0xF0, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x07, 0x81, 0xE0, 0x78, - 0x0F, 0x0F, 0x80, 0x7F, 0xF8, 0x03, 0xFE, 0x00, 0x1E, 0x78, 0x00, 0xF1, - 0xE0, 0x07, 0x87, 0x80, 0x3C, 0x3C, 0x01, 0xE0, 0xF0, 0x0F, 0x03, 0xC0, - 0x78, 0x0F, 0x03, 0xC0, 0x7C, 0x3F, 0x01, 0xF3, 0xFC, 0x07, 0xE0, 0x07, - 0x84, 0x1F, 0xFC, 0x3C, 0x3E, 0x30, 0x0E, 0x70, 0x06, 0x70, 0x06, 0x70, - 0x02, 0x78, 0x00, 0x7C, 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, - 0xF8, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x0F, 0xC0, - 0x0F, 0xE0, 0x0F, 0x70, 0x1E, 0x78, 0x3C, 0x4F, 0xF8, 0x43, 0xF0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0x7C, 0x0F, 0x03, 0x80, 0xF0, 0x10, - 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, - 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, - 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x1F, 0x80, 0x03, 0xFC, 0x00, 0xFF, 0x01, 0xFD, - 0xF8, 0x01, 0xC3, 0xC0, 0x02, 0x0F, 0x00, 0x08, 0x3C, 0x00, 0x20, 0xF0, - 0x00, 0x83, 0xC0, 0x02, 0x0F, 0x00, 0x08, 0x3C, 0x00, 0x20, 0xF0, 0x00, - 0x83, 0xC0, 0x02, 0x0F, 0x00, 0x08, 0x3C, 0x00, 0x20, 0xF0, 0x00, 0x83, - 0xC0, 0x02, 0x0F, 0x00, 0x08, 0x3C, 0x00, 0x20, 0xF0, 0x00, 0x81, 0xE0, - 0x04, 0x07, 0x80, 0x30, 0x0F, 0x81, 0x80, 0x1F, 0xFC, 0x00, 0x1F, 0xC0, - 0x00, 0xFF, 0xC0, 0x7F, 0x3E, 0x00, 0x1E, 0x1E, 0x00, 0x0C, 0x0E, 0x00, - 0x18, 0x0F, 0x00, 0x18, 0x07, 0x00, 0x10, 0x07, 0x80, 0x30, 0x07, 0x80, - 0x30, 0x03, 0xC0, 0x60, 0x03, 0xC0, 0x60, 0x01, 0xE0, 0x40, 0x01, 0xE0, - 0xC0, 0x00, 0xF0, 0xC0, 0x00, 0xF1, 0x80, 0x00, 0x71, 0x80, 0x00, 0x7B, - 0x00, 0x00, 0x3B, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x08, 0x00, 0xFF, 0x9F, - 0xF0, 0x3F, 0x9F, 0x03, 0xE0, 0x07, 0x07, 0x80, 0xF0, 0x03, 0x03, 0xC0, - 0x78, 0x01, 0x80, 0xE0, 0x1E, 0x00, 0x80, 0x78, 0x0F, 0x00, 0xC0, 0x1C, - 0x03, 0x80, 0x60, 0x0F, 0x01, 0xE0, 0x20, 0x07, 0x81, 0xF0, 0x30, 0x01, - 0xC0, 0xBC, 0x18, 0x00, 0xF0, 0xDE, 0x08, 0x00, 0x78, 0x67, 0x0C, 0x00, - 0x1E, 0x23, 0xC4, 0x00, 0x0F, 0x31, 0xE6, 0x00, 0x03, 0x90, 0x7B, 0x00, - 0x01, 0xF8, 0x3D, 0x00, 0x00, 0xFC, 0x0F, 0x80, 0x00, 0x3C, 0x07, 0xC0, - 0x00, 0x1E, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0xE0, 0x00, 0x03, 0x00, 0x70, - 0x00, 0x01, 0x80, 0x10, 0x00, 0x00, 0x80, 0x08, 0x00, 0x7F, 0xE0, 0xFF, - 0x0F, 0xC0, 0x1E, 0x03, 0xE0, 0x0E, 0x00, 0xF0, 0x06, 0x00, 0x3C, 0x06, - 0x00, 0x0F, 0x06, 0x00, 0x07, 0x86, 0x00, 0x01, 0xE6, 0x00, 0x00, 0x7B, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x03, - 0xF0, 0x00, 0x03, 0x78, 0x00, 0x01, 0x9E, 0x00, 0x01, 0x87, 0x80, 0x01, - 0x83, 0xE0, 0x01, 0x80, 0xF0, 0x01, 0x80, 0x3C, 0x01, 0x80, 0x1F, 0x01, - 0xC0, 0x07, 0xC1, 0xE0, 0x03, 0xF3, 0xFE, 0x0F, 0xFE, 0xFF, 0xC0, 0xFF, - 0x7E, 0x00, 0x1C, 0x1E, 0x00, 0x18, 0x1F, 0x00, 0x30, 0x0F, 0x00, 0x60, - 0x07, 0x80, 0x60, 0x03, 0xC0, 0xC0, 0x03, 0xE1, 0x80, 0x01, 0xE1, 0x80, - 0x00, 0xF3, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0x7E, 0x00, 0x01, 0xFF, 0x80, 0x3F, 0xFF, 0xF1, 0xFF, 0xFF, 0x9C, - 0x00, 0x78, 0xC0, 0x07, 0x84, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x3C, - 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x00, 0x00, 0x78, 0x00, 0x47, 0x80, 0x06, 0x78, 0x00, 0x33, 0x80, - 0x07, 0x3F, 0xFF, 0xFB, 0xFF, 0xFF, 0xC0, 0xFF, 0x83, 0x06, 0x0C, 0x18, - 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, - 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x07, 0xF0, 0xC0, 0x18, 0x06, 0x01, - 0x80, 0x70, 0x0C, 0x03, 0x00, 0xE0, 0x18, 0x06, 0x01, 0xC0, 0x30, 0x0C, - 0x03, 0x80, 0x60, 0x18, 0x07, 0x00, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x60, - 0x1C, 0x03, 0xFE, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, - 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, - 0x0C, 0x1F, 0xF0, 0x03, 0x80, 0x0F, 0x00, 0x1F, 0x00, 0x76, 0x00, 0xCE, - 0x03, 0x8C, 0x06, 0x1C, 0x1C, 0x18, 0x30, 0x30, 0xE0, 0x31, 0x80, 0x67, - 0x00, 0x6C, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xC0, 0xE0, 0x70, - 0x18, 0x0C, 0x03, 0x1F, 0x03, 0x8C, 0x38, 0x31, 0xC1, 0x8E, 0x0C, 0x00, - 0x60, 0x0F, 0x01, 0x98, 0x30, 0xC3, 0x86, 0x38, 0x31, 0xC1, 0x8E, 0x0C, - 0x78, 0xE5, 0xFB, 0xCF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0xF8, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, - 0xF0, 0x3B, 0xFC, 0x3C, 0x3E, 0x38, 0x0E, 0x38, 0x0F, 0x38, 0x07, 0x38, - 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x06, 0x38, 0x0E, 0x38, - 0x0C, 0x3C, 0x1C, 0x1F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x7F, 0xE3, 0x87, - 0xD8, 0x0F, 0x60, 0x1B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, - 0x0E, 0x00, 0x3C, 0x01, 0x78, 0x19, 0xFF, 0xC3, 0xFE, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0x7C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x07, 0x9C, 0x1F, 0xDC, 0x38, 0x7C, 0x70, - 0x3C, 0x70, 0x1C, 0x60, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, - 0x1C, 0xE0, 0x1C, 0xF0, 0x1C, 0x70, 0x1C, 0x7C, 0x3E, 0x3F, 0xDF, 0x0F, - 0x90, 0x0F, 0x81, 0xFF, 0x08, 0x3C, 0x80, 0xE7, 0xFF, 0x7F, 0xFF, 0x00, - 0x18, 0x00, 0xC0, 0x07, 0x00, 0x38, 0x03, 0xE0, 0x37, 0x83, 0x3F, 0xF0, - 0xFF, 0x03, 0xF0, 0x01, 0xF0, 0x3F, 0xC3, 0x8E, 0x18, 0x00, 0xC0, 0x0E, - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x03, 0xFE, 0x1F, 0xF0, 0x38, 0x01, 0xC0, - 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x07, 0xC0, 0xFF, 0x80, 0x0F, 0xC0, 0x1F, 0xFF, - 0x38, 0xFF, 0x70, 0x70, 0x70, 0x70, 0x70, 0x30, 0x70, 0x30, 0x70, 0x30, - 0x38, 0x20, 0x1C, 0x60, 0x0F, 0x80, 0x10, 0x00, 0x20, 0x00, 0x60, 0x00, - 0x7F, 0xE0, 0x3F, 0xFC, 0x1F, 0xFE, 0x20, 0x06, 0x40, 0x02, 0xC0, 0x02, - 0xC0, 0x04, 0xF0, 0x18, 0x7F, 0xF0, 0x1F, 0x80, 0x00, 0x00, 0x38, 0x00, - 0xF8, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, - 0x38, 0x00, 0x38, 0xF0, 0x3B, 0xF8, 0x3E, 0x3C, 0x3C, 0x1C, 0x38, 0x1C, - 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, - 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x7C, 0x3E, 0xFE, 0x7F, 0x18, 0x3C, - 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3C, 0x7C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x3C, 0xFF, 0x03, 0x03, - 0xC1, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC3, 0xE0, 0x70, - 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, - 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x37, 0x3B, 0xF8, 0xF8, 0x00, 0x00, - 0x1C, 0x00, 0x3E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x3F, 0x8E, 0x0F, 0x07, 0x06, 0x03, - 0x86, 0x01, 0xC4, 0x00, 0xE4, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0x1D, 0xC0, - 0x0E, 0x70, 0x07, 0x1C, 0x03, 0x8F, 0x01, 0xC3, 0xC0, 0xE0, 0xF0, 0xF8, - 0x3C, 0xFE, 0x7F, 0x80, 0x00, 0x1C, 0x7C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x3C, 0xFF, 0x38, 0xF0, 0x7C, 0x3E, 0xFE, 0x7F, 0x83, - 0xE3, 0xF0, 0xE0, 0xE0, 0x70, 0x1C, 0x38, 0x1C, 0x07, 0x0E, 0x07, 0x01, - 0xC3, 0x81, 0xC0, 0x70, 0xE0, 0x70, 0x1C, 0x38, 0x1C, 0x07, 0x0E, 0x07, - 0x01, 0xC3, 0x81, 0xC0, 0x70, 0xE0, 0x70, 0x1C, 0x38, 0x1C, 0x07, 0x0E, - 0x07, 0x01, 0xC3, 0x81, 0xE0, 0x73, 0xF9, 0xFC, 0x7F, 0x38, 0xF0, 0xFB, - 0xF8, 0x3E, 0x3C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, - 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, - 0x1C, 0x78, 0x3C, 0xFE, 0x7F, 0x07, 0xE0, 0x1F, 0xF8, 0x3C, 0x7C, 0x78, - 0x3E, 0x70, 0x1E, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, - 0x0F, 0xF8, 0x0F, 0x78, 0x0E, 0x7C, 0x1C, 0x3E, 0x3C, 0x0F, 0xF0, 0x07, - 0xC0, 0x18, 0xF0, 0xFB, 0xFC, 0x3E, 0x1E, 0x38, 0x0E, 0x38, 0x0F, 0x38, - 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x06, 0x38, - 0x0E, 0x38, 0x0C, 0x3E, 0x1C, 0x3B, 0xF8, 0x39, 0xE0, 0x38, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x7C, 0x00, 0xFF, - 0x00, 0x07, 0xC4, 0x1F, 0xEC, 0x3C, 0x3C, 0x70, 0x1C, 0x70, 0x1C, 0x60, - 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xF0, - 0x1C, 0x70, 0x1C, 0x78, 0x3C, 0x3F, 0xDC, 0x1F, 0x1C, 0x00, 0x1C, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3E, 0x00, - 0xFF, 0x19, 0xFF, 0x7C, 0xF3, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x1F, 0x07, 0xF0, 0x3E, - 0x58, 0x7C, 0x0F, 0x03, 0xC0, 0x7C, 0x07, 0x80, 0xF8, 0x1F, 0x81, 0xF8, - 0x1E, 0x03, 0xC0, 0xF0, 0x3E, 0x1A, 0x7C, 0x10, 0x30, 0x70, 0xFE, 0xFE, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x79, - 0x7E, 0x3C, 0xF8, 0x7C, 0x38, 0x3C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, - 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, - 0x38, 0x1C, 0x38, 0x1C, 0x3C, 0x7C, 0x1F, 0xDF, 0x0F, 0x18, 0xFE, 0x1F, - 0x7C, 0x06, 0x38, 0x04, 0x1C, 0x04, 0x1C, 0x0C, 0x0E, 0x08, 0x0E, 0x18, - 0x07, 0x10, 0x07, 0x10, 0x07, 0x20, 0x03, 0xA0, 0x03, 0xE0, 0x01, 0xC0, - 0x01, 0xC0, 0x00, 0x80, 0x00, 0x80, 0xFC, 0x7F, 0x1F, 0x78, 0x3C, 0x06, - 0x38, 0x1C, 0x04, 0x38, 0x1C, 0x04, 0x1C, 0x1C, 0x0C, 0x1C, 0x0E, 0x08, - 0x1C, 0x1E, 0x18, 0x0E, 0x17, 0x10, 0x0E, 0x37, 0x10, 0x07, 0x23, 0x30, - 0x07, 0x63, 0xA0, 0x07, 0x43, 0xE0, 0x03, 0xC1, 0xC0, 0x03, 0x81, 0xC0, - 0x01, 0x80, 0x80, 0x01, 0x00, 0x80, 0x7F, 0x7E, 0x1E, 0x0C, 0x07, 0x8C, - 0x01, 0xC4, 0x00, 0x76, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x03, - 0xE0, 0x01, 0x70, 0x01, 0x1C, 0x01, 0x8F, 0x01, 0x83, 0x80, 0x80, 0xE0, - 0xC0, 0x79, 0xF0, 0xFF, 0xFE, 0x0F, 0x7C, 0x06, 0x38, 0x06, 0x1C, 0x04, - 0x1C, 0x0C, 0x0E, 0x0C, 0x0E, 0x08, 0x0F, 0x18, 0x07, 0x10, 0x07, 0x90, - 0x03, 0xB0, 0x03, 0xA0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xC0, 0x00, 0xC0, - 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x03, 0x00, 0x7E, 0x00, - 0x7C, 0x00, 0x78, 0x00, 0x7F, 0xF9, 0xFF, 0xE6, 0x07, 0x10, 0x38, 0x00, - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xE0, 0x07, - 0x01, 0x38, 0x0D, 0xC0, 0x3F, 0xFF, 0xBF, 0xFE, 0x07, 0x0E, 0x1C, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x60, 0x60, - 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, - 0x0E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x08, 0x06, 0x06, - 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, - 0x70, 0xE0, 0x3E, 0x00, 0x7F, 0x87, 0xE3, 0xFE, 0x00, 0x7C}; - -const GFXglyph FreeSerif18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 4, 24, 12, 5, -23}, // 0x21 '!' - {12, 8, 9, 14, 3, -23}, // 0x22 '"' - {21, 17, 23, 17, 0, -22}, // 0x23 '#' - {70, 13, 27, 17, 2, -24}, // 0x24 '$' - {114, 25, 23, 29, 2, -22}, // 0x25 '%' - {186, 25, 25, 27, 1, -24}, // 0x26 '&' - {265, 3, 9, 7, 2, -23}, // 0x27 ''' - {269, 9, 30, 12, 2, -23}, // 0x28 '(' - {303, 9, 30, 12, 1, -22}, // 0x29 ')' - {337, 12, 14, 18, 3, -23}, // 0x2A '*' - {358, 16, 18, 20, 2, -17}, // 0x2B '+' - {394, 4, 9, 9, 2, -3}, // 0x2C ',' - {399, 8, 2, 12, 1, -8}, // 0x2D '-' - {401, 4, 4, 9, 2, -3}, // 0x2E '.' - {403, 10, 24, 10, 0, -23}, // 0x2F '/' - {433, 16, 24, 18, 1, -23}, // 0x30 '0' - {481, 10, 24, 18, 3, -23}, // 0x31 '1' - {511, 16, 24, 17, 1, -23}, // 0x32 '2' - {559, 13, 24, 17, 2, -23}, // 0x33 '3' - {598, 16, 23, 18, 0, -22}, // 0x34 '4' - {644, 13, 24, 17, 2, -23}, // 0x35 '5' - {683, 16, 24, 18, 1, -23}, // 0x36 '6' - {731, 14, 23, 18, 1, -22}, // 0x37 '7' - {772, 12, 25, 18, 2, -24}, // 0x38 '8' - {810, 16, 26, 17, 1, -24}, // 0x39 '9' - {862, 4, 17, 9, 2, -16}, // 0x3A ':' - {871, 5, 22, 9, 2, -16}, // 0x3B ';' - {885, 18, 18, 20, 1, -17}, // 0x3C '<' - {926, 18, 9, 20, 1, -12}, // 0x3D '=' - {947, 18, 18, 20, 1, -17}, // 0x3E '>' - {988, 13, 25, 16, 2, -24}, // 0x3F '?' - {1029, 24, 25, 30, 3, -24}, // 0x40 '@' - {1104, 24, 23, 25, 1, -22}, // 0x41 'A' - {1173, 20, 23, 22, 1, -22}, // 0x42 'B' - {1231, 22, 24, 23, 1, -23}, // 0x43 'C' - {1297, 23, 23, 25, 1, -22}, // 0x44 'D' - {1364, 20, 23, 21, 2, -22}, // 0x45 'E' - {1422, 17, 23, 20, 2, -22}, // 0x46 'F' - {1471, 23, 24, 25, 1, -23}, // 0x47 'G' - {1540, 22, 23, 25, 2, -22}, // 0x48 'H' - {1604, 9, 23, 11, 2, -22}, // 0x49 'I' - {1630, 12, 23, 13, 0, -22}, // 0x4A 'J' - {1665, 23, 23, 25, 2, -22}, // 0x4B 'K' - {1732, 19, 23, 21, 2, -22}, // 0x4C 'L' - {1787, 29, 23, 31, 1, -22}, // 0x4D 'M' - {1871, 23, 23, 25, 1, -22}, // 0x4E 'N' - {1938, 23, 24, 25, 1, -23}, // 0x4F 'O' - {2007, 18, 23, 20, 1, -22}, // 0x50 'P' - {2059, 23, 30, 25, 1, -23}, // 0x51 'Q' - {2146, 21, 23, 23, 2, -22}, // 0x52 'R' - {2207, 16, 24, 19, 1, -23}, // 0x53 'S' - {2255, 20, 23, 21, 1, -22}, // 0x54 'T' - {2313, 22, 23, 25, 2, -22}, // 0x55 'U' - {2377, 24, 23, 25, 0, -22}, // 0x56 'V' - {2446, 33, 23, 33, 0, -22}, // 0x57 'W' - {2541, 25, 23, 25, 0, -22}, // 0x58 'X' - {2613, 24, 23, 25, 1, -22}, // 0x59 'Y' - {2682, 21, 23, 21, 0, -22}, // 0x5A 'Z' - {2743, 7, 28, 12, 3, -22}, // 0x5B '[' - {2768, 10, 24, 10, 0, -23}, // 0x5C '\' - {2798, 7, 28, 12, 2, -22}, // 0x5D ']' - {2823, 15, 13, 16, 1, -22}, // 0x5E '^' - {2848, 18, 2, 17, 0, 3}, // 0x5F '_' - {2853, 8, 6, 9, 1, -23}, // 0x60 '`' - {2859, 13, 16, 15, 2, -15}, // 0x61 'a' - {2885, 16, 25, 17, 1, -24}, // 0x62 'b' - {2935, 14, 16, 16, 1, -15}, // 0x63 'c' - {2963, 16, 25, 17, 1, -24}, // 0x64 'd' - {3013, 13, 16, 16, 1, -15}, // 0x65 'e' - {3039, 13, 25, 13, 0, -24}, // 0x66 'f' - {3080, 16, 24, 16, 1, -15}, // 0x67 'g' - {3128, 16, 25, 17, 1, -24}, // 0x68 'h' - {3178, 8, 24, 10, 0, -23}, // 0x69 'i' - {3202, 9, 32, 12, 0, -23}, // 0x6A 'j' - {3238, 17, 25, 18, 1, -24}, // 0x6B 'k' - {3292, 8, 25, 9, 0, -24}, // 0x6C 'l' - {3317, 26, 16, 27, 1, -15}, // 0x6D 'm' - {3369, 16, 16, 17, 1, -15}, // 0x6E 'n' - {3401, 16, 16, 17, 1, -15}, // 0x6F 'o' - {3433, 16, 24, 17, 1, -15}, // 0x70 'p' - {3481, 16, 24, 17, 1, -15}, // 0x71 'q' - {3529, 11, 16, 12, 1, -15}, // 0x72 'r' - {3551, 10, 16, 13, 1, -15}, // 0x73 's' - {3571, 8, 19, 10, 2, -18}, // 0x74 't' - {3590, 16, 16, 17, 1, -15}, // 0x75 'u' - {3622, 16, 16, 16, 0, -15}, // 0x76 'v' - {3654, 24, 16, 24, 0, -15}, // 0x77 'w' - {3702, 17, 16, 17, 0, -15}, // 0x78 'x' - {3736, 16, 24, 16, 0, -15}, // 0x79 'y' - {3784, 14, 16, 15, 0, -15}, // 0x7A 'z' - {3812, 8, 30, 17, 3, -23}, // 0x7B '{' - {3842, 2, 24, 7, 2, -23}, // 0x7C '|' - {3848, 8, 30, 17, 6, -22}, // 0x7D '}' - {3878, 16, 4, 17, 1, -10}}; // 0x7E '~' - -const GFXfont FreeSerif18pt7b PROGMEM = {(uint8_t *)FreeSerif18pt7bBitmaps, - (GFXglyph *)FreeSerif18pt7bGlyphs, - 0x20, 0x7E, 42}; - -// Approx. 4558 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif24pt7b.h deleted file mode 100644 index cac1999..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif24pt7b.h +++ /dev/null @@ -1,692 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerif24pt7bBitmaps[] PROGMEM = { - 0x77, 0xBF, 0xFF, 0xFF, 0xFF, 0xFB, 0x9C, 0xE7, 0x39, 0xCE, 0x61, 0x08, - 0x42, 0x10, 0x84, 0x00, 0x00, 0xEF, 0xFF, 0xEE, 0x60, 0x6F, 0x0F, 0xF0, - 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, - 0x66, 0x06, 0x00, 0xE0, 0x70, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC0, 0x07, - 0x03, 0x80, 0x0E, 0x06, 0x00, 0x18, 0x0C, 0x00, 0x30, 0x38, 0x00, 0xE0, - 0x70, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC1, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, - 0xF0, 0x18, 0x0C, 0x00, 0x70, 0x38, 0x00, 0xE0, 0x70, 0x01, 0xC0, 0xE0, - 0x03, 0x81, 0xC0, 0x07, 0x03, 0x80, 0x0C, 0x06, 0x07, 0xFF, 0xFF, 0xEF, - 0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC0, 0x06, - 0x03, 0x80, 0x0C, 0x06, 0x00, 0x38, 0x1C, 0x00, 0x70, 0x38, 0x00, 0xE0, - 0x70, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC0, 0x00, 0x00, 0x40, 0x00, 0x08, - 0x00, 0x01, 0x00, 0x01, 0xFC, 0x01, 0xE4, 0xF8, 0x70, 0x87, 0x9C, 0x10, - 0x77, 0x02, 0x06, 0xE0, 0x40, 0xDC, 0x08, 0x0B, 0x81, 0x00, 0x78, 0x20, - 0x07, 0x84, 0x00, 0xFC, 0x80, 0x0F, 0xF0, 0x00, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x05, 0xFC, 0x00, 0x8F, - 0x80, 0x10, 0xF8, 0x02, 0x0F, 0x00, 0x40, 0xF0, 0x08, 0x1E, 0x01, 0x03, - 0xE0, 0x20, 0x7C, 0x04, 0x0F, 0xC0, 0x83, 0xBC, 0x10, 0xE3, 0xE2, 0x78, - 0x3F, 0xFE, 0x00, 0xFE, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x01, 0xF0, 0x00, 0xC0, 0x03, 0xFC, 0x01, 0xE0, 0x03, 0xC7, 0x81, 0xE0, - 0x03, 0xC0, 0x7F, 0x60, 0x03, 0xC0, 0x20, 0x70, 0x01, 0xE0, 0x10, 0x30, - 0x01, 0xE0, 0x08, 0x38, 0x00, 0xE0, 0x04, 0x18, 0x00, 0xF0, 0x02, 0x1C, - 0x00, 0x78, 0x02, 0x0C, 0x00, 0x38, 0x01, 0x0E, 0x00, 0x1C, 0x01, 0x86, - 0x00, 0x0E, 0x00, 0x86, 0x00, 0x07, 0x00, 0x87, 0x03, 0xE1, 0x80, 0xC3, - 0x07, 0xFC, 0xE1, 0xC3, 0x87, 0xC6, 0x3F, 0xC1, 0x87, 0x81, 0x8F, 0x81, - 0xC7, 0x80, 0x40, 0x00, 0xC3, 0xC0, 0x20, 0x00, 0xE3, 0xC0, 0x10, 0x00, - 0x61, 0xC0, 0x08, 0x00, 0x61, 0xE0, 0x04, 0x00, 0x70, 0xF0, 0x06, 0x00, - 0x30, 0x70, 0x02, 0x00, 0x38, 0x38, 0x03, 0x00, 0x18, 0x1C, 0x01, 0x00, - 0x1C, 0x0E, 0x01, 0x80, 0x0C, 0x07, 0x01, 0x80, 0x0E, 0x01, 0xC3, 0x80, - 0x06, 0x00, 0x7F, 0x80, 0x06, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x70, 0xE0, 0x00, - 0x00, 0xE0, 0x60, 0x00, 0x00, 0xC0, 0x30, 0x00, 0x01, 0xC0, 0x30, 0x00, - 0x01, 0xC0, 0x30, 0x00, 0x01, 0xC0, 0x30, 0x00, 0x01, 0xC0, 0x70, 0x00, - 0x01, 0xE0, 0xE0, 0x00, 0x01, 0xE1, 0xC0, 0x00, 0x00, 0xF3, 0x80, 0x00, - 0x00, 0xFF, 0x0F, 0xFC, 0x00, 0xFC, 0x03, 0xF0, 0x00, 0xF8, 0x01, 0xE0, - 0x01, 0xFC, 0x01, 0xC0, 0x07, 0x7C, 0x01, 0xC0, 0x0F, 0x3E, 0x01, 0x80, - 0x1E, 0x3E, 0x03, 0x00, 0x3C, 0x1F, 0x03, 0x00, 0x7C, 0x1F, 0x06, 0x00, - 0x78, 0x0F, 0x86, 0x00, 0x78, 0x07, 0xCC, 0x00, 0xF8, 0x07, 0xE8, 0x00, - 0xF8, 0x03, 0xF8, 0x00, 0xF8, 0x01, 0xF0, 0x00, 0xF8, 0x01, 0xF8, 0x00, - 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0x7E, 0x03, 0xBF, 0x86, - 0x7F, 0x0F, 0x1F, 0xFE, 0x3F, 0xFC, 0x0F, 0xF8, 0x0F, 0xE0, 0x03, 0xF0, - 0x6F, 0xFF, 0xFF, 0x66, 0x66, 0x66, 0x00, 0x10, 0x02, 0x00, 0xC0, 0x18, - 0x03, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0x1C, 0x03, 0x80, 0x38, 0x03, 0x80, - 0x78, 0x07, 0x00, 0x70, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x07, 0x00, 0x70, 0x07, 0x80, - 0x38, 0x03, 0x80, 0x38, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x06, 0x00, 0x30, - 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, 0x60, 0x07, 0x00, 0x30, 0x03, 0x80, 0x1C, 0x01, 0xC0, 0x1C, - 0x01, 0xE0, 0x0E, 0x00, 0xE0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0E, 0x00, 0xE0, 0x1E, - 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x38, 0x03, 0x00, 0x70, 0x0E, 0x00, 0xC0, - 0x18, 0x03, 0x00, 0x40, 0x08, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, - 0x43, 0x86, 0xE1, 0x0F, 0xF1, 0x1F, 0xF9, 0x3E, 0x3D, 0x78, 0x07, 0xC0, - 0x01, 0x00, 0x07, 0xC0, 0x19, 0x30, 0xF9, 0x1E, 0xF1, 0x0F, 0xE1, 0x07, - 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x38, 0x00, 0x00, - 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, - 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, - 0x00, 0x00, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0x00, - 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, - 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x73, 0xEF, 0xFF, 0x7C, 0x10, 0x42, 0x08, 0xC6, 0x00, - 0xFF, 0xFF, 0xFC, 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x1C, 0x00, 0xE0, 0x03, - 0x80, 0x0E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, - 0x80, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x38, 0x01, 0xE0, 0x07, - 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xC0, 0x07, - 0x00, 0x3C, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x0F, - 0x00, 0x38, 0x00, 0x00, 0xFC, 0x00, 0x0E, 0x1C, 0x00, 0x70, 0x38, 0x03, - 0x80, 0x70, 0x1E, 0x01, 0xE0, 0xF0, 0x03, 0x83, 0xC0, 0x0F, 0x0F, 0x00, - 0x3C, 0x7C, 0x00, 0xF9, 0xE0, 0x01, 0xE7, 0x80, 0x07, 0xBE, 0x00, 0x1F, - 0xF8, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x1F, 0xF8, - 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x00, - 0x7F, 0xE0, 0x01, 0xF7, 0x80, 0x07, 0x9E, 0x00, 0x1E, 0x7C, 0x00, 0xF8, - 0xF0, 0x03, 0xC3, 0xC0, 0x0F, 0x07, 0x00, 0x38, 0x1E, 0x01, 0xE0, 0x38, - 0x07, 0x00, 0x70, 0x38, 0x00, 0xE1, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x80, - 0x1C, 0x03, 0xE0, 0x7F, 0x0C, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, - 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, - 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x3F, - 0x0F, 0xFF, 0x01, 0xF8, 0x00, 0x3F, 0xF0, 0x07, 0xFF, 0xE0, 0x70, 0x3F, - 0x83, 0x00, 0x7C, 0x30, 0x01, 0xF1, 0x00, 0x0F, 0x98, 0x00, 0x3C, 0x80, - 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x1C, - 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, - 0x70, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, - 0x03, 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x43, 0x00, - 0x02, 0x30, 0x00, 0x23, 0xFF, 0xFF, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0x80, - 0x03, 0xF8, 0x03, 0xFF, 0x01, 0x83, 0xE0, 0x80, 0x3C, 0x40, 0x0F, 0x10, - 0x01, 0xC8, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x03, 0x00, 0x00, - 0x80, 0x00, 0xC0, 0x00, 0x78, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x01, 0xFE, - 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x01, 0xC0, - 0x00, 0x70, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, - 0x30, 0x00, 0x0C, 0x70, 0x06, 0x3F, 0x07, 0x0F, 0xFF, 0x00, 0xFF, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x1E, 0x00, 0x01, - 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xDC, 0x00, 0x0C, 0xE0, 0x00, 0x47, 0x00, - 0x06, 0x38, 0x00, 0x61, 0xC0, 0x06, 0x0E, 0x00, 0x30, 0x70, 0x03, 0x03, - 0x80, 0x30, 0x1C, 0x01, 0x80, 0xE0, 0x18, 0x07, 0x01, 0x80, 0x38, 0x08, - 0x01, 0xC0, 0xC0, 0x0E, 0x0C, 0x00, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, - 0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0x00, - 0x40, 0x7F, 0xF8, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0xC0, 0x00, 0x18, 0x00, - 0x06, 0x00, 0x00, 0xC0, 0x00, 0x1C, 0x00, 0x07, 0xF8, 0x00, 0xFF, 0xC0, - 0x3F, 0xFE, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7C, - 0x00, 0x07, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x1C, - 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x30, - 0x00, 0x0E, 0x00, 0x01, 0x80, 0x00, 0x71, 0xE0, 0x1C, 0x3F, 0x07, 0x07, - 0xFF, 0x80, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x0F, - 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, - 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xC7, 0xE0, 0x3E, 0xFF, 0xC3, 0xF8, 0x3F, 0x1F, 0x80, 0x7C, 0xF8, - 0x03, 0xF7, 0xC0, 0x0F, 0xBE, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0x80, 0x0F, - 0xFC, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x1F, 0x78, 0x00, 0xFB, 0xE0, - 0x07, 0x9F, 0x00, 0x3C, 0x78, 0x03, 0xE3, 0xE0, 0x1E, 0x0F, 0x81, 0xE0, - 0x3E, 0x1E, 0x00, 0xFF, 0xE0, 0x00, 0xFC, 0x00, 0x3F, 0xFF, 0xF3, 0xFF, - 0xFF, 0x3F, 0xFF, 0xE7, 0x00, 0x0E, 0x40, 0x00, 0xEC, 0x00, 0x1C, 0x80, - 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x03, 0x80, - 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x00, 0xE0, - 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x38, - 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, - 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, - 0xC0, 0x00, 0x03, 0xF0, 0x03, 0xFF, 0x03, 0xC1, 0xE0, 0xC0, 0x1C, 0x70, - 0x07, 0x18, 0x00, 0xEE, 0x00, 0x3B, 0x80, 0x0E, 0xF0, 0x03, 0xBC, 0x00, - 0xE7, 0x80, 0x71, 0xF0, 0x38, 0x3E, 0x1C, 0x07, 0xEE, 0x00, 0xFE, 0x00, - 0x1F, 0xC0, 0x03, 0xF8, 0x03, 0xFF, 0x01, 0xC7, 0xE0, 0xE0, 0xFC, 0x70, - 0x0F, 0x98, 0x01, 0xEE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x01, 0xF8, 0x00, - 0x7E, 0x00, 0x1F, 0xC0, 0x07, 0x70, 0x03, 0x9E, 0x00, 0xE3, 0xE0, 0xF0, - 0x7F, 0xF0, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x3F, 0xF0, 0x03, 0xC3, - 0xE0, 0x3C, 0x0F, 0x83, 0xC0, 0x3C, 0x3E, 0x00, 0xF1, 0xE0, 0x07, 0xCF, - 0x00, 0x3E, 0xF8, 0x00, 0xF7, 0xC0, 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x01, - 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, 0x7C, - 0x00, 0xF9, 0xF0, 0x0F, 0xC7, 0xE1, 0xFC, 0x1F, 0xF9, 0xE0, 0x3F, 0x1F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x78, 0x00, 0x07, 0xC0, 0x00, - 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, - 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x00, 0x77, 0xFF, 0xF7, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xBF, 0xFF, 0xB8, 0x39, 0xF7, - 0xDF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, - 0xFF, 0x7C, 0x10, 0x42, 0x08, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, - 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xE0, - 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 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, 0x00, 0xE0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x07, - 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, - 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, - 0x0F, 0xFE, 0x0C, 0x1F, 0x88, 0x03, 0xEC, 0x01, 0xF7, 0x00, 0x7F, 0xC0, - 0x3F, 0xE0, 0x1F, 0x70, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x01, 0xE0, - 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x30, 0x00, 0x10, - 0x00, 0x18, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x02, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x03, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, - 0xFF, 0x00, 0x00, 0xFC, 0x07, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x07, 0xC0, - 0x00, 0x30, 0x0F, 0x00, 0x00, 0x18, 0x1E, 0x00, 0x00, 0x0C, 0x1E, 0x00, - 0x00, 0x04, 0x3C, 0x00, 0xF8, 0x06, 0x3C, 0x01, 0xFD, 0xC2, 0x78, 0x03, - 0xC7, 0xC3, 0x78, 0x07, 0x07, 0x81, 0xF0, 0x0E, 0x03, 0x81, 0xF0, 0x0E, - 0x03, 0x81, 0xF0, 0x1C, 0x07, 0x81, 0xF0, 0x1C, 0x07, 0x01, 0xF0, 0x38, - 0x07, 0x01, 0xF0, 0x38, 0x07, 0x03, 0xF0, 0x38, 0x0F, 0x02, 0xF0, 0x38, - 0x0E, 0x02, 0xF0, 0x38, 0x1E, 0x04, 0x78, 0x38, 0x1E, 0x0C, 0x78, 0x1C, - 0x6E, 0x18, 0x38, 0x1F, 0xC7, 0xF0, 0x3C, 0x0F, 0x03, 0xE0, 0x1E, 0x00, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x60, 0x00, 0xFC, 0x03, 0xE0, 0x00, 0x3F, - 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0D, - 0xF0, 0x00, 0x00, 0x0D, 0xF0, 0x00, 0x00, 0x18, 0xF0, 0x00, 0x00, 0x18, - 0xF8, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, 0x30, 0x7C, 0x00, 0x00, 0x30, - 0x7C, 0x00, 0x00, 0x60, 0x3E, 0x00, 0x00, 0x60, 0x3E, 0x00, 0x00, 0xE0, - 0x1E, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x01, 0x80, - 0x0F, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x03, 0x00, - 0x07, 0xC0, 0x07, 0x00, 0x07, 0xC0, 0x06, 0x00, 0x03, 0xE0, 0x06, 0x00, - 0x03, 0xE0, 0x0E, 0x00, 0x01, 0xF0, 0x0C, 0x00, 0x01, 0xF0, 0x1C, 0x00, - 0x01, 0xF8, 0x3C, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x01, 0xFC, 0xFF, 0x80, - 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x80, 0x1F, 0x01, 0xF8, - 0x03, 0xE0, 0x0F, 0x80, 0x7C, 0x00, 0xF8, 0x0F, 0x80, 0x1F, 0x81, 0xF0, - 0x01, 0xF0, 0x3E, 0x00, 0x3E, 0x07, 0xC0, 0x07, 0xC0, 0xF8, 0x00, 0xF8, - 0x1F, 0x00, 0x1F, 0x03, 0xE0, 0x07, 0xC0, 0x7C, 0x01, 0xF0, 0x0F, 0x80, - 0xFC, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x07, 0xC0, 0x7F, 0x00, - 0xF8, 0x01, 0xF0, 0x1F, 0x00, 0x1F, 0x03, 0xE0, 0x03, 0xE0, 0x7C, 0x00, - 0x3E, 0x0F, 0x80, 0x07, 0xC1, 0xF0, 0x00, 0xF8, 0x3E, 0x00, 0x1F, 0x07, - 0xC0, 0x03, 0xE0, 0xF8, 0x00, 0xF8, 0x1F, 0x00, 0x1F, 0x03, 0xE0, 0x07, - 0xC0, 0x7C, 0x07, 0xF0, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x00, 0x00, - 0x1F, 0xF0, 0x20, 0x07, 0xFF, 0xEE, 0x01, 0xF8, 0x1F, 0xE0, 0x3E, 0x00, - 0x7E, 0x07, 0x80, 0x01, 0xE0, 0xF0, 0x00, 0x1E, 0x1F, 0x00, 0x00, 0xE3, - 0xE0, 0x00, 0x06, 0x3C, 0x00, 0x00, 0x67, 0xC0, 0x00, 0x02, 0x7C, 0x00, - 0x00, 0x27, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x02, 0x0F, 0x80, 0x00, 0xE0, 0x7E, 0x00, 0x1C, 0x03, 0xF8, 0x0F, 0x00, - 0x0F, 0xFF, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0x3E, 0x03, 0xFC, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xF8, - 0x00, 0x7E, 0x01, 0xF0, 0x00, 0x7E, 0x03, 0xE0, 0x00, 0x7C, 0x07, 0xC0, - 0x00, 0x7C, 0x0F, 0x80, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF8, 0x3E, 0x00, - 0x01, 0xF0, 0x7C, 0x00, 0x03, 0xF0, 0xF8, 0x00, 0x03, 0xE1, 0xF0, 0x00, - 0x07, 0xC3, 0xE0, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x1F, 0x0F, 0x80, 0x00, - 0x3E, 0x1F, 0x00, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0xF8, 0x7C, 0x00, 0x01, - 0xF0, 0xF8, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x1E, - 0x07, 0xC0, 0x00, 0x7C, 0x0F, 0x80, 0x01, 0xF0, 0x1F, 0x00, 0x03, 0xE0, - 0x3E, 0x00, 0x1F, 0x80, 0x7C, 0x00, 0x7C, 0x00, 0xF8, 0x0F, 0xF0, 0x07, - 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, - 0xFF, 0xFF, 0xE0, 0x7C, 0x00, 0x1C, 0x0F, 0x80, 0x01, 0x81, 0xF0, 0x00, - 0x30, 0x3E, 0x00, 0x02, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x20, 0x0F, 0x80, 0x04, - 0x01, 0xF0, 0x01, 0x80, 0x3E, 0x00, 0x70, 0x07, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xC0, 0x1F, 0x00, 0x38, 0x03, 0xE0, 0x03, 0x00, 0x7C, 0x00, 0x20, - 0x0F, 0x80, 0x04, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0xF8, 0x00, 0x03, 0x1F, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x18, - 0x7C, 0x00, 0x07, 0x0F, 0x80, 0x01, 0xC1, 0xF0, 0x00, 0xF8, 0x7F, 0xFF, - 0xFF, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, - 0x00, 0x07, 0x1F, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x1F, 0x00, 0x01, 0x1F, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x08, 0x1F, 0x00, 0x08, 0x1F, 0x00, 0x18, 0x1F, 0x00, 0x38, 0x1F, - 0xFF, 0xF8, 0x1F, 0xFF, 0xF8, 0x1F, 0x00, 0x38, 0x1F, 0x00, 0x18, 0x1F, - 0x00, 0x08, 0x1F, 0x00, 0x08, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFF, - 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x08, 0x00, 0xFF, 0xFE, 0x70, 0x07, 0xE0, - 0x1F, 0xE0, 0x1F, 0x00, 0x0F, 0xC0, 0x78, 0x00, 0x07, 0x81, 0xE0, 0x00, - 0x07, 0x07, 0xC0, 0x00, 0x0E, 0x1F, 0x00, 0x00, 0x0C, 0x3E, 0x00, 0x00, - 0x08, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x01, 0xFD, 0xF0, 0x00, 0x01, 0xF3, - 0xE0, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x07, 0xCF, 0x80, 0x00, 0x0F, 0x8F, - 0x80, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x7C, 0x3E, - 0x00, 0x00, 0xF8, 0x7C, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x03, 0xE0, 0xFC, - 0x00, 0x07, 0xC0, 0xFC, 0x00, 0x0F, 0x80, 0x7C, 0x00, 0x3F, 0x00, 0x7F, - 0x01, 0xFC, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xE0, - 0x1F, 0xFC, 0xFE, 0x00, 0x1F, 0xC1, 0xF0, 0x00, 0x3E, 0x07, 0xC0, 0x00, - 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0x3E, - 0x07, 0xC0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x81, - 0xF0, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x7C, - 0x00, 0x0F, 0x81, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0x00, - 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0x3E, 0x07, 0xC0, 0x00, - 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0x3E, - 0x07, 0xC0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x0F, 0x81, - 0xF0, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0xFE, - 0x00, 0x1F, 0xCF, 0xFE, 0x01, 0xFF, 0xC0, 0xFF, 0xF8, 0xFE, 0x03, 0xE0, - 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, - 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, - 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, - 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x0F, 0xE3, 0xFF, 0xE0, 0x0F, 0xFF, - 0x80, 0xFE, 0x00, 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, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, - 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3C, 0x0E, 0x1E, 0x0F, 0x8F, 0x07, - 0xCF, 0x01, 0xFF, 0x00, 0x7E, 0x00, 0xFF, 0xF8, 0x3F, 0xFC, 0x3F, 0xC0, - 0x07, 0xE0, 0x0F, 0x80, 0x07, 0x80, 0x0F, 0x80, 0x07, 0x00, 0x0F, 0x80, - 0x0E, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x38, 0x00, 0x0F, 0x80, - 0x70, 0x00, 0x0F, 0x80, 0xE0, 0x00, 0x0F, 0x81, 0xC0, 0x00, 0x0F, 0x83, - 0x80, 0x00, 0x0F, 0x87, 0x00, 0x00, 0x0F, 0x9E, 0x00, 0x00, 0x0F, 0xBC, - 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xDF, - 0x80, 0x00, 0x0F, 0x8F, 0xC0, 0x00, 0x0F, 0x87, 0xE0, 0x00, 0x0F, 0x83, - 0xF0, 0x00, 0x0F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x00, 0x0F, 0x80, - 0x7E, 0x00, 0x0F, 0x80, 0x3F, 0x00, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, - 0x1F, 0x80, 0x0F, 0x80, 0x0F, 0xC0, 0x0F, 0x80, 0x07, 0xE0, 0x0F, 0x80, - 0x07, 0xF0, 0x1F, 0xC0, 0x07, 0xFC, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, - 0x00, 0x0F, 0xF0, 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, 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, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x7C, 0x00, 0x01, 0x1F, 0x00, 0x00, 0xC7, 0xC0, 0x00, 0x21, 0xF0, - 0x00, 0x18, 0x7C, 0x00, 0x0E, 0x1F, 0x00, 0x1F, 0x8F, 0xFF, 0xFF, 0xCF, - 0xFF, 0xFF, 0xF0, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x7F, 0x80, 0x00, 0x07, - 0xF0, 0x3F, 0x00, 0x00, 0x1F, 0xC0, 0x7E, 0x00, 0x00, 0x3F, 0x80, 0xFE, - 0x00, 0x00, 0xFF, 0x01, 0xFC, 0x00, 0x01, 0xBE, 0x03, 0x7C, 0x00, 0x03, - 0x7C, 0x06, 0xF8, 0x00, 0x0E, 0xF8, 0x0D, 0xF8, 0x00, 0x19, 0xF0, 0x19, - 0xF0, 0x00, 0x73, 0xE0, 0x33, 0xF0, 0x00, 0xC7, 0xC0, 0x63, 0xE0, 0x03, - 0x8F, 0x80, 0xC7, 0xE0, 0x06, 0x1F, 0x01, 0x87, 0xC0, 0x1C, 0x3E, 0x03, - 0x0F, 0xC0, 0x30, 0x7C, 0x06, 0x0F, 0x80, 0x60, 0xF8, 0x0C, 0x1F, 0x81, - 0x81, 0xF0, 0x18, 0x1F, 0x03, 0x03, 0xE0, 0x30, 0x3F, 0x0C, 0x07, 0xC0, - 0x60, 0x3E, 0x18, 0x0F, 0x80, 0xC0, 0x7C, 0x70, 0x1F, 0x01, 0x80, 0x7C, - 0xC0, 0x3E, 0x03, 0x00, 0xFB, 0x80, 0x7C, 0x06, 0x00, 0xFE, 0x00, 0xF8, - 0x0C, 0x01, 0xFC, 0x01, 0xF0, 0x18, 0x03, 0xF0, 0x03, 0xE0, 0x30, 0x03, - 0xE0, 0x07, 0xC0, 0x60, 0x07, 0x80, 0x0F, 0x81, 0xE0, 0x07, 0x00, 0x1F, - 0x07, 0xE0, 0x0C, 0x00, 0xFF, 0x3F, 0xF0, 0x08, 0x07, 0xFF, 0x80, 0xFF, - 0x00, 0x03, 0xFF, 0x3F, 0x80, 0x00, 0xFC, 0x1F, 0xC0, 0x00, 0x78, 0x0F, - 0xC0, 0x00, 0x30, 0x0F, 0xE0, 0x00, 0x30, 0x0F, 0xF0, 0x00, 0x30, 0x0D, - 0xF8, 0x00, 0x30, 0x0D, 0xFC, 0x00, 0x30, 0x0C, 0xFC, 0x00, 0x30, 0x0C, - 0x7E, 0x00, 0x30, 0x0C, 0x3F, 0x00, 0x30, 0x0C, 0x1F, 0x80, 0x30, 0x0C, - 0x1F, 0xC0, 0x30, 0x0C, 0x0F, 0xE0, 0x30, 0x0C, 0x07, 0xE0, 0x30, 0x0C, - 0x03, 0xF0, 0x30, 0x0C, 0x01, 0xF8, 0x30, 0x0C, 0x01, 0xFC, 0x30, 0x0C, - 0x00, 0xFE, 0x30, 0x0C, 0x00, 0x7E, 0x30, 0x0C, 0x00, 0x3F, 0x30, 0x0C, - 0x00, 0x1F, 0xB0, 0x0C, 0x00, 0x0F, 0xF0, 0x0C, 0x00, 0x0F, 0xF0, 0x0C, - 0x00, 0x07, 0xF0, 0x0C, 0x00, 0x03, 0xF0, 0x0C, 0x00, 0x01, 0xF0, 0x0C, - 0x00, 0x00, 0xF0, 0x1E, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x70, 0xFF, - 0xC0, 0x00, 0x30, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1F, 0xE0, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0x03, 0xE0, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0x80, - 0x07, 0xC0, 0x7C, 0x00, 0x0F, 0x01, 0xE0, 0x00, 0x1E, 0x0F, 0x80, 0x00, - 0x7C, 0x3C, 0x00, 0x00, 0xF1, 0xF0, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x0F, - 0x9E, 0x00, 0x00, 0x1E, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x7D, 0xF0, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x0F, 0x9F, 0x00, 0x00, - 0x3E, 0x3C, 0x00, 0x00, 0xF0, 0xF8, 0x00, 0x07, 0xC1, 0xE0, 0x00, 0x1E, - 0x07, 0xC0, 0x00, 0xF8, 0x0F, 0x80, 0x07, 0xC0, 0x1F, 0x00, 0x3E, 0x00, - 0x1F, 0x03, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFF, - 0xFF, 0x00, 0x7F, 0xFF, 0x80, 0x7C, 0x1F, 0xC0, 0xF8, 0x07, 0xC1, 0xF0, - 0x07, 0xC3, 0xE0, 0x0F, 0x87, 0xC0, 0x0F, 0x8F, 0x80, 0x1F, 0x1F, 0x00, - 0x3E, 0x3E, 0x00, 0x7C, 0x7C, 0x00, 0xF8, 0xF8, 0x01, 0xF1, 0xF0, 0x07, - 0xC3, 0xE0, 0x0F, 0x87, 0xC0, 0x3E, 0x0F, 0x81, 0xF8, 0x1F, 0xFF, 0xC0, - 0x3F, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x07, 0xC0, 0xF8, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x7C, - 0x03, 0xE0, 0x00, 0x7C, 0x07, 0x80, 0x00, 0x78, 0x1F, 0x00, 0x00, 0xF8, - 0x3C, 0x00, 0x00, 0xF0, 0xF8, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x03, 0xE3, - 0xC0, 0x00, 0x03, 0xCF, 0x80, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x0F, 0xBE, - 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x3E, 0xF8, 0x00, 0x00, 0x7D, 0xF0, - 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x03, 0xEF, 0x80, - 0x00, 0x07, 0xCF, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x3E, 0x3E, 0x00, - 0x00, 0x7C, 0x3C, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x03, 0xE0, 0x78, 0x00, - 0x0F, 0x80, 0x78, 0x00, 0x1E, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x03, - 0xE0, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x1F, - 0x03, 0xF8, 0x01, 0xF0, 0x0F, 0x80, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x03, - 0xE0, 0x1F, 0x00, 0x3E, 0x01, 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x3E, 0x01, - 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x3E, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, - 0x7C, 0x01, 0xF0, 0x0F, 0x80, 0x1F, 0x07, 0xF0, 0x01, 0xFF, 0xFC, 0x00, - 0x1F, 0xFE, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x1F, 0x1F, 0x80, 0x01, 0xF0, - 0xF8, 0x00, 0x1F, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x1F, 0x03, 0xF0, - 0x01, 0xF0, 0x1F, 0x80, 0x1F, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xC0, 0x1F, - 0x00, 0x7E, 0x01, 0xF0, 0x03, 0xF0, 0x1F, 0x00, 0x1F, 0x83, 0xF8, 0x00, - 0xFC, 0xFF, 0xF0, 0x0F, 0xF0, 0x03, 0xF0, 0x20, 0x7F, 0xF3, 0x07, 0xC1, - 0xF8, 0x78, 0x03, 0xC3, 0x80, 0x0E, 0x3C, 0x00, 0x31, 0xE0, 0x01, 0xCF, - 0x00, 0x06, 0x7C, 0x00, 0x33, 0xE0, 0x01, 0x9F, 0x80, 0x00, 0x7E, 0x00, - 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xC0, 0x01, - 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7F, - 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, - 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xEF, 0x00, 0x1F, 0x3C, 0x01, 0xF1, - 0xF8, 0x1F, 0x0C, 0xFF, 0xF0, 0x40, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x7C, 0x07, 0xF0, 0x0F, 0x80, 0x3C, 0x01, 0xF0, - 0x07, 0x00, 0x3E, 0x00, 0x60, 0x07, 0xC0, 0x08, 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, - 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, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0x3F, 0xE0, 0x00, - 0xFC, 0x0F, 0x80, 0x00, 0x78, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, - 0x30, 0x0F, 0x80, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x20, 0x07, 0xC0, 0x00, - 0x60, 0x07, 0xC0, 0x00, 0x60, 0x03, 0xE0, 0x00, 0xC0, 0x03, 0xF0, 0x01, - 0xC0, 0x01, 0xFC, 0x07, 0x80, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0x3F, 0xC0, 0x00, 0x7E, 0x0F, 0x80, 0x00, - 0x3C, 0x0F, 0xC0, 0x00, 0x38, 0x07, 0xC0, 0x00, 0x38, 0x07, 0xC0, 0x00, - 0x30, 0x03, 0xE0, 0x00, 0x70, 0x03, 0xE0, 0x00, 0x60, 0x01, 0xF0, 0x00, - 0x60, 0x01, 0xF0, 0x00, 0xE0, 0x01, 0xF8, 0x00, 0xC0, 0x00, 0xF8, 0x01, - 0xC0, 0x00, 0xF8, 0x01, 0x80, 0x00, 0x7C, 0x01, 0x80, 0x00, 0x7C, 0x03, - 0x80, 0x00, 0x3E, 0x03, 0x00, 0x00, 0x3E, 0x07, 0x00, 0x00, 0x1F, 0x06, - 0x00, 0x00, 0x1F, 0x06, 0x00, 0x00, 0x1F, 0x8E, 0x00, 0x00, 0x0F, 0x8C, - 0x00, 0x00, 0x0F, 0x9C, 0x00, 0x00, 0x07, 0xD8, 0x00, 0x00, 0x07, 0xD8, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0xE0, - 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xF1, 0xFF, - 0xF0, 0x1F, 0xF3, 0xF8, 0x07, 0xF8, 0x00, 0x7C, 0x1F, 0x80, 0x3F, 0x00, - 0x03, 0x80, 0xF8, 0x01, 0xF0, 0x00, 0x30, 0x0F, 0x80, 0x1F, 0x00, 0x03, - 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x30, 0x07, 0xC0, 0x0F, 0x80, 0x06, 0x00, - 0x3E, 0x00, 0x7C, 0x00, 0x60, 0x03, 0xE0, 0x07, 0xC0, 0x06, 0x00, 0x3E, - 0x00, 0x7C, 0x00, 0xC0, 0x01, 0xF0, 0x07, 0xE0, 0x0C, 0x00, 0x1F, 0x00, - 0xFE, 0x01, 0xC0, 0x01, 0xF0, 0x0D, 0xE0, 0x18, 0x00, 0x0F, 0x80, 0xDF, - 0x01, 0x80, 0x00, 0xF8, 0x19, 0xF0, 0x30, 0x00, 0x07, 0xC1, 0x8F, 0x83, - 0x00, 0x00, 0x7C, 0x38, 0xF8, 0x30, 0x00, 0x07, 0xC3, 0x0F, 0x86, 0x00, - 0x00, 0x3E, 0x30, 0x7C, 0x60, 0x00, 0x03, 0xE7, 0x07, 0xCE, 0x00, 0x00, - 0x3E, 0x60, 0x3E, 0xC0, 0x00, 0x01, 0xF6, 0x03, 0xEC, 0x00, 0x00, 0x1F, - 0xE0, 0x3F, 0xC0, 0x00, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, - 0x1F, 0x80, 0x00, 0x00, 0xF8, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x0F, - 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x20, 0x00, 0x7F, 0xFE, 0x03, 0xFF, 0x8F, 0xF8, 0x00, - 0x7E, 0x01, 0xFC, 0x00, 0x1C, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x1F, 0x00, - 0x0C, 0x00, 0x07, 0xC0, 0x0E, 0x00, 0x03, 0xF0, 0x0E, 0x00, 0x00, 0xF8, - 0x0E, 0x00, 0x00, 0x3E, 0x06, 0x00, 0x00, 0x1F, 0x86, 0x00, 0x00, 0x07, - 0xC7, 0x00, 0x00, 0x01, 0xF7, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x03, 0x9F, 0x00, 0x00, - 0x01, 0x8F, 0xC0, 0x00, 0x01, 0x83, 0xF0, 0x00, 0x01, 0xC0, 0xF8, 0x00, - 0x01, 0xC0, 0x7E, 0x00, 0x01, 0xC0, 0x1F, 0x80, 0x01, 0xC0, 0x07, 0xC0, - 0x00, 0xC0, 0x03, 0xF0, 0x00, 0xE0, 0x00, 0xFC, 0x00, 0xE0, 0x00, 0x7F, - 0x00, 0xF0, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x1F, 0xF3, 0xFF, 0x80, 0x7F, - 0xFE, 0xFF, 0xF8, 0x03, 0xFF, 0x3F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x00, - 0x78, 0x0F, 0xC0, 0x00, 0x70, 0x07, 0xE0, 0x00, 0x60, 0x03, 0xF0, 0x00, - 0xE0, 0x01, 0xF0, 0x01, 0xC0, 0x01, 0xF8, 0x01, 0x80, 0x00, 0xFC, 0x03, - 0x80, 0x00, 0x7C, 0x07, 0x00, 0x00, 0x7E, 0x06, 0x00, 0x00, 0x3F, 0x0E, - 0x00, 0x00, 0x1F, 0x1C, 0x00, 0x00, 0x1F, 0x98, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xF8, - 0xF0, 0x00, 0x3E, 0x38, 0x00, 0x0F, 0x86, 0x00, 0x03, 0xF0, 0xC0, 0x00, - 0x7C, 0x10, 0x00, 0x1F, 0x02, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, - 0x00, 0x01, 0x0F, 0x80, 0x00, 0x63, 0xF0, 0x00, 0x0C, 0xFC, 0x00, 0x03, - 0xBF, 0x00, 0x00, 0xE7, 0xC0, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, - 0xFF, 0xF0, 0xFF, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, - 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, - 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, - 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0F, 0x07, 0xFC, 0xE0, 0x01, 0xC0, - 0x07, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x07, 0x00, 0x1C, - 0x00, 0x70, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x01, - 0xC0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, - 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x01, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x38, - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0xFF, 0x83, 0xC0, 0xE0, 0x70, 0x38, 0x1C, - 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, - 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, - 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xFC, - 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xDC, - 0x00, 0x39, 0xC0, 0x07, 0x9E, 0x00, 0x70, 0xE0, 0x0F, 0x0F, 0x00, 0xE0, - 0x70, 0x1E, 0x07, 0x81, 0xC0, 0x38, 0x3C, 0x03, 0xC3, 0x80, 0x1C, 0x78, - 0x01, 0xE7, 0x00, 0x0E, 0xF0, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x3C, 0x0F, 0x81, 0xF0, 0x1E, 0x03, 0xC0, 0x38, 0x07, 0x03, - 0xF0, 0x07, 0x0E, 0x03, 0x81, 0xC1, 0xE0, 0x30, 0x78, 0x0E, 0x1E, 0x03, - 0x83, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x73, 0x80, 0x70, 0xE0, - 0x70, 0x38, 0x38, 0x0E, 0x1C, 0x03, 0x8F, 0x00, 0xE3, 0xC0, 0x38, 0xF0, - 0x0E, 0x3E, 0x07, 0x8F, 0xC3, 0xE1, 0xFF, 0x3F, 0x1F, 0x07, 0x80, 0x06, - 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, - 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, - 0x00, 0x07, 0x80, 0x00, 0x3C, 0x7E, 0x01, 0xEF, 0xFC, 0x0F, 0xC3, 0xF0, - 0x7C, 0x07, 0x83, 0xC0, 0x3E, 0x1E, 0x00, 0xF0, 0xF0, 0x07, 0xC7, 0x80, - 0x1E, 0x3C, 0x00, 0xF1, 0xE0, 0x07, 0x8F, 0x00, 0x3C, 0x78, 0x01, 0xE3, - 0xC0, 0x0F, 0x1E, 0x00, 0x70, 0xF0, 0x03, 0x87, 0x80, 0x38, 0x3C, 0x01, - 0xC1, 0xE0, 0x1C, 0x0F, 0xC1, 0xC0, 0x1F, 0xFC, 0x00, 0x3F, 0x80, 0x01, - 0xFC, 0x00, 0xFF, 0xE0, 0x38, 0x3E, 0x0E, 0x03, 0xE3, 0x80, 0x7C, 0xE0, - 0x07, 0x18, 0x00, 0x03, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, - 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x1B, 0xC0, - 0x02, 0x7C, 0x01, 0x87, 0xE0, 0x60, 0x7F, 0xF8, 0x07, 0xFE, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x60, 0x00, 0x0F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x78, - 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, - 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x7C, 0x78, 0x07, 0xFD, - 0xE0, 0x3C, 0x3F, 0x81, 0xC0, 0x3E, 0x0E, 0x00, 0xF8, 0x38, 0x01, 0xE1, - 0xE0, 0x07, 0x87, 0x00, 0x1E, 0x3C, 0x00, 0x78, 0xF0, 0x01, 0xE3, 0xC0, - 0x07, 0x8F, 0x00, 0x1E, 0x3C, 0x00, 0x78, 0xF0, 0x01, 0xE3, 0xE0, 0x07, - 0x87, 0x80, 0x1E, 0x1F, 0x00, 0x78, 0x3E, 0x03, 0xE0, 0xFC, 0x1F, 0xF0, - 0xFF, 0xDF, 0x00, 0xFC, 0x60, 0x03, 0xF8, 0x03, 0xFF, 0x01, 0xC1, 0xE0, - 0xC0, 0x3C, 0x70, 0x0F, 0x98, 0x01, 0xE7, 0xFF, 0xFB, 0xFF, 0xFE, 0xE0, - 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, - 0x1F, 0x00, 0x05, 0xE0, 0x02, 0x7C, 0x01, 0x8F, 0xC1, 0xC3, 0xFF, 0xE0, - 0x7F, 0xF0, 0x07, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0xFF, 0xC0, 0xE3, 0xE0, - 0x60, 0x70, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0F, 0x00, - 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x07, 0xFF, 0x83, 0xFF, 0xC0, 0x3C, - 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x3F, - 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x3F, 0xF0, 0x03, 0xC7, 0xFE, - 0x3C, 0x1F, 0xF1, 0xC0, 0x70, 0x1E, 0x03, 0xC0, 0xF0, 0x0E, 0x07, 0x80, - 0x70, 0x3C, 0x03, 0x81, 0xE0, 0x1C, 0x07, 0x80, 0xC0, 0x3E, 0x0E, 0x00, - 0x78, 0xE0, 0x01, 0xFC, 0x00, 0x18, 0x00, 0x01, 0x80, 0x00, 0x18, 0x00, - 0x01, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0xFF, 0xFE, 0x0C, - 0x00, 0x38, 0xC0, 0x00, 0x4C, 0x00, 0x02, 0x60, 0x00, 0x17, 0x00, 0x01, - 0x38, 0x00, 0x09, 0xE0, 0x00, 0x87, 0xC0, 0x38, 0x1F, 0xFF, 0x00, 0x3F, - 0xC0, 0x00, 0x06, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0x80, - 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, - 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x87, 0xE0, 0x1E, - 0x7F, 0xC0, 0x7B, 0x0F, 0x81, 0xF8, 0x1E, 0x07, 0x80, 0x3C, 0x1E, 0x00, - 0xF0, 0x78, 0x03, 0xC1, 0xE0, 0x0F, 0x07, 0x80, 0x3C, 0x1E, 0x00, 0xF0, - 0x78, 0x03, 0xC1, 0xE0, 0x0F, 0x07, 0x80, 0x3C, 0x1E, 0x00, 0xF0, 0x78, - 0x03, 0xC1, 0xE0, 0x0F, 0x07, 0x80, 0x3C, 0x1E, 0x00, 0xF0, 0x78, 0x03, - 0xC3, 0xF0, 0x1F, 0x9F, 0xF1, 0xFF, 0x0E, 0x03, 0xE0, 0x7C, 0x0F, 0x80, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, - 0x7E, 0x1F, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, - 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x07, - 0xE7, 0xFF, 0x00, 0xE0, 0x1F, 0x01, 0xF0, 0x1F, 0x00, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x70, 0x3F, 0x07, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xE0, 0x0E, 0xE0, - 0xEF, 0x1C, 0xFF, 0x87, 0xE0, 0x06, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, - 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, - 0x00, 0xF0, 0x7F, 0xE1, 0xE0, 0x3E, 0x03, 0xC0, 0x70, 0x07, 0x81, 0x80, - 0x0F, 0x06, 0x00, 0x1E, 0x18, 0x00, 0x3C, 0x60, 0x00, 0x79, 0x80, 0x00, - 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xDE, 0x00, 0x07, 0x9E, 0x00, 0x0F, - 0x3E, 0x00, 0x1E, 0x3E, 0x00, 0x3C, 0x3E, 0x00, 0x78, 0x3C, 0x00, 0xF0, - 0x3C, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x7C, 0x0F, 0xC0, 0xFE, 0x7F, 0xE3, - 0xFF, 0x03, 0x03, 0xE1, 0xFC, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, - 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, - 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, - 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0xE7, 0xFF, 0x1E, 0x1F, 0x01, - 0xF8, 0x1F, 0xCF, 0xF0, 0xFF, 0x80, 0xFF, 0x0F, 0x70, 0xF8, 0x0F, 0x81, - 0xF8, 0x0F, 0x01, 0xE0, 0x1E, 0x00, 0xF0, 0x3C, 0x03, 0xC0, 0x1E, 0x07, - 0x80, 0x78, 0x03, 0xC0, 0xF0, 0x0F, 0x00, 0x78, 0x1E, 0x01, 0xE0, 0x0F, - 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x78, 0x07, 0x80, 0x3C, 0x0F, 0x00, 0xF0, - 0x07, 0x81, 0xE0, 0x1E, 0x00, 0xF0, 0x3C, 0x03, 0xC0, 0x1E, 0x07, 0x80, - 0x78, 0x03, 0xC0, 0xF0, 0x0F, 0x00, 0x78, 0x1E, 0x01, 0xE0, 0x0F, 0x03, - 0xC0, 0x3C, 0x01, 0xE0, 0x78, 0x07, 0x80, 0x3C, 0x1F, 0x81, 0xF8, 0x0F, - 0xCF, 0xFC, 0xFF, 0xC7, 0xFE, 0x1E, 0x1F, 0x83, 0xF9, 0xFF, 0x03, 0xFC, - 0x3E, 0x07, 0xC0, 0x7C, 0x1E, 0x00, 0xF0, 0x78, 0x03, 0xC1, 0xE0, 0x0F, - 0x07, 0x80, 0x3C, 0x1E, 0x00, 0xF0, 0x78, 0x03, 0xC1, 0xE0, 0x0F, 0x07, - 0x80, 0x3C, 0x1E, 0x00, 0xF0, 0x78, 0x03, 0xC1, 0xE0, 0x0F, 0x07, 0x80, - 0x3C, 0x1E, 0x00, 0xF0, 0x78, 0x03, 0xC1, 0xE0, 0x0F, 0x0F, 0xC0, 0x7E, - 0x7F, 0xC3, 0xFC, 0x01, 0xFE, 0x00, 0x1F, 0xFE, 0x00, 0xF0, 0x7C, 0x0F, - 0x80, 0xF8, 0x3C, 0x01, 0xF1, 0xE0, 0x03, 0xE7, 0x80, 0x0F, 0xBE, 0x00, - 0x3F, 0xF8, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x1F, - 0xF8, 0x00, 0x7F, 0xF0, 0x01, 0xE7, 0xC0, 0x07, 0x9F, 0x80, 0x3E, 0x3E, - 0x00, 0xF0, 0x7C, 0x07, 0x80, 0xF8, 0x3C, 0x01, 0xFF, 0xE0, 0x00, 0xFC, - 0x00, 0x0E, 0x3F, 0x07, 0xF7, 0xFE, 0x07, 0xE0, 0xF8, 0x3E, 0x03, 0xE1, - 0xE0, 0x0F, 0x0F, 0x00, 0x7C, 0x78, 0x03, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, - 0x78, 0xF0, 0x03, 0xC7, 0x80, 0x1E, 0x3C, 0x00, 0xF1, 0xE0, 0x07, 0x8F, - 0x00, 0x38, 0x78, 0x03, 0xC3, 0xC0, 0x1E, 0x1E, 0x00, 0xE0, 0xF8, 0x0E, - 0x07, 0xE0, 0xE0, 0x3D, 0xFE, 0x01, 0xE7, 0xC0, 0x0F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0x80, 0x03, 0xFF, 0x80, 0x00, 0x01, - 0xF8, 0x20, 0x3F, 0xF3, 0x03, 0xC1, 0xF8, 0x3C, 0x07, 0xC3, 0xC0, 0x1E, - 0x1C, 0x00, 0xF1, 0xE0, 0x07, 0x8E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, - 0x0F, 0x3C, 0x00, 0x79, 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, 0xF3, - 0xE0, 0x07, 0x9F, 0x00, 0x3C, 0x7C, 0x01, 0xE3, 0xE0, 0x1F, 0x0F, 0xC1, - 0xF8, 0x3F, 0xF3, 0xC0, 0x7E, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, - 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, - 0xC0, 0x00, 0x1E, 0x00, 0x03, 0xF8, 0x00, 0x7F, 0xE0, 0x06, 0x3C, 0xFC, - 0xFE, 0xFA, 0x78, 0xF8, 0x71, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, - 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, - 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x01, 0xF8, 0x0F, 0xFC, - 0x00, 0x1F, 0x91, 0x87, 0x98, 0x1D, 0xC0, 0x6E, 0x03, 0x70, 0x0B, 0xC0, - 0x5F, 0x80, 0x7E, 0x01, 0xFC, 0x07, 0xF0, 0x0F, 0xE0, 0x3F, 0x00, 0x7E, - 0x01, 0xF0, 0x07, 0xC0, 0x3E, 0x01, 0xF8, 0x0D, 0xE0, 0xC8, 0xF8, 0x00, - 0x04, 0x00, 0xC0, 0x0C, 0x01, 0xC0, 0x3C, 0x07, 0xFC, 0xFF, 0xC3, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE2, - 0x1F, 0xC0, 0xF8, 0xFC, 0x0F, 0xE1, 0xF0, 0x0F, 0x83, 0xC0, 0x1E, 0x0F, - 0x00, 0x78, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0xC0, 0x1E, 0x0F, 0x00, - 0x78, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0xC0, 0x1E, 0x0F, 0x00, 0x78, - 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0xC0, 0x1E, 0x0F, 0x00, 0x78, 0x3C, - 0x01, 0xE0, 0xF8, 0x0F, 0x81, 0xF0, 0xFF, 0x03, 0xFE, 0x7F, 0x07, 0xE1, - 0xC0, 0xFF, 0x81, 0xFC, 0xFC, 0x01, 0xC1, 0xE0, 0x07, 0x07, 0x80, 0x18, - 0x0F, 0x00, 0x60, 0x3C, 0x01, 0x00, 0x78, 0x0C, 0x01, 0xE0, 0x30, 0x07, - 0x81, 0x80, 0x0F, 0x06, 0x00, 0x3C, 0x10, 0x00, 0x78, 0xC0, 0x01, 0xE3, - 0x00, 0x03, 0x98, 0x00, 0x0F, 0x60, 0x00, 0x3D, 0x00, 0x00, 0x7C, 0x00, - 0x01, 0xF0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x40, 0x00, 0xFF, 0x8F, 0xF8, 0x3F, 0x7E, 0x07, 0xE0, 0x0E, 0x3E, 0x03, - 0xC0, 0x0C, 0x1E, 0x03, 0xE0, 0x0C, 0x1E, 0x01, 0xE0, 0x0C, 0x1E, 0x01, - 0xE0, 0x18, 0x0F, 0x00, 0xF0, 0x18, 0x0F, 0x01, 0xF0, 0x10, 0x07, 0x81, - 0xF0, 0x30, 0x07, 0x81, 0x78, 0x30, 0x07, 0x83, 0x78, 0x60, 0x03, 0xC3, - 0x38, 0x60, 0x03, 0xC6, 0x3C, 0x40, 0x01, 0xC6, 0x3C, 0xC0, 0x01, 0xEC, - 0x1E, 0xC0, 0x01, 0xEC, 0x1F, 0x80, 0x00, 0xF8, 0x0F, 0x80, 0x00, 0xF8, - 0x0F, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x60, - 0x06, 0x00, 0x00, 0x20, 0x02, 0x00, 0x7F, 0xE7, 0xF0, 0x7E, 0x0F, 0x00, - 0xF8, 0x38, 0x01, 0xE0, 0xC0, 0x07, 0xC6, 0x00, 0x0F, 0x30, 0x00, 0x1E, - 0xC0, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x07, 0xC0, - 0x00, 0x3F, 0x00, 0x00, 0xDE, 0x00, 0x06, 0x7C, 0x00, 0x30, 0xF0, 0x01, - 0xC1, 0xE0, 0x06, 0x07, 0xC0, 0x30, 0x0F, 0x01, 0xC0, 0x1E, 0x0F, 0x00, - 0xFC, 0xFE, 0x07, 0xFC, 0xFF, 0xC0, 0xFC, 0xFC, 0x01, 0xE1, 0xE0, 0x03, - 0x07, 0x80, 0x18, 0x0F, 0x00, 0x60, 0x3C, 0x01, 0x80, 0x78, 0x0C, 0x01, - 0xE0, 0x30, 0x03, 0xC0, 0xC0, 0x0F, 0x06, 0x00, 0x3E, 0x18, 0x00, 0x78, - 0x40, 0x01, 0xF3, 0x00, 0x03, 0xCC, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x80, - 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x06, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x40, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x60, - 0x00, 0x01, 0x80, 0x00, 0x0C, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x01, - 0xFC, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0x9F, 0xFF, 0xE6, 0x00, - 0xF1, 0x00, 0x78, 0x40, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, - 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, - 0xE0, 0x01, 0xF0, 0x04, 0x78, 0x01, 0x3E, 0x00, 0xDF, 0x00, 0x37, 0x80, - 0x1F, 0xFF, 0xFE, 0xFF, 0xFF, 0x80, 0x01, 0xE0, 0x78, 0x1C, 0x07, 0x80, - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, - 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x70, 0x1C, 0x0E, 0x00, 0x70, - 0x07, 0x00, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, - 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0x00, 0x70, 0x0F, 0x00, 0xE0, 0x1C, 0x03, - 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, - 0x70, 0x0E, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x07, 0x01, 0xC0, 0x70, - 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, - 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x07, 0x03, 0xC0, 0xF0, 0x00, - 0x1F, 0x80, 0x00, 0xFF, 0x80, 0xC7, 0x0F, 0x87, 0xB8, 0x0F, 0xFC, 0x00, - 0x07, 0xC0}; - -const GFXglyph FreeSerif24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 12, 0, 1}, // 0x20 ' ' - {0, 5, 32, 16, 6, -31}, // 0x21 '!' - {20, 12, 12, 19, 4, -31}, // 0x22 '"' - {38, 23, 31, 23, 0, -30}, // 0x23 '#' - {128, 19, 37, 24, 2, -33}, // 0x24 '$' - {216, 33, 32, 39, 3, -30}, // 0x25 '%' - {348, 32, 33, 37, 2, -31}, // 0x26 '&' - {480, 4, 12, 9, 3, -31}, // 0x27 ''' - {486, 12, 40, 16, 2, -31}, // 0x28 '(' - {546, 12, 40, 16, 2, -30}, // 0x29 ')' - {606, 16, 19, 24, 4, -30}, // 0x2A '*' - {644, 23, 23, 27, 2, -22}, // 0x2B '+' - {711, 6, 11, 12, 2, -4}, // 0x2C ',' - {720, 11, 2, 16, 2, -10}, // 0x2D '-' - {723, 5, 5, 12, 3, -3}, // 0x2E '.' - {727, 14, 32, 14, 0, -30}, // 0x2F '/' - {783, 22, 33, 23, 1, -31}, // 0x30 '0' - {874, 13, 32, 24, 5, -31}, // 0x31 '1' - {926, 21, 31, 23, 1, -30}, // 0x32 '2' - {1008, 18, 32, 23, 2, -30}, // 0x33 '3' - {1080, 21, 31, 24, 1, -30}, // 0x34 '4' - {1162, 19, 33, 24, 2, -31}, // 0x35 '5' - {1241, 21, 33, 23, 2, -31}, // 0x36 '6' - {1328, 20, 31, 24, 1, -30}, // 0x37 '7' - {1406, 18, 33, 23, 3, -31}, // 0x38 '8' - {1481, 21, 33, 24, 1, -31}, // 0x39 '9' - {1568, 5, 22, 12, 4, -20}, // 0x3A ':' - {1582, 6, 27, 12, 3, -20}, // 0x3B ';' - {1603, 24, 25, 27, 1, -24}, // 0x3C '<' - {1678, 24, 11, 27, 1, -16}, // 0x3D '=' - {1711, 24, 25, 27, 2, -23}, // 0x3E '>' - {1786, 17, 32, 21, 3, -31}, // 0x3F '?' - {1854, 32, 33, 41, 4, -31}, // 0x40 '@' - {1986, 32, 32, 34, 1, -31}, // 0x41 'A' - {2114, 27, 31, 30, 0, -30}, // 0x42 'B' - {2219, 28, 33, 31, 2, -31}, // 0x43 'C' - {2335, 31, 31, 34, 1, -30}, // 0x44 'D' - {2456, 27, 31, 29, 2, -30}, // 0x45 'E' - {2561, 24, 31, 27, 2, -30}, // 0x46 'F' - {2654, 31, 33, 35, 2, -31}, // 0x47 'G' - {2782, 30, 31, 34, 2, -30}, // 0x48 'H' - {2899, 13, 31, 15, 1, -30}, // 0x49 'I' - {2950, 17, 32, 18, 0, -30}, // 0x4A 'J' - {3018, 32, 31, 33, 1, -30}, // 0x4B 'K' - {3142, 26, 31, 29, 2, -30}, // 0x4C 'L' - {3243, 39, 31, 41, 1, -30}, // 0x4D 'M' - {3395, 32, 32, 34, 1, -30}, // 0x4E 'N' - {3523, 30, 33, 34, 2, -31}, // 0x4F 'O' - {3647, 23, 31, 27, 2, -30}, // 0x50 'P' - {3737, 31, 40, 34, 2, -31}, // 0x51 'Q' - {3892, 28, 31, 31, 2, -30}, // 0x52 'R' - {4001, 21, 33, 25, 2, -31}, // 0x53 'S' - {4088, 27, 31, 28, 1, -30}, // 0x54 'T' - {4193, 32, 32, 34, 1, -30}, // 0x55 'U' - {4321, 32, 32, 33, 0, -30}, // 0x56 'V' - {4449, 44, 32, 45, 0, -30}, // 0x57 'W' - {4625, 33, 31, 34, 0, -30}, // 0x58 'X' - {4753, 32, 31, 33, 0, -30}, // 0x59 'Y' - {4877, 27, 31, 29, 1, -30}, // 0x5A 'Z' - {4982, 9, 38, 16, 4, -30}, // 0x5B '[' - {5025, 14, 32, 14, 0, -30}, // 0x5C '\' - {5081, 9, 38, 16, 3, -30}, // 0x5D ']' - {5124, 20, 17, 22, 1, -30}, // 0x5E '^' - {5167, 24, 2, 23, 0, 5}, // 0x5F '_' - {5173, 10, 8, 12, 1, -31}, // 0x60 '`' - {5183, 18, 21, 20, 1, -20}, // 0x61 'a' - {5231, 21, 32, 24, 1, -31}, // 0x62 'b' - {5315, 19, 21, 21, 1, -20}, // 0x63 'c' - {5365, 22, 32, 23, 1, -31}, // 0x64 'd' - {5453, 18, 21, 21, 1, -20}, // 0x65 'e' - {5501, 17, 33, 18, 0, -32}, // 0x66 'f' - {5572, 21, 31, 22, 1, -20}, // 0x67 'g' - {5654, 22, 32, 23, 0, -31}, // 0x68 'h' - {5742, 11, 32, 13, 0, -31}, // 0x69 'i' - {5786, 12, 42, 16, 0, -31}, // 0x6A 'j' - {5849, 23, 32, 24, 1, -31}, // 0x6B 'k' - {5941, 11, 32, 12, 0, -31}, // 0x6C 'l' - {5985, 35, 21, 37, 1, -20}, // 0x6D 'm' - {6077, 22, 21, 23, 0, -20}, // 0x6E 'n' - {6135, 22, 21, 23, 1, -20}, // 0x6F 'o' - {6193, 21, 31, 24, 1, -20}, // 0x70 'p' - {6275, 21, 31, 23, 1, -20}, // 0x71 'q' - {6357, 15, 21, 16, 1, -20}, // 0x72 'r' - {6397, 13, 21, 17, 2, -20}, // 0x73 's' - {6432, 12, 26, 13, 1, -25}, // 0x74 't' - {6471, 22, 21, 23, 1, -20}, // 0x75 'u' - {6529, 22, 22, 22, 0, -20}, // 0x76 'v' - {6590, 32, 22, 32, 0, -20}, // 0x77 'w' - {6678, 22, 21, 23, 0, -20}, // 0x78 'x' - {6736, 22, 31, 22, 0, -20}, // 0x79 'y' - {6822, 18, 21, 20, 1, -20}, // 0x7A 'z' - {6870, 11, 41, 23, 5, -31}, // 0x7B '{' - {6927, 3, 32, 9, 3, -30}, // 0x7C '|' - {6939, 11, 41, 23, 7, -31}, // 0x7D '}' - {6996, 22, 5, 23, 1, -13}}; // 0x7E '~' - -const GFXfont FreeSerif24pt7b PROGMEM = {(uint8_t *)FreeSerif24pt7bBitmaps, - (GFXglyph *)FreeSerif24pt7bGlyphs, - 0x20, 0x7E, 56}; - -// Approx. 7682 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif9pt7b.h deleted file mode 100644 index 22f82e4..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerif9pt7b.h +++ /dev/null @@ -1,197 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerif9pt7bBitmaps[] PROGMEM = { - 0xFF, 0xEA, 0x03, 0xDE, 0xF7, 0x20, 0x11, 0x09, 0x04, 0x82, 0x4F, 0xF9, - 0x10, 0x89, 0xFF, 0x24, 0x12, 0x09, 0x0C, 0x80, 0x10, 0x7C, 0xD6, 0xD2, - 0xD0, 0xF0, 0x38, 0x1E, 0x17, 0x93, 0x93, 0xD6, 0x7C, 0x10, 0x38, 0x43, - 0x3C, 0x39, 0x21, 0x8A, 0x0C, 0x50, 0x65, 0x39, 0xCB, 0x20, 0xB9, 0x05, - 0x88, 0x4C, 0x44, 0x64, 0x21, 0xC0, 0x0E, 0x00, 0xC8, 0x06, 0x40, 0x32, - 0x01, 0xA0, 0x07, 0x78, 0x31, 0x87, 0x88, 0x46, 0x86, 0x34, 0x30, 0xC1, - 0xC7, 0x17, 0xCF, 0x00, 0xFE, 0x08, 0x88, 0x84, 0x63, 0x18, 0xC6, 0x10, - 0x82, 0x08, 0x20, 0x82, 0x08, 0x21, 0x0C, 0x63, 0x18, 0xC4, 0x22, 0x22, - 0x00, 0x63, 0x9A, 0xDC, 0x72, 0xB6, 0x08, 0x08, 0x04, 0x02, 0x01, 0x0F, - 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xD8, 0xF0, 0xF0, 0x08, 0x84, 0x22, - 0x10, 0x8C, 0x42, 0x31, 0x00, 0x1C, 0x31, 0x98, 0xD8, 0x3C, 0x1E, 0x0F, - 0x07, 0x83, 0xC1, 0xE0, 0xD8, 0xC4, 0x61, 0xC0, 0x13, 0x8C, 0x63, 0x18, - 0xC6, 0x31, 0x8C, 0x67, 0x80, 0x3C, 0x4E, 0x86, 0x06, 0x06, 0x04, 0x0C, - 0x08, 0x10, 0x20, 0x41, 0xFE, 0x3C, 0xC6, 0x06, 0x04, 0x1C, 0x3E, 0x07, - 0x03, 0x03, 0x03, 0x06, 0xF8, 0x04, 0x18, 0x71, 0x64, 0xC9, 0xA3, 0x46, - 0xFE, 0x18, 0x30, 0x60, 0x0F, 0x10, 0x20, 0x3C, 0x0E, 0x07, 0x03, 0x03, - 0x03, 0x02, 0x04, 0xF8, 0x07, 0x1C, 0x30, 0x60, 0x60, 0xDC, 0xE6, 0xC3, - 0xC3, 0xC3, 0x43, 0x66, 0x3C, 0x7F, 0x82, 0x02, 0x02, 0x04, 0x04, 0x04, - 0x08, 0x08, 0x08, 0x10, 0x10, 0x3C, 0x8F, 0x1E, 0x3E, 0x4F, 0x06, 0x36, - 0xC7, 0x8F, 0x1B, 0x33, 0xC0, 0x3C, 0x66, 0xC2, 0xC3, 0xC3, 0xC3, 0xC3, - 0x63, 0x3F, 0x06, 0x06, 0x0C, 0x38, 0x60, 0xF0, 0x0F, 0xD8, 0x00, 0x03, - 0x28, 0x01, 0x87, 0x0E, 0x1C, 0x0C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x80, - 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x80, 0x1C, 0x01, 0xC0, 0x1C, 0x01, - 0xC0, 0xE0, 0xE0, 0xE0, 0xC0, 0x00, 0x79, 0x1A, 0x18, 0x30, 0x60, 0x83, - 0x04, 0x10, 0x20, 0x40, 0x03, 0x00, 0x0F, 0x83, 0x8C, 0x60, 0x26, 0x02, - 0xC7, 0x9C, 0xC9, 0xD8, 0x9D, 0x99, 0xD9, 0x26, 0xEC, 0x60, 0x03, 0x04, - 0x0F, 0x80, 0x02, 0x00, 0x10, 0x01, 0xC0, 0x16, 0x00, 0x98, 0x04, 0xC0, - 0x43, 0x03, 0xF8, 0x20, 0x61, 0x03, 0x18, 0x1D, 0xE1, 0xF0, 0xFF, 0x86, - 0x1C, 0xC1, 0x98, 0x33, 0x0C, 0x7E, 0x0C, 0x31, 0x83, 0x30, 0x66, 0x0C, - 0xC3, 0x7F, 0xC0, 0x1F, 0x26, 0x1D, 0x81, 0xE0, 0x1C, 0x01, 0x80, 0x30, - 0x06, 0x00, 0xC0, 0x0C, 0x00, 0xC1, 0x8F, 0xC0, 0xFF, 0x03, 0x1C, 0x30, - 0x63, 0x07, 0x30, 0x33, 0x03, 0x30, 0x33, 0x03, 0x30, 0x33, 0x06, 0x30, - 0xCF, 0xF0, 0xFF, 0x98, 0x26, 0x01, 0x80, 0x61, 0x1F, 0xC6, 0x11, 0x80, - 0x60, 0x18, 0x16, 0x0F, 0xFE, 0xFF, 0xB0, 0x58, 0x0C, 0x06, 0x13, 0xF9, - 0x84, 0xC0, 0x60, 0x30, 0x18, 0x1E, 0x00, 0x1F, 0x23, 0x0E, 0x60, 0x26, - 0x00, 0xC0, 0x0C, 0x0F, 0xC0, 0x6C, 0x06, 0xC0, 0x66, 0x06, 0x30, 0x60, - 0xF8, 0xF1, 0xEC, 0x19, 0x83, 0x30, 0x66, 0x0C, 0xFF, 0x98, 0x33, 0x06, - 0x60, 0xCC, 0x19, 0x83, 0x78, 0xF0, 0xF6, 0x66, 0x66, 0x66, 0x66, 0x6F, - 0x3C, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x6D, 0xBC, 0xF3, 0xE6, 0x08, - 0x61, 0x06, 0x20, 0x64, 0x07, 0x80, 0x6C, 0x06, 0x60, 0x63, 0x06, 0x18, - 0x60, 0xCF, 0x3F, 0xF0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, - 0x80, 0x60, 0x18, 0x16, 0x0B, 0xFE, 0xF0, 0x0E, 0x70, 0x38, 0xE0, 0x71, - 0xE1, 0x62, 0xC2, 0xC5, 0xC9, 0x89, 0x93, 0x13, 0x26, 0x23, 0x8C, 0x47, - 0x18, 0x84, 0x33, 0x88, 0xF0, 0xE0, 0xEE, 0x09, 0xC1, 0x2C, 0x25, 0xC4, - 0x9C, 0x91, 0x92, 0x1A, 0x41, 0xC8, 0x19, 0x03, 0x70, 0x20, 0x1F, 0x06, - 0x31, 0x83, 0x20, 0x2C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x68, 0x09, - 0x83, 0x18, 0xC1, 0xF0, 0xFE, 0x31, 0x98, 0x6C, 0x36, 0x1B, 0x19, 0xF8, - 0xC0, 0x60, 0x30, 0x18, 0x1E, 0x00, 0x1F, 0x06, 0x31, 0x83, 0x20, 0x2C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x68, 0x19, 0x83, 0x18, 0xC0, 0xE0, - 0x0E, 0x00, 0xE0, 0x07, 0xFE, 0x0C, 0x61, 0x86, 0x30, 0xC6, 0x18, 0xC6, - 0x1F, 0x83, 0x70, 0x67, 0x0C, 0x71, 0x87, 0x78, 0x70, 0x1D, 0x31, 0x98, - 0x4C, 0x07, 0x80, 0xE0, 0x1C, 0x07, 0x01, 0xA0, 0xD8, 0xCB, 0xC0, 0xFF, - 0xF8, 0xCE, 0x18, 0x83, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, - 0xC0, 0x18, 0x07, 0x80, 0xF0, 0xEC, 0x09, 0x81, 0x30, 0x26, 0x04, 0xC0, - 0x98, 0x13, 0x02, 0x60, 0x4C, 0x08, 0xC2, 0x0F, 0x80, 0xF8, 0x77, 0x02, - 0x30, 0x23, 0x04, 0x18, 0x41, 0x84, 0x0C, 0x80, 0xC8, 0x07, 0x00, 0x70, - 0x02, 0x00, 0x20, 0xFB, 0xE7, 0xB0, 0xC0, 0x8C, 0x20, 0x86, 0x18, 0x41, - 0x8C, 0x40, 0xCB, 0x20, 0x65, 0x90, 0x1A, 0x70, 0x0E, 0x38, 0x03, 0x1C, - 0x01, 0x04, 0x00, 0x82, 0x00, 0xFC, 0xF9, 0x83, 0x06, 0x10, 0x19, 0x00, - 0xD0, 0x03, 0x00, 0x1C, 0x01, 0x30, 0x11, 0xC1, 0x86, 0x08, 0x19, 0xE3, - 0xF0, 0xF8, 0xF6, 0x06, 0x30, 0x41, 0x88, 0x1D, 0x00, 0xD0, 0x06, 0x00, - 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0xF0, 0x3F, 0xCC, 0x11, 0x06, 0x01, - 0x80, 0x70, 0x0C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x05, 0xC1, 0x7F, 0xE0, - 0xFB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB8, 0x82, 0x10, 0x82, 0x10, 0x86, 0x10, - 0x86, 0x10, 0xED, 0xB6, 0xDB, 0x6D, 0xB6, 0xF8, 0x18, 0x1C, 0x34, 0x26, - 0x62, 0x42, 0xC1, 0xFF, 0x80, 0x84, 0x20, 0x79, 0x98, 0x30, 0xE6, 0xD9, - 0xB3, 0x3F, 0x20, 0x70, 0x18, 0x0C, 0x06, 0x03, 0x71, 0xCC, 0xC3, 0x61, - 0xB0, 0xD8, 0x6C, 0x63, 0xE0, 0x3C, 0xCF, 0x06, 0x0C, 0x18, 0x18, 0x9E, - 0x01, 0x03, 0x80, 0xC0, 0x60, 0x31, 0xD9, 0x9D, 0x86, 0xC3, 0x61, 0xB0, - 0xCC, 0x63, 0xF0, 0x3C, 0x46, 0xFE, 0xC0, 0xC0, 0xE1, 0x62, 0x3C, 0x1E, - 0x41, 0x83, 0x06, 0x1E, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x0F, 0x00, 0x3C, - 0x19, 0xF6, 0x31, 0x8C, 0x1E, 0x08, 0x04, 0x01, 0xFC, 0x40, 0xB0, 0x2E, - 0x11, 0xF8, 0x20, 0x70, 0x18, 0x0C, 0x06, 0x03, 0x71, 0xCC, 0xC6, 0x63, - 0x31, 0x98, 0xCC, 0x6F, 0x78, 0x60, 0x02, 0xE6, 0x66, 0x66, 0xF0, 0x18, - 0x00, 0x33, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8B, 0x80, 0x20, 0x70, 0x18, - 0x0C, 0x06, 0x03, 0x3D, 0x88, 0xD8, 0x78, 0x36, 0x19, 0x8C, 0x6F, 0x78, - 0x2E, 0x66, 0x66, 0x66, 0x66, 0x66, 0xF0, 0xEE, 0x71, 0xCE, 0x66, 0x31, - 0x98, 0xC6, 0x63, 0x19, 0x8C, 0x66, 0x31, 0xBD, 0xEF, 0xEE, 0x39, 0x98, - 0xCC, 0x66, 0x33, 0x19, 0x8D, 0xEF, 0x3E, 0x31, 0xB0, 0x78, 0x3C, 0x1E, - 0x0D, 0x8C, 0x7C, 0xEE, 0x39, 0x98, 0x6C, 0x36, 0x1B, 0x0D, 0x8C, 0xFC, - 0x60, 0x30, 0x18, 0x1E, 0x00, 0x3D, 0x31, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, - 0x8C, 0xFE, 0x03, 0x01, 0x80, 0xC0, 0xF0, 0x6D, 0xC6, 0x18, 0x61, 0x86, - 0x3C, 0x76, 0x38, 0x58, 0x3E, 0x38, 0xFE, 0x27, 0x98, 0xC6, 0x31, 0x8C, - 0x38, 0xE7, 0x31, 0x98, 0xCC, 0x66, 0x33, 0x19, 0x8C, 0x7F, 0xF3, 0x61, - 0x22, 0x32, 0x14, 0x1C, 0x08, 0x08, 0xEF, 0x36, 0x61, 0x62, 0x22, 0x32, - 0x35, 0x41, 0x9C, 0x18, 0x81, 0x08, 0xF7, 0x12, 0x0E, 0x03, 0x01, 0xC1, - 0x21, 0x09, 0xCF, 0xF3, 0x61, 0x62, 0x32, 0x34, 0x14, 0x1C, 0x08, 0x08, - 0x08, 0x10, 0xE0, 0xFD, 0x18, 0x60, 0x83, 0x0C, 0x70, 0xFE, 0x19, 0x8C, - 0x63, 0x18, 0xC4, 0x61, 0x8C, 0x63, 0x18, 0xC3, 0xFF, 0xF0, 0xC3, 0x18, - 0xC6, 0x31, 0x84, 0x33, 0x18, 0xC6, 0x31, 0x98, 0x70, 0x24, 0xC1, 0xC0}; - -const GFXglyph FreeSerif9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 2, 12, 6, 2, -11}, // 0x21 '!' - {3, 5, 4, 7, 1, -11}, // 0x22 '"' - {6, 9, 12, 9, 0, -11}, // 0x23 '#' - {20, 8, 14, 9, 1, -12}, // 0x24 '$' - {34, 13, 12, 15, 1, -11}, // 0x25 '%' - {54, 13, 13, 14, 1, -12}, // 0x26 '&' - {76, 2, 4, 4, 1, -11}, // 0x27 ''' - {77, 5, 15, 6, 1, -11}, // 0x28 '(' - {87, 5, 15, 6, 0, -11}, // 0x29 ')' - {97, 6, 8, 9, 3, -11}, // 0x2A '*' - {103, 9, 9, 10, 0, -8}, // 0x2B '+' - {114, 2, 3, 4, 2, 0}, // 0x2C ',' - {115, 4, 1, 6, 1, -3}, // 0x2D '-' - {116, 2, 2, 5, 1, -1}, // 0x2E '.' - {117, 5, 12, 5, 0, -11}, // 0x2F '/' - {125, 9, 13, 9, 0, -12}, // 0x30 '0' - {140, 5, 13, 9, 2, -12}, // 0x31 '1' - {149, 8, 12, 9, 1, -11}, // 0x32 '2' - {161, 8, 12, 9, 0, -11}, // 0x33 '3' - {173, 7, 12, 9, 1, -11}, // 0x34 '4' - {184, 8, 12, 9, 0, -11}, // 0x35 '5' - {196, 8, 13, 9, 1, -12}, // 0x36 '6' - {209, 8, 12, 9, 0, -11}, // 0x37 '7' - {221, 7, 13, 9, 1, -12}, // 0x38 '8' - {233, 8, 14, 9, 1, -12}, // 0x39 '9' - {247, 2, 8, 5, 1, -7}, // 0x3A ':' - {249, 3, 10, 5, 1, -7}, // 0x3B ';' - {253, 9, 9, 10, 1, -8}, // 0x3C '<' - {264, 9, 5, 10, 1, -6}, // 0x3D '=' - {270, 10, 9, 10, 0, -8}, // 0x3E '>' - {282, 7, 13, 8, 1, -12}, // 0x3F '?' - {294, 12, 13, 16, 2, -12}, // 0x40 '@' - {314, 13, 12, 13, 0, -11}, // 0x41 'A' - {334, 11, 12, 11, 0, -11}, // 0x42 'B' - {351, 11, 12, 12, 1, -11}, // 0x43 'C' - {368, 12, 12, 13, 0, -11}, // 0x44 'D' - {386, 10, 12, 11, 1, -11}, // 0x45 'E' - {401, 9, 12, 10, 1, -11}, // 0x46 'F' - {415, 12, 12, 13, 1, -11}, // 0x47 'G' - {433, 11, 12, 13, 1, -11}, // 0x48 'H' - {450, 4, 12, 6, 1, -11}, // 0x49 'I' - {456, 6, 12, 7, 0, -11}, // 0x4A 'J' - {465, 12, 12, 13, 1, -11}, // 0x4B 'K' - {483, 10, 12, 11, 1, -11}, // 0x4C 'L' - {498, 15, 12, 16, 0, -11}, // 0x4D 'M' - {521, 11, 12, 13, 1, -11}, // 0x4E 'N' - {538, 11, 13, 13, 1, -12}, // 0x4F 'O' - {556, 9, 12, 10, 1, -11}, // 0x50 'P' - {570, 11, 16, 13, 1, -12}, // 0x51 'Q' - {592, 11, 12, 12, 1, -11}, // 0x52 'R' - {609, 9, 12, 10, 0, -11}, // 0x53 'S' - {623, 11, 12, 11, 0, -11}, // 0x54 'T' - {640, 11, 12, 13, 1, -11}, // 0x55 'U' - {657, 12, 12, 13, 0, -11}, // 0x56 'V' - {675, 17, 12, 17, 0, -11}, // 0x57 'W' - {701, 13, 12, 13, 0, -11}, // 0x58 'X' - {721, 12, 12, 13, 0, -11}, // 0x59 'Y' - {739, 11, 12, 11, 0, -11}, // 0x5A 'Z' - {756, 3, 15, 6, 2, -11}, // 0x5B '[' - {762, 5, 12, 5, 0, -11}, // 0x5C '\' - {770, 3, 15, 6, 1, -11}, // 0x5D ']' - {776, 8, 7, 8, 0, -11}, // 0x5E '^' - {783, 9, 1, 9, 0, 2}, // 0x5F '_' - {785, 4, 3, 5, 0, -11}, // 0x60 '`' - {787, 7, 8, 8, 1, -7}, // 0x61 'a' - {794, 9, 13, 9, 0, -12}, // 0x62 'b' - {809, 7, 8, 8, 0, -7}, // 0x63 'c' - {816, 9, 13, 9, 0, -12}, // 0x64 'd' - {831, 8, 8, 8, 0, -7}, // 0x65 'e' - {839, 7, 13, 7, 1, -12}, // 0x66 'f' - {851, 10, 12, 8, 0, -7}, // 0x67 'g' - {866, 9, 13, 9, 0, -12}, // 0x68 'h' - {881, 4, 11, 5, 1, -10}, // 0x69 'i' - {887, 5, 15, 6, 0, -10}, // 0x6A 'j' - {897, 9, 13, 9, 1, -12}, // 0x6B 'k' - {912, 4, 13, 5, 1, -12}, // 0x6C 'l' - {919, 14, 8, 14, 0, -7}, // 0x6D 'm' - {933, 9, 8, 9, 0, -7}, // 0x6E 'n' - {942, 9, 8, 9, 0, -7}, // 0x6F 'o' - {951, 9, 12, 9, 0, -7}, // 0x70 'p' - {965, 9, 12, 9, 0, -7}, // 0x71 'q' - {979, 6, 8, 6, 0, -7}, // 0x72 'r' - {985, 6, 8, 7, 1, -7}, // 0x73 's' - {991, 5, 9, 5, 0, -8}, // 0x74 't' - {997, 9, 8, 9, 0, -7}, // 0x75 'u' - {1006, 8, 8, 8, 0, -7}, // 0x76 'v' - {1014, 12, 8, 12, 0, -7}, // 0x77 'w' - {1026, 9, 8, 9, 0, -7}, // 0x78 'x' - {1035, 8, 12, 8, 0, -7}, // 0x79 'y' - {1047, 7, 8, 7, 1, -7}, // 0x7A 'z' - {1054, 5, 16, 9, 1, -12}, // 0x7B '{' - {1064, 1, 12, 4, 1, -11}, // 0x7C '|' - {1066, 5, 16, 9, 3, -11}, // 0x7D '}' - {1076, 9, 3, 9, 0, -5}}; // 0x7E '~' - -const GFXfont FreeSerif9pt7b PROGMEM = {(uint8_t *)FreeSerif9pt7bBitmaps, - (GFXglyph *)FreeSerif9pt7bGlyphs, 0x20, - 0x7E, 22}; - -// Approx. 1752 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold12pt7b.h deleted file mode 100644 index 9dedae0..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold12pt7b.h +++ /dev/null @@ -1,273 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBold12pt7bBitmaps[] PROGMEM = { - 0x7F, 0xFF, 0x77, 0x66, 0x22, 0x00, 0x6F, 0xF7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3A, 0x09, 0x04, 0x0C, 0x40, 0xCC, 0x0C, 0xC0, 0x8C, 0x18, 0xC7, - 0xFF, 0x18, 0xC1, 0x88, 0x19, 0x81, 0x98, 0xFF, 0xE3, 0x18, 0x31, 0x83, - 0x18, 0x33, 0x03, 0x30, 0x08, 0x01, 0x00, 0xFC, 0x24, 0xEC, 0x8D, 0x90, - 0xBA, 0x07, 0xC0, 0x7E, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x9F, 0x11, 0xE2, - 0x3E, 0x46, 0xE9, 0xC7, 0xC0, 0x20, 0x04, 0x00, 0x1E, 0x0C, 0x0E, 0x7F, - 0x07, 0x10, 0x83, 0xC4, 0x40, 0xE1, 0x30, 0x38, 0x88, 0x0E, 0x26, 0x03, - 0x91, 0x1E, 0x78, 0x8E, 0x40, 0x27, 0x10, 0x11, 0xC4, 0x0C, 0xE1, 0x02, - 0x38, 0x81, 0x0E, 0x20, 0x43, 0x90, 0x20, 0x78, 0x03, 0xE0, 0x01, 0x9E, - 0x00, 0xE3, 0x80, 0x38, 0xE0, 0x0F, 0x30, 0x03, 0xF0, 0x00, 0x78, 0x7C, - 0x1F, 0x06, 0x1B, 0xE1, 0x1C, 0x7C, 0x8F, 0x1F, 0x23, 0xC3, 0xF0, 0xF8, - 0x7C, 0x3E, 0x0F, 0x97, 0xC7, 0xFC, 0xFE, 0x3E, 0xFF, 0xFE, 0x90, 0x00, - 0x31, 0x0C, 0x31, 0x86, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x86, 0x18, 0x60, - 0xC1, 0x02, 0x04, 0x03, 0x06, 0x0C, 0x30, 0x61, 0x87, 0x1C, 0x71, 0xC7, - 0x1C, 0x71, 0x86, 0x38, 0xC2, 0x10, 0x80, 0x1C, 0x6E, 0xFA, 0xEF, 0xF1, - 0xC7, 0xFF, 0xAF, 0xBB, 0x1C, 0x04, 0x00, 0x06, 0x00, 0x60, 0x06, 0x00, - 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, - 0x60, 0x6F, 0xF7, 0x11, 0x24, 0xFF, 0xFF, 0xC0, 0x6F, 0xF6, 0x03, 0x07, - 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x60, - 0x60, 0x60, 0xC0, 0x0E, 0x07, 0x71, 0xC7, 0x38, 0xEF, 0x1D, 0xE3, 0xFC, - 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xF7, 0x1C, 0xE3, 0x8E, 0xE0, - 0xF8, 0x06, 0x0F, 0x1F, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, - 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0xF9, 0xFF, 0x0F, 0x03, 0xFC, 0x7F, 0xC4, - 0x3E, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x1C, 0x03, 0x80, 0x30, 0x06, 0x00, - 0xC1, 0x18, 0x13, 0xFE, 0x7F, 0xEF, 0xFE, 0x1F, 0x0C, 0xFA, 0x0F, 0x01, - 0xE0, 0x38, 0x0E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3C, 0x03, 0x80, 0x70, - 0x0D, 0xC1, 0xBC, 0x43, 0xF0, 0x03, 0x80, 0xE0, 0x78, 0x3E, 0x17, 0x89, - 0xE2, 0x79, 0x1E, 0x87, 0xA1, 0xEF, 0xFF, 0xFF, 0xFF, 0xC1, 0xE0, 0x78, - 0x1E, 0x3F, 0xE7, 0xF8, 0xFF, 0x10, 0x04, 0x00, 0xF8, 0x1F, 0xC7, 0xFC, - 0x1F, 0xC0, 0x78, 0x07, 0x00, 0x60, 0x0D, 0xC1, 0x3C, 0x43, 0xF0, 0x00, - 0xE0, 0xF0, 0x38, 0x1E, 0x07, 0x80, 0xF0, 0x3F, 0xE7, 0x9E, 0xF1, 0xFE, - 0x3F, 0xC7, 0xF8, 0xF7, 0x1E, 0xE3, 0x8E, 0x60, 0xF8, 0x7F, 0xEF, 0xFD, - 0xFF, 0xA0, 0x68, 0x0C, 0x03, 0x80, 0x60, 0x0C, 0x03, 0x00, 0x60, 0x0C, - 0x03, 0x00, 0x60, 0x1C, 0x03, 0x00, 0x60, 0x1F, 0x0E, 0x73, 0x87, 0x70, - 0xEF, 0x1D, 0xF3, 0x1F, 0x81, 0xF8, 0x1F, 0xCC, 0xFB, 0x8F, 0xF0, 0xFE, - 0x1F, 0xC3, 0x9C, 0xF1, 0xF8, 0x1F, 0x06, 0x71, 0xC7, 0x78, 0xEF, 0x1F, - 0xE3, 0xFC, 0x7F, 0x8F, 0x79, 0xE7, 0xFC, 0x0F, 0x01, 0xC0, 0x78, 0x1C, - 0x0F, 0x07, 0x00, 0x6F, 0xF6, 0x00, 0x06, 0xFF, 0x60, 0x6F, 0xF6, 0x00, - 0x06, 0xFF, 0x71, 0x22, 0xC0, 0x00, 0x04, 0x00, 0x70, 0x07, 0xC0, 0xFC, - 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0x80, 0x0F, - 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x01, 0xF0, - 0x1F, 0x03, 0xF0, 0x3E, 0x00, 0xE0, 0x02, 0x00, 0x00, 0x3E, 0x11, 0xEC, - 0x3F, 0x8F, 0xE3, 0xC0, 0xF0, 0x78, 0x18, 0x08, 0x02, 0x00, 0x00, 0x00, - 0x1C, 0x07, 0x81, 0xE0, 0x30, 0x03, 0xF0, 0x0E, 0x18, 0x18, 0x04, 0x30, - 0x66, 0x70, 0xDB, 0x61, 0x99, 0xE3, 0x19, 0xE3, 0x31, 0xE6, 0x31, 0xE6, - 0x31, 0xE6, 0xF2, 0x66, 0xB2, 0x73, 0x3C, 0x38, 0x00, 0x1E, 0x04, 0x03, - 0xF8, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x1B, 0xC0, 0x09, 0xE0, 0x0C, 0xF8, 0x04, 0x3C, 0x02, 0x1F, - 0x03, 0xFF, 0x81, 0x03, 0xC1, 0x80, 0xF0, 0x80, 0x7D, 0xF0, 0xFF, 0xFF, - 0xC0, 0xF3, 0xC3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xCE, 0x0F, - 0xF0, 0x3C, 0x70, 0xF0, 0xE3, 0xC3, 0xCF, 0x0F, 0x3C, 0x3C, 0xF0, 0xE3, - 0xC7, 0xBF, 0xF8, 0x07, 0xE2, 0x38, 0x7C, 0xE0, 0x3B, 0xC0, 0x37, 0x00, - 0x7E, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x03, - 0x80, 0x07, 0x80, 0x27, 0x00, 0xC7, 0x86, 0x03, 0xF0, 0xFF, 0xE0, 0x1E, - 0x1E, 0x0F, 0x07, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xE0, 0x3C, 0xF0, 0x1E, - 0x78, 0x0F, 0x3C, 0x07, 0x9E, 0x03, 0xCF, 0x01, 0xE7, 0x80, 0xE3, 0xC0, - 0xF1, 0xE0, 0xF0, 0xF0, 0xE1, 0xFF, 0xC0, 0xFF, 0xFC, 0x78, 0x38, 0xF0, - 0x31, 0xE0, 0x23, 0xC4, 0x07, 0x88, 0x0F, 0x30, 0x1F, 0xE0, 0x3C, 0xC0, - 0x78, 0x80, 0xF1, 0x01, 0xE0, 0x23, 0xC0, 0x47, 0x81, 0x8F, 0x07, 0x7F, - 0xFE, 0xFF, 0xFC, 0xF0, 0x73, 0xC0, 0xCF, 0x01, 0x3C, 0x40, 0xF1, 0x03, - 0xCC, 0x0F, 0xF0, 0x3C, 0xC0, 0xF1, 0x03, 0xC4, 0x0F, 0x00, 0x3C, 0x00, - 0xF0, 0x03, 0xC0, 0x3F, 0xC0, 0x07, 0xE2, 0x1C, 0x3E, 0x38, 0x0E, 0x78, - 0x06, 0x70, 0x06, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, - 0x7F, 0xF0, 0x1E, 0x70, 0x1E, 0x78, 0x1E, 0x38, 0x1E, 0x1E, 0x1E, 0x07, - 0xF0, 0xFE, 0xFF, 0x78, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0x78, - 0x3C, 0x78, 0x3C, 0x7F, 0xFC, 0x78, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0x78, - 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0xFE, 0xFF, 0xFF, 0x3C, 0x3C, - 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, - 0xFF, 0x0F, 0xF0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0xE3, 0xCE, - 0x38, 0xE3, 0x83, 0xE0, 0xFE, 0x7F, 0x3C, 0x0E, 0x1E, 0x04, 0x0F, 0x04, - 0x07, 0x84, 0x03, 0xCC, 0x01, 0xEE, 0x00, 0xFF, 0x00, 0x7F, 0xC0, 0x3C, - 0xF0, 0x1E, 0x7C, 0x0F, 0x1F, 0x07, 0x87, 0xC3, 0xC1, 0xF1, 0xE0, 0x7D, - 0xFC, 0xFF, 0xFE, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, - 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x01, 0x78, - 0x0D, 0xE0, 0x67, 0x83, 0xBF, 0xFE, 0xFC, 0x01, 0xF3, 0xC0, 0x3E, 0x3E, - 0x03, 0xE2, 0xE0, 0x5E, 0x2F, 0x05, 0xE2, 0xF0, 0x5E, 0x27, 0x09, 0xE2, - 0x78, 0x9E, 0x23, 0x91, 0xE2, 0x3D, 0x1E, 0x23, 0xF1, 0xE2, 0x1E, 0x1E, - 0x21, 0xE1, 0xE2, 0x0C, 0x1E, 0x20, 0xC1, 0xEF, 0x88, 0x3F, 0xF8, 0x1E, - 0xF8, 0x18, 0xF8, 0x11, 0xF8, 0x22, 0xF8, 0x45, 0xF0, 0x89, 0xF1, 0x11, - 0xF2, 0x21, 0xF4, 0x41, 0xF8, 0x81, 0xF1, 0x01, 0xE2, 0x03, 0xC4, 0x03, - 0x8C, 0x03, 0x7C, 0x02, 0x07, 0xF0, 0x0F, 0x1E, 0x0E, 0x03, 0x8F, 0x01, - 0xE7, 0x00, 0x77, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, - 0x03, 0xFC, 0x01, 0xEE, 0x00, 0xE7, 0x80, 0xF1, 0xC0, 0x70, 0x70, 0x70, - 0x0F, 0xE0, 0xFF, 0x87, 0x9E, 0x78, 0xF7, 0x8F, 0x78, 0xF7, 0x8F, 0x78, - 0xF7, 0x9E, 0x7F, 0x87, 0x80, 0x78, 0x07, 0x80, 0x78, 0x07, 0x80, 0x78, - 0x0F, 0xE0, 0x07, 0xF0, 0x0F, 0x1E, 0x0E, 0x07, 0x8F, 0x01, 0xE7, 0x00, - 0xF7, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, - 0x01, 0xEE, 0x00, 0xE7, 0x00, 0xF1, 0xC0, 0x70, 0x70, 0x70, 0x1C, 0xF0, - 0x03, 0xE0, 0x01, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0xE0, 0xFF, 0xE0, 0x3C, - 0x78, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x38, 0x3C, - 0x70, 0x3F, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, 0x3C, 0xF8, 0x3C, 0x78, 0x3C, - 0x3C, 0x3C, 0x3E, 0xFF, 0x1F, 0x1F, 0x27, 0x0E, 0x60, 0x6E, 0x06, 0xF0, - 0x2F, 0x80, 0x7F, 0x07, 0xFC, 0x1F, 0xE0, 0x7E, 0x01, 0xF8, 0x07, 0xC0, - 0x7C, 0x06, 0xF0, 0xC9, 0xF8, 0xFF, 0xFF, 0xC7, 0x9F, 0x0F, 0x1C, 0x1E, - 0x10, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, - 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x07, 0xF8, 0xFE, - 0x1E, 0xF0, 0x09, 0xE0, 0x13, 0xC0, 0x27, 0x80, 0x4F, 0x00, 0x9E, 0x01, - 0x3C, 0x02, 0x78, 0x04, 0xF0, 0x09, 0xE0, 0x13, 0xC0, 0x27, 0x80, 0x47, - 0x81, 0x07, 0x84, 0x07, 0xF0, 0xFF, 0x0F, 0x9E, 0x03, 0x0F, 0x00, 0x83, - 0xC0, 0x81, 0xE0, 0x40, 0xF8, 0x60, 0x3C, 0x20, 0x1E, 0x10, 0x07, 0x90, - 0x03, 0xC8, 0x00, 0xF4, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x07, - 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, 0xFE, 0x7F, 0x9E, 0xF8, 0x3C, 0x08, - 0xF0, 0x78, 0x31, 0xE0, 0xF0, 0x41, 0xE0, 0xF0, 0x83, 0xC3, 0xE3, 0x07, - 0x85, 0xC4, 0x07, 0x93, 0xC8, 0x0F, 0x27, 0xB0, 0x0E, 0x47, 0x40, 0x1F, - 0x0F, 0x80, 0x3E, 0x1F, 0x00, 0x38, 0x1C, 0x00, 0x70, 0x38, 0x00, 0xE0, - 0x30, 0x00, 0x80, 0x40, 0xFF, 0x9F, 0x9F, 0x07, 0x07, 0x83, 0x03, 0xE3, - 0x00, 0xF9, 0x00, 0x3D, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xE0, 0x00, - 0xF8, 0x00, 0xBE, 0x00, 0x8F, 0x00, 0x83, 0xC0, 0xC1, 0xF0, 0xE0, 0xFD, - 0xF8, 0xFF, 0xFF, 0x1F, 0x7C, 0x06, 0x3C, 0x04, 0x3E, 0x0C, 0x1E, 0x08, - 0x0F, 0x10, 0x0F, 0x30, 0x07, 0xA0, 0x07, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x0F, 0xF0, 0x7F, 0xFC, - 0xE0, 0xF1, 0x83, 0xE2, 0x07, 0x84, 0x1E, 0x00, 0x7C, 0x00, 0xF0, 0x03, - 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x7C, 0x08, 0xF0, 0x13, 0xC0, 0x6F, 0x81, - 0x9E, 0x07, 0x7F, 0xFE, 0xFF, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, - 0x73, 0x9C, 0xE7, 0x39, 0xF0, 0xC0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, - 0x18, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x06, 0x06, 0x06, 0x03, 0xF9, 0xCE, - 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCF, 0xF0, 0x0C, - 0x07, 0x81, 0xE0, 0xCC, 0x33, 0x18, 0x66, 0x1B, 0x87, 0xC0, 0xC0, 0xFF, - 0xF0, 0xC7, 0x1C, 0x30, 0x1F, 0x0E, 0x71, 0xCF, 0x39, 0xE0, 0x3C, 0x1F, - 0x8E, 0xF3, 0x9E, 0xF3, 0xDE, 0x79, 0xFF, 0x80, 0xF8, 0x07, 0x80, 0x78, - 0x07, 0x80, 0x78, 0x07, 0xB8, 0x7D, 0xE7, 0x8E, 0x78, 0xF7, 0x8F, 0x78, - 0xF7, 0x8F, 0x78, 0xF7, 0x8E, 0x79, 0xC4, 0x78, 0x1F, 0x1D, 0xDC, 0xFE, - 0x7F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0x3C, 0x47, 0xC0, 0x03, 0xE0, 0x1E, - 0x01, 0xE0, 0x1E, 0x01, 0xE1, 0xDE, 0x7B, 0xE7, 0x1E, 0xF1, 0xEF, 0x1E, - 0xF1, 0xEF, 0x1E, 0xF1, 0xE7, 0x1E, 0x7B, 0xE1, 0xDF, 0x1F, 0x0C, 0x67, - 0x1B, 0xC7, 0xFF, 0xFC, 0x0F, 0x03, 0xC0, 0x78, 0x4E, 0x21, 0xF0, 0x1E, - 0x3B, 0x7B, 0x78, 0x78, 0xFC, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0x78, 0x78, 0xFC, 0x3E, 0x0E, 0x7F, 0xCE, 0x79, 0xEF, 0x3C, 0xE7, 0x0F, - 0xC1, 0x00, 0x60, 0x1C, 0x03, 0xFE, 0x7F, 0xE3, 0xFF, 0x80, 0xF0, 0x33, - 0xFC, 0xF8, 0x07, 0x80, 0x78, 0x07, 0x80, 0x78, 0x07, 0xB8, 0x7D, 0xE7, - 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xEF, - 0xFF, 0x31, 0xE7, 0x8C, 0x03, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, - 0xBF, 0x06, 0x0F, 0x0F, 0x06, 0x00, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xCF, 0xCE, 0x7C, 0xF8, 0x03, - 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0xF9, 0xE1, 0x8F, 0x10, 0x79, - 0x03, 0xD8, 0x1F, 0xE0, 0xF7, 0x87, 0x9E, 0x3C, 0x71, 0xE3, 0xDF, 0xBF, - 0xF9, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0xBF, - 0xFB, 0xCF, 0x0F, 0xBE, 0x79, 0xE7, 0x8F, 0x3C, 0xF1, 0xE7, 0x9E, 0x3C, - 0xF3, 0xC7, 0x9E, 0x78, 0xF3, 0xCF, 0x1E, 0x79, 0xE3, 0xCF, 0x3C, 0x7B, - 0xFF, 0xDF, 0x80, 0xFB, 0x87, 0xDE, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, - 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0xFF, 0xF0, 0x1F, 0x07, 0x71, 0xC7, - 0x78, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0x71, 0xC7, 0x70, 0x7C, 0x00, - 0xFB, 0x87, 0xDE, 0x78, 0xE7, 0x8F, 0x78, 0xF7, 0x8F, 0x78, 0xF7, 0x8F, - 0x78, 0xE7, 0x9E, 0x7F, 0x87, 0x80, 0x78, 0x07, 0x80, 0x78, 0x0F, 0xC0, - 0x1E, 0x23, 0x9E, 0x71, 0xEF, 0x1E, 0xF1, 0xEF, 0x1E, 0xF1, 0xEF, 0x1E, - 0x71, 0xE7, 0x9E, 0x1F, 0xE0, 0x1E, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3F, - 0xF9, 0xDF, 0xF7, 0xDD, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, - 0x0F, 0xC0, 0x3D, 0x43, 0xC3, 0xE0, 0xFC, 0x7E, 0x1F, 0x87, 0x83, 0xC2, - 0xBC, 0x08, 0x18, 0x38, 0x78, 0xFC, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0x78, 0x78, 0x79, 0x3E, 0xFB, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, - 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x3F, 0xF0, 0xFC, 0xEF, 0x08, - 0xE1, 0x1E, 0x41, 0xC8, 0x3D, 0x03, 0xC0, 0x78, 0x0E, 0x00, 0xC0, 0x10, - 0x00, 0xFD, 0xF7, 0xBC, 0x71, 0x9E, 0x38, 0x87, 0x1E, 0x43, 0xCF, 0x40, - 0xEB, 0xA0, 0x7C, 0xF0, 0x1C, 0x70, 0x0E, 0x38, 0x06, 0x08, 0x01, 0x04, - 0x00, 0xFC, 0xF7, 0x84, 0x3C, 0x81, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x80, - 0xBC, 0x13, 0xC2, 0x1E, 0xFB, 0xF0, 0xFC, 0xEF, 0x08, 0xE1, 0x1E, 0x43, - 0xC8, 0x3A, 0x07, 0xC0, 0x78, 0x0E, 0x01, 0xC0, 0x18, 0x02, 0x00, 0x41, - 0xC8, 0x3A, 0x03, 0x80, 0xFF, 0xB1, 0xE8, 0x70, 0x3C, 0x1E, 0x07, 0x83, - 0xC1, 0xE0, 0x78, 0xBC, 0x2F, 0xF8, 0x07, 0x0E, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0xE0, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x18, 0x07, 0x38, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x70, 0xE0, 0x70, 0x1F, 0x8B, 0x3F, 0x01, 0xC0}; - -const GFXglyph FreeSerifBold12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 4, 16, 8, 2, -15}, // 0x21 '!' - {8, 9, 7, 13, 2, -15}, // 0x22 '"' - {16, 12, 16, 12, 0, -15}, // 0x23 '#' - {40, 11, 20, 12, 1, -17}, // 0x24 '$' - {68, 18, 16, 24, 3, -15}, // 0x25 '%' - {104, 18, 16, 20, 1, -15}, // 0x26 '&' - {140, 3, 7, 7, 2, -15}, // 0x27 ''' - {143, 6, 21, 8, 1, -16}, // 0x28 '(' - {159, 6, 21, 8, 1, -16}, // 0x29 ')' - {175, 9, 10, 12, 2, -15}, // 0x2A '*' - {187, 12, 12, 16, 2, -11}, // 0x2B '+' - {205, 4, 8, 6, 1, -3}, // 0x2C ',' - {209, 6, 3, 8, 1, -6}, // 0x2D '-' - {212, 4, 4, 6, 1, -3}, // 0x2E '.' - {214, 8, 17, 7, -1, -15}, // 0x2F '/' - {231, 11, 16, 12, 1, -15}, // 0x30 '0' - {253, 9, 16, 12, 1, -15}, // 0x31 '1' - {271, 12, 16, 12, 0, -15}, // 0x32 '2' - {295, 11, 16, 12, 1, -15}, // 0x33 '3' - {317, 10, 16, 12, 1, -15}, // 0x34 '4' - {337, 11, 16, 12, 1, -15}, // 0x35 '5' - {359, 11, 16, 12, 1, -15}, // 0x36 '6' - {381, 11, 16, 12, 0, -15}, // 0x37 '7' - {403, 11, 16, 12, 1, -15}, // 0x38 '8' - {425, 11, 16, 12, 1, -15}, // 0x39 '9' - {447, 4, 11, 8, 2, -10}, // 0x3A ':' - {453, 4, 15, 8, 2, -10}, // 0x3B ';' - {461, 14, 14, 16, 1, -12}, // 0x3C '<' - {486, 14, 8, 16, 1, -9}, // 0x3D '=' - {500, 14, 14, 16, 1, -12}, // 0x3E '>' - {525, 10, 16, 12, 1, -15}, // 0x3F '?' - {545, 16, 16, 22, 3, -15}, // 0x40 '@' - {577, 17, 16, 17, 0, -15}, // 0x41 'A' - {611, 14, 16, 16, 1, -15}, // 0x42 'B' - {639, 15, 16, 17, 1, -15}, // 0x43 'C' - {669, 17, 16, 18, 0, -15}, // 0x44 'D' - {703, 15, 16, 16, 1, -15}, // 0x45 'E' - {733, 14, 16, 15, 1, -15}, // 0x46 'F' - {761, 16, 16, 19, 1, -15}, // 0x47 'G' - {793, 16, 16, 19, 2, -15}, // 0x48 'H' - {825, 8, 16, 9, 1, -15}, // 0x49 'I' - {841, 12, 18, 12, 0, -15}, // 0x4A 'J' - {868, 17, 16, 19, 2, -15}, // 0x4B 'K' - {902, 14, 16, 16, 2, -15}, // 0x4C 'L' - {930, 20, 16, 23, 1, -15}, // 0x4D 'M' - {970, 15, 16, 17, 1, -15}, // 0x4E 'N' - {1000, 17, 16, 19, 1, -15}, // 0x4F 'O' - {1034, 12, 16, 15, 2, -15}, // 0x50 'P' - {1058, 17, 20, 19, 1, -15}, // 0x51 'Q' - {1101, 16, 16, 17, 1, -15}, // 0x52 'R' - {1133, 12, 16, 14, 1, -15}, // 0x53 'S' - {1157, 15, 16, 15, 0, -15}, // 0x54 'T' - {1187, 15, 16, 17, 1, -15}, // 0x55 'U' - {1217, 17, 17, 17, 0, -15}, // 0x56 'V' - {1254, 23, 16, 24, 0, -15}, // 0x57 'W' - {1300, 17, 16, 17, 0, -15}, // 0x58 'X' - {1334, 16, 16, 17, 1, -15}, // 0x59 'Y' - {1366, 15, 16, 16, 0, -15}, // 0x5A 'Z' - {1396, 5, 20, 8, 2, -15}, // 0x5B '[' - {1409, 8, 17, 7, -1, -15}, // 0x5C '\' - {1426, 5, 20, 8, 2, -15}, // 0x5D ']' - {1439, 10, 9, 14, 2, -15}, // 0x5E '^' - {1451, 12, 1, 12, 0, 4}, // 0x5F '_' - {1453, 5, 4, 8, 0, -16}, // 0x60 '`' - {1456, 11, 11, 12, 1, -10}, // 0x61 'a' - {1472, 12, 16, 13, 1, -15}, // 0x62 'b' - {1496, 9, 11, 10, 1, -10}, // 0x63 'c' - {1509, 12, 16, 13, 1, -15}, // 0x64 'd' - {1533, 10, 11, 11, 1, -10}, // 0x65 'e' - {1547, 8, 16, 9, 1, -15}, // 0x66 'f' - {1563, 11, 16, 12, 1, -10}, // 0x67 'g' - {1585, 12, 16, 13, 1, -15}, // 0x68 'h' - {1609, 6, 16, 7, 1, -15}, // 0x69 'i' - {1621, 8, 21, 10, 0, -15}, // 0x6A 'j' - {1642, 13, 16, 13, 1, -15}, // 0x6B 'k' - {1668, 6, 16, 7, 1, -15}, // 0x6C 'l' - {1680, 19, 11, 20, 1, -10}, // 0x6D 'm' - {1707, 12, 11, 13, 1, -10}, // 0x6E 'n' - {1724, 11, 11, 12, 1, -10}, // 0x6F 'o' - {1740, 12, 16, 13, 1, -10}, // 0x70 'p' - {1764, 12, 16, 13, 1, -10}, // 0x71 'q' - {1788, 10, 11, 10, 1, -10}, // 0x72 'r' - {1802, 8, 11, 10, 1, -10}, // 0x73 's' - {1813, 8, 15, 8, 1, -14}, // 0x74 't' - {1828, 12, 11, 14, 1, -10}, // 0x75 'u' - {1845, 11, 11, 12, 0, -10}, // 0x76 'v' - {1861, 17, 11, 17, 0, -10}, // 0x77 'w' - {1885, 12, 11, 12, 0, -10}, // 0x78 'x' - {1902, 11, 16, 12, 0, -10}, // 0x79 'y' - {1924, 10, 11, 11, 1, -10}, // 0x7A 'z' - {1938, 8, 21, 9, 0, -16}, // 0x7B '{' - {1959, 2, 17, 5, 2, -15}, // 0x7C '|' - {1964, 8, 21, 9, 2, -16}, // 0x7D '}' - {1985, 11, 4, 12, 1, -7}}; // 0x7E '~' - -const GFXfont FreeSerifBold12pt7b PROGMEM = { - (uint8_t *)FreeSerifBold12pt7bBitmaps, - (GFXglyph *)FreeSerifBold12pt7bGlyphs, 0x20, 0x7E, 29}; - -// Approx. 2663 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold18pt7b.h deleted file mode 100644 index faecf4f..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold18pt7b.h +++ /dev/null @@ -1,464 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBold18pt7bBitmaps[] PROGMEM = { - 0x7B, 0xEF, 0xFF, 0xFF, 0xF7, 0x9E, 0x71, 0xC7, 0x0C, 0x20, 0x82, 0x00, - 0x00, 0x07, 0x3E, 0xFF, 0xFF, 0xDC, 0x60, 0x37, 0x83, 0xFC, 0x1F, 0xE0, - 0xFF, 0x07, 0xB8, 0x3D, 0xC0, 0xCC, 0x06, 0x20, 0x31, 0x01, 0x80, 0x03, - 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x1C, 0x38, 0x07, 0x0E, 0x01, 0xC3, - 0x87, 0xFF, 0xFD, 0xFF, 0xFF, 0x7F, 0xFF, 0xC1, 0x87, 0x00, 0xE1, 0xC0, - 0x38, 0x70, 0x0E, 0x1C, 0x03, 0x86, 0x0F, 0xFF, 0xF3, 0xFF, 0xFC, 0xFF, - 0xFF, 0x07, 0x0E, 0x01, 0xC3, 0x80, 0x70, 0xE0, 0x1C, 0x30, 0x07, 0x0C, - 0x01, 0x87, 0x00, 0x61, 0xC0, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0xFF, - 0x03, 0x27, 0x8C, 0x47, 0x38, 0x86, 0x71, 0x0C, 0xF2, 0x09, 0xF4, 0x03, - 0xF8, 0x03, 0xF8, 0x07, 0xFC, 0x03, 0xFC, 0x03, 0xFE, 0x01, 0xFE, 0x03, - 0xFC, 0x04, 0xFC, 0x08, 0xFA, 0x10, 0xF4, 0x21, 0xEC, 0x43, 0xD8, 0x8F, - 0x3D, 0x3C, 0x3F, 0xF0, 0x1F, 0x00, 0x08, 0x00, 0x10, 0x00, 0x03, 0xC0, - 0x18, 0x01, 0xFE, 0x0F, 0x00, 0x7C, 0xFF, 0xC0, 0x1F, 0x0F, 0x90, 0x07, - 0xC1, 0x06, 0x00, 0xF0, 0x21, 0x80, 0x3E, 0x04, 0x30, 0x07, 0x81, 0x8C, - 0x00, 0xF0, 0x21, 0x80, 0x1E, 0x0C, 0x60, 0x03, 0xC1, 0x18, 0x1E, 0x3C, - 0xE3, 0x0F, 0xE7, 0xF8, 0xC3, 0xE6, 0x3C, 0x18, 0xF8, 0x40, 0x06, 0x3E, - 0x08, 0x01, 0x87, 0x81, 0x00, 0x31, 0xF0, 0x20, 0x0C, 0x3E, 0x04, 0x01, - 0x87, 0x81, 0x00, 0x60, 0xF0, 0x60, 0x18, 0x1E, 0x08, 0x03, 0x03, 0xC7, - 0x00, 0xC0, 0x3F, 0xC0, 0x18, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x38, 0xF8, 0x00, 0x1E, 0x1F, 0x00, 0x07, 0x83, 0xC0, 0x01, - 0xF0, 0xF0, 0x00, 0x7C, 0x38, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0xFE, 0x0F, 0xF0, 0x3F, 0x80, 0xF0, 0x1F, 0xF0, 0x18, 0x1C, 0xFE, - 0x0C, 0x0E, 0x1F, 0xC3, 0x07, 0x87, 0xF1, 0x81, 0xE0, 0xFE, 0x40, 0xF8, - 0x1F, 0xF0, 0x3F, 0x07, 0xF8, 0x0F, 0xC0, 0xFE, 0x03, 0xF8, 0x1F, 0xC0, - 0xFE, 0x07, 0xF8, 0x9F, 0xE3, 0xFF, 0xE7, 0xFF, 0x9F, 0xF0, 0xFF, 0xC3, - 0xF8, 0x0F, 0x80, 0x3C, 0x00, 0x6F, 0xFF, 0xFF, 0x66, 0x66, 0x00, 0x81, - 0x81, 0x81, 0x81, 0x80, 0xC0, 0xE0, 0x70, 0x70, 0x38, 0x3C, 0x1E, 0x0F, - 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x80, 0xE0, - 0x70, 0x18, 0x06, 0x01, 0x00, 0x40, 0x10, 0x04, 0x80, 0x30, 0x0C, 0x03, - 0x00, 0xC0, 0x60, 0x38, 0x1C, 0x07, 0x03, 0x81, 0xC0, 0xF0, 0x78, 0x3C, - 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xE0, 0x70, 0x38, 0x38, 0x1C, 0x0C, - 0x0C, 0x06, 0x04, 0x04, 0x04, 0x00, 0x03, 0x00, 0x1E, 0x00, 0x78, 0x1D, - 0xE6, 0xFB, 0x3D, 0xED, 0xF3, 0xFF, 0x01, 0xC0, 0x7F, 0xF3, 0xED, 0xFF, - 0x33, 0xD9, 0xE6, 0x07, 0x80, 0x1E, 0x00, 0x30, 0x00, 0x00, 0xE0, 0x00, - 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, - 0x38, 0x00, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, - 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x73, 0xEF, 0xFF, 0xFD, 0xF0, - 0xC2, 0x18, 0xC6, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x7B, 0xFF, 0xFF, 0xFD, - 0xE0, 0x00, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x1C, - 0x07, 0x00, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x1C, - 0x07, 0x00, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x00, - 0x03, 0xC0, 0x0E, 0x70, 0x1E, 0x78, 0x3C, 0x3C, 0x3C, 0x3C, 0x7C, 0x3E, - 0x7C, 0x3E, 0x7C, 0x3E, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3E, 0x7C, 0x3E, - 0x7C, 0x3E, 0x3C, 0x3C, 0x3C, 0x3C, 0x1E, 0x78, 0x0E, 0x70, 0x03, 0xC0, - 0x00, 0xC0, 0x3C, 0x0F, 0xC3, 0xFC, 0x4F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x1F, 0xEF, 0xFF, - 0x03, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0xFC, 0x30, 0xFE, 0x60, 0x7E, - 0x40, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x78, - 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, 0x01, - 0x0C, 0x03, 0x1F, 0xFF, 0x1F, 0xFF, 0x3F, 0xFE, 0x7F, 0xFE, 0xFF, 0xFE, - 0x03, 0xF0, 0x0F, 0xF8, 0x3F, 0xFC, 0x21, 0xFE, 0x40, 0xFE, 0x00, 0x7E, - 0x00, 0x7E, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xFC, 0x03, 0xFE, - 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, - 0x00, 0x0E, 0x70, 0x0E, 0xFC, 0x1C, 0xFE, 0x38, 0x7F, 0xE0, 0x3F, 0x80, - 0x00, 0x38, 0x00, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0x5F, 0x00, - 0xBE, 0x02, 0x7C, 0x08, 0xF8, 0x31, 0xF0, 0x43, 0xE1, 0x07, 0xC4, 0x0F, - 0x88, 0x1F, 0x20, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x0F, 0xFE, 0x1F, - 0xF8, 0x7F, 0xF0, 0xFF, 0xE1, 0x80, 0x03, 0x00, 0x0C, 0x00, 0x18, 0x00, - 0x3F, 0x80, 0xFF, 0xC1, 0xFF, 0xC3, 0xFF, 0xC3, 0xFF, 0x80, 0x3F, 0x80, - 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x37, 0x80, 0x4F, 0x81, - 0x9F, 0xC6, 0x3F, 0xF8, 0x1F, 0x80, 0x00, 0x07, 0x00, 0x7C, 0x01, 0xF0, - 0x03, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, - 0x7F, 0xF0, 0x7F, 0xFC, 0xFC, 0x7E, 0xFC, 0x7E, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x7C, 0x3F, 0x7C, 0x3E, 0x3C, 0x3E, - 0x3E, 0x3C, 0x1E, 0x78, 0x07, 0xE0, 0x7F, 0xFF, 0x7F, 0xFE, 0x7F, 0xFE, - 0xFF, 0xFE, 0xFF, 0xFC, 0xC0, 0x1C, 0x80, 0x18, 0x80, 0x38, 0x00, 0x38, - 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, - 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x80, - 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0F, 0xE0, 0x38, 0x78, 0x70, 0x3C, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x1E, 0xF8, 0x1E, 0xFE, 0x3C, 0x7F, 0xB0, - 0x7F, 0xE0, 0x3F, 0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x39, 0xFE, 0x70, 0xFF, - 0xF0, 0x3F, 0xF0, 0x3F, 0xF0, 0x1F, 0xF0, 0x1F, 0xF0, 0x1E, 0x78, 0x3E, - 0x7C, 0x7C, 0x3F, 0xF8, 0x0F, 0xE0, 0x07, 0xE0, 0x1E, 0x78, 0x3C, 0x7C, - 0x7C, 0x3C, 0x7C, 0x3E, 0xFC, 0x3E, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x3F, 0xFC, 0x3F, 0x7E, 0x3F, 0x7E, 0x3F, 0x3F, 0xFE, 0x0F, 0xFE, - 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xC0, - 0x0F, 0x80, 0x3E, 0x00, 0xE0, 0x00, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, - 0x00, 0x07, 0xBF, 0xFF, 0xFF, 0xDE, 0x39, 0xFB, 0xF7, 0xEF, 0xC7, 0x00, - 0x00, 0x00, 0x01, 0xE7, 0xEF, 0xFF, 0xFF, 0xBF, 0x06, 0x08, 0x30, 0xC2, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0F, 0x80, 0x07, 0xF0, - 0x03, 0xFC, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, - 0xC0, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7C, 0x00, 0x01, 0x80, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x18, 0x00, 0x03, - 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, - 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x1F, 0xC0, - 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x00, 0xFE, 0x00, 0x1F, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0xC7, 0x1F, - 0xB8, 0x3E, 0xF0, 0xFF, 0xC3, 0xFF, 0x0F, 0xD8, 0x3F, 0x00, 0xF8, 0x07, - 0xC0, 0x1E, 0x00, 0x60, 0x03, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x03, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x01, - 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xE0, 0x07, 0xC0, 0xF0, 0x0F, 0x00, - 0x38, 0x1E, 0x00, 0x0C, 0x3C, 0x07, 0x06, 0x38, 0x1F, 0x72, 0x78, 0x3C, - 0xF3, 0x78, 0x78, 0xE1, 0xF0, 0x70, 0xE1, 0xF0, 0xF0, 0xE1, 0xF0, 0xE0, - 0xC1, 0xF1, 0xE1, 0xC1, 0xF1, 0xC1, 0xC1, 0xF1, 0xC3, 0x82, 0xF1, 0xC3, - 0x86, 0x71, 0xC7, 0x8C, 0x79, 0xFB, 0xF8, 0x78, 0xF1, 0xF0, 0x3C, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0xC0, 0x78, 0x03, 0xFF, - 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x10, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0xFE, 0x00, 0x01, 0xBF, 0x00, 0x01, 0xBF, 0x00, 0x01, 0x1F, - 0x00, 0x03, 0x1F, 0x80, 0x02, 0x1F, 0x80, 0x06, 0x0F, 0xC0, 0x06, 0x0F, - 0xC0, 0x04, 0x07, 0xE0, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x18, 0x03, - 0xF0, 0x18, 0x03, 0xF0, 0x30, 0x01, 0xF8, 0x30, 0x01, 0xF8, 0x70, 0x01, - 0xFC, 0xFE, 0x0F, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xE1, 0xF8, - 0x3F, 0x07, 0xC1, 0xF8, 0x3F, 0x0F, 0xC1, 0xF8, 0x7E, 0x0F, 0xC3, 0xF0, - 0x7E, 0x1F, 0x87, 0xE0, 0xFC, 0x7C, 0x07, 0xFF, 0x00, 0x3F, 0xFF, 0x01, - 0xF8, 0xFE, 0x0F, 0xC1, 0xF8, 0x7E, 0x0F, 0xC3, 0xF0, 0x3F, 0x1F, 0x81, - 0xF8, 0xFC, 0x0F, 0xC7, 0xE0, 0x7E, 0x3F, 0x03, 0xF1, 0xF8, 0x3F, 0x0F, - 0xC3, 0xF0, 0xFF, 0xFF, 0x1F, 0xFF, 0xC0, 0x00, 0x7E, 0x04, 0x07, 0xFF, - 0x18, 0x1F, 0x07, 0xF0, 0x7C, 0x03, 0xE1, 0xF0, 0x03, 0xC7, 0xC0, 0x03, - 0x9F, 0x80, 0x03, 0x3F, 0x00, 0x06, 0x7C, 0x00, 0x05, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x01, 0xF0, 0x00, 0x23, 0xF0, 0x00, 0xC3, 0xF0, 0x07, 0x03, 0xF0, - 0x3C, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, - 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x1F, 0x81, 0xF8, 0x1F, 0x83, 0xF0, 0x1F, - 0x07, 0xE0, 0x3F, 0x0F, 0xC0, 0x7E, 0x1F, 0x80, 0x7E, 0x3F, 0x00, 0xFC, - 0x7E, 0x01, 0xF8, 0xFC, 0x03, 0xF1, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xC7, - 0xE0, 0x1F, 0x8F, 0xC0, 0x3F, 0x1F, 0x80, 0x7C, 0x3F, 0x01, 0xF8, 0x7E, - 0x03, 0xE0, 0xFC, 0x0F, 0x81, 0xF8, 0x1F, 0x03, 0xF0, 0xFC, 0x0F, 0xFF, - 0xE0, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x0F, 0xC0, 0x78, - 0x7E, 0x01, 0xC3, 0xF0, 0x06, 0x1F, 0x80, 0x10, 0xFC, 0x10, 0x87, 0xE0, - 0x80, 0x3F, 0x0C, 0x01, 0xF8, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xF8, 0x03, - 0xF1, 0xC0, 0x1F, 0x86, 0x00, 0xFC, 0x10, 0x07, 0xE0, 0x80, 0x3F, 0x00, - 0x09, 0xF8, 0x00, 0xCF, 0xC0, 0x0C, 0x7E, 0x00, 0x63, 0xF0, 0x0F, 0x1F, - 0x81, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFC, 0xFF, 0xFF, 0xEF, 0xFF, 0xFC, - 0xFC, 0x0F, 0x9F, 0x80, 0x73, 0xF0, 0x06, 0x7E, 0x00, 0x4F, 0xC1, 0x09, - 0xF8, 0x20, 0x3F, 0x0C, 0x07, 0xE3, 0x80, 0xFF, 0xF0, 0x1F, 0xFE, 0x03, - 0xF1, 0xC0, 0x7E, 0x18, 0x0F, 0xC1, 0x01, 0xF8, 0x20, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x1F, - 0xE0, 0x07, 0xFF, 0x00, 0x00, 0x7E, 0x02, 0x01, 0xFF, 0xE3, 0x01, 0xF0, - 0x3F, 0x81, 0xF0, 0x07, 0xC1, 0xF0, 0x01, 0xE1, 0xF0, 0x00, 0x71, 0xF8, - 0x00, 0x18, 0xFC, 0x00, 0x0C, 0x7C, 0x00, 0x02, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, - 0xF0, 0x0F, 0xFF, 0xF8, 0x01, 0xFE, 0x7C, 0x00, 0x7E, 0x3F, 0x00, 0x3F, - 0x1F, 0x80, 0x1F, 0x87, 0xC0, 0x0F, 0xC1, 0xF0, 0x07, 0xE0, 0xFC, 0x03, - 0xF0, 0x1F, 0x83, 0xF0, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0xFF, - 0xC3, 0xFF, 0x7F, 0x81, 0xFE, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, - 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, - 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, - 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, - 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x3F, - 0x00, 0xFC, 0x3F, 0x00, 0xFC, 0x7F, 0x81, 0xFE, 0xFF, 0xC3, 0xFF, 0xFF, - 0xEF, 0xF0, 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, 0x1F, 0xE7, 0xFF, 0x07, 0xFF, 0x01, 0xFE, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x70, 0xFC, 0xF8, 0xFC, 0xF8, 0xF8, 0xF0, 0xF8, 0x71, 0xF0, 0x7F, 0xE0, - 0x1F, 0x80, 0xFF, 0xC3, 0xFF, 0x3F, 0xC0, 0x3E, 0x0F, 0xC0, 0x1C, 0x07, - 0xE0, 0x18, 0x03, 0xF0, 0x18, 0x01, 0xF8, 0x18, 0x00, 0xFC, 0x18, 0x00, - 0x7E, 0x18, 0x00, 0x3F, 0x18, 0x00, 0x1F, 0x9C, 0x00, 0x0F, 0xDF, 0x00, - 0x07, 0xFF, 0xC0, 0x03, 0xFF, 0xF0, 0x01, 0xF9, 0xF8, 0x00, 0xFC, 0xFE, - 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0x0F, 0xE0, 0x1F, 0x83, 0xF8, 0x0F, 0xC0, - 0xFC, 0x07, 0xE0, 0x7F, 0x03, 0xF0, 0x1F, 0xC1, 0xF8, 0x07, 0xF1, 0xFE, - 0x03, 0xFD, 0xFF, 0x8F, 0xFF, 0xFF, 0xE0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, - 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, - 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x01, 0x3F, - 0x00, 0x19, 0xF8, 0x00, 0xCF, 0xC0, 0x0C, 0x7E, 0x00, 0x63, 0xF0, 0x0F, - 0x1F, 0x81, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0x80, 0x03, 0xFE, - 0x7F, 0x00, 0x07, 0xF8, 0x7E, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x3F, 0xC1, - 0x7C, 0x00, 0x5F, 0x82, 0xFC, 0x01, 0xBF, 0x05, 0xF8, 0x02, 0x7E, 0x09, - 0xF8, 0x0C, 0xFC, 0x13, 0xF0, 0x11, 0xF8, 0x23, 0xE0, 0x23, 0xF0, 0x47, - 0xE0, 0xC7, 0xE0, 0x87, 0xC1, 0x0F, 0xC1, 0x0F, 0xC6, 0x1F, 0x82, 0x0F, - 0x88, 0x3F, 0x04, 0x1F, 0xB0, 0x7E, 0x08, 0x3F, 0x60, 0xFC, 0x10, 0x3E, - 0x81, 0xF8, 0x20, 0x7F, 0x03, 0xF0, 0x40, 0x7C, 0x07, 0xE0, 0x80, 0xF8, - 0x0F, 0xC1, 0x00, 0xE0, 0x1F, 0x82, 0x01, 0xC0, 0x3F, 0x0E, 0x03, 0x80, - 0xFF, 0x7F, 0x82, 0x03, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x70, 0xFE, - 0x00, 0x40, 0xFE, 0x00, 0x81, 0xFC, 0x01, 0x03, 0xFC, 0x02, 0x05, 0xFC, - 0x04, 0x09, 0xFC, 0x08, 0x11, 0xFC, 0x10, 0x23, 0xF8, 0x20, 0x43, 0xF8, - 0x40, 0x83, 0xF8, 0x81, 0x03, 0xF9, 0x02, 0x03, 0xFA, 0x04, 0x03, 0xF4, - 0x08, 0x07, 0xF8, 0x10, 0x07, 0xF0, 0x20, 0x07, 0xE0, 0x40, 0x07, 0xC0, - 0x80, 0x07, 0x81, 0x00, 0x0F, 0x02, 0x00, 0x0E, 0x0E, 0x00, 0x0C, 0x7F, - 0x00, 0x08, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, 0x01, 0xF0, 0x7C, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x07, 0xC1, 0xF0, 0x01, 0xF1, 0xF8, 0x00, 0xFC, - 0xFC, 0x00, 0x7E, 0x7C, 0x00, 0x1F, 0x7E, 0x00, 0x0F, 0xFF, 0x00, 0x07, - 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, - 0x7F, 0xF8, 0x00, 0x3F, 0x7C, 0x00, 0x1F, 0x3E, 0x00, 0x1F, 0x9F, 0x80, - 0x0F, 0xC7, 0xC0, 0x07, 0xC1, 0xF0, 0x07, 0xC0, 0xFC, 0x07, 0xE0, 0x3F, - 0x07, 0xC0, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0xFC, 0x0F, - 0xFF, 0xE0, 0xFC, 0x7E, 0x1F, 0x87, 0xE3, 0xF0, 0x7E, 0x7E, 0x0F, 0xCF, - 0xC1, 0xF9, 0xF8, 0x3F, 0x3F, 0x07, 0xE7, 0xE0, 0xFC, 0xFC, 0x3F, 0x1F, - 0x8F, 0xC3, 0xFF, 0xF0, 0x7F, 0xF8, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, - 0x00, 0x1F, 0xE0, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, - 0x01, 0xF0, 0x7C, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x07, 0xC1, 0xF0, 0x01, - 0xF1, 0xF8, 0x00, 0xFC, 0xFC, 0x00, 0x7E, 0x7C, 0x00, 0x1F, 0x7E, 0x00, - 0x0F, 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0x7C, 0x00, 0x1F, 0x3E, - 0x00, 0x0F, 0x9F, 0x80, 0x0F, 0xC7, 0xC0, 0x07, 0xC1, 0xF0, 0x07, 0xC0, - 0x78, 0x03, 0xC0, 0x1E, 0x07, 0xC0, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x0F, 0xE0, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0xFC, 0x3F, - 0x01, 0xF8, 0x3F, 0x03, 0xF0, 0x3F, 0x07, 0xE0, 0x7E, 0x0F, 0xC0, 0xFC, - 0x1F, 0x81, 0xF8, 0x3F, 0x03, 0xF0, 0x7E, 0x07, 0xC0, 0xFC, 0x1F, 0x81, - 0xF8, 0x7E, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x0F, 0xDF, 0xC0, 0x1F, - 0x9F, 0x80, 0x3F, 0x1F, 0x80, 0x7E, 0x3F, 0x80, 0xFC, 0x3F, 0x81, 0xF8, - 0x3F, 0x03, 0xF0, 0x7F, 0x07, 0xE0, 0x7F, 0x1F, 0xE0, 0x7F, 0x7F, 0xE0, - 0xFF, 0x07, 0xC2, 0x1F, 0xF2, 0x3C, 0x3E, 0x70, 0x0E, 0xF0, 0x06, 0xF0, - 0x06, 0xF0, 0x02, 0xF8, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x7F, 0xE0, 0x3F, - 0xF8, 0x1F, 0xFC, 0x0F, 0xFE, 0x03, 0xFE, 0x00, 0xFF, 0x00, 0x3F, 0x80, - 0x1F, 0xC0, 0x0F, 0xC0, 0x0F, 0xE0, 0x0E, 0xF0, 0x1E, 0xF8, 0x3C, 0x9F, - 0xF8, 0x87, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7E, 0x3F, 0x83, - 0xF0, 0x7C, 0x1F, 0x81, 0xC0, 0xFC, 0x06, 0x07, 0xE0, 0x20, 0x3F, 0x00, - 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, - 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, - 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0xE0, 0xFF, 0xC1, 0xFD, 0xFE, 0x01, 0xC3, - 0xF0, 0x02, 0x0F, 0xC0, 0x08, 0x3F, 0x00, 0x20, 0xFC, 0x00, 0x83, 0xF0, - 0x02, 0x0F, 0xC0, 0x08, 0x3F, 0x00, 0x20, 0xFC, 0x00, 0x83, 0xF0, 0x02, - 0x0F, 0xC0, 0x08, 0x3F, 0x00, 0x20, 0xFC, 0x00, 0x83, 0xF0, 0x02, 0x0F, - 0xC0, 0x08, 0x3F, 0x00, 0x20, 0xFC, 0x00, 0x83, 0xF0, 0x02, 0x0F, 0xC0, - 0x18, 0x1F, 0x80, 0x40, 0x7E, 0x03, 0x00, 0xFC, 0x18, 0x01, 0xFF, 0xC0, - 0x00, 0xFC, 0x00, 0xFF, 0xF0, 0x7F, 0x3F, 0xC0, 0x1E, 0x1F, 0x80, 0x0C, - 0x1F, 0x80, 0x08, 0x0F, 0xC0, 0x18, 0x0F, 0xC0, 0x18, 0x07, 0xE0, 0x10, - 0x07, 0xE0, 0x30, 0x07, 0xE0, 0x20, 0x03, 0xF0, 0x60, 0x03, 0xF0, 0x60, - 0x01, 0xF8, 0x40, 0x01, 0xF8, 0xC0, 0x00, 0xF8, 0x80, 0x00, 0xFC, 0x80, - 0x00, 0xFD, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x0C, 0x00, 0xFF, 0xE7, 0xFF, 0x0F, 0xCF, 0xE0, 0x7F, 0x00, 0xE1, - 0xF8, 0x0F, 0xC0, 0x30, 0x7E, 0x03, 0xF0, 0x0C, 0x1F, 0x80, 0x7C, 0x02, - 0x03, 0xE0, 0x1F, 0x81, 0x80, 0xFC, 0x07, 0xE0, 0x60, 0x3F, 0x03, 0xF8, - 0x10, 0x07, 0xC0, 0xBF, 0x0C, 0x01, 0xF8, 0x2F, 0xC3, 0x00, 0x7E, 0x19, - 0xF0, 0x80, 0x0F, 0x84, 0x7C, 0x60, 0x03, 0xF3, 0x0F, 0x98, 0x00, 0xFC, - 0xC3, 0xE4, 0x00, 0x1F, 0x20, 0xFB, 0x00, 0x07, 0xF8, 0x1F, 0xC0, 0x00, - 0xFC, 0x07, 0xE0, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x3E, 0x00, - 0x01, 0xE0, 0x0F, 0x00, 0x00, 0x78, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x70, - 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x06, 0x00, 0x00, 0x20, 0x00, - 0x80, 0x00, 0xFF, 0xF3, 0xFE, 0x7F, 0x80, 0x78, 0x3F, 0x80, 0x70, 0x1F, - 0xC0, 0x60, 0x0F, 0xC0, 0xC0, 0x0F, 0xE1, 0x80, 0x07, 0xF1, 0x00, 0x03, - 0xF3, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x9F, 0x80, 0x01, 0x8F, 0xC0, 0x03, 0x0F, 0xE0, 0x06, 0x07, 0xE0, 0x06, - 0x07, 0xF0, 0x0C, 0x03, 0xF8, 0x1C, 0x03, 0xF8, 0x3C, 0x03, 0xFC, 0xFF, - 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0x7F, 0x80, 0x1E, 0x3F, 0x80, 0x1C, 0x1F, - 0x80, 0x18, 0x1F, 0xC0, 0x10, 0x0F, 0xC0, 0x30, 0x07, 0xE0, 0x20, 0x07, - 0xE0, 0x60, 0x03, 0xF0, 0xC0, 0x03, 0xF0, 0x80, 0x01, 0xF9, 0x80, 0x01, - 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x00, 0x01, - 0xFF, 0x80, 0x7F, 0xFF, 0xF3, 0xFF, 0xFF, 0x9F, 0x01, 0xF8, 0xE0, 0x1F, - 0x86, 0x01, 0xFC, 0x20, 0x0F, 0xC1, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x80, - 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x01, 0x0F, 0xC0, 0x18, 0xFC, - 0x00, 0xC7, 0xE0, 0x06, 0x7E, 0x00, 0x77, 0xF0, 0x07, 0x3F, 0x00, 0xFB, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xE0, 0x1E, - 0x01, 0xC0, 0x38, 0x07, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x1C, 0x03, 0x80, - 0x70, 0x07, 0x00, 0xE0, 0x1C, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x70, 0x0E, - 0x01, 0xC0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0xFF, 0xFF, 0x03, 0x80, 0x0F, 0x00, 0x1F, 0x00, 0x7E, 0x00, 0xEE, 0x03, - 0x9C, 0x07, 0x1C, 0x1C, 0x38, 0x38, 0x38, 0xE0, 0x71, 0xC0, 0x77, 0x00, - 0xEE, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE0, 0xF0, - 0x78, 0x3C, 0x0E, 0x07, 0x0F, 0xE0, 0x3F, 0xF0, 0x78, 0xF8, 0x78, 0x7C, - 0x78, 0x7C, 0x38, 0x7C, 0x00, 0x7C, 0x03, 0xFC, 0x1E, 0x7C, 0x7C, 0x7C, - 0xFC, 0x7C, 0xFC, 0x7C, 0xFC, 0xFC, 0xFF, 0xFD, 0x7F, 0x7F, 0x3C, 0x3C, - 0xFC, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0xF8, 0x1F, 0x7F, 0x87, 0xE3, - 0xF1, 0xF0, 0x7E, 0x7C, 0x0F, 0x9F, 0x03, 0xF7, 0xC0, 0xFD, 0xF0, 0x3F, - 0x7C, 0x0F, 0xDF, 0x03, 0xF7, 0xC0, 0xFD, 0xF0, 0x3E, 0x7C, 0x1F, 0x1F, - 0x8F, 0xC6, 0x7F, 0xC1, 0x07, 0xC0, 0x07, 0xC0, 0x7F, 0xC3, 0xC7, 0x9F, - 0x1E, 0x78, 0x7B, 0xE1, 0xCF, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, - 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xFC, 0x61, 0xFF, 0x03, 0xF0, 0x00, 0x7F, - 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, - 0x01, 0xF0, 0x00, 0x7C, 0x07, 0x9F, 0x07, 0xF7, 0xC3, 0xE3, 0xF1, 0xF8, - 0x7C, 0x7C, 0x1F, 0x3F, 0x07, 0xCF, 0xC1, 0xF3, 0xF0, 0x7C, 0xFC, 0x1F, - 0x3F, 0x07, 0xCF, 0xC1, 0xF1, 0xF0, 0x7C, 0x7E, 0x1F, 0x0F, 0x8F, 0xC1, - 0xFD, 0xFC, 0x3E, 0x70, 0x0F, 0xC0, 0x7F, 0xC3, 0xC7, 0x1E, 0x1E, 0xF8, - 0x7B, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, - 0x03, 0x7E, 0x18, 0xFF, 0xC1, 0xFE, 0x03, 0xF0, 0x0F, 0x83, 0xF8, 0xF3, - 0xBE, 0xF7, 0xDC, 0xF8, 0x1F, 0x03, 0xE0, 0xFF, 0x1F, 0xE1, 0xF0, 0x3E, - 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, - 0xC0, 0xF8, 0x1F, 0x07, 0xF8, 0x0F, 0xC0, 0x1F, 0xFF, 0xDF, 0x1F, 0xFF, - 0x07, 0x8F, 0x83, 0xE7, 0xC1, 0xF3, 0xE0, 0xF9, 0xF0, 0x7C, 0x78, 0x3C, - 0x1E, 0x3E, 0x03, 0xFC, 0x03, 0x00, 0x07, 0x00, 0x07, 0x80, 0x03, 0xFF, - 0xF1, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0x01, 0xFC, 0x00, 0x7F, - 0x00, 0x73, 0xFF, 0xF0, 0x7F, 0xC0, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, - 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, - 0x7C, 0x3E, 0xFF, 0x1F, 0xCF, 0xCF, 0x83, 0xE7, 0xC1, 0xF3, 0xE0, 0xF9, - 0xF0, 0x7C, 0xF8, 0x3E, 0x7C, 0x1F, 0x3E, 0x0F, 0x9F, 0x07, 0xCF, 0x83, - 0xE7, 0xC1, 0xF3, 0xE0, 0xF9, 0xF0, 0x7D, 0xFC, 0x7F, 0x39, 0xFB, 0xF7, - 0xE7, 0x80, 0x00, 0x00, 0xFC, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, - 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x7F, 0x03, 0xC0, 0xFC, 0x1F, 0x83, 0xF0, - 0x3C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, - 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, - 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7D, 0xCF, 0xF9, 0xEE, 0x7C, 0xFF, 0x0F, - 0x80, 0xFC, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x7F, 0x9F, 0x07, 0x87, - 0xC1, 0x81, 0xF0, 0xC0, 0x7C, 0x60, 0x1F, 0x30, 0x07, 0xDE, 0x01, 0xFF, - 0xC0, 0x7F, 0xF0, 0x1F, 0x3E, 0x07, 0xCF, 0xC1, 0xF1, 0xF8, 0x7C, 0x3E, - 0x1F, 0x07, 0xC7, 0xC1, 0xFB, 0xF9, 0xFF, 0xFC, 0xF9, 0xF3, 0xE7, 0xCF, - 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, - 0xE7, 0xCF, 0x9F, 0x7F, 0xFC, 0x7C, 0x1F, 0x0F, 0xBF, 0xCF, 0xF1, 0xF8, - 0xFF, 0x3F, 0x3E, 0x0F, 0x83, 0xE7, 0xC1, 0xF0, 0x7C, 0xF8, 0x3E, 0x0F, - 0x9F, 0x07, 0xC1, 0xF3, 0xE0, 0xF8, 0x3E, 0x7C, 0x1F, 0x07, 0xCF, 0x83, - 0xE0, 0xF9, 0xF0, 0x7C, 0x1F, 0x3E, 0x0F, 0x83, 0xE7, 0xC1, 0xF0, 0x7C, - 0xF8, 0x3E, 0x0F, 0x9F, 0x07, 0xC1, 0xF7, 0xF1, 0xFC, 0x7F, 0xFC, 0x7C, - 0x3E, 0xFF, 0x1F, 0xCF, 0xCF, 0x83, 0xE7, 0xC1, 0xF3, 0xE0, 0xF9, 0xF0, - 0x7C, 0xF8, 0x3E, 0x7C, 0x1F, 0x3E, 0x0F, 0x9F, 0x07, 0xCF, 0x83, 0xE7, - 0xC1, 0xF3, 0xE0, 0xF9, 0xF0, 0x7D, 0xFC, 0x7F, 0x07, 0xF0, 0x0F, 0xFE, - 0x0F, 0x8F, 0x8F, 0x87, 0xE7, 0xC1, 0xF7, 0xE0, 0xFF, 0xF0, 0x7F, 0xF8, - 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xEF, 0x83, 0xE7, 0xC1, 0xF1, - 0xF1, 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, 0xFE, 0x7C, 0x07, 0xDF, 0xE0, 0xFE, - 0x3E, 0x1F, 0x07, 0xE3, 0xE0, 0x7C, 0x7C, 0x0F, 0xCF, 0x81, 0xF9, 0xF0, - 0x3F, 0x3E, 0x07, 0xE7, 0xC0, 0xFC, 0xF8, 0x1F, 0x9F, 0x03, 0xE3, 0xE0, - 0xFC, 0x7E, 0x3F, 0x0F, 0xBF, 0xC1, 0xF3, 0xE0, 0x3E, 0x00, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, - 0x00, 0x07, 0xC1, 0x0F, 0xF9, 0x8F, 0xCD, 0xCF, 0xC3, 0xE7, 0xC1, 0xF7, - 0xE0, 0xFB, 0xF0, 0x7D, 0xF8, 0x3E, 0xFC, 0x1F, 0x7E, 0x0F, 0xBF, 0x07, - 0xDF, 0x83, 0xE7, 0xE1, 0xF1, 0xF1, 0xF8, 0x7F, 0x7C, 0x1F, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xF8, - 0x01, 0xFE, 0xFC, 0x73, 0xEF, 0xDF, 0xFE, 0xFC, 0xF7, 0xC3, 0xBE, 0x01, - 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, - 0x01, 0xF0, 0x1F, 0xE0, 0x1E, 0x23, 0xFE, 0x70, 0xEE, 0x06, 0xE0, 0x2F, - 0x80, 0xFF, 0x07, 0xFC, 0x3F, 0xE0, 0xFF, 0x81, 0xF8, 0x07, 0xC0, 0x7E, - 0x0E, 0xBF, 0xC8, 0xF8, 0x04, 0x03, 0x01, 0xC0, 0xF0, 0x7C, 0x3F, 0xEF, - 0xF9, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, - 0x7C, 0x5F, 0x37, 0xF8, 0xFE, 0x1E, 0x00, 0xFC, 0x7F, 0x1F, 0x07, 0xC7, - 0xC1, 0xF1, 0xF0, 0x7C, 0x7C, 0x1F, 0x1F, 0x07, 0xC7, 0xC1, 0xF1, 0xF0, - 0x7C, 0x7C, 0x1F, 0x1F, 0x07, 0xC7, 0xC1, 0xF1, 0xF0, 0x7C, 0x7C, 0x1F, - 0x1F, 0x8F, 0xC3, 0xFD, 0xFC, 0x7C, 0x60, 0xFF, 0x9F, 0xBF, 0x83, 0x0F, - 0x81, 0x87, 0xE0, 0x81, 0xF0, 0x40, 0xF8, 0x40, 0x3E, 0x20, 0x1F, 0x30, - 0x07, 0xD0, 0x03, 0xF8, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x0E, - 0x00, 0x07, 0x00, 0x01, 0x00, 0xFF, 0x3F, 0xCF, 0x7E, 0x1F, 0x06, 0x3E, - 0x0F, 0x06, 0x3E, 0x0F, 0x84, 0x1F, 0x0F, 0x8C, 0x1F, 0x1F, 0x88, 0x0F, - 0x17, 0xC8, 0x0F, 0x97, 0xD8, 0x0F, 0xB3, 0xD0, 0x07, 0xE3, 0xF0, 0x07, - 0xE3, 0xE0, 0x03, 0xC1, 0xE0, 0x03, 0xC1, 0xE0, 0x03, 0x81, 0xC0, 0x01, - 0x80, 0xC0, 0x01, 0x80, 0x80, 0xFF, 0x3F, 0x7E, 0x0C, 0x3E, 0x08, 0x3F, - 0x18, 0x1F, 0x30, 0x0F, 0xE0, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xE0, 0x03, - 0xF0, 0x05, 0xF8, 0x0C, 0xF8, 0x18, 0xFC, 0x30, 0x7E, 0x70, 0x7E, 0xFC, - 0xFF, 0xFF, 0x3F, 0x7E, 0x0C, 0x7C, 0x0C, 0x3E, 0x08, 0x3E, 0x08, 0x1E, - 0x18, 0x1F, 0x10, 0x0F, 0x30, 0x0F, 0xA0, 0x0F, 0xA0, 0x07, 0xE0, 0x07, - 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x01, - 0x00, 0x61, 0x00, 0xF2, 0x00, 0xF6, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x7F, - 0xFD, 0xFF, 0xF7, 0x0F, 0xD0, 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x3E, 0x01, - 0xF0, 0x0F, 0xC0, 0x3E, 0x01, 0xF8, 0x0F, 0xC1, 0x3E, 0x05, 0xF8, 0x7F, - 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xF8, 0x3E, 0x07, 0x80, 0xF0, 0x1E, 0x03, - 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0x87, - 0x80, 0x1E, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, - 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x0F, 0x80, 0x78, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0x0F, 0x80, 0xF0, - 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, - 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x0F, 0x0F, 0x03, 0xC0, 0x78, 0x0F, 0x01, - 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x03, 0xE0, - 0xF8, 0x3C, 0x00, 0x3E, 0x00, 0x7F, 0xC6, 0xFF, 0xFF, 0x61, 0xFE, 0x00, - 0x7C}; - -const GFXglyph FreeSerifBold18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 6, 24, 12, 3, -23}, // 0x21 '!' - {18, 13, 10, 19, 3, -23}, // 0x22 '"' - {35, 18, 24, 17, 0, -23}, // 0x23 '#' - {89, 15, 28, 17, 1, -25}, // 0x24 '$' - {142, 27, 24, 35, 4, -23}, // 0x25 '%' - {223, 26, 25, 29, 2, -23}, // 0x26 '&' - {305, 4, 10, 10, 3, -23}, // 0x27 ''' - {310, 9, 30, 12, 2, -23}, // 0x28 '(' - {344, 9, 30, 12, 1, -23}, // 0x29 ')' - {378, 14, 15, 18, 2, -23}, // 0x2A '*' - {405, 19, 19, 24, 2, -17}, // 0x2B '+' - {451, 6, 12, 9, 1, -5}, // 0x2C ',' - {460, 8, 4, 12, 2, -9}, // 0x2D '-' - {464, 6, 6, 9, 1, -5}, // 0x2E '.' - {469, 11, 25, 10, -1, -23}, // 0x2F '/' - {504, 16, 24, 18, 1, -23}, // 0x30 '0' - {552, 12, 24, 18, 3, -23}, // 0x31 '1' - {588, 16, 24, 17, 1, -23}, // 0x32 '2' - {636, 16, 24, 18, 0, -23}, // 0x33 '3' - {684, 15, 24, 18, 1, -23}, // 0x34 '4' - {729, 15, 24, 18, 1, -23}, // 0x35 '5' - {774, 16, 24, 18, 1, -23}, // 0x36 '6' - {822, 16, 24, 17, 1, -23}, // 0x37 '7' - {870, 16, 24, 17, 1, -23}, // 0x38 '8' - {918, 16, 24, 18, 1, -23}, // 0x39 '9' - {966, 6, 16, 12, 3, -15}, // 0x3A ':' - {978, 7, 22, 12, 2, -15}, // 0x3B ';' - {998, 19, 20, 24, 2, -18}, // 0x3C '<' - {1046, 19, 12, 24, 2, -14}, // 0x3D '=' - {1075, 19, 20, 24, 3, -18}, // 0x3E '>' - {1123, 14, 24, 18, 2, -23}, // 0x3F '?' - {1165, 24, 25, 33, 4, -23}, // 0x40 '@' - {1240, 24, 24, 25, 1, -23}, // 0x41 'A' - {1312, 21, 24, 23, 1, -23}, // 0x42 'B' - {1375, 23, 25, 25, 1, -23}, // 0x43 'C' - {1447, 23, 24, 26, 1, -23}, // 0x44 'D' - {1516, 21, 24, 23, 2, -23}, // 0x45 'E' - {1579, 19, 24, 22, 2, -23}, // 0x46 'F' - {1636, 25, 25, 27, 1, -23}, // 0x47 'G' - {1715, 24, 24, 27, 2, -23}, // 0x48 'H' - {1787, 11, 24, 14, 2, -23}, // 0x49 'I' - {1820, 16, 27, 18, 0, -23}, // 0x4A 'J' - {1874, 25, 24, 27, 2, -23}, // 0x4B 'K' - {1949, 21, 24, 23, 2, -23}, // 0x4C 'L' - {2012, 31, 24, 33, 1, -23}, // 0x4D 'M' - {2105, 23, 24, 25, 1, -23}, // 0x4E 'N' - {2174, 25, 25, 27, 1, -23}, // 0x4F 'O' - {2253, 19, 24, 22, 2, -23}, // 0x50 'P' - {2310, 25, 30, 27, 1, -23}, // 0x51 'Q' - {2404, 23, 24, 25, 2, -23}, // 0x52 'R' - {2473, 16, 25, 20, 2, -23}, // 0x53 'S' - {2523, 21, 24, 23, 1, -23}, // 0x54 'T' - {2586, 22, 25, 25, 2, -23}, // 0x55 'U' - {2655, 24, 24, 25, 0, -23}, // 0x56 'V' - {2727, 34, 25, 34, 0, -23}, // 0x57 'W' - {2834, 24, 24, 25, 1, -23}, // 0x58 'X' - {2906, 24, 24, 25, 1, -23}, // 0x59 'Y' - {2978, 21, 24, 23, 1, -23}, // 0x5A 'Z' - {3041, 8, 29, 12, 2, -23}, // 0x5B '[' - {3070, 11, 25, 10, -1, -23}, // 0x5C '\' - {3105, 8, 29, 12, 2, -23}, // 0x5D ']' - {3134, 15, 13, 20, 3, -23}, // 0x5E '^' - {3159, 18, 3, 17, 0, 3}, // 0x5F '_' - {3166, 8, 6, 12, 0, -23}, // 0x60 '`' - {3172, 16, 16, 18, 1, -15}, // 0x61 'a' - {3204, 18, 24, 19, 1, -23}, // 0x62 'b' - {3258, 14, 16, 15, 1, -15}, // 0x63 'c' - {3286, 18, 24, 19, 1, -23}, // 0x64 'd' - {3340, 14, 16, 16, 1, -15}, // 0x65 'e' - {3368, 11, 24, 14, 2, -23}, // 0x66 'f' - {3401, 17, 23, 17, 1, -15}, // 0x67 'g' - {3450, 17, 24, 19, 1, -23}, // 0x68 'h' - {3501, 7, 24, 10, 2, -23}, // 0x69 'i' - {3522, 11, 31, 14, 0, -23}, // 0x6A 'j' - {3565, 18, 24, 19, 1, -23}, // 0x6B 'k' - {3619, 7, 24, 10, 1, -23}, // 0x6C 'l' - {3640, 27, 16, 29, 1, -15}, // 0x6D 'm' - {3694, 17, 16, 19, 1, -15}, // 0x6E 'n' - {3728, 17, 16, 18, 1, -15}, // 0x6F 'o' - {3762, 19, 23, 19, 0, -15}, // 0x70 'p' - {3817, 17, 23, 19, 1, -15}, // 0x71 'q' - {3866, 13, 16, 15, 1, -15}, // 0x72 'r' - {3892, 12, 16, 14, 1, -15}, // 0x73 's' - {3916, 10, 21, 12, 1, -20}, // 0x74 't' - {3943, 18, 16, 20, 1, -15}, // 0x75 'u' - {3979, 17, 16, 17, 0, -15}, // 0x76 'v' - {4013, 24, 16, 25, 0, -15}, // 0x77 'w' - {4061, 16, 16, 18, 1, -15}, // 0x78 'x' - {4093, 16, 23, 17, 0, -15}, // 0x79 'y' - {4139, 14, 16, 16, 0, -15}, // 0x7A 'z' - {4167, 11, 31, 14, 1, -24}, // 0x7B '{' - {4210, 3, 25, 8, 2, -23}, // 0x7C '|' - {4220, 11, 31, 14, 3, -24}, // 0x7D '}' - {4263, 16, 5, 18, 1, -11}}; // 0x7E '~' - -const GFXfont FreeSerifBold18pt7b PROGMEM = { - (uint8_t *)FreeSerifBold18pt7bBitmaps, - (GFXglyph *)FreeSerifBold18pt7bGlyphs, 0x20, 0x7E, 42}; - -// Approx. 4945 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold24pt7b.h deleted file mode 100644 index e6681f5..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold24pt7b.h +++ /dev/null @@ -1,761 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBold24pt7bBitmaps[] PROGMEM = { - 0x3C, 0x7E, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x7E, 0x7C, 0x7C, - 0x3C, 0x3C, 0x38, 0x38, 0x38, 0x38, 0x18, 0x10, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x70, 0x07, - 0x7C, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xC0, - 0x3E, 0xE0, 0x0E, 0x70, 0x07, 0x38, 0x03, 0x9C, 0x01, 0xC4, 0x00, 0xE2, - 0x00, 0x20, 0x00, 0xF0, 0x70, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC0, 0x0F, - 0x07, 0x80, 0x1E, 0x0F, 0x00, 0x3C, 0x1E, 0x00, 0x78, 0x3C, 0x00, 0xF0, - 0x78, 0x01, 0xC0, 0xE0, 0x03, 0x81, 0xC0, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xE0, 0x78, 0x3C, 0x00, 0xF0, 0x78, 0x01, 0xC0, 0xE0, - 0x03, 0x81, 0xC0, 0x0F, 0x07, 0x80, 0x1E, 0x0F, 0x00, 0x3C, 0x1E, 0x0F, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0x03, 0x81, 0xC0, 0x0F, - 0x07, 0x80, 0x1E, 0x0F, 0x00, 0x3C, 0x1E, 0x00, 0x78, 0x3C, 0x00, 0xF0, - 0x78, 0x01, 0xE0, 0xE0, 0x03, 0x81, 0xC0, 0x07, 0x07, 0x80, 0x1E, 0x0F, - 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, - 0x7F, 0xF0, 0x0F, 0x37, 0xE0, 0xE1, 0x8F, 0x8E, 0x0C, 0x3C, 0x70, 0x60, - 0xE7, 0x83, 0x03, 0x3C, 0x18, 0x19, 0xF0, 0xC0, 0x4F, 0xC6, 0x02, 0x7F, - 0xF0, 0x03, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, - 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x1F, 0xFE, 0x00, 0x3F, 0xF8, 0x01, - 0xFF, 0xC0, 0x0C, 0xFF, 0x00, 0x63, 0xFA, 0x03, 0x0F, 0xD0, 0x18, 0x3E, - 0x80, 0xC1, 0xF6, 0x06, 0x0F, 0xB8, 0x30, 0x79, 0xC1, 0x87, 0xCF, 0x0C, - 0x3C, 0x7E, 0x67, 0xC0, 0xFF, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0xC0, 0x00, - 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, - 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x0F, 0xF0, 0x03, 0x80, 0x07, 0xE7, 0x03, - 0xE0, 0x01, 0xF8, 0x7F, 0xFC, 0x00, 0x3E, 0x07, 0xF7, 0x00, 0x0F, 0xC0, - 0x80, 0xE0, 0x03, 0xF0, 0x10, 0x38, 0x00, 0x7E, 0x02, 0x07, 0x00, 0x0F, - 0x80, 0x41, 0xC0, 0x03, 0xF0, 0x10, 0x30, 0x00, 0x7E, 0x02, 0x0E, 0x00, - 0x0F, 0x80, 0xC1, 0x80, 0x01, 0xF0, 0x10, 0x70, 0x00, 0x3E, 0x06, 0x1C, - 0x00, 0x07, 0xC1, 0x83, 0x80, 0x00, 0x7C, 0x60, 0xE0, 0x1F, 0x07, 0xF8, - 0x18, 0x0F, 0xF8, 0x7C, 0x07, 0x07, 0xF1, 0x00, 0x00, 0xC1, 0xF8, 0x10, - 0x00, 0x38, 0x3F, 0x02, 0x00, 0x06, 0x0F, 0xC0, 0x40, 0x01, 0xC3, 0xF0, - 0x08, 0x00, 0x30, 0x7E, 0x01, 0x00, 0x0E, 0x1F, 0x80, 0x40, 0x03, 0x83, - 0xF0, 0x08, 0x00, 0x60, 0x7E, 0x01, 0x00, 0x1C, 0x0F, 0x80, 0x40, 0x03, - 0x01, 0xF0, 0x18, 0x00, 0xE0, 0x3E, 0x02, 0x00, 0x18, 0x03, 0xC0, 0xC0, - 0x07, 0x00, 0x7C, 0x70, 0x00, 0xC0, 0x07, 0xFC, 0x00, 0x38, 0x00, 0x7E, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x07, 0x8F, - 0xE0, 0x00, 0x03, 0xC1, 0xF8, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x7C, - 0x07, 0xC0, 0x00, 0x1F, 0x01, 0xF0, 0x00, 0x07, 0xE0, 0x7C, 0x00, 0x01, - 0xF8, 0x1E, 0x00, 0x00, 0x7F, 0x07, 0x80, 0x00, 0x1F, 0xE3, 0x80, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x3F, - 0xF0, 0x07, 0xFC, 0x01, 0xF0, 0x07, 0xFF, 0x00, 0x78, 0x07, 0xBF, 0xE0, - 0x1C, 0x03, 0x87, 0xFC, 0x07, 0x01, 0xE0, 0xFF, 0x81, 0x80, 0xF0, 0x3F, - 0xE0, 0xC0, 0x7C, 0x07, 0xFC, 0x30, 0x1F, 0x00, 0xFF, 0x98, 0x0F, 0xC0, - 0x3F, 0xFC, 0x03, 0xF0, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x3F, - 0x80, 0x3F, 0xF0, 0x0F, 0xF0, 0x07, 0xFE, 0x03, 0xFC, 0x00, 0xFF, 0x81, - 0x7F, 0x80, 0x3F, 0xF8, 0xDF, 0xF0, 0x1F, 0xFF, 0xE3, 0xFF, 0x0E, 0xFF, - 0xF8, 0xFF, 0xFE, 0x1F, 0xFC, 0x0F, 0xFE, 0x03, 0xFE, 0x00, 0xFE, 0x00, - 0x3E, 0x00, 0x77, 0xFF, 0xFF, 0xFF, 0xEE, 0x73, 0x9C, 0xE2, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x60, 0x1C, 0x03, 0x80, 0x70, 0x06, 0x00, 0xE0, 0x1C, - 0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x78, 0x07, 0x80, 0x78, 0x07, 0x80, 0xF8, - 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, - 0x0F, 0x80, 0x78, 0x07, 0x80, 0x78, 0x03, 0xC0, 0x3C, 0x01, 0xC0, 0x1C, - 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x03, 0x00, - 0x10, 0x00, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1E, 0x01, 0xE0, - 0x1E, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, - 0x38, 0x03, 0x80, 0x70, 0x07, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x0C, - 0x00, 0x80, 0x00, 0x01, 0xC0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x3C, 0x78, 0xEF, 0x9C, 0x7B, 0xF7, 0x3F, 0xFE, 0xDF, 0x8F, - 0xFF, 0xC0, 0x7F, 0x00, 0x3F, 0xC0, 0x7E, 0xBF, 0x3F, 0x77, 0xEF, 0x9C, - 0xFF, 0xC7, 0x1E, 0x63, 0xE3, 0x80, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x01, 0xC0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x80, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x3C, 0x7E, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x07, 0x06, 0x06, 0x0C, - 0x18, 0x30, 0x60, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, - 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x00, 0x1E, 0x00, 0x7C, 0x00, - 0xF0, 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0xF0, - 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0xF0, 0x01, - 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0xE0, - 0x03, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xE0, 0x03, - 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0xFC, 0x00, - 0x0F, 0x3C, 0x00, 0x78, 0x78, 0x03, 0xE1, 0xF0, 0x1F, 0x03, 0xE0, 0x7C, - 0x0F, 0x83, 0xF0, 0x3F, 0x0F, 0xC0, 0xFC, 0x7F, 0x03, 0xF9, 0xFC, 0x0F, - 0xE7, 0xF0, 0x3F, 0xBF, 0xC0, 0xFE, 0xFF, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, - 0xF0, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, - 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x3F, - 0x9F, 0xC0, 0xFE, 0x7F, 0x03, 0xF9, 0xFC, 0x0F, 0xE3, 0xF0, 0x3F, 0x0F, - 0xC0, 0xFC, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x80, 0xF8, 0x7C, 0x01, 0xE1, - 0xE0, 0x03, 0xCF, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x18, 0x00, 0x1E, 0x00, - 0x1F, 0x80, 0x1F, 0xE0, 0x1F, 0xF8, 0x1D, 0xFE, 0x00, 0x3F, 0x80, 0x0F, - 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, - 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, - 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, - 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, - 0x00, 0xFE, 0x00, 0x7F, 0x80, 0x3F, 0xF8, 0xFF, 0xFF, 0xC0, 0x00, 0xFC, - 0x00, 0x1F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0xFF, 0x81, 0xFF, 0xFC, 0x1C, - 0x1F, 0xF1, 0xC0, 0x7F, 0x8C, 0x01, 0xFC, 0x40, 0x0F, 0xE0, 0x00, 0x3F, - 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, - 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, - 0x00, 0x70, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x38, - 0x01, 0x03, 0x80, 0x18, 0x38, 0x00, 0x81, 0x80, 0x1C, 0x1F, 0xFF, 0xE1, - 0xFF, 0xFF, 0x1F, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, - 0xE0, 0x00, 0xFE, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0, 0x30, 0xFF, 0xC2, - 0x01, 0xFE, 0x30, 0x0F, 0xF1, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, - 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, - 0x1F, 0xC0, 0x03, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xF0, 0x00, 0xFF, - 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0x80, 0x00, 0x3C, - 0x00, 0x01, 0xC7, 0x80, 0x0E, 0x7F, 0x00, 0xE3, 0xFC, 0x06, 0x1F, 0xF8, - 0xE0, 0x7F, 0xFC, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, - 0xFF, 0x00, 0x0D, 0xF8, 0x00, 0xEF, 0xC0, 0x06, 0x7E, 0x00, 0x63, 0xF0, - 0x07, 0x1F, 0x80, 0x30, 0xFC, 0x03, 0x07, 0xE0, 0x38, 0x3F, 0x03, 0x81, - 0xF8, 0x18, 0x0F, 0xC1, 0xC0, 0x7E, 0x1C, 0x03, 0xF0, 0xC0, 0x1F, 0x8E, - 0x00, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x07, 0xFF, - 0xF0, 0x7F, 0xFF, 0x0F, 0xFF, 0xE0, 0xFF, 0xFE, 0x0F, 0xFF, 0xE1, 0xFF, - 0xFC, 0x18, 0x00, 0x01, 0x80, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x3F, - 0x80, 0x03, 0xFF, 0x80, 0x7F, 0xFE, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0x87, - 0xFF, 0xFC, 0x7F, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x7E, - 0x00, 0x03, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, - 0xC0, 0x00, 0x0C, 0x78, 0x00, 0x8F, 0xE0, 0x18, 0xFF, 0x87, 0x0F, 0xFF, - 0xE0, 0x7F, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x38, 0x00, 0x1F, 0x00, - 0x07, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, - 0x00, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x7F, - 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xFF, 0x01, 0xFF, 0xFE, 0x1F, 0xF1, 0xFC, - 0xFF, 0x07, 0xE7, 0xF8, 0x3F, 0xBF, 0xC1, 0xFD, 0xFE, 0x07, 0xFF, 0xF0, - 0x3F, 0xFF, 0x81, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x7F, 0xFF, 0x03, 0xFB, - 0xF8, 0x1F, 0xDF, 0xC0, 0xFE, 0xFE, 0x07, 0xE3, 0xF0, 0x3F, 0x1F, 0xC1, - 0xF0, 0x7E, 0x0F, 0x01, 0xF0, 0xF8, 0x03, 0xC7, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE7, 0xFF, - 0xFF, 0x3F, 0xFF, 0xF9, 0x80, 0x07, 0x98, 0x00, 0x3C, 0xC0, 0x03, 0xE4, - 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, - 0xC0, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x01, 0xF0, - 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0xC0, 0x00, 0x3C, 0x00, 0x01, - 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, - 0x01, 0xFE, 0x00, 0x38, 0x7C, 0x07, 0x80, 0xF0, 0x78, 0x07, 0xC3, 0xC0, - 0x1F, 0x3E, 0x00, 0xF9, 0xF0, 0x07, 0xCF, 0xC0, 0x3E, 0x7E, 0x01, 0xF3, - 0xF8, 0x0F, 0x1F, 0xE0, 0xF8, 0x7F, 0xC7, 0x83, 0xFF, 0xF0, 0x0F, 0xFE, - 0x00, 0x7F, 0xFC, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x1F, 0xFF, 0x03, - 0xBF, 0xFC, 0x7C, 0x7F, 0xE7, 0xC1, 0xFF, 0x3E, 0x07, 0xFF, 0xE0, 0x1F, - 0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0, - 0x03, 0xE7, 0x80, 0x1F, 0x3E, 0x01, 0xF0, 0xF8, 0x0F, 0x83, 0xE1, 0xF8, - 0x0F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x1C, 0x3C, 0x00, - 0xF0, 0x78, 0x07, 0x81, 0xF8, 0x3E, 0x07, 0xE1, 0xF8, 0x0F, 0xC7, 0xE0, - 0x3F, 0x3F, 0x80, 0xFE, 0xFE, 0x03, 0xFB, 0xF8, 0x0F, 0xFF, 0xE0, 0x3F, - 0xFF, 0x80, 0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x3F, 0xDF, - 0xC0, 0xFF, 0x7F, 0x03, 0xFC, 0xFC, 0x0F, 0xF3, 0xFC, 0x7F, 0x83, 0xFF, - 0xFE, 0x07, 0xF7, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xF8, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xC0, 0x00, - 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF, - 0xFF, 0xFF, 0x7E, 0x3C, 0x3C, 0x3F, 0x3F, 0xDF, 0xEF, 0xF7, 0xF9, 0xF8, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7F, 0x7F, - 0xBF, 0xFF, 0xFF, 0xFB, 0xFC, 0xFE, 0x07, 0x03, 0x01, 0x81, 0x81, 0x81, - 0x83, 0x81, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x01, - 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, - 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, - 0xC0, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 0xC0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x1F, - 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, - 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x0F, - 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x07, 0xFF, 0x03, 0x87, 0xE1, 0xC0, 0xFC, 0xF0, 0x3F, - 0xBE, 0x07, 0xEF, 0xC1, 0xFF, 0xF0, 0x7F, 0xFC, 0x1F, 0xDF, 0x07, 0xF7, - 0x81, 0xFC, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x03, - 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x18, 0x00, 0x04, 0x00, 0x01, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x00, 0x1F, 0x80, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0xFF, 0x00, 0x3F, - 0xC0, 0x07, 0xE0, 0x00, 0xF0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x1F, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x03, 0x80, 0x3C, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x30, 0x3E, - 0x00, 0x00, 0x0C, 0x3E, 0x00, 0x3C, 0x37, 0x1F, 0x00, 0x7E, 0xF1, 0x9F, - 0x00, 0x7C, 0xF8, 0xCF, 0x80, 0x78, 0x7C, 0x37, 0xC0, 0x7C, 0x3C, 0x1F, - 0xC0, 0x3C, 0x1E, 0x0F, 0xE0, 0x3C, 0x0F, 0x07, 0xF0, 0x3E, 0x0F, 0x03, - 0xF8, 0x1E, 0x07, 0x81, 0xFC, 0x0F, 0x03, 0xC0, 0xFE, 0x0F, 0x03, 0xE0, - 0x7F, 0x07, 0x81, 0xE0, 0x6F, 0x83, 0xC1, 0xF0, 0x37, 0xC1, 0xE1, 0x78, - 0x31, 0xF0, 0xF9, 0xBC, 0x18, 0xF8, 0x3F, 0x9E, 0x38, 0x3C, 0x0F, 0x0F, - 0xF8, 0x1F, 0x00, 0x01, 0xF0, 0x07, 0x80, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0xC0, 0x01, 0xF8, 0x03, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x37, 0xF8, 0x00, 0x00, 0x33, 0xF8, 0x00, 0x00, 0x33, 0xFC, 0x00, 0x00, - 0x61, 0xFC, 0x00, 0x00, 0x61, 0xFE, 0x00, 0x00, 0xC1, 0xFE, 0x00, 0x00, - 0xC0, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x01, 0x80, 0x7F, 0x00, 0x01, - 0x80, 0x7F, 0x80, 0x03, 0x80, 0x7F, 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x03, - 0xFF, 0xFF, 0xC0, 0x07, 0x00, 0x3F, 0xC0, 0x06, 0x00, 0x1F, 0xE0, 0x0E, - 0x00, 0x1F, 0xE0, 0x0C, 0x00, 0x0F, 0xF0, 0x0C, 0x00, 0x0F, 0xF0, 0x1C, - 0x00, 0x0F, 0xF8, 0x1C, 0x00, 0x0F, 0xF8, 0x7E, 0x00, 0x0F, 0xFC, 0xFF, - 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x1F, 0xF8, - 0x7F, 0x00, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x01, 0xFE, - 0x0F, 0xF0, 0x1F, 0xE0, 0xFF, 0x01, 0xFE, 0x0F, 0xF0, 0x1F, 0xE0, 0xFF, - 0x01, 0xFE, 0x0F, 0xF0, 0x1F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, - 0x00, 0xFF, 0x0F, 0xC0, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x0F, - 0xF0, 0xFF, 0x00, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x1F, 0xE0, 0xFF, 0x01, - 0xFE, 0x0F, 0xF0, 0x0F, 0xF0, 0xFF, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0xF0, - 0xFF, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0xF0, 0xFF, 0x00, 0xFF, 0x0F, 0xF0, - 0x0F, 0xE0, 0xFF, 0x01, 0xFE, 0x0F, 0xF0, 0x1F, 0xC0, 0xFF, 0x87, 0xF0, - 0x3F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x08, 0x01, - 0xFF, 0xF0, 0x60, 0x0F, 0xC1, 0xF9, 0x80, 0xFC, 0x01, 0xFE, 0x07, 0xE0, - 0x01, 0xF8, 0x3F, 0x00, 0x03, 0xE1, 0xFC, 0x00, 0x07, 0x87, 0xE0, 0x00, - 0x1E, 0x3F, 0x80, 0x00, 0x38, 0xFE, 0x00, 0x00, 0x67, 0xF8, 0x00, 0x01, - 0x9F, 0xC0, 0x00, 0x02, 0x7F, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x87, 0xF0, 0x00, 0x07, 0x0F, 0xE0, 0x00, 0x38, 0x1F, 0x80, 0x01, 0xC0, - 0x3F, 0x00, 0x1E, 0x00, 0x7F, 0x01, 0xE0, 0x00, 0x7F, 0xFF, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x0F, - 0xF8, 0x7F, 0x80, 0x0F, 0xF0, 0x1F, 0xC0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, - 0xF0, 0x07, 0xF0, 0x0F, 0xF0, 0x03, 0xF8, 0x0F, 0xF0, 0x03, 0xFC, 0x0F, - 0xF0, 0x01, 0xFC, 0x0F, 0xF0, 0x01, 0xFE, 0x0F, 0xF0, 0x01, 0xFE, 0x0F, - 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, - 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, - 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0xFF, 0x0F, - 0xF0, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, 0xF0, 0x01, 0xFE, 0x0F, - 0xF0, 0x01, 0xFC, 0x0F, 0xF0, 0x01, 0xFC, 0x0F, 0xF0, 0x03, 0xF8, 0x0F, - 0xF0, 0x03, 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xC0, 0x0F, - 0xF8, 0x3F, 0x80, 0x1F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, - 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFC, 0x1F, 0xE0, 0x1F, 0xC1, 0xFE, 0x00, - 0x3C, 0x1F, 0xE0, 0x01, 0xC1, 0xFE, 0x00, 0x0C, 0x1F, 0xE0, 0x00, 0xC1, - 0xFE, 0x00, 0x04, 0x1F, 0xE0, 0x20, 0x41, 0xFE, 0x02, 0x00, 0x1F, 0xE0, - 0x60, 0x01, 0xFE, 0x06, 0x00, 0x1F, 0xE0, 0xE0, 0x01, 0xFE, 0x1E, 0x00, - 0x1F, 0xFF, 0xE0, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xE3, 0xE0, 0x01, 0xFE, - 0x0E, 0x00, 0x1F, 0xE0, 0x60, 0x01, 0xFE, 0x06, 0x00, 0x1F, 0xE0, 0x20, - 0x01, 0xFE, 0x02, 0x00, 0x1F, 0xE0, 0x00, 0x11, 0xFE, 0x00, 0x03, 0x1F, - 0xE0, 0x00, 0x71, 0xFE, 0x00, 0x07, 0x1F, 0xE0, 0x00, 0xE1, 0xFE, 0x00, - 0x1E, 0x1F, 0xE0, 0x03, 0xE3, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xC7, 0xFC, 0x07, - 0xE3, 0xFC, 0x00, 0xF1, 0xFE, 0x00, 0x38, 0xFF, 0x00, 0x0C, 0x7F, 0x80, - 0x06, 0x3F, 0xC0, 0x01, 0x1F, 0xE0, 0x20, 0x8F, 0xF0, 0x10, 0x07, 0xF8, - 0x18, 0x03, 0xFC, 0x0C, 0x01, 0xFE, 0x0E, 0x00, 0xFF, 0x1F, 0x00, 0x7F, - 0xFF, 0x80, 0x3F, 0xFF, 0xC0, 0x1F, 0xE3, 0xE0, 0x0F, 0xF0, 0x70, 0x07, - 0xF8, 0x18, 0x03, 0xFC, 0x0C, 0x01, 0xFE, 0x02, 0x00, 0xFF, 0x01, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, - 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x08, 0x00, - 0x3F, 0xFE, 0x0C, 0x00, 0x3F, 0x07, 0xC6, 0x00, 0x7E, 0x00, 0xFF, 0x00, - 0x7E, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x07, 0xC0, 0x7F, 0x00, 0x01, 0xE0, - 0x3F, 0x00, 0x00, 0x70, 0x3F, 0x80, 0x00, 0x38, 0x1F, 0xC0, 0x00, 0x0C, - 0x1F, 0xE0, 0x00, 0x06, 0x0F, 0xE0, 0x00, 0x01, 0x07, 0xF0, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x00, - 0x3F, 0xF1, 0xFC, 0x00, 0x0F, 0xF0, 0xFF, 0x00, 0x07, 0xF8, 0x7F, 0x80, - 0x03, 0xFC, 0x1F, 0xC0, 0x01, 0xFE, 0x0F, 0xE0, 0x00, 0xFF, 0x03, 0xF8, - 0x00, 0x7F, 0x80, 0xFC, 0x00, 0x3F, 0xC0, 0x3F, 0x00, 0x1F, 0xE0, 0x0F, - 0xC0, 0x0F, 0xF0, 0x03, 0xF8, 0x1F, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xFC, 0x1F, 0xFF, 0x9F, 0xF8, 0x03, 0xFF, - 0x07, 0xF8, 0x00, 0xFF, 0x03, 0xFC, 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x3F, - 0xC0, 0xFF, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x0F, 0xF0, 0x3F, 0xC0, 0x07, - 0xF8, 0x1F, 0xE0, 0x03, 0xFC, 0x0F, 0xF0, 0x01, 0xFE, 0x07, 0xF8, 0x00, - 0xFF, 0x03, 0xFC, 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x3F, 0xC0, 0xFF, 0x00, - 0x1F, 0xE0, 0x7F, 0x80, 0x0F, 0xF0, 0x3F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, - 0xFF, 0xFC, 0x0F, 0xF0, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0xFF, 0x03, 0xFC, - 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x3F, 0xC0, 0xFF, 0x00, 0x1F, 0xE0, 0x7F, - 0x80, 0x0F, 0xF0, 0x3F, 0xC0, 0x07, 0xF8, 0x1F, 0xE0, 0x03, 0xFC, 0x0F, - 0xF0, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0xFF, 0x03, 0xFC, 0x00, 0x7F, 0x81, - 0xFE, 0x00, 0x3F, 0xC0, 0xFF, 0x00, 0x1F, 0xE0, 0xFF, 0xC0, 0x1F, 0xF9, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFE, 0x7F, 0xE0, 0x7F, 0x80, 0xFF, 0x01, - 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, - 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, - 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC, - 0x0F, 0xFC, 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, - 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, - 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, - 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x78, 0x1F, 0xE3, - 0xF0, 0x7F, 0x8F, 0xC1, 0xFC, 0x3F, 0x07, 0xF0, 0xFC, 0x1F, 0xC1, 0xE0, - 0xFE, 0x07, 0xC3, 0xF0, 0x0F, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0xFF, 0xFC, - 0x1F, 0xFF, 0x0F, 0xFC, 0x00, 0xFF, 0x01, 0xFE, 0x00, 0x1E, 0x00, 0x7F, - 0x80, 0x07, 0x00, 0x1F, 0xE0, 0x03, 0x80, 0x07, 0xF8, 0x01, 0xC0, 0x01, - 0xFE, 0x00, 0xE0, 0x00, 0x7F, 0x80, 0x70, 0x00, 0x1F, 0xE0, 0x38, 0x00, - 0x07, 0xF8, 0x1C, 0x00, 0x01, 0xFE, 0x0E, 0x00, 0x00, 0x7F, 0x87, 0x00, - 0x00, 0x1F, 0xE3, 0xC0, 0x00, 0x07, 0xF9, 0xF8, 0x00, 0x01, 0xFE, 0xFE, - 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x07, 0xFD, - 0xFF, 0x00, 0x01, 0xFE, 0x7F, 0xE0, 0x00, 0x7F, 0x8F, 0xF8, 0x00, 0x1F, - 0xE1, 0xFF, 0x00, 0x07, 0xF8, 0x3F, 0xE0, 0x01, 0xFE, 0x07, 0xFC, 0x00, - 0x7F, 0x81, 0xFF, 0x80, 0x1F, 0xE0, 0x3F, 0xE0, 0x07, 0xF8, 0x07, 0xFC, - 0x01, 0xFE, 0x00, 0xFF, 0x80, 0x7F, 0x80, 0x1F, 0xF0, 0x1F, 0xE0, 0x07, - 0xFE, 0x07, 0xF8, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x3F, 0xF3, 0xFF, 0xF0, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x01, 0x1F, 0xE0, 0x00, 0x31, 0xFE, - 0x00, 0x03, 0x1F, 0xE0, 0x00, 0x71, 0xFE, 0x00, 0x07, 0x1F, 0xE0, 0x00, - 0xE1, 0xFE, 0x00, 0x1E, 0x1F, 0xE0, 0x07, 0xE3, 0xFF, 0x01, 0xFE, 0xFF, - 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xE1, - 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x1F, 0xE0, 0x00, 0x0F, 0xFC, 0x03, 0xFC, - 0x00, 0x01, 0xFF, 0x80, 0x7F, 0xC0, 0x00, 0x2F, 0xF0, 0x0B, 0xF8, 0x00, - 0x0D, 0xFE, 0x01, 0x7F, 0x80, 0x01, 0xBF, 0xC0, 0x27, 0xF0, 0x00, 0x67, - 0xF8, 0x04, 0xFF, 0x00, 0x0C, 0xFF, 0x00, 0x8F, 0xE0, 0x03, 0x1F, 0xE0, - 0x11, 0xFE, 0x00, 0x63, 0xFC, 0x02, 0x3F, 0xC0, 0x08, 0x7F, 0x80, 0x43, - 0xF8, 0x03, 0x0F, 0xF0, 0x08, 0x7F, 0x80, 0x61, 0xFE, 0x01, 0x07, 0xF0, - 0x18, 0x3F, 0xC0, 0x20, 0xFF, 0x03, 0x07, 0xF8, 0x04, 0x0F, 0xE0, 0xC0, - 0xFF, 0x00, 0x81, 0xFE, 0x18, 0x1F, 0xE0, 0x10, 0x3F, 0xC6, 0x03, 0xFC, - 0x02, 0x03, 0xF8, 0xC0, 0x7F, 0x80, 0x40, 0x7F, 0x98, 0x0F, 0xF0, 0x08, - 0x07, 0xF6, 0x01, 0xFE, 0x01, 0x00, 0xFF, 0xC0, 0x3F, 0xC0, 0x20, 0x0F, - 0xF0, 0x07, 0xF8, 0x04, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0x80, 0x1F, 0x80, - 0x1F, 0xE0, 0x10, 0x03, 0xF0, 0x03, 0xFC, 0x02, 0x00, 0x7E, 0x00, 0x7F, - 0x80, 0x40, 0x07, 0x80, 0x0F, 0xF0, 0x0C, 0x00, 0xF0, 0x01, 0xFE, 0x07, - 0xC0, 0x0C, 0x00, 0x7F, 0xE7, 0xFF, 0x01, 0x80, 0x3F, 0xFF, 0xFF, 0xC0, - 0x03, 0xFE, 0xFF, 0xC0, 0x01, 0xF0, 0xFF, 0xC0, 0x01, 0xC0, 0xFF, 0xC0, - 0x01, 0x80, 0xFF, 0x80, 0x03, 0x01, 0xFF, 0x80, 0x06, 0x03, 0xFF, 0x80, - 0x0C, 0x07, 0xFF, 0x80, 0x18, 0x0D, 0xFF, 0x80, 0x30, 0x19, 0xFF, 0x00, - 0x60, 0x31, 0xFF, 0x00, 0xC0, 0x61, 0xFF, 0x01, 0x80, 0xC1, 0xFF, 0x03, - 0x01, 0x83, 0xFF, 0x06, 0x03, 0x03, 0xFE, 0x0C, 0x06, 0x03, 0xFE, 0x18, - 0x0C, 0x03, 0xFE, 0x30, 0x18, 0x03, 0xFE, 0x60, 0x30, 0x03, 0xFE, 0xC0, - 0x60, 0x07, 0xFD, 0x80, 0xC0, 0x07, 0xFF, 0x01, 0x80, 0x07, 0xFE, 0x03, - 0x00, 0x07, 0xFC, 0x06, 0x00, 0x07, 0xF8, 0x0C, 0x00, 0x07, 0xF0, 0x18, - 0x00, 0x0F, 0xE0, 0x30, 0x00, 0x0F, 0xC0, 0x60, 0x00, 0x0F, 0x80, 0xC0, - 0x00, 0x0F, 0x01, 0xC0, 0x00, 0x0E, 0x0F, 0xC0, 0x00, 0x1C, 0x7F, 0xE0, - 0x00, 0x18, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x3F, - 0x07, 0xF0, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x7E, - 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x07, 0xF0, 0x3F, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x3F, 0xC0, 0x00, 0x7F, 0x1F, 0xE0, 0x00, 0x3F, 0xCF, - 0xE0, 0x00, 0x0F, 0xEF, 0xF0, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x03, 0xFF, - 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x7F, - 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x0F, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x03, 0xFD, 0xFC, 0x00, 0x01, - 0xFC, 0xFE, 0x00, 0x01, 0xFE, 0x7F, 0x80, 0x00, 0xFF, 0x1F, 0xC0, 0x00, - 0x7F, 0x0F, 0xE0, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x80, 0xFC, 0x00, - 0x1F, 0x80, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x1F, 0x80, 0x03, 0xF8, - 0x3F, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, - 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0x01, 0xFE, 0x1F, 0xE0, 0x7F, 0x81, 0xFC, - 0x1F, 0xE0, 0x7F, 0x87, 0xF8, 0x0F, 0xE1, 0xFE, 0x03, 0xFC, 0x7F, 0x80, - 0xFF, 0x1F, 0xE0, 0x3F, 0xC7, 0xF8, 0x0F, 0xF1, 0xFE, 0x03, 0xFC, 0x7F, - 0x80, 0xFF, 0x1F, 0xE0, 0x3F, 0x87, 0xF8, 0x1F, 0xE1, 0xFE, 0x07, 0xF0, - 0x7F, 0x87, 0xF8, 0x1F, 0xFF, 0xF8, 0x07, 0xFF, 0xF8, 0x01, 0xFE, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, - 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x3F, 0xFF, 0x80, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0xFC, 0x00, - 0x7E, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x07, 0xF0, - 0x3F, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x7F, - 0x1F, 0xE0, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x07, - 0xF7, 0xF8, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xC0, 0x00, - 0x1F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x03, 0xFD, 0xFC, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x01, 0xFE, 0x7F, 0x80, - 0x00, 0xFF, 0x1F, 0xC0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x3F, 0x83, 0xF8, - 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x1F, 0x80, 0x03, 0xF0, 0x1F, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, - 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xC3, 0xFC, 0x00, 0xFF, 0x01, 0xFC, - 0x01, 0xFE, 0x03, 0xFC, 0x03, 0xFC, 0x03, 0xF8, 0x07, 0xF8, 0x07, 0xF8, - 0x0F, 0xF0, 0x0F, 0xF0, 0x1F, 0xE0, 0x1F, 0xE0, 0x3F, 0xC0, 0x3F, 0xC0, - 0x7F, 0x80, 0x7F, 0x80, 0xFF, 0x00, 0xFF, 0x01, 0xFE, 0x01, 0xFC, 0x03, - 0xFC, 0x07, 0xF8, 0x07, 0xF8, 0x1F, 0xE0, 0x0F, 0xF0, 0xFF, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0x9F, 0xE0, 0x00, 0xFF, - 0x3F, 0xC0, 0x01, 0xFE, 0x3F, 0xC0, 0x03, 0xFC, 0x7F, 0xC0, 0x07, 0xF8, - 0x7F, 0xC0, 0x0F, 0xF0, 0x7F, 0x80, 0x1F, 0xE0, 0xFF, 0x80, 0x3F, 0xC0, - 0xFF, 0x80, 0x7F, 0x80, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x01, 0xFE, 0x01, - 0xFF, 0x03, 0xFC, 0x01, 0xFF, 0x0F, 0xFC, 0x03, 0xFE, 0x7F, 0xFE, 0x03, - 0xFF, 0x03, 0xF8, 0x10, 0x7F, 0xF9, 0x87, 0xC1, 0xFC, 0x78, 0x03, 0xE7, - 0x80, 0x0F, 0x3C, 0x00, 0x3B, 0xE0, 0x01, 0xDF, 0x00, 0x06, 0xF8, 0x00, - 0x37, 0xE0, 0x00, 0xBF, 0x80, 0x01, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x3F, - 0xFC, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xC0, 0x7F, 0xFF, - 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0x80, 0x07, 0xFC, 0x00, - 0x1F, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, - 0xC0, 0x01, 0xEE, 0x00, 0x0F, 0x78, 0x00, 0xF3, 0xE0, 0x0F, 0x9F, 0xC0, - 0xF8, 0x8F, 0xFF, 0x04, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0x3F, 0xC3, 0xFF, 0x03, 0xFC, 0x0F, 0xE0, 0x3F, 0xC0, - 0x7C, 0x03, 0xFC, 0x03, 0xC0, 0x3F, 0xC0, 0x38, 0x03, 0xFC, 0x01, 0x80, - 0x3F, 0xC0, 0x10, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0xFF, - 0xFE, 0x07, 0xFC, 0xFF, 0xC0, 0x07, 0xC1, 0xFE, 0x00, 0x0E, 0x07, 0xF8, - 0x00, 0x18, 0x1F, 0xE0, 0x00, 0x60, 0x7F, 0x80, 0x01, 0x81, 0xFE, 0x00, - 0x06, 0x07, 0xF8, 0x00, 0x18, 0x1F, 0xE0, 0x00, 0x60, 0x7F, 0x80, 0x01, - 0x81, 0xFE, 0x00, 0x06, 0x07, 0xF8, 0x00, 0x18, 0x1F, 0xE0, 0x00, 0x60, - 0x7F, 0x80, 0x01, 0x81, 0xFE, 0x00, 0x06, 0x07, 0xF8, 0x00, 0x18, 0x1F, - 0xE0, 0x00, 0x60, 0x7F, 0x80, 0x01, 0x81, 0xFE, 0x00, 0x06, 0x07, 0xF8, - 0x00, 0x18, 0x1F, 0xE0, 0x00, 0x60, 0x7F, 0x80, 0x01, 0x81, 0xFE, 0x00, - 0x06, 0x07, 0xF8, 0x00, 0x18, 0x1F, 0xE0, 0x00, 0x60, 0x7F, 0x80, 0x03, - 0x00, 0xFF, 0x00, 0x0C, 0x03, 0xFC, 0x00, 0x30, 0x07, 0xF0, 0x01, 0x80, - 0x0F, 0xE0, 0x0E, 0x00, 0x1F, 0xE0, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0xFF, 0xFF, 0x01, 0xFF, 0x9F, 0xFC, 0x00, 0x1F, 0x07, - 0xFC, 0x00, 0x07, 0x01, 0xFE, 0x00, 0x03, 0x00, 0x7F, 0x80, 0x03, 0x80, - 0x3F, 0xC0, 0x01, 0x80, 0x1F, 0xE0, 0x00, 0xC0, 0x07, 0xF8, 0x00, 0xC0, - 0x03, 0xFC, 0x00, 0x60, 0x00, 0xFF, 0x00, 0x30, 0x00, 0x7F, 0x80, 0x30, - 0x00, 0x1F, 0xE0, 0x18, 0x00, 0x0F, 0xF0, 0x18, 0x00, 0x07, 0xF8, 0x0C, - 0x00, 0x01, 0xFE, 0x06, 0x00, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x3F, 0xC3, - 0x00, 0x00, 0x1F, 0xE3, 0x80, 0x00, 0x0F, 0xF1, 0x80, 0x00, 0x03, 0xFC, - 0xC0, 0x00, 0x01, 0xFE, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0xFF, 0xF8, 0x7F, 0xFF, 0x0F, 0xFB, 0xFF, 0x00, 0xFF, - 0xC0, 0x1F, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0x70, 0x3F, 0x80, 0x0F, 0xE0, - 0x03, 0x81, 0xFE, 0x00, 0x7F, 0x80, 0x1C, 0x0F, 0xF0, 0x03, 0xFC, 0x00, - 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x06, 0x01, 0xFE, 0x00, 0x7F, 0x00, 0x70, - 0x0F, 0xF0, 0x07, 0xFC, 0x03, 0x00, 0x3F, 0x80, 0x3F, 0xE0, 0x18, 0x01, - 0xFE, 0x01, 0xFF, 0x01, 0xC0, 0x0F, 0xF0, 0x1B, 0xFC, 0x0C, 0x00, 0x3F, - 0x80, 0xCF, 0xE0, 0x60, 0x01, 0xFE, 0x06, 0x7F, 0x07, 0x00, 0x0F, 0xF0, - 0x63, 0xFC, 0x30, 0x00, 0x3F, 0x83, 0x0F, 0xE1, 0x80, 0x01, 0xFE, 0x30, - 0x7F, 0x1C, 0x00, 0x07, 0xF1, 0x81, 0xFC, 0xC0, 0x00, 0x3F, 0x8C, 0x0F, - 0xE6, 0x00, 0x01, 0xFE, 0xC0, 0x7F, 0x70, 0x00, 0x07, 0xF6, 0x01, 0xFB, - 0x00, 0x00, 0x3F, 0xE0, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x7F, 0xC0, - 0x00, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x00, - 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xF0, 0x00, 0x00, - 0x3E, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x07, - 0x00, 0x01, 0xC0, 0x00, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x00, 0x01, 0xC0, - 0x00, 0x70, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0x0F, - 0xFF, 0x3F, 0xF8, 0x01, 0xF8, 0x1F, 0xF8, 0x01, 0xE0, 0x0F, 0xF8, 0x01, - 0xC0, 0x0F, 0xF8, 0x01, 0x80, 0x07, 0xFC, 0x03, 0x80, 0x03, 0xFE, 0x07, - 0x00, 0x03, 0xFE, 0x06, 0x00, 0x01, 0xFF, 0x0C, 0x00, 0x00, 0xFF, 0x9C, - 0x00, 0x00, 0xFF, 0x98, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x19, 0xFE, 0x00, 0x00, 0x31, 0xFF, - 0x00, 0x00, 0x70, 0xFF, 0x80, 0x00, 0x60, 0x7F, 0x80, 0x00, 0xC0, 0x7F, - 0xC0, 0x01, 0xC0, 0x3F, 0xE0, 0x03, 0x80, 0x1F, 0xE0, 0x07, 0x00, 0x1F, - 0xF0, 0x07, 0x00, 0x0F, 0xF8, 0x0F, 0x00, 0x0F, 0xF8, 0x3F, 0x80, 0x1F, - 0xFC, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x7F, 0xF0, 0x00, - 0x7E, 0x1F, 0xF0, 0x00, 0x38, 0x1F, 0xF0, 0x00, 0x38, 0x0F, 0xF0, 0x00, - 0x70, 0x0F, 0xF8, 0x00, 0x60, 0x07, 0xF8, 0x00, 0x60, 0x07, 0xFC, 0x00, - 0xC0, 0x03, 0xFC, 0x01, 0xC0, 0x01, 0xFE, 0x01, 0x80, 0x01, 0xFE, 0x03, - 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x86, 0x00, 0x00, 0x7F, 0x8E, - 0x00, 0x00, 0x7F, 0xCC, 0x00, 0x00, 0x3F, 0xD8, 0x00, 0x00, 0x3F, 0xF8, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFC, 0x3F, 0x80, 0x7F, 0xC3, - 0xE0, 0x07, 0xF8, 0x38, 0x00, 0xFF, 0x83, 0x80, 0x0F, 0xF0, 0x30, 0x01, - 0xFE, 0x07, 0x00, 0x3F, 0xE0, 0x60, 0x03, 0xFC, 0x06, 0x00, 0x7F, 0xC0, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x01, 0x07, 0xFC, 0x00, 0x30, 0xFF, 0x80, - 0x03, 0x0F, 0xF0, 0x00, 0x31, 0xFF, 0x00, 0x07, 0x1F, 0xE0, 0x00, 0xF3, - 0xFE, 0x00, 0x1E, 0x7F, 0xC0, 0x03, 0xE7, 0xF8, 0x01, 0xFE, 0xFF, 0xFF, - 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x7C, 0x0F, 0x81, - 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, - 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, - 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, - 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xFF, 0xFF, 0xF8, 0xF0, - 0x01, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0xC0, 0x07, 0x80, 0x0F, 0x00, - 0x1F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x01, - 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1F, - 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, - 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, - 0x1E, 0xFF, 0xFF, 0xFC, 0x1F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, - 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, - 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, - 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, - 0x0F, 0x81, 0xF0, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0x78, 0x00, 0x07, 0xC0, - 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xE0, 0x01, 0xEF, 0x00, 0x0F, - 0x3C, 0x00, 0xF1, 0xE0, 0x07, 0x87, 0x80, 0x78, 0x3C, 0x03, 0xC0, 0xF0, - 0x3C, 0x07, 0x81, 0xE0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x07, 0xCF, 0x00, - 0x1E, 0x78, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x70, 0x1F, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x3E, 0x01, 0xE0, 0x1E, - 0x00, 0xE0, 0x03, 0xFC, 0x00, 0x3F, 0xFC, 0x03, 0xE1, 0xF8, 0x0F, 0x03, - 0xF0, 0x7C, 0x07, 0xC1, 0xF8, 0x1F, 0x87, 0xE0, 0x7E, 0x1F, 0x81, 0xF8, - 0x3C, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, 0x00, 0x3F, 0xF8, 0x03, - 0xE7, 0xE0, 0x3E, 0x1F, 0x83, 0xF0, 0x7E, 0x1F, 0x81, 0xF8, 0x7E, 0x07, - 0xE3, 0xF8, 0x1F, 0x8F, 0xE0, 0x7E, 0x3F, 0x83, 0xF8, 0xFF, 0x1F, 0xE1, - 0xFF, 0xDF, 0xF7, 0xFE, 0x3F, 0x07, 0xE0, 0xF8, 0xFF, 0x80, 0x00, 0x1F, - 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x0F, 0xC7, 0xF0, 0x07, 0xEF, 0xFE, 0x03, 0xFC, 0x3F, 0x81, 0xFC, 0x0F, - 0xE0, 0xFC, 0x03, 0xF0, 0x7E, 0x01, 0xFC, 0x3F, 0x00, 0xFE, 0x1F, 0x80, - 0x3F, 0x8F, 0xC0, 0x1F, 0xC7, 0xE0, 0x0F, 0xE3, 0xF0, 0x07, 0xF1, 0xF8, - 0x03, 0xF8, 0xFC, 0x01, 0xFC, 0x7E, 0x00, 0xFE, 0x3F, 0x00, 0x7F, 0x1F, - 0x80, 0x3F, 0x0F, 0xC0, 0x1F, 0x87, 0xE0, 0x1F, 0xC3, 0xF0, 0x0F, 0xC1, - 0xF8, 0x07, 0xE0, 0xFE, 0x07, 0xE0, 0x73, 0x87, 0xE0, 0x30, 0xFF, 0xC0, - 0x10, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x7F, 0xE0, 0x3E, 0x3E, 0x0F, - 0x83, 0xE3, 0xE0, 0x7C, 0x7C, 0x0F, 0x9F, 0x01, 0xF3, 0xE0, 0x1C, 0x7C, - 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, - 0x00, 0x1F, 0xC0, 0x21, 0xFE, 0x0C, 0x3F, 0xFF, 0x01, 0xFF, 0x80, 0x0F, - 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, - 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, - 0xF8, 0x00, 0x01, 0xF8, 0x03, 0xF1, 0xF8, 0x07, 0xFD, 0xF8, 0x1F, 0xC7, - 0xF8, 0x1F, 0x83, 0xF8, 0x3F, 0x01, 0xF8, 0x7F, 0x01, 0xF8, 0x7E, 0x01, - 0xF8, 0x7E, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, - 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, - 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0x7E, 0x01, 0xF8, 0x7F, 0x01, - 0xF8, 0x3F, 0x03, 0xF8, 0x3F, 0x03, 0xF8, 0x1F, 0x87, 0xFC, 0x0F, 0xFD, - 0xFF, 0x03, 0xF1, 0xC0, 0x03, 0xF0, 0x03, 0xFF, 0x01, 0xE1, 0xE0, 0xF8, - 0x7C, 0x3C, 0x0F, 0x1F, 0x03, 0xE7, 0xC0, 0xFB, 0xF0, 0x3E, 0xFC, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, - 0xC0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x1F, 0x80, 0x07, 0xF0, 0x0C, 0xFC, - 0x06, 0x3F, 0xC3, 0x07, 0xFF, 0x80, 0xFF, 0xC0, 0x0F, 0xC0, 0x00, 0xFC, - 0x01, 0xFF, 0x81, 0xF1, 0xC1, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0x7C, 0x7E, - 0x1C, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x1F, 0xFF, 0x0F, - 0xFF, 0x80, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, - 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, - 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, - 0xFC, 0x00, 0x7E, 0x00, 0x7F, 0x80, 0xFF, 0xF8, 0x00, 0x07, 0xF0, 0x03, - 0xFF, 0xFC, 0xF8, 0x7F, 0xBE, 0x07, 0x87, 0xC0, 0xF9, 0xF8, 0x1F, 0xBF, - 0x03, 0xF7, 0xE0, 0x7E, 0xFC, 0x0F, 0xDF, 0x81, 0xF9, 0xF0, 0x3F, 0x3E, - 0x07, 0xC3, 0xE1, 0xF8, 0x3C, 0x7E, 0x01, 0xFF, 0x00, 0x60, 0x00, 0x38, - 0x00, 0x0F, 0x00, 0x01, 0xF0, 0x00, 0x7F, 0xFF, 0x0F, 0xFF, 0xF9, 0xFF, - 0xFF, 0x9F, 0xFF, 0xF9, 0xFF, 0xFF, 0x0F, 0xFF, 0xEF, 0x00, 0x3F, 0xC0, - 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x1C, 0xF8, 0x07, 0x0F, 0xFF, 0xC0, 0x7F, - 0xC0, 0xFF, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, - 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, - 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x87, 0xE0, 0x1F, 0x9F, 0xF0, 0x1F, 0xBF, - 0xF8, 0x1F, 0xF1, 0xF8, 0x1F, 0xC0, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, - 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, - 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, - 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, - 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x3F, 0xC1, 0xFE, 0xFF, 0xE3, - 0xFF, 0x0F, 0x07, 0xE1, 0xFE, 0x3F, 0xC7, 0xF8, 0x7F, 0x03, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC3, 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, 0xE1, 0xFE, 0xFF, 0xE0, 0x00, - 0x70, 0x07, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x07, 0xF0, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x01, 0xFC, 0x03, 0xF0, - 0x0F, 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, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xDC, 0x3F, 0xF8, 0xFB, 0xE3, 0xEF, 0x0F, 0xBC, 0x7C, 0x7F, 0xE0, 0x7E, - 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE1, 0xFF, 0x83, - 0xF0, 0x3F, 0x01, 0xF8, 0x0E, 0x00, 0xFC, 0x06, 0x00, 0x7E, 0x06, 0x00, - 0x3F, 0x06, 0x00, 0x1F, 0x86, 0x00, 0x0F, 0xC7, 0x00, 0x07, 0xE7, 0x80, - 0x03, 0xF7, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7E, 0x7F, - 0x00, 0x3F, 0x1F, 0xC0, 0x1F, 0x8F, 0xE0, 0x0F, 0xC3, 0xF8, 0x07, 0xE0, - 0xFE, 0x03, 0xF0, 0x7F, 0x81, 0xF8, 0x1F, 0xC0, 0xFC, 0x0F, 0xF0, 0xFF, - 0x07, 0xFD, 0xFF, 0xC7, 0xFF, 0xFF, 0x87, 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, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x0F, 0xF7, - 0xFF, 0x00, 0x07, 0xE0, 0x3F, 0x07, 0xFC, 0xFF, 0x87, 0xFC, 0x0F, 0xEF, - 0xFE, 0x7F, 0xF0, 0x3F, 0xC3, 0xFF, 0x1F, 0x81, 0xFC, 0x0F, 0xE0, 0x7E, - 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x7E, 0x03, 0xF0, 0x1F, 0x83, 0xF0, 0x1F, - 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0xFC, 0x07, 0xE0, 0x3F, 0x07, - 0xE0, 0x3F, 0x01, 0xF8, 0x3F, 0x01, 0xF8, 0x0F, 0xC1, 0xF8, 0x0F, 0xC0, - 0x7E, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x7E, 0x03, 0xF0, 0x1F, 0x83, 0xF0, - 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0xFC, 0x07, 0xE0, 0x3F, - 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x3F, 0x01, 0xF8, 0x0F, 0xC1, 0xF8, 0x0F, - 0xC0, 0x7E, 0x1F, 0xE0, 0xFF, 0x07, 0xFB, 0xFF, 0x8F, 0xFC, 0x7F, 0xE0, - 0x00, 0x07, 0xE0, 0xFF, 0x9F, 0xF0, 0x3F, 0xBF, 0xF8, 0x1F, 0xF1, 0xF8, - 0x1F, 0xC0, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, - 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, - 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, - 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, - 0x1F, 0x80, 0xFC, 0x3F, 0xC1, 0xFE, 0xFF, 0xE3, 0xFF, 0x01, 0xFC, 0x00, - 0x3F, 0xF8, 0x03, 0xE3, 0xE0, 0x3E, 0x0F, 0x83, 0xF0, 0x7E, 0x1F, 0x01, - 0xF1, 0xF8, 0x0F, 0xCF, 0xC0, 0x7E, 0xFE, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, - 0x80, 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x3F, 0xFF, 0x01, 0xFF, 0xF8, 0x0F, - 0xFF, 0xC0, 0x7F, 0x7E, 0x03, 0xF3, 0xF0, 0x1F, 0x8F, 0x80, 0xF8, 0x7E, - 0x0F, 0xC1, 0xF0, 0x7C, 0x07, 0xC7, 0xC0, 0x1F, 0xFC, 0x00, 0x3F, 0x80, - 0x00, 0x0F, 0xC0, 0xFF, 0xBF, 0xF0, 0x3F, 0xF1, 0xF8, 0x1F, 0xC0, 0xFC, - 0x1F, 0xC0, 0xFC, 0x1F, 0x80, 0xFE, 0x1F, 0x80, 0x7E, 0x1F, 0x80, 0x7F, - 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, - 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, 0x1F, 0x80, 0x7F, - 0x1F, 0x80, 0x7E, 0x1F, 0x80, 0x7E, 0x1F, 0x80, 0xFE, 0x1F, 0x80, 0xFC, - 0x1F, 0xC1, 0xF8, 0x1F, 0xE3, 0xF8, 0x1F, 0xBF, 0xE0, 0x1F, 0x8F, 0xC0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xF8, 0x00, - 0x00, 0xF8, 0x08, 0x07, 0xFE, 0x18, 0x0F, 0xC7, 0x38, 0x1F, 0x83, 0xF8, - 0x3F, 0x01, 0xF8, 0x3F, 0x01, 0xF8, 0x7F, 0x01, 0xF8, 0x7E, 0x01, 0xF8, - 0x7E, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, - 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, 0xFE, 0x01, 0xF8, - 0xFE, 0x01, 0xF8, 0x7E, 0x01, 0xF8, 0x7F, 0x01, 0xF8, 0x7F, 0x01, 0xF8, - 0x3F, 0x83, 0xF8, 0x1F, 0xC7, 0xF8, 0x0F, 0xFD, 0xF8, 0x03, 0xF1, 0xF8, - 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, - 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xFF, - 0x00, 0x07, 0x9F, 0xF3, 0xF8, 0xFE, 0xFF, 0x8F, 0xFF, 0xF1, 0xFE, 0x7E, - 0x3F, 0x87, 0x87, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, - 0xF8, 0x00, 0x7F, 0x80, 0x3F, 0xFC, 0x00, 0x0F, 0x84, 0x3F, 0xF8, 0xE1, - 0xF3, 0x80, 0xEF, 0x00, 0xDE, 0x01, 0xBE, 0x01, 0x7E, 0x00, 0xFF, 0x01, - 0xFF, 0x81, 0xFF, 0xC3, 0xFF, 0xC3, 0xFF, 0xC1, 0xFF, 0x80, 0xFF, 0x80, - 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xDF, 0x0F, - 0x37, 0xFC, 0x43, 0xF0, 0x01, 0x00, 0x0C, 0x00, 0x70, 0x01, 0xC0, 0x0F, - 0x00, 0x7C, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xF3, 0xFF, 0xC3, 0xF0, 0x0F, - 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, 0x23, 0xF0, 0x8F, 0xE6, 0x1F, 0xF0, 0x7F, 0x80, 0xF8, 0x00, 0xFF, - 0x87, 0xFC, 0x1F, 0xC0, 0xFE, 0x07, 0xE0, 0x3F, 0x03, 0xF0, 0x1F, 0x81, - 0xF8, 0x0F, 0xC0, 0xFC, 0x07, 0xE0, 0x7E, 0x03, 0xF0, 0x3F, 0x01, 0xF8, - 0x1F, 0x80, 0xFC, 0x0F, 0xC0, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xF0, 0x1F, - 0x81, 0xF8, 0x0F, 0xC0, 0xFC, 0x07, 0xE0, 0x7E, 0x03, 0xF0, 0x3F, 0x01, - 0xF8, 0x1F, 0x80, 0xFC, 0x0F, 0xC0, 0x7E, 0x07, 0xE0, 0x7F, 0x03, 0xF8, - 0x7F, 0xC0, 0xFF, 0xEF, 0xF8, 0x3F, 0xE7, 0xC0, 0x0F, 0xC2, 0x00, 0xFF, - 0xF1, 0xFC, 0xFF, 0x01, 0xE3, 0xFC, 0x03, 0x07, 0xF0, 0x0C, 0x1F, 0xC0, - 0x60, 0x3F, 0x81, 0x80, 0xFE, 0x04, 0x01, 0xF8, 0x30, 0x07, 0xF0, 0xC0, - 0x1F, 0xC6, 0x00, 0x3F, 0x98, 0x00, 0xFE, 0x40, 0x01, 0xFB, 0x00, 0x07, - 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x01, 0xF0, - 0x00, 0x07, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, - 0x01, 0x00, 0x00, 0xFF, 0xE7, 0xFF, 0x3F, 0xBF, 0xE0, 0xFE, 0x07, 0x0F, - 0xE0, 0x7F, 0x03, 0x83, 0xF0, 0x1F, 0x81, 0x81, 0xFC, 0x0F, 0xC0, 0xC0, - 0xFE, 0x07, 0xF0, 0x40, 0x3F, 0x03, 0xF8, 0x60, 0x1F, 0xC3, 0xFC, 0x30, - 0x07, 0xE1, 0xFE, 0x10, 0x03, 0xF0, 0x9F, 0x98, 0x01, 0xFC, 0xCF, 0xCC, - 0x00, 0x7E, 0x67, 0xEC, 0x00, 0x3F, 0xE1, 0xFE, 0x00, 0x1F, 0xF0, 0xFE, - 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0xFC, 0x0F, - 0x80, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x0F, 0x00, - 0xE0, 0x00, 0x07, 0x00, 0x70, 0x00, 0x03, 0x80, 0x38, 0x00, 0x00, 0x80, - 0x08, 0x00, 0xFF, 0xF3, 0xFD, 0xFF, 0x03, 0xC3, 0xFC, 0x0E, 0x07, 0xF0, - 0x30, 0x1F, 0xE1, 0x80, 0x3F, 0x8C, 0x00, 0x7F, 0x70, 0x01, 0xFF, 0x80, - 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00, - 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x1B, 0xF8, 0x00, 0xCF, 0xF0, 0x06, 0x1F, - 0xC0, 0x38, 0x3F, 0x80, 0xC0, 0xFF, 0x07, 0x01, 0xFC, 0x3C, 0x07, 0xFB, - 0xFC, 0x7F, 0xF0, 0xFF, 0xE3, 0xFB, 0xFC, 0x07, 0x8F, 0xE0, 0x18, 0x7F, - 0x01, 0x81, 0xF8, 0x0C, 0x0F, 0xE0, 0x60, 0x7F, 0x06, 0x01, 0xF8, 0x30, - 0x0F, 0xE1, 0x80, 0x7F, 0x18, 0x01, 0xF8, 0xC0, 0x0F, 0xE6, 0x00, 0x3F, - 0x60, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, - 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x60, 0x03, 0x82, 0x00, 0x3E, - 0x30, 0x01, 0xF1, 0x00, 0x0F, 0x98, 0x00, 0x3F, 0x80, 0x00, 0xF0, 0x00, - 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFD, 0xE0, 0x7F, 0x30, 0x1F, 0xC6, 0x07, - 0xF8, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, - 0x80, 0x0F, 0xE0, 0x03, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xE0, 0x03, 0xF8, - 0x00, 0xFE, 0x03, 0x3F, 0xC0, 0x67, 0xF0, 0x19, 0xFE, 0x07, 0x3F, 0x83, - 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x07, 0xE0, 0x3E, 0x00, - 0xF8, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, - 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, - 0x1F, 0x00, 0xF8, 0x03, 0xC0, 0x3C, 0x01, 0xF0, 0x00, 0xF0, 0x03, 0xE0, - 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, - 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, - 0x00, 0x3E, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 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, 0x7C, 0x00, 0xF0, - 0x00, 0xF0, 0x03, 0xE0, 0x3C, 0x01, 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, - 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, - 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x01, 0xF0, 0x07, 0xC0, 0x7E, - 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xC0, 0x47, 0xFF, 0xC3, 0x9F, - 0xFF, 0xFF, 0x70, 0x7F, 0xF8, 0x80, 0x7F, 0xC0, 0x00, 0x3E, 0x00}; - -const GFXglyph FreeSerifBold24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 12, 0, 1}, // 0x20 ' ' - {0, 8, 34, 16, 4, -32}, // 0x21 '!' - {34, 17, 13, 26, 4, -32}, // 0x22 '"' - {62, 23, 33, 23, 0, -32}, // 0x23 '#' - {157, 21, 39, 24, 1, -34}, // 0x24 '$' - {260, 35, 34, 47, 6, -32}, // 0x25 '%' - {409, 34, 34, 39, 3, -32}, // 0x26 '&' - {554, 5, 13, 13, 4, -32}, // 0x27 ''' - {563, 12, 41, 16, 2, -32}, // 0x28 '(' - {625, 12, 41, 16, 1, -32}, // 0x29 ')' - {687, 18, 21, 24, 3, -32}, // 0x2A '*' - {735, 26, 25, 32, 3, -24}, // 0x2B '+' - {817, 8, 15, 12, 2, -6}, // 0x2C ',' - {832, 11, 5, 16, 2, -12}, // 0x2D '-' - {839, 8, 8, 12, 2, -6}, // 0x2E '.' - {847, 15, 33, 13, -1, -32}, // 0x2F '/' - {909, 22, 34, 23, 1, -32}, // 0x30 '0' - {1003, 18, 33, 23, 3, -32}, // 0x31 '1' - {1078, 21, 33, 24, 1, -32}, // 0x32 '2' - {1165, 21, 34, 24, 1, -32}, // 0x33 '3' - {1255, 21, 33, 24, 1, -32}, // 0x34 '4' - {1342, 20, 32, 23, 2, -31}, // 0x35 '5' - {1422, 21, 34, 24, 1, -32}, // 0x36 '6' - {1512, 21, 32, 23, 1, -31}, // 0x37 '7' - {1596, 21, 34, 23, 1, -32}, // 0x38 '8' - {1686, 22, 34, 23, 1, -32}, // 0x39 '9' - {1780, 8, 24, 16, 4, -22}, // 0x3A ':' - {1804, 9, 31, 16, 3, -22}, // 0x3B ';' - {1839, 26, 26, 32, 3, -24}, // 0x3C '<' - {1924, 26, 17, 32, 3, -20}, // 0x3D '=' - {1980, 26, 26, 32, 3, -24}, // 0x3E '>' - {2065, 18, 34, 24, 3, -32}, // 0x3F '?' - {2142, 33, 34, 44, 5, -32}, // 0x40 '@' - {2283, 32, 33, 34, 1, -32}, // 0x41 'A' - {2415, 28, 32, 31, 1, -31}, // 0x42 'B' - {2527, 30, 34, 33, 2, -32}, // 0x43 'C' - {2655, 32, 32, 34, 1, -31}, // 0x44 'D' - {2783, 28, 32, 32, 2, -31}, // 0x45 'E' - {2895, 25, 32, 29, 2, -31}, // 0x46 'F' - {2995, 33, 34, 36, 2, -32}, // 0x47 'G' - {3136, 33, 32, 37, 2, -31}, // 0x48 'H' - {3268, 15, 32, 18, 2, -31}, // 0x49 'I' - {3328, 22, 37, 24, 0, -31}, // 0x4A 'J' - {3430, 34, 32, 36, 2, -31}, // 0x4B 'K' - {3566, 28, 32, 31, 2, -31}, // 0x4C 'L' - {3678, 43, 32, 45, 0, -31}, // 0x4D 'M' - {3850, 31, 32, 34, 1, -31}, // 0x4E 'N' - {3974, 33, 34, 37, 2, -32}, // 0x4F 'O' - {4115, 26, 32, 30, 2, -31}, // 0x50 'P' - {4219, 33, 41, 37, 2, -32}, // 0x51 'Q' - {4389, 31, 32, 34, 2, -31}, // 0x52 'R' - {4513, 21, 34, 27, 3, -32}, // 0x53 'S' - {4603, 28, 32, 30, 1, -31}, // 0x54 'T' - {4715, 30, 33, 34, 2, -31}, // 0x55 'U' - {4839, 33, 32, 33, 0, -31}, // 0x56 'V' - {4971, 45, 33, 46, 1, -31}, // 0x57 'W' - {5157, 32, 32, 34, 1, -31}, // 0x58 'X' - {5285, 32, 32, 33, 1, -31}, // 0x59 'Y' - {5413, 28, 32, 30, 1, -31}, // 0x5A 'Z' - {5525, 11, 39, 16, 3, -31}, // 0x5B '[' - {5579, 15, 33, 13, -1, -32}, // 0x5C '\' - {5641, 11, 39, 16, 2, -31}, // 0x5D ']' - {5695, 21, 17, 27, 3, -31}, // 0x5E '^' - {5740, 24, 3, 23, 0, 5}, // 0x5F '_' - {5749, 11, 9, 16, 0, -33}, // 0x60 '`' - {5762, 22, 24, 23, 1, -22}, // 0x61 'a' - {5828, 25, 33, 26, 0, -31}, // 0x62 'b' - {5932, 19, 24, 20, 1, -22}, // 0x63 'c' - {5989, 24, 33, 26, 1, -31}, // 0x64 'd' - {6088, 18, 24, 21, 1, -22}, // 0x65 'e' - {6142, 17, 33, 18, 1, -32}, // 0x66 'f' - {6213, 19, 32, 24, 2, -22}, // 0x67 'g' - {6289, 24, 32, 26, 0, -31}, // 0x68 'h' - {6385, 11, 33, 14, 1, -32}, // 0x69 'i' - {6431, 14, 42, 18, 0, -32}, // 0x6A 'j' - {6505, 25, 32, 26, 0, -31}, // 0x6B 'k' - {6605, 11, 32, 13, 0, -31}, // 0x6C 'l' - {6649, 37, 23, 39, 0, -22}, // 0x6D 'm' - {6756, 24, 23, 26, 0, -22}, // 0x6E 'n' - {6825, 21, 24, 24, 1, -22}, // 0x6F 'o' - {6888, 24, 32, 26, 0, -22}, // 0x70 'p' - {6984, 24, 32, 26, 1, -22}, // 0x71 'q' - {7080, 19, 23, 20, 0, -22}, // 0x72 'r' - {7135, 15, 24, 19, 2, -22}, // 0x73 's' - {7180, 14, 31, 16, 1, -29}, // 0x74 't' - {7235, 25, 23, 27, 0, -21}, // 0x75 'u' - {7307, 22, 23, 23, 0, -21}, // 0x76 'v' - {7371, 33, 23, 33, 0, -21}, // 0x77 'w' - {7466, 22, 22, 24, 1, -21}, // 0x78 'x' - {7527, 21, 31, 23, 0, -21}, // 0x79 'y' - {7609, 19, 22, 21, 1, -21}, // 0x7A 'z' - {7662, 14, 42, 19, 1, -33}, // 0x7B '{' - {7736, 4, 33, 10, 3, -32}, // 0x7C '|' - {7753, 14, 42, 19, 4, -33}, // 0x7D '}' - {7827, 22, 7, 24, 1, -14}}; // 0x7E '~' - -const GFXfont FreeSerifBold24pt7b PROGMEM = { - (uint8_t *)FreeSerifBold24pt7bBitmaps, - (GFXglyph *)FreeSerifBold24pt7bGlyphs, 0x20, 0x7E, 56}; - -// Approx. 8519 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold9pt7b.h deleted file mode 100644 index 2f1cf8f..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBold9pt7b.h +++ /dev/null @@ -1,204 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBold9pt7bBitmaps[] PROGMEM = { - 0xFF, 0xF4, 0x92, 0x1F, 0xF0, 0xCF, 0x3C, 0xE3, 0x88, 0x13, 0x09, 0x84, - 0xC2, 0x47, 0xF9, 0x90, 0xC8, 0x4C, 0xFF, 0x13, 0x09, 0x0C, 0x86, 0x40, - 0x10, 0x38, 0xD6, 0x92, 0xD2, 0xF0, 0x7C, 0x3E, 0x17, 0x93, 0x93, 0xD6, - 0x7C, 0x10, 0x3C, 0x21, 0xCF, 0x0E, 0x24, 0x30, 0xA0, 0xC5, 0x03, 0x34, - 0xE7, 0x26, 0x40, 0xB9, 0x04, 0xC4, 0x23, 0x30, 0x8C, 0x84, 0x1C, 0x0F, - 0x00, 0xCC, 0x06, 0x60, 0x3E, 0x00, 0xE7, 0x8F, 0x18, 0x9C, 0x8C, 0xE4, - 0xE3, 0xC7, 0x9E, 0x3C, 0x72, 0xFD, 0xE0, 0xFF, 0x80, 0x32, 0x44, 0xCC, - 0xCC, 0xCC, 0xC4, 0x62, 0x10, 0x84, 0x22, 0x33, 0x33, 0x33, 0x32, 0x64, - 0x80, 0x31, 0x6B, 0xB1, 0x8E, 0xD6, 0x8C, 0x00, 0x08, 0x04, 0x02, 0x01, - 0x0F, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xDF, 0x95, 0x00, 0xFF, 0xFF, - 0x80, 0x0C, 0x21, 0x86, 0x10, 0xC3, 0x08, 0x61, 0x84, 0x30, 0xC0, 0x1C, - 0x33, 0x98, 0xDC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xB1, 0x98, 0xC3, - 0x80, 0x08, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0xBF, 0x3C, 0x3F, - 0x23, 0xC0, 0xE0, 0x70, 0x30, 0x38, 0x18, 0x18, 0x18, 0x5F, 0xDF, 0xE0, - 0x7C, 0x8E, 0x0E, 0x0E, 0x0C, 0x1E, 0x07, 0x03, 0x03, 0x02, 0xE6, 0xF8, - 0x06, 0x0E, 0x0E, 0x3E, 0x2E, 0x4E, 0x8E, 0x8E, 0xFF, 0xFF, 0x0E, 0x0E, - 0x3F, 0x7E, 0x40, 0x40, 0xF8, 0xFC, 0x1E, 0x06, 0x02, 0x02, 0xE4, 0xF8, - 0x07, 0x1C, 0x30, 0x70, 0xFC, 0xE6, 0xE7, 0xE7, 0xE7, 0x67, 0x66, 0x3C, - 0x7F, 0x3F, 0xA0, 0xD0, 0x40, 0x60, 0x30, 0x10, 0x18, 0x0C, 0x04, 0x06, - 0x03, 0x00, 0x3C, 0xC6, 0xC6, 0xC6, 0xFC, 0x7C, 0x3E, 0xCF, 0xC7, 0xC7, - 0xC6, 0x7C, 0x3E, 0x33, 0xB8, 0xDC, 0x7E, 0x3F, 0x1D, 0xCE, 0x7F, 0x07, - 0x07, 0x0F, 0x1C, 0x00, 0xFF, 0x80, 0x3F, 0xE0, 0xFF, 0x80, 0x37, 0xE5, - 0x40, 0x00, 0x00, 0x70, 0x78, 0x78, 0x78, 0x38, 0x03, 0x80, 0x3C, 0x03, - 0xC0, 0x30, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0xC0, 0x3C, 0x03, - 0xC0, 0x1C, 0x01, 0xC1, 0xE1, 0xE1, 0xE0, 0xE0, 0x00, 0x00, 0x3D, 0x9F, - 0x3E, 0x70, 0xE1, 0x04, 0x08, 0x00, 0x70, 0xE1, 0xC0, 0x0F, 0x81, 0x83, - 0x18, 0xC4, 0x89, 0x9C, 0x4C, 0xE4, 0x67, 0x22, 0x39, 0x22, 0x4F, 0xE3, - 0x00, 0x0C, 0x10, 0x1F, 0x00, 0x02, 0x00, 0x30, 0x01, 0xC0, 0x0E, 0x00, - 0xB8, 0x05, 0xC0, 0x4F, 0x02, 0x38, 0x3F, 0xE1, 0x07, 0x18, 0x3D, 0xE3, - 0xF0, 0xFF, 0x87, 0x1C, 0xE3, 0x9C, 0x73, 0x9C, 0x7F, 0x0E, 0x71, 0xC7, - 0x38, 0xE7, 0x1C, 0xE7, 0x7F, 0xC0, 0x1F, 0x26, 0x1D, 0xC1, 0xB0, 0x1E, - 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x04, 0xE1, 0x0F, 0xC0, 0xFF, - 0x0E, 0x71, 0xC7, 0x38, 0x77, 0x0E, 0xE1, 0xDC, 0x3B, 0x87, 0x70, 0xCE, - 0x39, 0xC6, 0x7F, 0x80, 0xFF, 0xCE, 0x19, 0xC1, 0x38, 0x87, 0x30, 0xFE, - 0x1C, 0xC3, 0x88, 0x70, 0x2E, 0x0D, 0xC3, 0x7F, 0xE0, 0xFF, 0xDC, 0x37, - 0x05, 0xC4, 0x73, 0x1F, 0xC7, 0x31, 0xC4, 0x70, 0x1C, 0x07, 0x03, 0xE0, - 0x1F, 0x23, 0x0E, 0x70, 0x6E, 0x02, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x0E, - 0x60, 0xE7, 0x0E, 0x38, 0xE0, 0xF8, 0xF9, 0xF7, 0x0E, 0x70, 0xE7, 0x0E, - 0x70, 0xE7, 0xFE, 0x70, 0xE7, 0x0E, 0x70, 0xE7, 0x0E, 0x70, 0xEF, 0x9F, - 0xFB, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0, 0x1F, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xCE, 0xCC, 0x78, 0xF9, 0xF3, - 0x82, 0x1C, 0x20, 0xE2, 0x07, 0x20, 0x3F, 0x01, 0xDC, 0x0E, 0x70, 0x73, - 0xC3, 0x8F, 0x1C, 0x3D, 0xF3, 0xF0, 0xF8, 0x0E, 0x01, 0xC0, 0x38, 0x07, - 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x2E, 0x09, 0xC3, 0x7F, 0xE0, 0xF8, - 0x0F, 0x3C, 0x1E, 0x3C, 0x1E, 0x2E, 0x2E, 0x2E, 0x2E, 0x26, 0x4E, 0x27, - 0x4E, 0x27, 0x4E, 0x23, 0x8E, 0x23, 0x8E, 0x21, 0x0E, 0x71, 0x1F, 0xF0, - 0xEE, 0x09, 0xE1, 0x3E, 0x25, 0xE4, 0x9E, 0x91, 0xD2, 0x1E, 0x43, 0xC8, - 0x39, 0x03, 0x70, 0x20, 0x1F, 0x83, 0x0C, 0x70, 0xEE, 0x07, 0xE0, 0x7E, - 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x30, 0xC1, 0xF8, 0xFF, 0x1C, - 0xE7, 0x1D, 0xC7, 0x71, 0xDC, 0xE7, 0xF1, 0xC0, 0x70, 0x1C, 0x07, 0x03, - 0xE0, 0x0F, 0x83, 0x9C, 0x70, 0xE6, 0x06, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, - 0x07, 0xE0, 0x76, 0x06, 0x30, 0xC1, 0x98, 0x0F, 0x00, 0x78, 0x03, 0xE0, - 0xFF, 0x07, 0x38, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x38, 0x7E, 0x07, 0x70, - 0x77, 0x87, 0x3C, 0x71, 0xEF, 0x8F, 0x39, 0x47, 0xC1, 0xC0, 0xF0, 0x7C, - 0x3E, 0x0F, 0x83, 0xC3, 0xC6, 0xBC, 0xFF, 0xFC, 0xE3, 0x8E, 0x10, 0xE0, - 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xF0, - 0xF8, 0xEE, 0x09, 0xC1, 0x38, 0x27, 0x04, 0xE0, 0x9C, 0x13, 0x82, 0x70, - 0x4E, 0x08, 0xE2, 0x0F, 0x80, 0xFC, 0x7B, 0xC1, 0x0E, 0x08, 0x70, 0x81, - 0xC4, 0x0E, 0x20, 0x7A, 0x01, 0xD0, 0x0E, 0x80, 0x38, 0x01, 0xC0, 0x04, - 0x00, 0x20, 0x00, 0xFD, 0xFB, 0xDC, 0x38, 0x43, 0x87, 0x10, 0xE1, 0xC4, - 0x38, 0xF2, 0x07, 0x2E, 0x81, 0xD3, 0xA0, 0x34, 0x70, 0x0E, 0x1C, 0x03, - 0x87, 0x00, 0x60, 0x80, 0x10, 0x20, 0xFE, 0xF3, 0xC3, 0x0F, 0x10, 0x39, - 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x01, 0x70, 0x09, 0xC0, 0x8F, 0x08, 0x3D, - 0xF3, 0xF0, 0xFC, 0x7B, 0xC1, 0x8E, 0x08, 0x38, 0x81, 0xE8, 0x07, 0x40, - 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x1F, 0x00, 0xFF, 0xD8, - 0x72, 0x1E, 0x43, 0x80, 0xE0, 0x1C, 0x07, 0x01, 0xC0, 0x38, 0x2E, 0x0F, - 0x83, 0x7F, 0xE0, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0xC1, - 0x06, 0x18, 0x20, 0xC3, 0x04, 0x18, 0x60, 0x83, 0x0C, 0xF3, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0xF0, 0x18, 0x1C, 0x34, 0x26, 0x62, 0x43, 0xC1, - 0xFF, 0x80, 0xC6, 0x30, 0x7C, 0x63, 0xB1, 0xC0, 0xE1, 0xF3, 0x3B, 0x9D, - 0xCE, 0xFF, 0x80, 0xF0, 0x1C, 0x07, 0x01, 0xDC, 0x7B, 0x9C, 0x77, 0x1D, - 0xC7, 0x71, 0xDC, 0x77, 0x39, 0x3C, 0x3C, 0xED, 0x9F, 0x0E, 0x1C, 0x38, - 0x39, 0x3C, 0x07, 0x80, 0xE0, 0x38, 0xEE, 0x77, 0xB8, 0xEE, 0x3B, 0x8E, - 0xE3, 0xB8, 0xE7, 0x78, 0xEF, 0x3C, 0x66, 0xE6, 0xFE, 0xE0, 0xE0, 0xE0, - 0x72, 0x3C, 0x3E, 0xED, 0xC7, 0xC7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC7, - 0xC0, 0x31, 0xDF, 0xBF, 0x7E, 0xE7, 0x90, 0x60, 0xFC, 0xFE, 0x0C, 0x17, - 0xC0, 0xF0, 0x1C, 0x07, 0x01, 0xDC, 0x7B, 0x9C, 0xE7, 0x39, 0xCE, 0x73, - 0x9C, 0xE7, 0x3B, 0xFF, 0x73, 0x9D, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0, - 0x1C, 0x71, 0xCF, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x7D, 0xBE, - 0xF0, 0x1C, 0x07, 0x01, 0xCE, 0x71, 0x1C, 0x87, 0x41, 0xF8, 0x77, 0x1C, - 0xE7, 0x1B, 0xEF, 0xF3, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0, 0xF7, - 0x38, 0xF7, 0xB9, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, - 0x39, 0xCE, 0xFF, 0xFE, 0xF7, 0x1E, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, - 0x39, 0xCE, 0xFF, 0xC0, 0x3E, 0x31, 0xB8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E, - 0xC6, 0x3E, 0x00, 0xF7, 0x1E, 0xE7, 0x1D, 0xC7, 0x71, 0xDC, 0x77, 0x1D, - 0xCE, 0x7F, 0x1C, 0x07, 0x01, 0xC0, 0xF8, 0x00, 0x3C, 0x9C, 0xEE, 0x3B, - 0x8E, 0xE3, 0xB8, 0xEE, 0x39, 0xCE, 0x3F, 0x80, 0xE0, 0x38, 0x0E, 0x07, - 0xC0, 0xF7, 0x7B, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xF8, 0x7E, 0x73, - 0xC7, 0x8E, 0x39, 0xB0, 0x10, 0xCF, 0x9C, 0x71, 0xC7, 0x1C, 0x71, 0xD3, - 0x80, 0xF7, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x3F, - 0xC0, 0xFB, 0xB8, 0x8C, 0x87, 0x43, 0xC0, 0xE0, 0x70, 0x10, 0x08, 0x00, - 0xF7, 0xB6, 0x31, 0x73, 0xA3, 0x3A, 0x3D, 0xA3, 0xDC, 0x18, 0xC1, 0x88, - 0x10, 0x80, 0xFB, 0xB8, 0x8E, 0x83, 0x81, 0xC0, 0xF0, 0x98, 0xCE, 0xEF, - 0x80, 0xF7, 0x62, 0x72, 0x34, 0x34, 0x3C, 0x18, 0x18, 0x10, 0x10, 0x10, - 0xE0, 0xE0, 0xFF, 0x1C, 0x70, 0xE3, 0x87, 0x1C, 0x71, 0xFE, 0x19, 0x8C, - 0x63, 0x18, 0xCC, 0x61, 0x8C, 0x63, 0x18, 0xC3, 0xFF, 0xF8, 0xC3, 0x18, - 0xC6, 0x31, 0x86, 0x33, 0x18, 0xC6, 0x31, 0x98, 0xF0, 0x8E}; - -const GFXglyph FreeSerifBold9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 3, 12, 6, 1, -11}, // 0x21 '!' - {5, 6, 5, 10, 2, -11}, // 0x22 '"' - {9, 9, 13, 9, 0, -12}, // 0x23 '#' - {24, 8, 14, 9, 1, -12}, // 0x24 '$' - {38, 14, 12, 18, 2, -11}, // 0x25 '%' - {59, 13, 12, 15, 1, -11}, // 0x26 '&' - {79, 2, 5, 5, 1, -11}, // 0x27 ''' - {81, 4, 15, 6, 1, -11}, // 0x28 '(' - {89, 4, 15, 6, 1, -11}, // 0x29 ')' - {97, 7, 7, 9, 2, -11}, // 0x2A '*' - {104, 9, 9, 12, 1, -8}, // 0x2B '+' - {115, 3, 6, 4, 1, -2}, // 0x2C ',' - {118, 4, 2, 6, 1, -4}, // 0x2D '-' - {119, 3, 3, 4, 1, -2}, // 0x2E '.' - {121, 6, 13, 5, 0, -11}, // 0x2F '/' - {131, 9, 12, 9, 0, -11}, // 0x30 '0' - {145, 6, 12, 9, 1, -11}, // 0x31 '1' - {154, 9, 12, 9, 0, -11}, // 0x32 '2' - {168, 8, 12, 9, 0, -11}, // 0x33 '3' - {180, 8, 12, 9, 1, -11}, // 0x34 '4' - {192, 8, 12, 9, 1, -11}, // 0x35 '5' - {204, 8, 12, 9, 1, -11}, // 0x36 '6' - {216, 9, 12, 9, 0, -11}, // 0x37 '7' - {230, 8, 12, 9, 1, -11}, // 0x38 '8' - {242, 9, 12, 9, 0, -11}, // 0x39 '9' - {256, 3, 9, 6, 1, -8}, // 0x3A ':' - {260, 3, 12, 6, 2, -8}, // 0x3B ';' - {265, 10, 10, 12, 1, -9}, // 0x3C '<' - {278, 10, 5, 12, 1, -6}, // 0x3D '=' - {285, 10, 10, 12, 1, -8}, // 0x3E '>' - {298, 7, 12, 9, 1, -11}, // 0x3F '?' - {309, 13, 12, 17, 2, -11}, // 0x40 '@' - {329, 13, 12, 13, 0, -11}, // 0x41 'A' - {349, 11, 12, 12, 0, -11}, // 0x42 'B' - {366, 11, 12, 13, 1, -11}, // 0x43 'C' - {383, 11, 12, 13, 1, -11}, // 0x44 'D' - {400, 11, 12, 12, 1, -11}, // 0x45 'E' - {417, 10, 12, 11, 1, -11}, // 0x46 'F' - {432, 12, 12, 14, 1, -11}, // 0x47 'G' - {450, 12, 12, 14, 1, -11}, // 0x48 'H' - {468, 5, 12, 7, 1, -11}, // 0x49 'I' - {476, 8, 14, 9, 0, -11}, // 0x4A 'J' - {490, 13, 12, 14, 1, -11}, // 0x4B 'K' - {510, 11, 12, 12, 1, -11}, // 0x4C 'L' - {527, 16, 12, 17, 0, -11}, // 0x4D 'M' - {551, 11, 12, 13, 1, -11}, // 0x4E 'N' - {568, 12, 12, 14, 1, -11}, // 0x4F 'O' - {586, 10, 12, 11, 1, -11}, // 0x50 'P' - {601, 12, 15, 14, 1, -11}, // 0x51 'Q' - {624, 12, 12, 13, 1, -11}, // 0x52 'R' - {642, 8, 12, 10, 1, -11}, // 0x53 'S' - {654, 12, 12, 12, 0, -11}, // 0x54 'T' - {672, 11, 12, 13, 1, -11}, // 0x55 'U' - {689, 13, 13, 13, 0, -11}, // 0x56 'V' - {711, 18, 12, 18, 0, -11}, // 0x57 'W' - {738, 13, 12, 13, 0, -11}, // 0x58 'X' - {758, 13, 12, 13, 0, -11}, // 0x59 'Y' - {778, 11, 12, 12, 1, -11}, // 0x5A 'Z' - {795, 4, 15, 6, 1, -11}, // 0x5B '[' - {803, 6, 13, 5, 0, -11}, // 0x5C '\' - {813, 4, 15, 6, 1, -11}, // 0x5D ']' - {821, 8, 7, 10, 1, -11}, // 0x5E '^' - {828, 9, 1, 9, 0, 3}, // 0x5F '_' - {830, 4, 3, 6, 0, -12}, // 0x60 '`' - {832, 9, 9, 9, 0, -8}, // 0x61 'a' - {843, 10, 12, 10, 0, -11}, // 0x62 'b' - {858, 7, 9, 8, 0, -8}, // 0x63 'c' - {866, 10, 12, 10, 0, -11}, // 0x64 'd' - {881, 8, 9, 8, 0, -8}, // 0x65 'e' - {890, 7, 12, 7, 0, -11}, // 0x66 'f' - {901, 7, 13, 9, 1, -8}, // 0x67 'g' - {913, 10, 12, 10, 0, -11}, // 0x68 'h' - {928, 5, 12, 5, 0, -11}, // 0x69 'i' - {936, 6, 16, 7, 0, -11}, // 0x6A 'j' - {948, 10, 12, 10, 0, -11}, // 0x6B 'k' - {963, 5, 12, 5, 0, -11}, // 0x6C 'l' - {971, 15, 9, 15, 0, -8}, // 0x6D 'm' - {988, 10, 9, 10, 0, -8}, // 0x6E 'n' - {1000, 9, 9, 9, 0, -8}, // 0x6F 'o' - {1011, 10, 13, 10, 0, -8}, // 0x70 'p' - {1028, 10, 13, 10, 0, -8}, // 0x71 'q' - {1045, 8, 9, 8, 0, -8}, // 0x72 'r' - {1054, 5, 9, 7, 1, -8}, // 0x73 's' - {1060, 6, 11, 6, 0, -10}, // 0x74 't' - {1069, 10, 9, 10, 0, -8}, // 0x75 'u' - {1081, 9, 9, 9, 0, -8}, // 0x76 'v' - {1092, 12, 9, 13, 0, -8}, // 0x77 'w' - {1106, 9, 9, 9, 0, -8}, // 0x78 'x' - {1117, 8, 13, 9, 0, -8}, // 0x79 'y' - {1130, 7, 9, 8, 1, -8}, // 0x7A 'z' - {1138, 5, 16, 7, 0, -12}, // 0x7B '{' - {1148, 1, 13, 4, 1, -11}, // 0x7C '|' - {1150, 5, 16, 7, 2, -12}, // 0x7D '}' - {1160, 8, 2, 9, 1, -4}}; // 0x7E '~' - -const GFXfont FreeSerifBold9pt7b PROGMEM = { - (uint8_t *)FreeSerifBold9pt7bBitmaps, (GFXglyph *)FreeSerifBold9pt7bGlyphs, - 0x20, 0x7E, 22}; - -// Approx. 1834 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic12pt7b.h deleted file mode 100644 index d6674ce..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic12pt7b.h +++ /dev/null @@ -1,294 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBoldItalic12pt7bBitmaps[] PROGMEM = { - 0x07, 0x07, 0x07, 0x0F, 0x0E, 0x0E, 0x0C, 0x0C, 0x08, 0x18, 0x10, 0x00, - 0x00, 0x60, 0xF0, 0xF0, 0x60, 0x61, 0xF1, 0xF8, 0xF8, 0x6C, 0x34, 0x12, - 0x08, 0x01, 0x8C, 0x06, 0x60, 0x31, 0x80, 0xCC, 0x06, 0x30, 0xFF, 0xF0, - 0xC6, 0x03, 0x18, 0x0C, 0xC0, 0x63, 0x0F, 0xFF, 0x0C, 0x60, 0x33, 0x01, - 0x8C, 0x06, 0x30, 0x19, 0x80, 0x00, 0x80, 0x08, 0x07, 0xC1, 0x96, 0x31, - 0x33, 0x13, 0x3A, 0x23, 0xE0, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x7C, 0x05, - 0xC4, 0xCC, 0x48, 0xCC, 0x8C, 0xF8, 0x83, 0x30, 0x1E, 0x01, 0x00, 0x00, - 0x02, 0x07, 0x83, 0x03, 0x9F, 0x81, 0xC4, 0x20, 0x71, 0x10, 0x3C, 0x44, - 0x0E, 0x22, 0x03, 0x88, 0x80, 0xE4, 0x40, 0x1E, 0x31, 0xE0, 0x08, 0xE4, - 0x06, 0x71, 0x01, 0x3C, 0x40, 0x8E, 0x10, 0x23, 0x88, 0x10, 0xE2, 0x04, - 0x39, 0x02, 0x07, 0x80, 0x00, 0xF0, 0x01, 0x98, 0x03, 0x98, 0x03, 0x98, - 0x03, 0xB0, 0x03, 0xE0, 0x03, 0x80, 0x0F, 0x9F, 0x19, 0xCE, 0x31, 0xCC, - 0x61, 0xC8, 0xE1, 0xC8, 0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x78, 0x79, - 0x3F, 0xBE, 0x7F, 0xED, 0x20, 0x02, 0x08, 0x20, 0xC3, 0x0E, 0x18, 0x30, - 0xE1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x20, 0x40, 0x80, 0x81, 0x01, 0x00, - 0x10, 0x10, 0x20, 0x20, 0x40, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x70, 0xE1, - 0x83, 0x0C, 0x18, 0x61, 0x86, 0x00, 0x00, 0x0C, 0x33, 0x6C, 0x9B, 0xAE, - 0x1C, 0x3F, 0xEC, 0x9B, 0x36, 0x0C, 0x02, 0x00, 0x06, 0x00, 0x60, 0x06, - 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, - 0x00, 0x60, 0x31, 0xCE, 0x31, 0x08, 0x98, 0xFF, 0xFF, 0xC0, 0x6F, 0xF6, - 0x01, 0x80, 0x60, 0x30, 0x0C, 0x07, 0x01, 0x80, 0xE0, 0x30, 0x1C, 0x06, - 0x01, 0x80, 0xC0, 0x30, 0x18, 0x06, 0x03, 0x00, 0x03, 0x81, 0xC8, 0x71, - 0x1C, 0x33, 0x86, 0xE1, 0xDC, 0x3B, 0x87, 0xE0, 0xFC, 0x3B, 0x87, 0x70, - 0xEC, 0x39, 0x87, 0x31, 0xC2, 0x30, 0x3C, 0x00, 0x01, 0xC3, 0xF0, 0x38, - 0x0E, 0x03, 0x81, 0xE0, 0x70, 0x1C, 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x1E, - 0x07, 0x01, 0xC0, 0xF0, 0xFF, 0x80, 0x07, 0x81, 0xF8, 0x47, 0x90, 0x70, - 0x0E, 0x01, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, - 0x40, 0x8F, 0xF3, 0xFC, 0xFF, 0x80, 0x07, 0xC3, 0x3C, 0x03, 0x80, 0x70, - 0x0C, 0x03, 0x81, 0xC0, 0xFC, 0x07, 0xC0, 0x78, 0x07, 0x00, 0xE0, 0x1C, - 0x03, 0x30, 0xE7, 0x10, 0x7C, 0x00, 0x00, 0x10, 0x01, 0x80, 0x3C, 0x03, - 0xE0, 0x2E, 0x02, 0x70, 0x23, 0x82, 0x38, 0x21, 0xC2, 0x0E, 0x1F, 0xF9, - 0xFF, 0xC0, 0x38, 0x01, 0xC0, 0x1C, 0x00, 0xE0, 0x07, 0xF0, 0x7E, 0x0F, - 0xE0, 0x80, 0x08, 0x01, 0xE0, 0x1F, 0x83, 0xF8, 0x03, 0xC0, 0x1C, 0x00, - 0xC0, 0x0C, 0x00, 0xC0, 0x08, 0x61, 0x8F, 0x30, 0x7C, 0x00, 0x00, 0x60, - 0x78, 0x1C, 0x0F, 0x01, 0xC0, 0x70, 0x1F, 0xC3, 0x8C, 0xE1, 0xDC, 0x3B, - 0x87, 0x61, 0xEC, 0x3D, 0x87, 0x31, 0xE2, 0x38, 0x3C, 0x00, 0x3F, 0xEF, - 0xF9, 0xFF, 0x60, 0xC8, 0x18, 0x06, 0x00, 0x80, 0x30, 0x0C, 0x01, 0x80, - 0x60, 0x1C, 0x03, 0x00, 0xC0, 0x18, 0x06, 0x00, 0x03, 0x81, 0x88, 0x61, - 0x8C, 0x31, 0x86, 0x38, 0xC7, 0xB0, 0x78, 0x0F, 0x86, 0x71, 0x87, 0x60, - 0x6C, 0x0D, 0x81, 0xB0, 0x63, 0x18, 0x3E, 0x00, 0x07, 0x81, 0xC8, 0x71, - 0x8E, 0x33, 0xC6, 0x70, 0xCE, 0x39, 0xC7, 0x38, 0xE3, 0x38, 0x3F, 0x01, - 0xC0, 0x38, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x00, 0x0C, 0x3C, 0x78, 0x60, - 0x00, 0x00, 0x00, 0x61, 0xE3, 0xC3, 0x00, 0x0E, 0x0F, 0x0F, 0x0E, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x18, 0x10, 0x20, 0x40, 0x00, 0x10, - 0x07, 0x01, 0xF0, 0x7C, 0x3F, 0x0F, 0x80, 0xE0, 0x0F, 0x80, 0x3E, 0x00, - 0xF8, 0x03, 0xE0, 0x07, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x7C, 0x00, - 0xF8, 0x01, 0xE0, 0x1F, 0x07, 0xE0, 0xF8, 0x1F, 0x01, 0xE0, 0x0C, 0x00, - 0x00, 0x1E, 0x19, 0x8C, 0xE6, 0x70, 0x38, 0x38, 0x1C, 0x18, 0x18, 0x08, - 0x08, 0x00, 0x00, 0x03, 0x03, 0xC1, 0xE0, 0x60, 0x00, 0x03, 0xF0, 0x07, - 0x06, 0x06, 0x00, 0x86, 0x0E, 0x66, 0x0D, 0xDB, 0x0C, 0xE7, 0x06, 0x33, - 0x83, 0x31, 0xC3, 0x18, 0xE1, 0x8C, 0x70, 0xCC, 0x4C, 0x66, 0x46, 0x1F, - 0xC1, 0x80, 0x00, 0x30, 0x10, 0x07, 0xF0, 0x00, 0x10, 0x00, 0x30, 0x00, - 0x70, 0x00, 0x70, 0x00, 0xF0, 0x01, 0xF0, 0x01, 0x78, 0x03, 0x78, 0x02, - 0x38, 0x04, 0x38, 0x0C, 0x38, 0x0F, 0xF8, 0x18, 0x3C, 0x30, 0x3C, 0x20, - 0x3C, 0x60, 0x3C, 0xF8, 0x7F, 0x1F, 0xFC, 0x07, 0x9E, 0x07, 0x0F, 0x07, - 0x0F, 0x0F, 0x0F, 0x0F, 0x1E, 0x0E, 0x3C, 0x0F, 0xE0, 0x1E, 0x3C, 0x1E, - 0x1E, 0x1C, 0x1E, 0x3C, 0x1E, 0x3C, 0x1E, 0x3C, 0x3E, 0x38, 0x3C, 0x7C, - 0x78, 0xFF, 0xE0, 0x01, 0xF2, 0x0E, 0x1C, 0x38, 0x18, 0xE0, 0x33, 0xC0, - 0x4F, 0x00, 0x9E, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, - 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x1E, 0x04, 0x1E, 0x30, 0x0F, 0x80, 0x1F, - 0xFC, 0x01, 0xE3, 0xC0, 0x70, 0x78, 0x1C, 0x0E, 0x0F, 0x03, 0xC3, 0xC0, - 0xF0, 0xE0, 0x3C, 0x38, 0x0F, 0x1E, 0x03, 0xC7, 0x81, 0xF1, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x03, 0xC3, 0x81, 0xC1, 0xE1, 0xE0, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0x83, 0xC1, 0xC1, 0xC0, 0x40, 0xE0, 0x20, 0xF0, - 0x00, 0x78, 0xC0, 0x38, 0x40, 0x1F, 0xE0, 0x1E, 0x70, 0x0F, 0x18, 0x07, - 0x08, 0x03, 0x84, 0x03, 0xC0, 0x61, 0xE0, 0x20, 0xE0, 0x30, 0xF8, 0x78, - 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x07, 0x87, 0x07, 0x02, 0x07, 0x02, 0x0F, - 0x00, 0x0F, 0x18, 0x0E, 0x10, 0x0F, 0xF0, 0x1E, 0x70, 0x1E, 0x30, 0x1C, - 0x20, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x7C, 0x00, 0xFE, - 0x00, 0x01, 0xF9, 0x03, 0xC3, 0x83, 0x81, 0xC3, 0x80, 0x43, 0xC0, 0x23, - 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xF0, 0x3F, 0xF8, 0x0F, 0x3C, 0x07, - 0x9E, 0x03, 0xCF, 0x01, 0xC3, 0x80, 0xE1, 0xE0, 0xF0, 0x78, 0x70, 0x0F, - 0xE0, 0x00, 0x1F, 0xE7, 0xF0, 0x78, 0x3C, 0x07, 0x83, 0xC0, 0x70, 0x3C, - 0x0F, 0x03, 0x80, 0xF0, 0x78, 0x0E, 0x07, 0x80, 0xE0, 0x70, 0x1F, 0xFF, - 0x01, 0xE0, 0xF0, 0x1C, 0x0F, 0x03, 0xC0, 0xE0, 0x3C, 0x1E, 0x03, 0xC1, - 0xE0, 0x38, 0x1E, 0x07, 0xC3, 0xE0, 0xFE, 0x7F, 0x00, 0x1F, 0xC1, 0xE0, - 0x70, 0x1C, 0x0F, 0x03, 0xC0, 0xE0, 0x38, 0x1E, 0x07, 0x81, 0xC0, 0x70, - 0x3C, 0x0F, 0x03, 0x81, 0xF0, 0xFE, 0x00, 0x01, 0xFC, 0x03, 0xC0, 0x0F, - 0x00, 0x38, 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x0E, 0x70, 0x3B, 0xC0, 0xCE, - 0x01, 0xF0, 0x00, 0x1F, 0xEF, 0x83, 0xC1, 0x81, 0xC1, 0x80, 0xE1, 0x80, - 0xF1, 0x80, 0x79, 0x00, 0x39, 0x00, 0x1F, 0x80, 0x1F, 0xE0, 0x0F, 0x70, - 0x07, 0x3C, 0x07, 0x8E, 0x03, 0xC7, 0x01, 0xE3, 0xC0, 0xE0, 0xE0, 0xF8, - 0x78, 0xFE, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0x00, 0x1C, 0x00, 0x38, 0x00, - 0xF0, 0x01, 0xE0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x70, - 0x00, 0xE0, 0x03, 0xC0, 0x27, 0x00, 0xCE, 0x03, 0x3C, 0x1E, 0xFF, 0xFC, - 0x0F, 0x80, 0x7E, 0x0F, 0x00, 0xF0, 0x1E, 0x03, 0xE0, 0x3C, 0x0F, 0x80, - 0xB8, 0x17, 0x01, 0x70, 0x5E, 0x02, 0xF1, 0xBC, 0x05, 0xE2, 0x70, 0x11, - 0xC8, 0xE0, 0x23, 0xB3, 0xC0, 0x47, 0x47, 0x81, 0x0F, 0x8E, 0x02, 0x1E, - 0x1C, 0x04, 0x38, 0x78, 0x08, 0x70, 0xF0, 0x30, 0xC3, 0xE0, 0xF9, 0x8F, - 0xE0, 0x1F, 0x03, 0xE0, 0xF0, 0x38, 0x1E, 0x02, 0x03, 0xE0, 0xC0, 0xBC, - 0x10, 0x13, 0xC2, 0x02, 0x78, 0x40, 0x47, 0x90, 0x10, 0xF2, 0x02, 0x0F, - 0x40, 0x41, 0xE8, 0x18, 0x1E, 0x02, 0x03, 0xC0, 0x40, 0x38, 0x08, 0x06, - 0x03, 0x00, 0x40, 0x10, 0x08, 0x00, 0x01, 0xF8, 0x07, 0x1C, 0x0E, 0x0E, - 0x1E, 0x0F, 0x3C, 0x0F, 0x3C, 0x0F, 0x78, 0x0F, 0x78, 0x0F, 0xF8, 0x1F, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x78, 0x70, 0x70, - 0x38, 0xE0, 0x1F, 0x80, 0x1F, 0xFC, 0x07, 0x9E, 0x07, 0x0F, 0x07, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x1E, 0x0E, 0x3C, 0x1F, 0xF0, 0x1E, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x7C, 0x00, - 0xFE, 0x00, 0x01, 0xF8, 0x07, 0x1C, 0x0E, 0x0E, 0x1E, 0x0F, 0x3C, 0x0F, - 0x3C, 0x0F, 0x78, 0x0F, 0x78, 0x1F, 0xF8, 0x1F, 0xF0, 0x1E, 0xF0, 0x1E, - 0xF0, 0x3C, 0xF0, 0x3C, 0xF0, 0x78, 0x70, 0x70, 0x39, 0xC0, 0x0E, 0x00, - 0x08, 0x02, 0x3F, 0x04, 0x7F, 0xF8, 0x83, 0xF0, 0x1F, 0xF8, 0x07, 0x9E, - 0x07, 0x8F, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1E, 0x0E, 0x3C, - 0x1F, 0xF0, 0x1E, 0xF0, 0x1C, 0xF0, 0x3C, 0xF0, 0x3C, 0x78, 0x3C, 0x78, - 0x3C, 0x78, 0x7C, 0x3C, 0xFE, 0x3E, 0x07, 0x91, 0xC7, 0x18, 0x73, 0x82, - 0x38, 0x23, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x01, 0xE0, 0x1E, - 0x40, 0xE4, 0x0E, 0x60, 0xCE, 0x1C, 0x9F, 0x00, 0x7F, 0xFE, 0xE7, 0x9D, - 0x0E, 0x16, 0x3C, 0x20, 0x78, 0x40, 0xE0, 0x01, 0xC0, 0x07, 0x80, 0x0F, - 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0x80, 0x0F, 0x00, - 0x1E, 0x00, 0xFF, 0x00, 0x7F, 0x1F, 0x3C, 0x0E, 0x38, 0x04, 0x38, 0x0C, - 0x78, 0x08, 0x78, 0x08, 0x70, 0x08, 0x70, 0x10, 0xF0, 0x10, 0xF0, 0x10, - 0xF0, 0x10, 0xF0, 0x20, 0xF0, 0x20, 0xF0, 0x20, 0xF0, 0x40, 0x78, 0xC0, - 0x3F, 0x00, 0xFF, 0x1F, 0x3C, 0x06, 0x3C, 0x04, 0x3C, 0x08, 0x3C, 0x08, - 0x3C, 0x10, 0x1C, 0x20, 0x1C, 0x20, 0x1E, 0x40, 0x1E, 0x80, 0x1E, 0x80, - 0x1F, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x08, 0x00, 0xFE, 0x7C, - 0x79, 0xE1, 0xC1, 0x8F, 0x0E, 0x08, 0x78, 0x70, 0x43, 0xC7, 0x84, 0x1E, - 0x3E, 0x20, 0x72, 0xF2, 0x03, 0x97, 0x90, 0x1D, 0x1D, 0x00, 0xE8, 0xE8, - 0x07, 0x87, 0x80, 0x3C, 0x3C, 0x01, 0xC1, 0xC0, 0x0E, 0x0E, 0x00, 0x20, - 0x60, 0x01, 0x02, 0x00, 0x1F, 0xCF, 0x83, 0xC1, 0x81, 0xE1, 0x80, 0x71, - 0x80, 0x39, 0x80, 0x1F, 0x80, 0x07, 0x80, 0x03, 0x80, 0x01, 0xE0, 0x01, - 0xF0, 0x00, 0xB8, 0x00, 0x9C, 0x00, 0x8F, 0x00, 0x83, 0x80, 0xC1, 0xC0, - 0xE0, 0xF0, 0xF9, 0xFE, 0x00, 0xFE, 0x7C, 0xE0, 0x63, 0x81, 0x0F, 0x08, - 0x1C, 0x40, 0x71, 0x01, 0xE8, 0x03, 0xC0, 0x0E, 0x00, 0x38, 0x01, 0xE0, - 0x07, 0x80, 0x1C, 0x00, 0x70, 0x03, 0xC0, 0x0F, 0x00, 0xFF, 0x00, 0x1F, - 0xFE, 0x38, 0x78, 0x60, 0xF1, 0x83, 0xC2, 0x0F, 0x00, 0x1E, 0x00, 0x78, - 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xE0, 0x47, - 0x81, 0x1F, 0x06, 0x3C, 0x3C, 0xFF, 0xF0, 0x07, 0xC1, 0x80, 0xE0, 0x30, - 0x0C, 0x03, 0x01, 0xC0, 0x60, 0x18, 0x06, 0x03, 0x80, 0xC0, 0x30, 0x0C, - 0x07, 0x01, 0xC0, 0x60, 0x18, 0x0E, 0x03, 0xE0, 0xC3, 0x06, 0x18, 0x61, - 0x83, 0x0C, 0x30, 0xC1, 0x86, 0x18, 0x60, 0xC3, 0x0F, 0x81, 0xC0, 0xE0, - 0x60, 0x30, 0x18, 0x1C, 0x0C, 0x06, 0x03, 0x03, 0x81, 0x80, 0xC0, 0x60, - 0x70, 0x38, 0x18, 0x0C, 0x0E, 0x1F, 0x00, 0x0C, 0x07, 0x81, 0xE0, 0xDC, - 0x33, 0x18, 0xC6, 0x1B, 0x06, 0xC0, 0xC0, 0xFF, 0xF0, 0xC7, 0x0C, 0x30, - 0x07, 0x70, 0xCE, 0x1C, 0xE3, 0x8E, 0x70, 0xC7, 0x0C, 0x71, 0xCE, 0x1C, - 0xE1, 0x8E, 0x79, 0xE9, 0xA7, 0x1C, 0x02, 0x07, 0xC0, 0x38, 0x06, 0x01, - 0xC0, 0x38, 0x06, 0x71, 0xF7, 0x38, 0xE7, 0x1C, 0xC3, 0xB8, 0x77, 0x1C, - 0xE3, 0xB8, 0xE7, 0x18, 0xE6, 0x0F, 0x80, 0x07, 0x0C, 0xCE, 0x66, 0x07, - 0x03, 0x83, 0x81, 0xC0, 0xE0, 0x70, 0xBC, 0x87, 0x80, 0x00, 0x08, 0x03, - 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x70, 0x01, 0xC0, 0x77, 0x03, 0x3C, 0x18, - 0xE0, 0xE3, 0x87, 0x0E, 0x1C, 0x70, 0x71, 0xC3, 0x87, 0x0E, 0x3C, 0x38, - 0xE8, 0xE5, 0xA1, 0xE7, 0x00, 0x07, 0x0C, 0xCE, 0x66, 0x37, 0x33, 0xBB, - 0xB1, 0xE0, 0xE0, 0x70, 0xB8, 0x87, 0x80, 0x00, 0x38, 0x01, 0xB0, 0x0C, - 0xC0, 0x30, 0x01, 0xC0, 0x07, 0x00, 0x7E, 0x00, 0xE0, 0x03, 0x80, 0x0E, - 0x00, 0x30, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x0E, - 0x00, 0x38, 0x00, 0xC0, 0x33, 0x00, 0xD8, 0x01, 0xC0, 0x00, 0x03, 0x80, - 0x73, 0xC7, 0x1C, 0x38, 0xE1, 0xCF, 0x06, 0x70, 0x1E, 0x01, 0x00, 0x1C, - 0x00, 0xF8, 0x07, 0xF0, 0xC7, 0x8C, 0x0C, 0x60, 0x63, 0x86, 0x07, 0xE0, - 0x01, 0x00, 0xF8, 0x01, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x31, 0xC3, - 0xBE, 0x1E, 0x70, 0xE3, 0x8F, 0x38, 0x71, 0xC3, 0x8E, 0x1C, 0xE1, 0xC7, - 0x0E, 0x3A, 0x71, 0xD3, 0x0F, 0x00, 0x1C, 0x71, 0xC0, 0x00, 0x6F, 0x8E, - 0x31, 0xC7, 0x18, 0x63, 0x8E, 0xBC, 0xE0, 0x00, 0xE0, 0x1C, 0x03, 0x80, - 0x00, 0x00, 0x0F, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x70, 0x0E, 0x01, 0xC0, - 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x06, 0x01, 0xC3, 0x38, 0x6E, 0x07, 0x80, - 0x01, 0x00, 0xF8, 0x01, 0xC0, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x33, 0xE3, - 0x8C, 0x1C, 0xC0, 0xE4, 0x06, 0x40, 0x7E, 0x03, 0xF0, 0x1D, 0x81, 0xCE, - 0x0E, 0x72, 0x71, 0xA3, 0x8E, 0x00, 0x06, 0x7C, 0x70, 0xE1, 0xC3, 0x0E, - 0x1C, 0x38, 0x61, 0xC3, 0x87, 0x0C, 0x38, 0x72, 0xE9, 0xE0, 0x3C, 0x73, - 0xC7, 0x7D, 0x71, 0xE7, 0x9C, 0xF1, 0xCE, 0x3C, 0xF3, 0x8E, 0x39, 0xC3, - 0x8E, 0x71, 0xC3, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xD7, 0x1C, 0x7B, 0x8E, - 0x1C, 0x3C, 0xF1, 0xD7, 0x1E, 0x73, 0xCE, 0x3C, 0xE3, 0x8E, 0x39, 0xC7, - 0x9C, 0x71, 0xC7, 0x1D, 0x71, 0xEE, 0x1C, 0x0F, 0x06, 0x63, 0x9D, 0xC7, - 0x71, 0xF8, 0x7E, 0x3F, 0x8E, 0xE3, 0xB9, 0xC6, 0x60, 0xF0, 0x0F, 0x38, - 0x1F, 0x70, 0x71, 0xC1, 0xC7, 0x0E, 0x1C, 0x38, 0xF0, 0xE3, 0x83, 0x8E, - 0x1C, 0x70, 0x71, 0xC1, 0xCE, 0x07, 0xE0, 0x38, 0x00, 0xE0, 0x03, 0x80, - 0x3F, 0x00, 0x07, 0x70, 0xCE, 0x18, 0xE3, 0x8E, 0x70, 0xE7, 0x1C, 0xF1, - 0xCE, 0x1C, 0xE3, 0x8E, 0x38, 0xE7, 0x87, 0xB0, 0x07, 0x00, 0x70, 0x0F, - 0x03, 0xF8, 0x0D, 0xDF, 0x71, 0xAC, 0xF0, 0x38, 0x0E, 0x03, 0x81, 0xC0, - 0x70, 0x1C, 0x0E, 0x00, 0x1D, 0x99, 0x8C, 0x46, 0x23, 0x80, 0xE0, 0x70, - 0x1C, 0x06, 0x23, 0x19, 0x17, 0x00, 0x0C, 0x10, 0xE3, 0xF3, 0x86, 0x1C, - 0x38, 0x71, 0xC3, 0x87, 0x0E, 0x9E, 0x38, 0x00, 0xF8, 0xE3, 0x8E, 0x38, - 0xC3, 0x9C, 0x71, 0xC7, 0x18, 0x71, 0x87, 0x38, 0xE3, 0x8E, 0xFA, 0xF3, - 0xAE, 0x3C, 0xF0, 0xDC, 0x33, 0x0C, 0xC2, 0x31, 0x8C, 0xC3, 0x60, 0xF0, - 0x38, 0x0C, 0x02, 0x00, 0xE0, 0x86, 0xE3, 0x0C, 0xC6, 0x19, 0x9C, 0x23, - 0x78, 0xC7, 0xF9, 0x0E, 0x74, 0x1C, 0xF0, 0x31, 0xC0, 0x43, 0x00, 0x84, - 0x00, 0x0E, 0x31, 0xF3, 0x83, 0xA0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, - 0x00, 0xE0, 0x0B, 0x02, 0x5D, 0x3C, 0xF1, 0xC3, 0x00, 0x04, 0x67, 0x8C, - 0x79, 0x87, 0x10, 0xE2, 0x1C, 0x81, 0x90, 0x3A, 0x07, 0x80, 0xF0, 0x1C, - 0x03, 0x00, 0x40, 0x08, 0x32, 0x07, 0x80, 0x3F, 0xCF, 0xE6, 0x30, 0x08, - 0x04, 0x02, 0x01, 0x00, 0xC0, 0x30, 0x1E, 0x0F, 0x98, 0x76, 0x07, 0x00, - 0x01, 0xE0, 0x70, 0x1C, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x80, 0x60, 0x0C, - 0x03, 0x80, 0xF0, 0x3C, 0x07, 0x00, 0x40, 0x0C, 0x01, 0x80, 0x70, 0x0E, - 0x01, 0xC0, 0x30, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, - 0x18, 0x06, 0x01, 0x80, 0xE0, 0x38, 0x0C, 0x03, 0x00, 0xC0, 0x10, 0x1F, - 0x07, 0x03, 0x80, 0xE0, 0x30, 0x0C, 0x07, 0x01, 0x80, 0xE0, 0xE0, 0x00, - 0x38, 0x0F, 0xCD, 0x1F, 0x80, 0xE0}; - -const GFXglyph FreeSerifBoldItalic12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 8, 17, 9, 2, -15}, // 0x21 '!' - {17, 9, 7, 13, 4, -15}, // 0x22 '"' - {25, 14, 16, 12, -1, -15}, // 0x23 '#' - {53, 12, 20, 12, 0, -17}, // 0x24 '$' - {83, 18, 18, 20, 1, -16}, // 0x25 '%' - {124, 16, 17, 19, 0, -15}, // 0x26 '&' - {158, 3, 7, 7, 3, -15}, // 0x27 ''' - {161, 7, 21, 8, 1, -15}, // 0x28 '(' - {180, 7, 21, 8, -1, -15}, // 0x29 ')' - {199, 10, 10, 12, 1, -15}, // 0x2A '*' - {212, 12, 12, 14, 1, -11}, // 0x2B '+' - {230, 5, 8, 6, -2, -3}, // 0x2C ',' - {235, 6, 3, 8, 0, -6}, // 0x2D '-' - {238, 4, 4, 6, 0, -2}, // 0x2E '.' - {240, 10, 16, 8, 0, -15}, // 0x2F '/' - {260, 11, 17, 12, 0, -15}, // 0x30 '0' - {284, 10, 17, 12, 0, -15}, // 0x31 '1' - {306, 11, 17, 12, 0, -15}, // 0x32 '2' - {330, 11, 17, 12, 0, -15}, // 0x33 '3' - {354, 13, 16, 12, 0, -15}, // 0x34 '4' - {380, 12, 17, 12, 0, -15}, // 0x35 '5' - {406, 11, 17, 12, 1, -15}, // 0x36 '6' - {430, 11, 16, 12, 2, -15}, // 0x37 '7' - {452, 11, 17, 12, 0, -15}, // 0x38 '8' - {476, 11, 17, 12, 0, -15}, // 0x39 '9' - {500, 7, 12, 6, 0, -10}, // 0x3A ':' - {511, 8, 15, 6, -1, -10}, // 0x3B ';' - {526, 12, 13, 14, 1, -12}, // 0x3C '<' - {546, 12, 6, 14, 2, -8}, // 0x3D '=' - {555, 13, 13, 14, 1, -12}, // 0x3E '>' - {577, 9, 17, 12, 2, -15}, // 0x3F '?' - {597, 17, 16, 20, 1, -15}, // 0x40 '@' - {631, 16, 17, 17, 0, -15}, // 0x41 'A' - {665, 16, 17, 15, 0, -15}, // 0x42 'B' - {699, 15, 17, 15, 1, -15}, // 0x43 'C' - {731, 18, 17, 17, 0, -15}, // 0x44 'D' - {770, 17, 17, 15, 0, -15}, // 0x45 'E' - {807, 16, 17, 15, 0, -15}, // 0x46 'F' - {841, 17, 17, 17, 1, -15}, // 0x47 'G' - {878, 20, 17, 18, 0, -15}, // 0x48 'H' - {921, 10, 17, 9, 0, -15}, // 0x49 'I' - {943, 14, 18, 12, 0, -15}, // 0x4A 'J' - {975, 17, 17, 16, 0, -15}, // 0x4B 'K' - {1012, 15, 17, 15, 0, -15}, // 0x4C 'L' - {1044, 23, 17, 21, 0, -15}, // 0x4D 'M' - {1093, 19, 17, 17, 0, -15}, // 0x4E 'N' - {1134, 16, 17, 16, 1, -15}, // 0x4F 'O' - {1168, 16, 17, 14, 0, -15}, // 0x50 'P' - {1202, 16, 21, 16, 1, -15}, // 0x51 'Q' - {1244, 16, 17, 16, 0, -15}, // 0x52 'R' - {1278, 12, 17, 12, 0, -15}, // 0x53 'S' - {1304, 15, 17, 14, 2, -15}, // 0x54 'T' - {1336, 16, 17, 17, 3, -15}, // 0x55 'U' - {1370, 16, 16, 17, 3, -15}, // 0x56 'V' - {1402, 21, 16, 22, 3, -15}, // 0x57 'W' - {1444, 17, 17, 17, 0, -15}, // 0x58 'X' - {1481, 14, 17, 15, 3, -15}, // 0x59 'Y' - {1511, 15, 17, 13, 0, -15}, // 0x5A 'Z' - {1543, 10, 20, 8, -1, -15}, // 0x5B '[' - {1568, 6, 16, 10, 3, -15}, // 0x5C '\' - {1580, 9, 20, 8, -1, -15}, // 0x5D ']' - {1603, 10, 9, 14, 2, -15}, // 0x5E '^' - {1615, 12, 1, 12, 0, 4}, // 0x5F '_' - {1617, 5, 4, 8, 2, -15}, // 0x60 '`' - {1620, 12, 12, 12, 0, -10}, // 0x61 'a' - {1638, 11, 18, 12, 1, -16}, // 0x62 'b' - {1663, 9, 12, 10, 1, -10}, // 0x63 'c' - {1677, 14, 18, 12, 0, -16}, // 0x64 'd' - {1709, 9, 12, 10, 1, -10}, // 0x65 'e' - {1723, 14, 22, 12, -2, -16}, // 0x66 'f' - {1762, 13, 16, 12, -1, -10}, // 0x67 'g' - {1788, 13, 18, 13, 0, -16}, // 0x68 'h' - {1818, 6, 17, 7, 1, -15}, // 0x69 'i' - {1831, 11, 21, 8, -2, -15}, // 0x6A 'j' - {1860, 13, 18, 12, 0, -16}, // 0x6B 'k' - {1890, 7, 18, 7, 1, -16}, // 0x6C 'l' - {1906, 18, 12, 18, 0, -10}, // 0x6D 'm' - {1933, 12, 12, 13, 0, -10}, // 0x6E 'n' - {1951, 10, 12, 11, 1, -10}, // 0x6F 'o' - {1966, 14, 16, 12, -2, -10}, // 0x70 'p' - {1994, 12, 16, 12, 0, -10}, // 0x71 'q' - {2018, 10, 11, 10, 0, -10}, // 0x72 'r' - {2032, 9, 12, 9, 0, -10}, // 0x73 's' - {2046, 7, 15, 7, 1, -13}, // 0x74 't' - {2060, 12, 12, 13, 1, -10}, // 0x75 'u' - {2078, 10, 11, 11, 1, -10}, // 0x76 'v' - {2092, 15, 11, 16, 1, -10}, // 0x77 'w' - {2113, 13, 12, 11, -1, -10}, // 0x78 'x' - {2133, 11, 16, 10, -1, -10}, // 0x79 'y' - {2155, 10, 13, 10, 0, -10}, // 0x7A 'z' - {2172, 11, 21, 8, 0, -16}, // 0x7B '{' - {2201, 2, 16, 6, 3, -15}, // 0x7C '|' - {2205, 10, 21, 8, -3, -16}, // 0x7D '}' - {2232, 11, 4, 14, 1, -7}}; // 0x7E '~' - -const GFXfont FreeSerifBoldItalic12pt7b PROGMEM = { - (uint8_t *)FreeSerifBoldItalic12pt7bBitmaps, - (GFXglyph *)FreeSerifBoldItalic12pt7bGlyphs, 0x20, 0x7E, 29}; - -// Approx. 2910 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic18pt7b.h deleted file mode 100644 index 8e75b24..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic18pt7b.h +++ /dev/null @@ -1,502 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBoldItalic18pt7bBitmaps[] PROGMEM = { - 0x01, 0xC0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0x80, 0xF0, 0x3C, 0x07, - 0x80, 0xE0, 0x1C, 0x03, 0x00, 0x60, 0x0C, 0x03, 0x00, 0x60, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x81, 0xF8, 0x3F, 0x07, 0xE0, 0x78, 0x00, 0x38, - 0x1D, 0xE0, 0xF7, 0x83, 0xDC, 0x0E, 0x70, 0x39, 0xC0, 0xE6, 0x03, 0x18, - 0x0C, 0x40, 0x23, 0x01, 0x80, 0x00, 0x38, 0x60, 0x07, 0x0E, 0x00, 0x70, - 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0x0E, 0x38, 0x01, 0xC3, 0x81, 0xFF, - 0xFF, 0x1F, 0xFF, 0xE1, 0xFF, 0xFE, 0x03, 0x86, 0x00, 0x30, 0xE0, 0x07, - 0x0E, 0x00, 0x71, 0xC0, 0x0E, 0x1C, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, - 0xFF, 0xF0, 0x1C, 0x30, 0x01, 0x87, 0x00, 0x38, 0x70, 0x03, 0x0E, 0x00, - 0x70, 0xE0, 0x07, 0x0C, 0x00, 0xE1, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x0C, - 0x00, 0x7E, 0x00, 0xFF, 0xC0, 0xF3, 0x70, 0x71, 0x9C, 0x70, 0xC6, 0x38, - 0x43, 0x1C, 0x61, 0x0F, 0x30, 0x87, 0xD8, 0x03, 0xF8, 0x00, 0xFE, 0x00, - 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xDF, 0x10, 0x47, - 0x88, 0x63, 0xCC, 0x31, 0xE6, 0x10, 0xF3, 0x98, 0x71, 0xCC, 0x78, 0x7E, - 0x78, 0x07, 0xF8, 0x03, 0xF0, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x03, 0xC0, - 0x18, 0x01, 0xFE, 0x0F, 0x00, 0x7C, 0xFF, 0xC0, 0x1F, 0x0F, 0x98, 0x07, - 0xC1, 0x06, 0x00, 0xF8, 0x21, 0x80, 0x3E, 0x04, 0x30, 0x07, 0xC1, 0x8C, - 0x00, 0xF0, 0x21, 0x80, 0x1E, 0x0C, 0x60, 0x03, 0xC1, 0x0C, 0x00, 0x78, - 0xC3, 0x03, 0xC7, 0xF8, 0x61, 0xFC, 0x7C, 0x18, 0x7C, 0xC0, 0x06, 0x1F, - 0x08, 0x00, 0xC7, 0xC1, 0x00, 0x30, 0xF0, 0x20, 0x06, 0x3E, 0x04, 0x01, - 0x87, 0xC1, 0x00, 0x30, 0xF0, 0x20, 0x0C, 0x1E, 0x0C, 0x03, 0x03, 0xC1, - 0x00, 0x60, 0x3C, 0xC0, 0x18, 0x07, 0xF8, 0x03, 0x00, 0x7C, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x1E, 0x38, 0x00, 0x0E, 0x0E, 0x00, - 0x0F, 0x07, 0x00, 0x07, 0x83, 0x80, 0x03, 0xC3, 0x80, 0x01, 0xE3, 0x80, - 0x00, 0xF7, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7F, 0x0F, - 0xF0, 0xE7, 0x81, 0xE0, 0xE3, 0xE0, 0xE0, 0xE1, 0xF0, 0x60, 0xE0, 0x7C, - 0x60, 0xF0, 0x3E, 0x20, 0x78, 0x1F, 0xB0, 0x3C, 0x07, 0xF0, 0x1F, 0x03, - 0xF0, 0x0F, 0x80, 0xFC, 0x03, 0xF0, 0x7F, 0x8D, 0xFF, 0xEF, 0xFC, 0x7F, - 0xE3, 0xFC, 0x0F, 0xC0, 0x78, 0x00, 0x3B, 0xDE, 0xE7, 0x39, 0x8C, 0x46, - 0x00, 0x00, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x1C, 0x07, 0x01, 0xE0, - 0x38, 0x0F, 0x01, 0xC0, 0x38, 0x0F, 0x01, 0xE0, 0x38, 0x07, 0x00, 0xE0, - 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x06, - 0x00, 0xC0, 0x08, 0x00, 0x80, 0x10, 0x00, 0x06, 0x00, 0x40, 0x04, 0x00, - 0x80, 0x18, 0x01, 0x00, 0x30, 0x06, 0x00, 0xC0, 0x1C, 0x03, 0x80, 0x70, - 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x01, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x3C, - 0x07, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, 0x70, 0x18, 0x06, 0x01, 0x80, - 0x00, 0x07, 0x00, 0x38, 0x01, 0xC1, 0x8E, 0x3E, 0x23, 0xF9, 0x3F, 0xEB, - 0xE0, 0xE0, 0xFF, 0xF7, 0x93, 0xF8, 0x9F, 0x8E, 0x60, 0x70, 0x03, 0x80, - 0x08, 0x00, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, - 0x00, 0x0E, 0x00, 0x07, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, - 0x01, 0xC0, 0x00, 0x1C, 0x7C, 0xF9, 0xF1, 0xE1, 0xC3, 0x0C, 0x30, 0xC2, - 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x7B, 0xFF, 0xFF, 0x78, 0x00, 0x1C, - 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x38, - 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x80, 0x1C, 0x00, 0x70, - 0x03, 0x80, 0x0E, 0x00, 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x38, 0x01, 0xC0, - 0x07, 0x00, 0x1C, 0x00, 0xE0, 0x00, 0x00, 0xF0, 0x07, 0x30, 0x1C, 0x30, - 0x78, 0x60, 0xE0, 0xE3, 0xC1, 0xCF, 0x83, 0x9E, 0x0F, 0x3C, 0x1E, 0xF8, - 0x3D, 0xE0, 0x7B, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xBC, 0x0F, 0x78, 0x3E, - 0xF0, 0x7D, 0xE0, 0xF3, 0x81, 0xE7, 0x07, 0x8E, 0x0F, 0x0C, 0x3C, 0x18, - 0x70, 0x19, 0xC0, 0x1E, 0x00, 0x00, 0x06, 0x01, 0xF8, 0x1F, 0xF0, 0x03, - 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF0, 0x03, 0xE0, - 0x07, 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xE0, 0x07, - 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, - 0x0F, 0xC0, 0xFF, 0xF0, 0x00, 0xF8, 0x01, 0xFC, 0x03, 0xFE, 0x06, 0x3F, - 0x08, 0x1F, 0x18, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0E, - 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x70, 0x00, 0xC0, - 0x01, 0x80, 0x03, 0x00, 0x06, 0x02, 0x0C, 0x06, 0x08, 0x0C, 0x1F, 0xFC, - 0x3F, 0xFC, 0x7F, 0xF8, 0xFF, 0xF8, 0x00, 0xF0, 0x07, 0xF8, 0x1F, 0xF0, - 0x61, 0xF0, 0x81, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0E, 0x00, 0x3C, 0x00, - 0xE0, 0x07, 0xC0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x1E, - 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xC0, 0x07, 0x9C, 0x0E, 0x3C, - 0x38, 0x7F, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x3C, - 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x02, 0xF8, 0x01, 0x3C, 0x00, - 0x9F, 0x00, 0x47, 0xC0, 0x31, 0xE0, 0x18, 0x78, 0x0C, 0x3E, 0x06, 0x0F, - 0x83, 0x03, 0xC1, 0x80, 0xF0, 0x7F, 0xFF, 0x1F, 0xFF, 0xCF, 0xFF, 0xF0, - 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x01, - 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x60, 0x00, 0x30, 0x00, - 0x10, 0x00, 0x1F, 0x00, 0x0F, 0xE0, 0x0F, 0xF8, 0x07, 0xFE, 0x00, 0x3F, - 0x00, 0x07, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x1C, 0x00, - 0x0E, 0x00, 0x06, 0x00, 0x03, 0x00, 0x03, 0x87, 0x83, 0x83, 0xE3, 0x81, - 0xFF, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x03, 0x80, 0x0F, 0x80, 0x1F, 0x00, - 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x1F, 0x00, - 0x1F, 0xF0, 0x1F, 0xFE, 0x0F, 0xCF, 0x07, 0xC3, 0xC7, 0xE1, 0xE3, 0xE0, - 0xF1, 0xF0, 0x78, 0xF8, 0x3C, 0x78, 0x3E, 0x3C, 0x1F, 0x1E, 0x0F, 0x0F, - 0x0F, 0x83, 0x87, 0x81, 0xE7, 0x80, 0x7F, 0x80, 0x0F, 0x80, 0x00, 0x3F, - 0xFF, 0x3F, 0xFE, 0x3F, 0xFE, 0x7F, 0xFC, 0x60, 0x1C, 0x80, 0x38, 0x80, - 0x30, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, 0x01, 0xC0, 0x01, 0xC0, 0x03, - 0x80, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x1C, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xE0, 0x00, 0x00, - 0xF8, 0x00, 0xFF, 0x00, 0xE1, 0xC0, 0xE0, 0xF0, 0xF0, 0x38, 0x78, 0x1C, - 0x3C, 0x0E, 0x1F, 0x07, 0x0F, 0x87, 0x07, 0xE7, 0x01, 0xFF, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x3F, 0xE0, 0x73, 0xF0, 0x70, 0xFC, 0x70, 0x3E, 0x70, - 0x0F, 0x38, 0x07, 0x9C, 0x03, 0xCE, 0x01, 0xE7, 0x00, 0xE1, 0xC0, 0xE0, - 0x70, 0xE0, 0x0F, 0xC0, 0x00, 0x00, 0xF8, 0x01, 0xFF, 0x01, 0xF3, 0xC1, - 0xF0, 0xE1, 0xF0, 0x70, 0xF0, 0x3C, 0xF8, 0x1E, 0x7C, 0x0F, 0x3C, 0x0F, - 0x9E, 0x07, 0xCF, 0x03, 0xE7, 0x83, 0xF3, 0xC1, 0xF0, 0xF1, 0xF8, 0x3F, - 0xF8, 0x0F, 0xFC, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x3E, 0x00, - 0x3C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x07, - 0x83, 0xF0, 0xFC, 0x3F, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x78, 0x3F, 0x0F, 0xC3, 0xF0, 0x78, 0x00, 0x03, 0xC0, 0xFC, - 0x1F, 0x83, 0xF0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x03, 0xC0, 0x7C, 0x0F, 0x80, 0xF0, 0x0E, 0x01, 0x80, 0x30, 0x0C, - 0x03, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x7C, 0x00, - 0x7F, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0x3E, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, - 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x04, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x38, 0x00, 0x0F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xFC, 0x00, - 0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xF0, 0x00, 0xFC, 0x00, - 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFC, 0x03, 0xFC, 0x00, 0xFC, 0x00, - 0x3C, 0x00, 0x08, 0x00, 0x00, 0x07, 0xC0, 0xFF, 0x0E, 0x3C, 0x70, 0xF3, - 0xC7, 0x8C, 0x3C, 0x01, 0xE0, 0x1F, 0x00, 0xF0, 0x07, 0x80, 0x78, 0x07, - 0x80, 0x30, 0x03, 0x00, 0x10, 0x01, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0xFF, 0xF8, 0x01, 0xF0, 0x1E, 0x01, 0xE0, 0x03, 0x81, 0xC0, - 0x00, 0xE1, 0xC0, 0x18, 0x38, 0xE0, 0x3F, 0xCC, 0xE0, 0x3C, 0xE7, 0x70, - 0x3C, 0x71, 0xF0, 0x1C, 0x30, 0xF8, 0x1E, 0x38, 0x7C, 0x0E, 0x1C, 0x3E, - 0x0F, 0x0E, 0x1F, 0x07, 0x0E, 0x0F, 0x83, 0x87, 0x0D, 0xC1, 0xC7, 0x86, - 0x70, 0xE5, 0xC6, 0x38, 0x7C, 0xFE, 0x1C, 0x1C, 0x3E, 0x07, 0x00, 0x00, - 0x01, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x40, 0x1F, 0x00, 0xE0, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x17, 0xC0, 0x00, 0x67, 0x80, 0x00, 0x8F, - 0x00, 0x03, 0x1F, 0x00, 0x0C, 0x3E, 0x00, 0x10, 0x7C, 0x00, 0x60, 0xF8, - 0x00, 0x81, 0xF0, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x18, 0x07, 0xC0, - 0x60, 0x0F, 0x81, 0xC0, 0x1F, 0x03, 0x00, 0x3E, 0x0E, 0x00, 0x7C, 0x3C, - 0x00, 0xFC, 0xFE, 0x0F, 0xFE, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xFC, 0x01, - 0xF8, 0x7E, 0x01, 0xF8, 0x3F, 0x01, 0xF0, 0x3F, 0x01, 0xF0, 0x3F, 0x01, - 0xF0, 0x3F, 0x03, 0xE0, 0x3F, 0x03, 0xE0, 0x7E, 0x03, 0xE0, 0xFC, 0x03, - 0xE3, 0xF0, 0x07, 0xFF, 0x80, 0x07, 0xC3, 0xE0, 0x07, 0xC1, 0xF8, 0x0F, - 0xC0, 0xF8, 0x0F, 0x80, 0xFC, 0x0F, 0x80, 0xFC, 0x0F, 0x80, 0xFC, 0x1F, - 0x80, 0xFC, 0x1F, 0x01, 0xFC, 0x1F, 0x01, 0xF8, 0x1F, 0x03, 0xF0, 0x3F, - 0x0F, 0xE0, 0x7F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0x82, 0x01, - 0xFF, 0xE8, 0x07, 0xE0, 0xF0, 0x3F, 0x80, 0xE0, 0xFE, 0x00, 0xC1, 0xF8, - 0x01, 0x87, 0xE0, 0x02, 0x1F, 0x80, 0x04, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x80, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x03, 0xE0, 0x01, 0x07, 0xE0, 0x06, 0x07, 0xE0, 0x18, 0x07, - 0xE0, 0xE0, 0x07, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xFF, 0xE0, 0x01, - 0xFF, 0xFE, 0x00, 0x1F, 0x87, 0xE0, 0x07, 0xE0, 0x7C, 0x01, 0xF0, 0x1F, - 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x0F, 0x80, 0x3F, 0x03, 0xE0, - 0x0F, 0xC0, 0xF8, 0x03, 0xF0, 0x3E, 0x00, 0xFC, 0x1F, 0x00, 0x3F, 0x07, - 0xC0, 0x0F, 0xC1, 0xF0, 0x07, 0xF0, 0xFC, 0x01, 0xF8, 0x3E, 0x00, 0x7E, - 0x0F, 0x80, 0x3F, 0x83, 0xE0, 0x0F, 0xC1, 0xF8, 0x07, 0xF0, 0x7C, 0x01, - 0xF8, 0x1F, 0x00, 0xFC, 0x07, 0xC0, 0x7E, 0x03, 0xF0, 0x7E, 0x01, 0xFF, - 0xFF, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x03, 0xFF, 0xFC, - 0x07, 0xE0, 0x78, 0x0F, 0xC0, 0x60, 0x1F, 0x00, 0x40, 0x3E, 0x00, 0x80, - 0x7C, 0x01, 0x01, 0xF8, 0x10, 0x03, 0xE0, 0x60, 0x07, 0xC3, 0x80, 0x0F, - 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x7C, 0x38, 0x00, 0xF8, 0x30, 0x03, 0xF0, - 0x60, 0x07, 0xC0, 0x80, 0x0F, 0x81, 0x00, 0x1F, 0x00, 0x10, 0x7E, 0x00, - 0x60, 0xF8, 0x01, 0xC1, 0xF0, 0x07, 0x03, 0xE0, 0x1E, 0x0F, 0xC0, 0xFC, - 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFE, 0x03, 0xFF, 0xFC, - 0x07, 0xE0, 0x78, 0x0F, 0xC0, 0x60, 0x1F, 0x00, 0x40, 0x3E, 0x00, 0x80, - 0x7C, 0x01, 0x01, 0xF8, 0x20, 0x03, 0xE0, 0xC0, 0x07, 0xC3, 0x80, 0x0F, - 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x7C, 0x38, 0x00, 0xF8, 0x30, 0x03, 0xF0, - 0x60, 0x07, 0xC0, 0x80, 0x0F, 0x81, 0x00, 0x1F, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x00, - 0x3F, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xC2, 0x00, 0xFF, 0xF6, - 0x01, 0xF8, 0x3C, 0x03, 0xE0, 0x1C, 0x0F, 0xC0, 0x0C, 0x0F, 0xC0, 0x08, - 0x1F, 0x80, 0x08, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x03, 0xFF, - 0xFC, 0x00, 0xFC, 0xFC, 0x00, 0xF8, 0xFC, 0x00, 0xF8, 0xFC, 0x00, 0xF8, - 0xFC, 0x00, 0xF0, 0x7C, 0x01, 0xF0, 0x7E, 0x01, 0xF0, 0x3E, 0x01, 0xF0, - 0x1F, 0x83, 0xE0, 0x0F, 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xFF, 0x3F, - 0xF8, 0x0F, 0xE0, 0x7F, 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x0F, 0x80, - 0x1F, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xE0, 0x07, 0xC0, 0x3E, 0x00, 0x7E, - 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0x80, 0x1F, 0x00, 0xF8, 0x00, 0xF8, 0x07, - 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF0, 0x03, 0xE0, 0x1F, 0x00, - 0x3F, 0x00, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x7E, 0x00, 0x7C, - 0x03, 0xE0, 0x07, 0xE0, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x01, 0xF0, 0x0F, - 0xC0, 0x0F, 0x80, 0x7C, 0x00, 0xFC, 0x03, 0xE0, 0x0F, 0xE0, 0x3F, 0x80, - 0xFF, 0xC7, 0xFF, 0x00, 0x07, 0xFE, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, - 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0x80, - 0x1F, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x3F, - 0x80, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x01, 0xFE, 0x00, 0x0F, 0xC0, 0x00, - 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF0, 0x00, - 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, - 0x07, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0xC0, - 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x61, 0xF0, - 0x0F, 0x3F, 0x00, 0xE7, 0xE0, 0x07, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x07, - 0xFF, 0x3F, 0x80, 0xFE, 0x07, 0x80, 0x7E, 0x03, 0x00, 0x3F, 0x03, 0x00, - 0x1F, 0x03, 0x00, 0x0F, 0x83, 0x00, 0x07, 0xC3, 0x00, 0x07, 0xE3, 0x00, - 0x03, 0xE3, 0x00, 0x01, 0xF3, 0x00, 0x00, 0xFB, 0x80, 0x00, 0xFB, 0xC0, - 0x00, 0x7F, 0xE0, 0x00, 0x3E, 0xF8, 0x00, 0x3F, 0x7C, 0x00, 0x1F, 0x1F, - 0x00, 0x0F, 0x8F, 0x80, 0x07, 0xC7, 0xE0, 0x07, 0xE1, 0xF0, 0x03, 0xE0, - 0xFC, 0x01, 0xF0, 0x3E, 0x00, 0xF8, 0x1F, 0x00, 0xFC, 0x07, 0xC0, 0xFE, - 0x07, 0xF0, 0xFF, 0xCF, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x07, 0xF0, 0x00, - 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1F, - 0x00, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, - 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0x03, - 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x11, 0xF0, 0x00, 0xC7, 0xC0, - 0x06, 0x1F, 0x00, 0x38, 0x7C, 0x01, 0xE3, 0xF0, 0x3F, 0x9F, 0xFF, 0xFC, - 0xFF, 0xFF, 0xF0, 0x07, 0xF8, 0x00, 0x7F, 0x80, 0xFC, 0x00, 0x3F, 0x80, - 0x3E, 0x00, 0x3F, 0x80, 0x1F, 0x00, 0x3F, 0x80, 0x1F, 0x80, 0x1F, 0xC0, - 0x0F, 0xE0, 0x1B, 0xE0, 0x07, 0xF0, 0x0D, 0xF0, 0x02, 0xF8, 0x0D, 0xF0, - 0x03, 0x7C, 0x0C, 0xF8, 0x01, 0xBE, 0x06, 0x7C, 0x00, 0xDF, 0x06, 0x7C, - 0x00, 0xCF, 0x83, 0x3E, 0x00, 0x67, 0xC3, 0x1F, 0x00, 0x31, 0xE3, 0x0F, - 0x80, 0x38, 0xF9, 0x8F, 0x80, 0x18, 0x7D, 0x87, 0xC0, 0x0C, 0x3F, 0x83, - 0xE0, 0x06, 0x1F, 0xC1, 0xF0, 0x06, 0x0F, 0xC1, 0xF0, 0x03, 0x07, 0xC0, - 0xF8, 0x01, 0x83, 0xE0, 0x7C, 0x01, 0xC0, 0xE0, 0x7E, 0x00, 0xE0, 0x70, - 0x3F, 0x00, 0xF8, 0x30, 0x3F, 0x80, 0xFF, 0x10, 0x7F, 0xF0, 0x00, 0x07, - 0xF0, 0x0F, 0xE0, 0x3E, 0x00, 0x78, 0x07, 0xE0, 0x06, 0x00, 0x7C, 0x00, - 0xC0, 0x1F, 0xC0, 0x10, 0x03, 0xF8, 0x06, 0x00, 0x6F, 0x80, 0xC0, 0x19, - 0xF0, 0x10, 0x03, 0x3F, 0x02, 0x00, 0x63, 0xE0, 0xC0, 0x0C, 0x7C, 0x18, - 0x03, 0x07, 0xC2, 0x00, 0x60, 0xF8, 0x40, 0x0C, 0x0F, 0x98, 0x03, 0x81, - 0xF3, 0x00, 0x60, 0x3F, 0x40, 0x0C, 0x03, 0xF8, 0x01, 0x80, 0x7F, 0x00, - 0x60, 0x07, 0xC0, 0x0C, 0x00, 0xF8, 0x01, 0x80, 0x0F, 0x00, 0x70, 0x01, - 0xE0, 0x0E, 0x00, 0x18, 0x03, 0xE0, 0x03, 0x00, 0x02, 0x00, 0x60, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0xC0, 0x07, 0xC3, 0xE0, 0x1F, 0x03, 0xC0, - 0x7C, 0x03, 0xC1, 0xF0, 0x07, 0x87, 0xE0, 0x0F, 0x8F, 0x80, 0x1F, 0x3F, - 0x00, 0x3E, 0x7C, 0x00, 0x7D, 0xF8, 0x01, 0xFB, 0xE0, 0x03, 0xF7, 0xC0, - 0x07, 0xDF, 0x80, 0x1F, 0xBF, 0x00, 0x3F, 0x7C, 0x00, 0x7C, 0xF8, 0x01, - 0xF9, 0xF0, 0x03, 0xE3, 0xE0, 0x0F, 0xC7, 0xC0, 0x1F, 0x07, 0x80, 0x7C, - 0x0F, 0x81, 0xF0, 0x0F, 0x87, 0xC0, 0x0F, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x07, 0xE3, 0xF0, 0x0F, 0x83, 0xE0, - 0x1F, 0x07, 0xE0, 0x3E, 0x0F, 0xC0, 0x7C, 0x1F, 0x81, 0xF0, 0x3F, 0x03, - 0xE0, 0xFE, 0x07, 0xC1, 0xF8, 0x0F, 0x87, 0xF0, 0x3E, 0x1F, 0xC0, 0x7F, - 0xFE, 0x00, 0xFF, 0xF0, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, - 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, - 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0xC0, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0xC0, 0x07, 0xC3, 0xE0, 0x1F, 0x03, 0xC0, - 0x7C, 0x03, 0xC1, 0xF0, 0x07, 0x87, 0xE0, 0x0F, 0x8F, 0x80, 0x1F, 0x3F, - 0x00, 0x3E, 0x7C, 0x00, 0x7D, 0xF8, 0x01, 0xFB, 0xF0, 0x03, 0xF7, 0xC0, - 0x07, 0xDF, 0x80, 0x0F, 0xBF, 0x00, 0x3F, 0x7C, 0x00, 0x7C, 0xF8, 0x01, - 0xF9, 0xF0, 0x03, 0xE3, 0xE0, 0x07, 0xC7, 0xC0, 0x1F, 0x07, 0x80, 0x7C, - 0x0F, 0x01, 0xF0, 0x0F, 0x07, 0x80, 0x07, 0xFE, 0x00, 0x03, 0x80, 0x00, - 0x0C, 0x00, 0x00, 0x3C, 0x00, 0x20, 0xFF, 0xC1, 0x87, 0xFF, 0xFE, 0x1E, - 0xFF, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xFC, - 0x01, 0xF8, 0x7E, 0x01, 0xF8, 0x3F, 0x01, 0xF8, 0x3F, 0x01, 0xF0, 0x3F, - 0x01, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xE0, 0x7E, 0x03, 0xE0, 0xFE, - 0x03, 0xE1, 0xF8, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x07, 0xDF, 0xC0, - 0x0F, 0xCF, 0xC0, 0x0F, 0xCF, 0xC0, 0x0F, 0x8F, 0xE0, 0x0F, 0x87, 0xE0, - 0x1F, 0x87, 0xE0, 0x1F, 0x03, 0xF0, 0x1F, 0x03, 0xF0, 0x1F, 0x03, 0xF0, - 0x3F, 0x01, 0xF8, 0x7F, 0x01, 0xF8, 0xFF, 0xE1, 0xFE, 0x00, 0xF8, 0x40, - 0xFF, 0xB0, 0x38, 0x3C, 0x1C, 0x07, 0x0F, 0x01, 0xC3, 0xC0, 0x20, 0xF0, - 0x08, 0x3E, 0x02, 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, - 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x00, - 0x03, 0xC4, 0x00, 0xF1, 0x00, 0x3C, 0x60, 0x0F, 0x38, 0x07, 0x8F, 0x83, - 0xC2, 0x3F, 0xE0, 0x83, 0xF0, 0x00, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xCF, - 0x1F, 0x1E, 0x70, 0xF8, 0x77, 0x0F, 0x83, 0x30, 0x7C, 0x09, 0x03, 0xE0, - 0x40, 0x3F, 0x02, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, - 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, - 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, - 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x00, 0xFF, 0xF0, 0x00, - 0x7F, 0xF0, 0xFF, 0x1F, 0xC0, 0x3E, 0x1F, 0x80, 0x1C, 0x1F, 0x80, 0x18, - 0x1F, 0x00, 0x18, 0x1F, 0x00, 0x18, 0x1F, 0x00, 0x30, 0x3F, 0x00, 0x30, - 0x3E, 0x00, 0x30, 0x3E, 0x00, 0x30, 0x7E, 0x00, 0x60, 0x7C, 0x00, 0x60, - 0x7C, 0x00, 0x60, 0x7C, 0x00, 0xC0, 0x7C, 0x00, 0xC0, 0xF8, 0x00, 0xC0, - 0xF8, 0x00, 0xC0, 0xF8, 0x01, 0x80, 0xF8, 0x01, 0x80, 0xF8, 0x03, 0x80, - 0xF8, 0x03, 0x00, 0x7C, 0x06, 0x00, 0x7E, 0x1E, 0x00, 0x3F, 0xF8, 0x00, - 0x0F, 0xE0, 0x00, 0xFF, 0xE0, 0x7F, 0x3F, 0x80, 0x1C, 0x1F, 0x80, 0x18, - 0x1F, 0x80, 0x18, 0x1F, 0x80, 0x30, 0x1F, 0x80, 0x30, 0x0F, 0x80, 0x60, - 0x0F, 0x80, 0x40, 0x0F, 0x80, 0xC0, 0x0F, 0x81, 0x80, 0x0F, 0x81, 0x00, - 0x0F, 0xC3, 0x00, 0x0F, 0xC6, 0x00, 0x07, 0xC6, 0x00, 0x07, 0xCC, 0x00, - 0x07, 0xC8, 0x00, 0x07, 0xD8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x03, 0x80, 0x00, - 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0xFF, 0xCF, 0xF8, 0x7E, 0x7F, 0x07, - 0xE0, 0x38, 0x7C, 0x07, 0x80, 0x60, 0xF8, 0x0F, 0x00, 0x81, 0xF0, 0x1E, - 0x03, 0x03, 0xE0, 0x3E, 0x04, 0x07, 0xE0, 0xFC, 0x18, 0x07, 0xC1, 0xF8, - 0x20, 0x0F, 0x87, 0xF0, 0xC0, 0x1F, 0x0B, 0xE1, 0x00, 0x3E, 0x37, 0xC6, - 0x00, 0x7C, 0x47, 0x88, 0x00, 0xF9, 0x8F, 0x30, 0x01, 0xF2, 0x1F, 0x40, - 0x03, 0xEC, 0x3E, 0x80, 0x03, 0xF0, 0x7F, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0x81, 0xF8, 0x00, 0x1F, 0x03, 0xE0, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x78, 0x07, 0x00, 0x00, 0xF0, 0x0E, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x01, - 0x80, 0x30, 0x00, 0x02, 0x00, 0x40, 0x00, 0x0F, 0xFE, 0x3F, 0x81, 0xFC, - 0x07, 0x80, 0x7C, 0x03, 0x00, 0x3F, 0x03, 0x00, 0x0F, 0x83, 0x80, 0x07, - 0xC1, 0x80, 0x03, 0xE1, 0x80, 0x00, 0xF9, 0x80, 0x00, 0x7D, 0x80, 0x00, - 0x3F, 0x80, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, - 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xBE, 0x00, 0x00, 0xCF, 0x00, - 0x00, 0xC7, 0xC0, 0x00, 0xC3, 0xE0, 0x00, 0xC1, 0xF0, 0x00, 0xC0, 0x7C, - 0x00, 0xE0, 0x3E, 0x00, 0xE0, 0x1F, 0x00, 0xF8, 0x1F, 0xE0, 0xFF, 0x1F, - 0xF8, 0x00, 0xFF, 0xC3, 0xF9, 0xF8, 0x07, 0x87, 0xC0, 0x38, 0x3E, 0x01, - 0x81, 0xF0, 0x18, 0x07, 0xC0, 0x80, 0x3E, 0x0C, 0x01, 0xF0, 0xC0, 0x07, - 0xC4, 0x00, 0x3E, 0x60, 0x01, 0xF6, 0x00, 0x07, 0xA0, 0x00, 0x3F, 0x00, - 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x3E, - 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, - 0x7E, 0x00, 0x07, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xF8, 0x3F, - 0xFF, 0xC3, 0xE0, 0x7E, 0x1C, 0x07, 0xE0, 0xC0, 0x3E, 0x0C, 0x03, 0xF0, - 0x40, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, - 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x83, 0xE0, 0x0C, 0x3F, 0x00, - 0xC3, 0xF0, 0x0E, 0x1F, 0x00, 0xF1, 0xF8, 0x1F, 0x9F, 0xFF, 0xF8, 0xFF, - 0xFF, 0xC0, 0x01, 0xFC, 0x0F, 0xE0, 0x3C, 0x00, 0xE0, 0x03, 0x80, 0x1E, - 0x00, 0x78, 0x01, 0xC0, 0x07, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0x80, 0x0E, - 0x00, 0x38, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0xC0, 0x0F, - 0x00, 0x38, 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xFF, 0x03, 0xF8, 0x00, 0xE0, 0x38, 0x07, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x70, 0x0C, 0x03, - 0x80, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x70, 0x0C, 0x03, 0x80, 0xE0, 0x38, - 0x07, 0x01, 0xC0, 0x03, 0xFC, 0x0F, 0xF0, 0x03, 0x80, 0x0E, 0x00, 0x38, - 0x01, 0xE0, 0x07, 0x80, 0x1C, 0x00, 0x70, 0x03, 0xC0, 0x0F, 0x00, 0x38, - 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x70, 0x01, 0xC0, 0x0F, 0x00, 0x3C, - 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x00, 0x1C, - 0x00, 0xF0, 0x03, 0xC0, 0xFE, 0x03, 0xF8, 0x00, 0x03, 0xC0, 0x03, 0xC0, - 0x07, 0xE0, 0x07, 0xE0, 0x0E, 0x70, 0x0E, 0x70, 0x1C, 0x78, 0x1C, 0x38, - 0x3C, 0x3C, 0x38, 0x1C, 0x78, 0x1E, 0x70, 0x0E, 0xF0, 0x0E, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE1, 0xE3, 0xC1, 0xC1, 0xC0, 0xC0, 0x00, - 0xF7, 0x80, 0xFD, 0xE0, 0x7C, 0xF0, 0x3C, 0x3C, 0x1E, 0x0F, 0x0F, 0x83, - 0x83, 0xC1, 0xE1, 0xE0, 0x78, 0x78, 0x1C, 0x3E, 0x0F, 0x0F, 0x03, 0xC3, - 0xC1, 0xF0, 0xF0, 0xFC, 0xFE, 0x6F, 0x6F, 0xF3, 0xF1, 0xF8, 0xF8, 0x3C, - 0x1C, 0x00, 0x01, 0xE0, 0x1F, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0x80, - 0x07, 0x80, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x3C, 0x1E, 0xFE, - 0x1F, 0x9F, 0x1F, 0x0F, 0x1E, 0x0F, 0x3E, 0x0F, 0x3C, 0x0F, 0x3C, 0x1F, - 0x78, 0x1E, 0x78, 0x1E, 0x78, 0x3C, 0x78, 0x3C, 0xF0, 0x78, 0xF0, 0xF0, - 0xF1, 0xE0, 0x7F, 0xC0, 0x3F, 0x00, 0x01, 0xF0, 0x3F, 0xC3, 0xCE, 0x3C, - 0xF3, 0xC7, 0x1E, 0x01, 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x03, 0x78, 0x31, 0xE3, 0x0F, 0xF0, 0x1E, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x01, 0xEF, 0x00, 0x7F, 0xE0, 0x3E, 0x7C, - 0x07, 0x8F, 0x01, 0xE1, 0xE0, 0x78, 0x3C, 0x0F, 0x0F, 0x83, 0xC1, 0xE0, - 0x78, 0x3C, 0x1E, 0x0F, 0x83, 0xC1, 0xF0, 0x78, 0x7C, 0x0F, 0x0F, 0x91, - 0xE3, 0xF6, 0x3F, 0xDF, 0x83, 0xF3, 0xE0, 0x3C, 0x38, 0x00, 0x01, 0xE0, - 0x3F, 0x83, 0xCE, 0x3C, 0x73, 0xC3, 0x9E, 0x1D, 0xE1, 0xCF, 0x1C, 0xFB, - 0xC7, 0xF8, 0x3C, 0x01, 0xE0, 0x0F, 0x02, 0x78, 0x31, 0xE3, 0x0F, 0xF0, - 0x1E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x1D, 0xC0, 0x01, 0xCE, 0x00, 0x1C, - 0x70, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, - 0x3C, 0x00, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x00, 0xF0, 0x00, 0x07, 0x80, - 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, - 0x80, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, - 0x00, 0x0F, 0x00, 0x0E, 0x70, 0x00, 0x77, 0x80, 0x03, 0xF8, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0xFC, 0x1F, 0x1F, 0x87, 0xC3, 0xC1, - 0xF0, 0x78, 0x3C, 0x1F, 0x07, 0x83, 0xE0, 0xF0, 0xF8, 0x0E, 0x3E, 0x01, - 0xFF, 0x80, 0x3F, 0xC0, 0x0C, 0x00, 0x03, 0xC0, 0x00, 0x7F, 0x80, 0x0F, - 0xFE, 0x00, 0x7F, 0xF0, 0x70, 0xFF, 0x1C, 0x03, 0xE3, 0x80, 0x3C, 0x70, - 0x07, 0x0F, 0x03, 0xE0, 0xFF, 0xF0, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x03, - 0xE0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1F, 0x00, 0x0F, 0x0E, 0x07, 0x9F, 0x83, 0xDF, 0xC3, 0xE9, 0xE1, 0xE8, - 0xF0, 0xF8, 0xF8, 0x7C, 0x78, 0x7C, 0x3C, 0x3E, 0x3E, 0x1E, 0x1E, 0x1F, - 0x0F, 0x0F, 0x0F, 0x87, 0x87, 0xCB, 0xC3, 0xCB, 0xE1, 0xE9, 0xE0, 0xFC, - 0xF0, 0x38, 0x00, 0x03, 0x03, 0xC1, 0xE0, 0xF0, 0x30, 0x00, 0x00, 0x00, - 0x07, 0x3F, 0x87, 0x83, 0xC1, 0xE0, 0xF0, 0xF0, 0x78, 0x3C, 0x1E, 0x1E, - 0x0F, 0x27, 0x17, 0x93, 0xF1, 0xF8, 0x70, 0x00, 0x00, 0x06, 0x00, 0x0F, - 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0xFE, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, - 0x00, 0x7C, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF8, 0x00, 0xF0, - 0x00, 0xF0, 0x00, 0xF0, 0x01, 0xF0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, - 0x03, 0xC0, 0xE3, 0xC0, 0xE7, 0x80, 0xFF, 0x00, 0x7C, 0x00, 0x1F, 0xC0, - 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, - 0x00, 0x1F, 0x00, 0x0F, 0x3F, 0x87, 0x87, 0x83, 0xC3, 0x03, 0xE3, 0x01, - 0xE3, 0x00, 0xF3, 0x00, 0x7B, 0x80, 0x7B, 0xC0, 0x3F, 0xE0, 0x1E, 0xF0, - 0x1F, 0x78, 0x0F, 0x1E, 0x07, 0x8F, 0x13, 0xC7, 0x93, 0xE1, 0xF9, 0xE0, - 0xF8, 0xF0, 0x38, 0x00, 0x1F, 0xC0, 0xF8, 0x1F, 0x03, 0xC0, 0x78, 0x1F, - 0x03, 0xE0, 0x78, 0x0F, 0x01, 0xE0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x0F, - 0x01, 0xE0, 0x3C, 0x0F, 0x81, 0xE0, 0x3C, 0x8F, 0x31, 0xEC, 0x3F, 0x07, - 0xC0, 0x70, 0x00, 0x01, 0x87, 0x07, 0x0F, 0xE7, 0xE7, 0xE0, 0xF3, 0xF9, - 0xF8, 0x3D, 0x9E, 0x9E, 0x0F, 0x47, 0xC7, 0x83, 0xE1, 0xD1, 0xE1, 0xF8, - 0xF8, 0xF0, 0x7C, 0x3C, 0x3C, 0x1F, 0x0F, 0x1F, 0x0F, 0x87, 0xC7, 0x83, - 0xE1, 0xE1, 0xE0, 0xF0, 0x78, 0x78, 0x3C, 0x1E, 0x3C, 0x1F, 0x0F, 0x0F, - 0x27, 0x83, 0xC3, 0xD1, 0xE0, 0xF0, 0xFC, 0xF8, 0x78, 0x1C, 0x00, 0x01, - 0x8F, 0x0F, 0xE7, 0xE0, 0xF3, 0xF8, 0x3C, 0x9E, 0x0F, 0x47, 0x87, 0xA3, - 0xC1, 0xE8, 0xF0, 0x7C, 0x3C, 0x1E, 0x1E, 0x0F, 0x87, 0x83, 0xE1, 0xE0, - 0xF0, 0xF8, 0x3C, 0x3C, 0x1F, 0x0F, 0x27, 0x83, 0xD1, 0xE0, 0xFC, 0x78, - 0x1C, 0x00, 0x01, 0xF0, 0x0E, 0x30, 0x38, 0x70, 0xF0, 0xF3, 0xC1, 0xE7, - 0x83, 0xDE, 0x07, 0xBC, 0x1F, 0xF8, 0x3F, 0xE0, 0x7B, 0xC0, 0xF7, 0x83, - 0xCF, 0x07, 0x9E, 0x1E, 0x1C, 0x38, 0x1C, 0xE0, 0x1F, 0x00, 0x00, 0xE3, - 0x80, 0xFD, 0xF8, 0x0F, 0xFF, 0x81, 0xE8, 0xF0, 0x3E, 0x1E, 0x07, 0x83, - 0xC0, 0xF0, 0x78, 0x3E, 0x1F, 0x07, 0x83, 0xC0, 0xF0, 0x78, 0x1E, 0x1F, - 0x07, 0x83, 0xC0, 0xF0, 0xF8, 0x1E, 0x1E, 0x03, 0xC7, 0x80, 0xFF, 0xE0, - 0x1E, 0xF0, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, - 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xEF, 0x07, 0xFF, 0x0F, 0x1E, 0x1E, - 0x1E, 0x1E, 0x1E, 0x3C, 0x1E, 0x7C, 0x3C, 0x78, 0x3C, 0x78, 0x3C, 0xF0, - 0x7C, 0xF0, 0x78, 0xF0, 0xF8, 0xF0, 0xF8, 0xF1, 0xF0, 0xFE, 0xF0, 0x7E, - 0xF0, 0x39, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xC0, 0x03, - 0xC0, 0x1F, 0xF8, 0x03, 0x9C, 0x7F, 0x7C, 0x3D, 0xF8, 0x7A, 0xE0, 0xF8, - 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF0, 0x01, - 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0x07, 0x18, 0xFF, - 0xC7, 0x1C, 0x70, 0x63, 0x81, 0x1E, 0x08, 0xF8, 0x07, 0xE0, 0x1F, 0x00, - 0x7C, 0x01, 0xF0, 0x07, 0x84, 0x3C, 0x20, 0xE1, 0x87, 0x1C, 0x70, 0x9E, - 0x00, 0x00, 0x80, 0x60, 0x30, 0x1C, 0x1F, 0x1F, 0xF7, 0xFC, 0x78, 0x1E, - 0x07, 0x83, 0xC0, 0xF0, 0x3C, 0x1F, 0x07, 0x81, 0xE0, 0x79, 0x3C, 0x4F, - 0x23, 0xF0, 0xFC, 0x1C, 0x00, 0x0F, 0x0F, 0x3F, 0x87, 0x8F, 0x83, 0xC7, - 0xC1, 0xE3, 0xE1, 0xE1, 0xE0, 0xF0, 0xF0, 0x78, 0xF8, 0x78, 0x78, 0x3C, - 0x3C, 0x3E, 0x1E, 0x1F, 0x1E, 0x1F, 0x0F, 0x17, 0x97, 0x9B, 0xCB, 0xF9, - 0xF9, 0xF8, 0xF8, 0x78, 0x38, 0x00, 0x18, 0x37, 0xC3, 0xDE, 0x1E, 0x78, - 0x73, 0xC1, 0x9E, 0x08, 0xF0, 0xC7, 0x84, 0x3C, 0x41, 0xE4, 0x0F, 0x40, - 0x7C, 0x03, 0xC0, 0x1C, 0x00, 0xC0, 0x04, 0x00, 0x38, 0x10, 0xDF, 0x06, - 0x3D, 0xE0, 0xC7, 0xBC, 0x38, 0x73, 0xC7, 0x06, 0x79, 0xF0, 0x8F, 0x3E, - 0x11, 0xEB, 0xC4, 0x3F, 0x79, 0x07, 0xCF, 0x60, 0xF9, 0xE8, 0x1E, 0x3E, - 0x03, 0x87, 0x80, 0x70, 0xF0, 0x0C, 0x0C, 0x01, 0x01, 0x00, 0x03, 0x83, - 0x87, 0xF1, 0xF0, 0x3C, 0xF8, 0x0F, 0x60, 0x03, 0xD0, 0x00, 0xF8, 0x00, - 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x0F, - 0xC0, 0x02, 0xF1, 0x39, 0x3C, 0xCF, 0xCF, 0xE3, 0xE1, 0xF0, 0x70, 0x38, - 0x00, 0x01, 0x83, 0x07, 0xE3, 0xC1, 0xF1, 0xE0, 0x78, 0xF0, 0x3E, 0x18, - 0x1F, 0x08, 0x07, 0x84, 0x03, 0xC6, 0x01, 0xE2, 0x00, 0xFB, 0x00, 0x3D, - 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xE0, 0x00, 0x60, 0x00, 0x60, 0x0E, 0x60, 0x0F, 0xE0, 0x07, 0xE0, 0x01, - 0xC0, 0x00, 0x1F, 0xFC, 0x3F, 0xF8, 0x7F, 0xE1, 0x81, 0x82, 0x06, 0x00, - 0x08, 0x00, 0x20, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x40, - 0x01, 0x80, 0x07, 0xC0, 0x1F, 0x86, 0x3F, 0x8E, 0xCF, 0x9C, 0x07, 0x30, - 0x03, 0xC0, 0x00, 0x1E, 0x00, 0xF8, 0x03, 0xC0, 0x0F, 0x00, 0x1E, 0x00, - 0x38, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x01, 0xE0, 0x03, 0xC0, 0x1F, 0x00, 0x7E, 0x00, 0x30, 0x00, - 0x60, 0x00, 0xE0, 0x01, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x38, - 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x0C, 0x00, - 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, - 0x00, 0xF0, 0x00, 0x70, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xE0, 0x03, 0xC0, 0x07, - 0x80, 0x0F, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x10, 0x00, 0xF0, 0x03, 0xF0, - 0x0F, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, - 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x70, 0x01, 0xE0, 0x0F, 0x80, 0x7C, 0x00, - 0x3E, 0x00, 0x7F, 0xC6, 0xFF, 0xFF, 0x61, 0xFE, 0x00, 0x7C}; - -const GFXglyph FreeSerifBoldItalic18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 11, 25, 14, 2, -23}, // 0x21 '!' - {35, 14, 10, 19, 4, -23}, // 0x22 '"' - {53, 20, 25, 17, -1, -24}, // 0x23 '#' - {116, 17, 29, 18, 0, -25}, // 0x24 '$' - {178, 27, 25, 29, 1, -23}, // 0x25 '%' - {263, 25, 25, 27, 0, -23}, // 0x26 '&' - {342, 5, 10, 10, 4, -23}, // 0x27 ''' - {349, 11, 30, 12, 1, -23}, // 0x28 '(' - {391, 11, 30, 12, -2, -23}, // 0x29 ')' - {433, 13, 15, 18, 2, -23}, // 0x2A '*' - {458, 17, 17, 20, 1, -16}, // 0x2B '+' - {495, 7, 11, 9, -2, -4}, // 0x2C ',' - {505, 9, 4, 12, 0, -9}, // 0x2D '-' - {510, 6, 5, 9, 0, -3}, // 0x2E '.' - {514, 14, 25, 12, 0, -23}, // 0x2F '/' - {558, 15, 25, 18, 1, -23}, // 0x30 '0' - {605, 15, 25, 17, 0, -23}, // 0x31 '1' - {652, 16, 25, 18, 0, -23}, // 0x32 '2' - {702, 15, 25, 17, 1, -23}, // 0x33 '3' - {749, 18, 24, 17, 0, -23}, // 0x34 '4' - {803, 17, 25, 18, 0, -23}, // 0x35 '5' - {857, 17, 25, 18, 1, -23}, // 0x36 '6' - {911, 16, 24, 17, 3, -23}, // 0x37 '7' - {959, 17, 25, 18, 0, -23}, // 0x38 '8' - {1013, 17, 25, 18, 0, -23}, // 0x39 '9' - {1067, 10, 17, 9, 0, -15}, // 0x3A ':' - {1089, 11, 22, 9, -1, -15}, // 0x3B ';' - {1120, 18, 19, 20, 1, -18}, // 0x3C '<' - {1163, 18, 10, 20, 2, -13}, // 0x3D '=' - {1186, 18, 19, 20, 2, -18}, // 0x3E '>' - {1229, 13, 25, 17, 3, -23}, // 0x3F '?' - {1270, 25, 25, 29, 2, -23}, // 0x40 '@' - {1349, 23, 25, 24, 0, -23}, // 0x41 'A' - {1421, 24, 25, 22, 0, -23}, // 0x42 'B' - {1496, 23, 25, 22, 1, -23}, // 0x43 'C' - {1568, 26, 25, 25, 0, -23}, // 0x44 'D' - {1650, 23, 25, 22, 0, -23}, // 0x45 'E' - {1722, 23, 25, 21, 0, -23}, // 0x46 'F' - {1794, 24, 25, 25, 2, -23}, // 0x47 'G' - {1869, 29, 25, 26, 0, -23}, // 0x48 'H' - {1960, 15, 25, 13, 0, -23}, // 0x49 'I' - {2007, 20, 27, 17, 0, -23}, // 0x4A 'J' - {2075, 25, 25, 23, 0, -23}, // 0x4B 'K' - {2154, 22, 25, 21, 0, -23}, // 0x4C 'L' - {2223, 33, 25, 31, 0, -23}, // 0x4D 'M' - {2327, 27, 25, 25, 0, -23}, // 0x4E 'N' - {2412, 23, 25, 24, 1, -23}, // 0x4F 'O' - {2484, 23, 25, 21, 0, -23}, // 0x50 'P' - {2556, 23, 31, 24, 1, -23}, // 0x51 'Q' - {2646, 24, 25, 23, 0, -23}, // 0x52 'R' - {2721, 18, 25, 18, 0, -23}, // 0x53 'S' - {2778, 21, 25, 21, 3, -23}, // 0x54 'T' - {2844, 24, 25, 25, 4, -23}, // 0x55 'U' - {2919, 24, 25, 25, 4, -23}, // 0x56 'V' - {2994, 31, 25, 32, 4, -23}, // 0x57 'W' - {3091, 25, 25, 24, 0, -23}, // 0x58 'X' - {3170, 21, 25, 22, 4, -23}, // 0x59 'Y' - {3236, 21, 25, 20, 0, -23}, // 0x5A 'Z' - {3302, 14, 30, 12, -1, -23}, // 0x5B '[' - {3355, 10, 25, 14, 4, -23}, // 0x5C '\' - {3387, 14, 30, 12, -2, -23}, // 0x5D ']' - {3440, 16, 13, 20, 2, -23}, // 0x5E '^' - {3466, 18, 3, 17, 0, 3}, // 0x5F '_' - {3473, 7, 6, 12, 3, -23}, // 0x60 '`' - {3479, 18, 17, 18, 0, -15}, // 0x61 'a' - {3518, 16, 26, 17, 1, -24}, // 0x62 'b' - {3570, 13, 17, 15, 1, -15}, // 0x63 'c' - {3598, 19, 25, 18, 1, -23}, // 0x64 'd' - {3658, 13, 17, 15, 1, -15}, // 0x65 'e' - {3686, 21, 32, 17, -3, -24}, // 0x66 'f' - {3770, 19, 23, 17, -1, -15}, // 0x67 'g' - {3825, 17, 25, 19, 1, -23}, // 0x68 'h' - {3879, 9, 25, 10, 1, -23}, // 0x69 'i' - {3908, 16, 31, 12, -3, -23}, // 0x6A 'j' - {3970, 17, 25, 18, 1, -23}, // 0x6B 'k' - {4024, 11, 25, 10, 1, -23}, // 0x6C 'l' - {4059, 26, 17, 27, 0, -15}, // 0x6D 'm' - {4115, 18, 17, 18, 0, -15}, // 0x6E 'n' - {4154, 15, 17, 17, 1, -15}, // 0x6F 'o' - {4186, 19, 23, 17, -2, -15}, // 0x70 'p' - {4241, 16, 23, 17, 1, -15}, // 0x71 'q' - {4287, 15, 16, 14, 0, -15}, // 0x72 'r' - {4317, 13, 17, 12, 0, -15}, // 0x73 's' - {4345, 10, 22, 10, 1, -20}, // 0x74 't' - {4373, 17, 17, 19, 1, -15}, // 0x75 'u' - {4410, 13, 16, 15, 2, -15}, // 0x76 'v' - {4436, 19, 16, 23, 3, -15}, // 0x77 'w' - {4474, 18, 17, 17, -1, -15}, // 0x78 'x' - {4513, 17, 23, 15, -2, -15}, // 0x79 'y' - {4562, 15, 19, 14, 0, -15}, // 0x7A 'z' - {4598, 15, 32, 12, 0, -24}, // 0x7B '{' - {4658, 3, 25, 9, 4, -23}, // 0x7C '|' - {4668, 15, 32, 12, -5, -24}, // 0x7D '}' - {4728, 16, 5, 20, 2, -11}}; // 0x7E '~' - -const GFXfont FreeSerifBoldItalic18pt7b PROGMEM = { - (uint8_t *)FreeSerifBoldItalic18pt7bBitmaps, - (GFXglyph *)FreeSerifBoldItalic18pt7bGlyphs, 0x20, 0x7E, 42}; - -// Approx. 5410 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic24pt7b.h deleted file mode 100644 index e2fa4cb..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic24pt7b.h +++ /dev/null @@ -1,795 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBoldItalic24pt7bBitmaps[] PROGMEM = { - 0x00, 0x3C, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, - 0x3F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x1E, - 0x00, 0x3C, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x0E, 0x00, - 0x18, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF0, 0x03, 0xF0, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x3F, 0x00, - 0x3C, 0x00, 0x1C, 0x01, 0xC7, 0xC0, 0x7D, 0xF8, 0x1F, 0xBF, 0x03, 0xF7, - 0xC0, 0x7C, 0xF8, 0x0F, 0x9E, 0x01, 0xE3, 0xC0, 0x3C, 0x70, 0x07, 0x1E, - 0x00, 0xE3, 0x80, 0x38, 0x70, 0x07, 0x0C, 0x00, 0xC0, 0x00, 0x03, 0xC1, - 0xE0, 0x00, 0x70, 0x38, 0x00, 0x1E, 0x0F, 0x00, 0x03, 0xC1, 0xE0, 0x00, - 0x70, 0x38, 0x00, 0x1E, 0x0F, 0x00, 0x03, 0x81, 0xC0, 0x00, 0xF0, 0x78, - 0x00, 0x1E, 0x0F, 0x00, 0x07, 0x83, 0xC0, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, - 0xFF, 0xF0, 0x7F, 0xFF, 0xFC, 0x00, 0xE0, 0x70, 0x00, 0x3C, 0x1E, 0x00, - 0x07, 0x83, 0xC0, 0x00, 0xE0, 0x70, 0x00, 0x3C, 0x1E, 0x00, 0x07, 0x83, - 0xC0, 0x00, 0xE0, 0x70, 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x1F, - 0xFF, 0xFF, 0x00, 0x38, 0x1C, 0x00, 0x0F, 0x07, 0x80, 0x01, 0xE0, 0xF0, - 0x00, 0x38, 0x1C, 0x00, 0x0F, 0x07, 0x80, 0x01, 0xC0, 0xE0, 0x00, 0x78, - 0x3C, 0x00, 0x0F, 0x07, 0x80, 0x01, 0xC0, 0xE0, 0x00, 0x78, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x1F, - 0xE0, 0x00, 0x7F, 0xF8, 0x01, 0xF1, 0x9E, 0x01, 0xC1, 0x8F, 0x03, 0x83, - 0x8F, 0x03, 0x83, 0x06, 0x07, 0x83, 0x06, 0x07, 0x87, 0x06, 0x07, 0xC7, - 0x04, 0x07, 0xE6, 0x04, 0x07, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x03, 0xFF, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x1F, - 0xE0, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xF0, 0x00, 0x3B, 0xF8, 0x20, 0x31, - 0xF8, 0x20, 0x30, 0xF8, 0x60, 0x70, 0xF8, 0x60, 0x60, 0xF8, 0x60, 0x60, - 0xF8, 0xF0, 0xE0, 0xF0, 0xF0, 0xE1, 0xE0, 0x78, 0xC3, 0xE0, 0x3C, 0xC7, - 0xC0, 0x0F, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x01, 0x80, 0x00, 0x03, 0x80, - 0x00, 0x03, 0x80, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x70, 0x00, 0xFF, 0x80, 0x1C, 0x00, 0x3F, 0x38, 0x1F, 0x00, 0x0F, - 0xC7, 0xFF, 0xE0, 0x03, 0xF0, 0x3F, 0xB8, 0x00, 0x7E, 0x04, 0x07, 0x00, - 0x1F, 0x80, 0x81, 0xC0, 0x03, 0xF0, 0x10, 0x38, 0x00, 0xFC, 0x02, 0x0E, - 0x00, 0x1F, 0x80, 0x81, 0x80, 0x03, 0xF0, 0x10, 0x70, 0x00, 0x7C, 0x06, - 0x1C, 0x00, 0x0F, 0x80, 0x83, 0x80, 0x01, 0xF0, 0x30, 0xE0, 0x00, 0x1E, - 0x0C, 0x1C, 0x07, 0xC3, 0xE3, 0x07, 0x03, 0xFC, 0x3F, 0xC0, 0xC0, 0xFC, - 0x43, 0xE0, 0x38, 0x3E, 0x0C, 0x00, 0x0E, 0x0F, 0xC0, 0x80, 0x01, 0xC3, - 0xF0, 0x10, 0x00, 0x70, 0xFC, 0x02, 0x00, 0x0C, 0x1F, 0x80, 0x40, 0x03, - 0x83, 0xE0, 0x08, 0x00, 0x60, 0xFC, 0x02, 0x00, 0x1C, 0x1F, 0x80, 0x40, - 0x07, 0x03, 0xE0, 0x10, 0x00, 0xE0, 0x7C, 0x02, 0x00, 0x38, 0x0F, 0x80, - 0xC0, 0x06, 0x01, 0xF0, 0x30, 0x01, 0xC0, 0x1F, 0x0C, 0x00, 0x30, 0x01, - 0xFF, 0x00, 0x0E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x01, 0xF1, 0xE0, 0x00, 0x00, 0xF0, 0x78, 0x00, 0x00, - 0xF0, 0x3C, 0x00, 0x00, 0x78, 0x1E, 0x00, 0x00, 0x7C, 0x0F, 0x00, 0x00, - 0x3E, 0x0F, 0x80, 0x00, 0x1F, 0x07, 0x80, 0x00, 0x0F, 0x87, 0x80, 0x00, - 0x07, 0xC7, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x07, 0xFE, - 0x03, 0xCF, 0xC0, 0xFE, 0x03, 0xC7, 0xE0, 0x3C, 0x07, 0xC3, 0xF0, 0x1C, - 0x07, 0xC0, 0xFC, 0x0C, 0x03, 0xC0, 0x7E, 0x0E, 0x03, 0xE0, 0x3F, 0x0E, - 0x01, 0xF0, 0x1F, 0xC6, 0x01, 0xF8, 0x07, 0xF6, 0x00, 0xFC, 0x03, 0xFF, - 0x00, 0x7E, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x7F, 0x80, 0x1F, 0xC0, 0x1F, - 0xC0, 0x07, 0xF0, 0x0F, 0xF0, 0x13, 0xFE, 0x0F, 0xFE, 0x18, 0xFF, 0xFE, - 0xFF, 0xF8, 0x3F, 0xFE, 0x3F, 0xF8, 0x07, 0xF8, 0x03, 0xF0, 0x00, 0x1C, - 0x7D, 0xFB, 0xF7, 0xCF, 0x9E, 0x3C, 0x71, 0xE3, 0x87, 0x0C, 0x00, 0x00, - 0x04, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x3C, 0x01, 0xE0, 0x0F, 0x80, 0x3C, 0x00, 0xF0, 0x07, - 0xC0, 0x1E, 0x00, 0x78, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF0, 0x03, - 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, - 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x01, 0x80, - 0x06, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x60, 0x01, 0x80, 0x00, 0x00, 0x01, - 0x00, 0x06, 0x00, 0x08, 0x00, 0x30, 0x00, 0x40, 0x01, 0x80, 0x06, 0x00, - 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x7C, - 0x01, 0xF0, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x03, 0xE0, 0x0F, 0x80, 0x3C, - 0x01, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, - 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x06, 0x00, 0x30, 0x00, 0x80, 0x00, 0x00, - 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x07, 0x0E, 0x1D, 0xF1, - 0xC7, 0xFF, 0x11, 0xFF, 0xE2, 0x3F, 0x7E, 0x4F, 0xC0, 0x3E, 0x00, 0x07, - 0xC0, 0x3F, 0x27, 0xEF, 0xC4, 0x7F, 0xF8, 0x8F, 0xFE, 0x38, 0xFB, 0x87, - 0x0E, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x70, 0x00, 0x00, - 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, - 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x03, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, - 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, - 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, - 0x07, 0x80, 0x00, 0x0F, 0x07, 0xE1, 0xFC, 0x7F, 0x1F, 0xC3, 0xF0, 0x7C, - 0x0E, 0x03, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x1C, 0x04, 0x00, 0x7F, 0xF7, - 0xFF, 0x7F, 0xEF, 0xFE, 0xFF, 0xE0, 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0x7E, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x07, - 0xC0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x3C, - 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x01, 0xE0, - 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x0F, 0x00, - 0x03, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, - 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0xE3, 0x80, 0x0F, 0x07, 0x00, 0x7C, 0x1C, 0x03, 0xE0, 0x78, 0x0F, 0x81, - 0xE0, 0x7C, 0x07, 0x83, 0xF0, 0x1F, 0x0F, 0xC0, 0xFC, 0x7E, 0x03, 0xF1, - 0xF8, 0x0F, 0xCF, 0xE0, 0x3F, 0x3F, 0x00, 0xFD, 0xFC, 0x07, 0xF7, 0xF0, - 0x1F, 0xDF, 0xC0, 0x7F, 0x7E, 0x01, 0xFB, 0xF8, 0x0F, 0xEF, 0xE0, 0x3F, - 0xBF, 0x80, 0xFE, 0xFC, 0x03, 0xF3, 0xF0, 0x1F, 0xCF, 0xC0, 0x7F, 0x3F, - 0x01, 0xF8, 0xFC, 0x07, 0xE3, 0xE0, 0x3F, 0x0F, 0x80, 0xFC, 0x1E, 0x07, - 0xE0, 0x78, 0x1F, 0x00, 0xE0, 0x78, 0x03, 0x83, 0xC0, 0x07, 0x1E, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xFE, 0x01, 0xFF, 0xE0, 0x00, - 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, - 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xFC, - 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF0, 0x00, 0x3F, - 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x1F, 0xF8, 0x0F, 0xFF, 0xF0, 0x00, - 0x0F, 0x80, 0x01, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x7F, 0xFE, 0x03, 0x83, - 0xF8, 0x0C, 0x07, 0xF0, 0x60, 0x1F, 0xC3, 0x00, 0x3F, 0x00, 0x00, 0xFC, - 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF8, 0x00, - 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, - 0x0E, 0x00, 0x00, 0x70, 0x06, 0x03, 0x80, 0x10, 0x1C, 0x00, 0xC0, 0xE0, - 0x06, 0x07, 0xFF, 0xF8, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC, - 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, - 0x60, 0xFE, 0x03, 0x01, 0xFC, 0x08, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, - 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0xFC, - 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0xF0, 0x00, - 0x7F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xE0, - 0x00, 0x0F, 0x80, 0x00, 0x3C, 0x1C, 0x01, 0xF0, 0xF8, 0x07, 0x83, 0xF0, - 0x3C, 0x0F, 0xE1, 0xE0, 0x1F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xE0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xFC, 0x00, - 0x06, 0xFC, 0x00, 0x06, 0x7E, 0x00, 0x06, 0x3F, 0x00, 0x06, 0x3F, 0x00, - 0x06, 0x1F, 0x80, 0x06, 0x0F, 0xC0, 0x06, 0x07, 0xE0, 0x03, 0x07, 0xE0, - 0x03, 0x03, 0xF0, 0x03, 0x01, 0xF8, 0x03, 0x01, 0xFC, 0x03, 0x00, 0xFC, - 0x03, 0x00, 0x7E, 0x03, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, - 0xF0, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, - 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, - 0x7F, 0xFC, 0x00, 0xFF, 0xFC, 0x00, 0xC0, 0x00, 0x01, 0x80, 0x00, 0x01, - 0x80, 0x00, 0x03, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x07, - 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, - 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, - 0x01, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x78, 0x03, 0xC0, 0xFC, - 0x07, 0x80, 0xFC, 0x0F, 0x00, 0xFE, 0x1E, 0x00, 0x7F, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0x80, 0x00, - 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, - 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x0F, 0xE1, 0xF0, 0x3F, 0x81, 0xF0, - 0x7F, 0x03, 0xF0, 0xFC, 0x07, 0xE3, 0xF8, 0x0F, 0xC7, 0xF0, 0x1F, 0x8F, - 0xC0, 0x7F, 0x1F, 0x80, 0xFE, 0x3F, 0x01, 0xFC, 0x7C, 0x03, 0xF0, 0xF8, - 0x0F, 0xE1, 0xF0, 0x1F, 0xC1, 0xE0, 0x3F, 0x03, 0xC0, 0xFC, 0x07, 0x81, - 0xF0, 0x07, 0x87, 0xC0, 0x07, 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xFF, - 0xFC, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, - 0x07, 0x00, 0x1C, 0x08, 0x00, 0x78, 0x30, 0x01, 0xE0, 0x40, 0x03, 0xC0, - 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, - 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, - 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x78, - 0x00, 0x01, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x78, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, - 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0xFE, 0x00, 0x3C, 0x78, - 0x03, 0xC1, 0xE0, 0x3C, 0x07, 0x81, 0xE0, 0x3C, 0x1F, 0x01, 0xE0, 0xF8, - 0x0F, 0x07, 0xC0, 0x78, 0x3F, 0x03, 0xC1, 0xF8, 0x3C, 0x0F, 0xE1, 0xE0, - 0x3F, 0x9E, 0x01, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0xFF, - 0x00, 0x1F, 0xFC, 0x03, 0xCF, 0xF0, 0x3C, 0x3F, 0x83, 0xC0, 0xFC, 0x3C, - 0x03, 0xF1, 0xE0, 0x1F, 0x9E, 0x00, 0x7C, 0xF0, 0x03, 0xE7, 0x80, 0x1F, - 0x3C, 0x00, 0xF9, 0xE0, 0x07, 0x87, 0x00, 0x3C, 0x3C, 0x03, 0xC0, 0xF0, - 0x3C, 0x03, 0xC3, 0xC0, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xFF, - 0xE0, 0x03, 0xF1, 0xE0, 0x0F, 0xC1, 0xC0, 0x3F, 0x03, 0xC0, 0xFE, 0x07, - 0x81, 0xF8, 0x0F, 0x87, 0xF0, 0x1F, 0x0F, 0xC0, 0x3E, 0x3F, 0x80, 0xFC, - 0x7F, 0x01, 0xF8, 0xFC, 0x03, 0xF1, 0xF8, 0x07, 0xE3, 0xF0, 0x1F, 0xC7, - 0xE0, 0x3F, 0x8F, 0xC0, 0x7E, 0x0F, 0x81, 0xFC, 0x1F, 0x03, 0xF8, 0x1F, - 0x0F, 0xE0, 0x1F, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x03, - 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, - 0x1F, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x01, 0xE0, 0x1F, 0x81, 0xFE, 0x0F, - 0xF0, 0x7F, 0x81, 0xF8, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x7E, 0x07, 0xF8, 0x3F, - 0xC1, 0xFE, 0x07, 0xE0, 0x1E, 0x00, 0x00, 0x78, 0x01, 0xF8, 0x07, 0xF8, - 0x0F, 0xF0, 0x1F, 0xE0, 0x1F, 0x80, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, - 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x00, 0xFC, 0x00, 0xF8, 0x00, - 0xE0, 0x01, 0xC0, 0x07, 0x00, 0x0C, 0x00, 0x30, 0x01, 0xC0, 0x0E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFF, 0x00, 0x0F, 0xFC, 0x00, 0x3F, 0xF0, - 0x01, 0xFF, 0xC0, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0xE0, 0x00, - 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x1F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, - 0x00, 0x0F, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, - 0x80, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x1F, 0xFC, - 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x3F, 0xF0, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xE0, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0x80, 0xF1, 0xF0, 0x38, 0x3E, - 0x1E, 0x0F, 0xC7, 0xC3, 0xF1, 0xF0, 0xFC, 0x7C, 0x3F, 0x0E, 0x0F, 0xC0, - 0x07, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x07, - 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x0C, 0x00, - 0x06, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xC0, 0x01, 0xF8, 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, - 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x3F, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x7C, - 0x00, 0x03, 0x80, 0x7C, 0x00, 0x00, 0xE0, 0x7C, 0x00, 0x00, 0x38, 0x3C, - 0x00, 0xF0, 0x4C, 0x3E, 0x00, 0xFD, 0xE7, 0x1E, 0x00, 0xF3, 0xF1, 0x9F, - 0x00, 0xF1, 0xF0, 0xEF, 0x80, 0xF0, 0x78, 0x3F, 0x80, 0xF0, 0x3C, 0x1F, - 0xC0, 0x78, 0x1E, 0x0F, 0xE0, 0x78, 0x1E, 0x07, 0xF0, 0x3C, 0x0F, 0x03, - 0xF8, 0x3E, 0x07, 0x81, 0xFC, 0x1E, 0x07, 0x81, 0xFE, 0x0F, 0x03, 0xC0, - 0xDF, 0x07, 0x83, 0xC0, 0x6F, 0x83, 0xC3, 0xE0, 0x63, 0xE1, 0xF3, 0xF0, - 0x71, 0xF0, 0x7E, 0x78, 0x70, 0xF8, 0x1E, 0x3F, 0xF0, 0x3E, 0x00, 0x07, - 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x80, 0x03, 0xF0, - 0x07, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, - 0x7E, 0x00, 0x00, 0x06, 0xFC, 0x00, 0x00, 0x19, 0xF8, 0x00, 0x00, 0x63, - 0xF8, 0x00, 0x00, 0xC7, 0xF0, 0x00, 0x03, 0x07, 0xE0, 0x00, 0x06, 0x0F, - 0xC0, 0x00, 0x18, 0x1F, 0x80, 0x00, 0x60, 0x3F, 0x00, 0x00, 0xC0, 0x7F, - 0x00, 0x03, 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, - 0x00, 0x60, 0x03, 0xF0, 0x00, 0xC0, 0x07, 0xE0, 0x03, 0x00, 0x0F, 0xE0, - 0x0E, 0x00, 0x1F, 0xC0, 0x18, 0x00, 0x3F, 0x80, 0x70, 0x00, 0x7F, 0x01, - 0xC0, 0x00, 0xFE, 0x03, 0x80, 0x01, 0xFE, 0x1F, 0x80, 0x07, 0xFE, 0x7F, - 0xC0, 0x3F, 0xFF, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xE0, 0x00, - 0xFE, 0x1F, 0xE0, 0x01, 0xFC, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x0F, - 0xE0, 0x3F, 0xC0, 0x1F, 0xC0, 0x7F, 0x80, 0x3F, 0x80, 0xFF, 0x00, 0x7F, - 0x01, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xF0, 0x07, 0xF0, - 0x1F, 0xC0, 0x0F, 0xC0, 0x7F, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0xFF, - 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0x0F, 0xE0, 0x07, 0xF0, 0x0F, - 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x1F, 0xC0, 0x3F, 0xC0, 0x7F, 0x00, 0x7F, - 0x80, 0xFE, 0x00, 0xFF, 0x01, 0xFC, 0x01, 0xFE, 0x03, 0xF0, 0x07, 0xFC, - 0x0F, 0xE0, 0x0F, 0xF0, 0x1F, 0xC0, 0x3F, 0xE0, 0x3F, 0x80, 0x7F, 0x80, - 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x0F, 0xF8, 0x07, 0xFF, 0xFF, 0xC0, 0x3F, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x08, 0x00, 0x7F, 0xFE, 0xC0, - 0x0F, 0xF0, 0x7E, 0x00, 0xFE, 0x01, 0xF0, 0x1F, 0xE0, 0x07, 0x01, 0xFE, - 0x00, 0x38, 0x1F, 0xE0, 0x00, 0xC0, 0xFE, 0x00, 0x06, 0x0F, 0xF0, 0x00, - 0x30, 0xFF, 0x00, 0x01, 0x07, 0xF8, 0x00, 0x08, 0x7F, 0x80, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x60, 0x7F, 0x00, 0x06, 0x03, 0xFC, 0x00, - 0x70, 0x0F, 0xE0, 0x07, 0x00, 0x1F, 0xC0, 0xE0, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFE, - 0x00, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x3F, 0x00, 0x03, 0xF8, - 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x03, - 0xF8, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x1F, 0xC0, 0x03, 0xFC, - 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x7F, 0x00, 0x0F, 0xF0, 0x0F, 0xC0, 0x01, - 0xFE, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x7F, 0x00, 0x07, 0xF8, 0x0F, 0xE0, - 0x01, 0xFF, 0x03, 0xF8, 0x00, 0x3F, 0xE0, 0x7F, 0x00, 0x07, 0xF8, 0x0F, - 0xE0, 0x00, 0xFF, 0x01, 0xFC, 0x00, 0x3F, 0xE0, 0x7F, 0x00, 0x07, 0xF8, - 0x0F, 0xE0, 0x01, 0xFF, 0x01, 0xFC, 0x00, 0x3F, 0xC0, 0x3F, 0x00, 0x0F, - 0xF0, 0x0F, 0xE0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x1F, 0xC0, 0x0F, 0xE0, 0x0F, 0xF0, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0x7F, - 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, - 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x3F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0x1E, - 0x00, 0x3F, 0x80, 0x0E, 0x00, 0x7F, 0x00, 0x06, 0x00, 0x7F, 0x00, 0x04, - 0x00, 0x7F, 0x00, 0x04, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x80, - 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xFC, 0x0F, 0x00, - 0x01, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x01, 0xFC, 0x3E, 0x00, - 0x03, 0xF8, 0x1E, 0x00, 0x03, 0xF8, 0x0C, 0x00, 0x03, 0xF8, 0x0C, 0x00, - 0x03, 0xF8, 0x0C, 0x00, 0x07, 0xF0, 0x08, 0x00, 0x07, 0xF0, 0x00, 0x08, - 0x07, 0xF0, 0x00, 0x18, 0x07, 0xE0, 0x00, 0x30, 0x0F, 0xE0, 0x00, 0x30, - 0x0F, 0xE0, 0x00, 0x70, 0x0F, 0xE0, 0x01, 0xE0, 0x1F, 0xC0, 0x07, 0xE0, - 0x1F, 0xE0, 0x3F, 0xE0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xC0, - 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0x03, 0xF0, - 0x01, 0xFC, 0x01, 0xE0, 0x03, 0xF8, 0x01, 0xC0, 0x0F, 0xE0, 0x01, 0x80, - 0x1F, 0xC0, 0x02, 0x00, 0x3F, 0x80, 0x04, 0x00, 0x7F, 0x00, 0x00, 0x01, - 0xFC, 0x03, 0x00, 0x03, 0xF8, 0x04, 0x00, 0x07, 0xF0, 0x18, 0x00, 0x0F, - 0xC0, 0xF0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFE, - 0x1F, 0x00, 0x03, 0xF8, 0x1E, 0x00, 0x07, 0xF0, 0x18, 0x00, 0x0F, 0xE0, - 0x30, 0x00, 0x1F, 0xC0, 0x60, 0x00, 0x7F, 0x00, 0x80, 0x00, 0xFE, 0x01, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x02, 0x00, 0x0F, 0xFF, 0xEE, 0x00, 0x3F, 0xC0, - 0xFC, 0x00, 0x7F, 0x00, 0x7C, 0x01, 0xFE, 0x00, 0x3C, 0x03, 0xFC, 0x00, - 0x38, 0x07, 0xF8, 0x00, 0x18, 0x07, 0xF0, 0x00, 0x18, 0x0F, 0xF0, 0x00, - 0x10, 0x1F, 0xE0, 0x00, 0x10, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x1F, - 0xFF, 0xFF, 0x00, 0x07, 0xFC, 0xFF, 0x00, 0x03, 0xF8, 0xFF, 0x00, 0x03, - 0xF8, 0xFF, 0x00, 0x03, 0xF0, 0xFF, 0x00, 0x03, 0xF0, 0xFF, 0x00, 0x07, - 0xF0, 0x7F, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x07, 0xE0, 0x7F, 0x80, 0x07, - 0xE0, 0x3F, 0x80, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xC0, 0x0F, 0xE0, 0x0F, - 0xC0, 0x07, 0xF0, 0x3F, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x01, 0xFF, 0xFC, 0x7F, 0xFE, 0x00, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, - 0xFE, 0x00, 0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, - 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x00, - 0x3F, 0x80, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, - 0x7F, 0x00, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x01, 0xFC, 0x00, - 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x00, 0x7F, 0xFF, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x7F, 0x00, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x1F, 0xC0, - 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x3F, 0x80, - 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x0F, 0xE0, - 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x07, 0xFC, - 0x01, 0xFF, 0x00, 0x3F, 0xFF, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xF8, - 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x3F, - 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x00, - 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, - 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, - 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xFC, - 0x00, 0x1F, 0xF0, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, - 0x3F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x07, 0x03, 0xF0, 0x01, 0xF0, 0xFE, 0x00, - 0x3E, 0x1F, 0xC0, 0x07, 0xC3, 0xF0, 0x00, 0xF8, 0xFC, 0x00, 0x0F, 0x3F, - 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0xFF, 0xC0, 0x1F, 0xF8, 0x0F, 0xC0, 0x03, 0xF8, 0x01, 0xC0, 0x00, 0xFE, - 0x00, 0xE0, 0x00, 0x3F, 0x80, 0x70, 0x00, 0x1F, 0xC0, 0x38, 0x00, 0x07, - 0xF0, 0x1C, 0x00, 0x01, 0xFC, 0x0E, 0x00, 0x00, 0x7F, 0x07, 0x00, 0x00, - 0x3F, 0x83, 0x80, 0x00, 0x0F, 0xE1, 0xC0, 0x00, 0x03, 0xF8, 0xE0, 0x00, - 0x00, 0xFC, 0x60, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0x7F, - 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x07, 0xF0, - 0xFE, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x1F, - 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x03, 0xF8, 0x0F, 0xE0, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, - 0x0F, 0xF8, 0x07, 0xFC, 0x0F, 0xFF, 0xC7, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x04, 0x1F, 0xC0, 0x00, 0x60, 0xFC, 0x00, 0x06, - 0x0F, 0xE0, 0x00, 0x30, 0x7F, 0x00, 0x03, 0x83, 0xF8, 0x00, 0x7C, 0x3F, - 0x80, 0x0F, 0xC1, 0xFE, 0x03, 0xFE, 0x1F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, - 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x03, 0xFC, 0x00, 0x03, - 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x0F, 0xF8, - 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x1F, 0xF0, 0x00, - 0x6F, 0xC0, 0x03, 0xFF, 0x00, 0x06, 0xFC, 0x00, 0x37, 0xF0, 0x00, 0x6F, - 0xE0, 0x06, 0x7E, 0x00, 0x04, 0xFE, 0x00, 0xEF, 0xE0, 0x00, 0xCF, 0xE0, - 0x0C, 0xFE, 0x00, 0x0C, 0xFE, 0x01, 0x8F, 0xE0, 0x00, 0xCF, 0xE0, 0x38, - 0xFC, 0x00, 0x18, 0x7E, 0x03, 0x1F, 0xC0, 0x01, 0x87, 0xE0, 0x61, 0xFC, - 0x00, 0x18, 0x7E, 0x0E, 0x1F, 0xC0, 0x01, 0x87, 0xE0, 0xC3, 0xF8, 0x00, - 0x30, 0x7F, 0x18, 0x3F, 0x80, 0x03, 0x07, 0xF3, 0x83, 0xF8, 0x00, 0x30, - 0x7F, 0x30, 0x3F, 0x00, 0x06, 0x07, 0xF7, 0x07, 0xF0, 0x00, 0x60, 0x3F, - 0xE0, 0x7F, 0x00, 0x06, 0x03, 0xFC, 0x07, 0xF0, 0x00, 0xE0, 0x3F, 0xC0, - 0x7E, 0x00, 0x0C, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0xC0, 0x3F, 0x00, 0xFE, - 0x00, 0x0C, 0x03, 0xF0, 0x0F, 0xE0, 0x01, 0xC0, 0x3E, 0x01, 0xFC, 0x00, - 0x1C, 0x03, 0xC0, 0x1F, 0xC0, 0x07, 0xE0, 0x3C, 0x03, 0xFE, 0x00, 0xFF, - 0xC1, 0x81, 0xFF, 0xFC, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0x00, 0x1F, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x00, 0xF0, - 0x00, 0x7F, 0x00, 0x07, 0x00, 0x03, 0xFC, 0x00, 0x38, 0x00, 0x1F, 0xE0, - 0x01, 0x80, 0x01, 0xBF, 0x80, 0x0C, 0x00, 0x0D, 0xFC, 0x00, 0x60, 0x00, - 0x67, 0xF0, 0x07, 0x00, 0x02, 0x3F, 0x80, 0x30, 0x00, 0x30, 0xFE, 0x01, - 0x80, 0x01, 0x87, 0xF0, 0x0C, 0x00, 0x0C, 0x1F, 0xC0, 0xC0, 0x00, 0xC0, - 0xFE, 0x06, 0x00, 0x06, 0x07, 0xF8, 0x30, 0x00, 0x30, 0x1F, 0xC1, 0x80, - 0x01, 0x80, 0xFF, 0x18, 0x00, 0x18, 0x03, 0xF8, 0xC0, 0x00, 0xC0, 0x1F, - 0xC6, 0x00, 0x06, 0x00, 0x7F, 0x60, 0x00, 0x60, 0x03, 0xFB, 0x00, 0x03, - 0x00, 0x0F, 0xF8, 0x00, 0x18, 0x00, 0x7F, 0xC0, 0x01, 0xC0, 0x01, 0xFC, - 0x00, 0x0C, 0x00, 0x0F, 0xE0, 0x00, 0x60, 0x00, 0x3F, 0x00, 0x03, 0x00, - 0x01, 0xF0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x01, 0xC0, 0x00, 0x3C, 0x00, - 0x3F, 0x00, 0x01, 0xE0, 0x03, 0xFF, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x7E, - 0x1F, 0x80, 0x01, 0xF0, 0x0F, 0x80, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, - 0x1F, 0x80, 0xFE, 0x00, 0x3F, 0x03, 0xF8, 0x00, 0x7E, 0x07, 0xF0, 0x00, - 0xFE, 0x1F, 0xC0, 0x01, 0xFC, 0x7F, 0x80, 0x03, 0xF8, 0xFE, 0x00, 0x07, - 0xF3, 0xFC, 0x00, 0x1F, 0xE7, 0xF0, 0x00, 0x3F, 0xDF, 0xE0, 0x00, 0x7F, - 0xBF, 0xC0, 0x00, 0xFE, 0x7F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x07, 0xFB, - 0xFC, 0x00, 0x0F, 0xF7, 0xF8, 0x00, 0x3F, 0xCF, 0xF0, 0x00, 0x7F, 0x9F, - 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x03, 0xFC, 0x7F, 0x00, 0x07, 0xF0, 0xFE, - 0x00, 0x1F, 0xC0, 0xFC, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0xFE, 0x03, 0xF0, - 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0, - 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0xFE, 0x1F, 0xE0, 0x01, 0xFC, - 0x1F, 0xE0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0xC0, 0x1F, 0xC0, - 0x7F, 0x80, 0x3F, 0x80, 0xFF, 0x00, 0x7E, 0x01, 0xFE, 0x01, 0xFC, 0x03, - 0xFC, 0x03, 0xF8, 0x0F, 0xF8, 0x07, 0xF0, 0x1F, 0xE0, 0x0F, 0xC0, 0x7F, - 0x80, 0x3F, 0x81, 0xFE, 0x00, 0x7F, 0x07, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, - 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7E, 0x1F, 0x80, 0x01, - 0xF0, 0x0F, 0x80, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x80, 0x1F, 0x80, 0xFE, - 0x00, 0x3F, 0x03, 0xF8, 0x00, 0x7E, 0x07, 0xF0, 0x00, 0xFE, 0x1F, 0xC0, - 0x01, 0xFC, 0x7F, 0x80, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF3, 0xFC, 0x00, - 0x1F, 0xE7, 0xF8, 0x00, 0x3F, 0xDF, 0xE0, 0x00, 0x7F, 0xBF, 0xC0, 0x00, - 0xFF, 0x7F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x0F, - 0xF7, 0xF8, 0x00, 0x1F, 0xCF, 0xF0, 0x00, 0x7F, 0x9F, 0xC0, 0x00, 0xFE, - 0x3F, 0x80, 0x01, 0xFC, 0x7F, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xE1, - 0xFC, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x03, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x1F, 0x80, 0x03, 0xE0, 0x7E, 0x00, 0x03, - 0xF3, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x7F, 0xE0, 0x03, 0x03, 0xFF, - 0xF8, 0x1C, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0xE0, 0x3F, - 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0x3F, 0xC3, 0xFC, 0x00, 0x3F, 0x81, 0xFE, 0x00, 0x3F, - 0x80, 0xFF, 0x00, 0x7F, 0x80, 0xFF, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x7F, - 0x00, 0xFF, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFE, 0x00, 0xFE, - 0x01, 0xFE, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x01, 0xFC, - 0x1F, 0xF0, 0x01, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x03, 0xFD, - 0xFE, 0x00, 0x03, 0xF8, 0xFF, 0x00, 0x03, 0xF8, 0xFF, 0x00, 0x03, 0xF8, - 0xFF, 0x00, 0x07, 0xF8, 0x7F, 0x80, 0x07, 0xF0, 0x7F, 0x80, 0x07, 0xF0, - 0x3F, 0x80, 0x07, 0xF0, 0x3F, 0xC0, 0x0F, 0xE0, 0x3F, 0xC0, 0x0F, 0xE0, - 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, 0xE0, 0x1F, 0xE0, 0x1F, 0xE0, 0x1F, 0xE0, - 0x0F, 0xF0, 0x3F, 0xF0, 0x0F, 0xF8, 0xFF, 0xFC, 0x0F, 0xFE, 0x00, 0x1F, - 0x83, 0x00, 0x7F, 0xF7, 0x00, 0xF8, 0x7E, 0x01, 0xE0, 0x1E, 0x03, 0xC0, - 0x0E, 0x03, 0xC0, 0x0E, 0x07, 0xC0, 0x0E, 0x07, 0xC0, 0x04, 0x07, 0xC0, - 0x04, 0x07, 0xE0, 0x04, 0x07, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, - 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, - 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x07, - 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xF8, 0x20, 0x00, 0xF8, 0x20, 0x00, - 0xF8, 0x20, 0x00, 0xF8, 0x70, 0x00, 0xF8, 0x70, 0x00, 0xF0, 0x78, 0x01, - 0xF0, 0x78, 0x03, 0xE0, 0x7E, 0x07, 0xC0, 0x47, 0xFF, 0x80, 0xC0, 0xFC, - 0x00, 0x3F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFC, 0xFE, 0x3F, 0x8F, 0x9E, - 0x07, 0xF0, 0xF3, 0x81, 0xFC, 0x0E, 0x60, 0x3F, 0x81, 0x98, 0x07, 0xF0, - 0x13, 0x00, 0xFC, 0x02, 0x00, 0x3F, 0x80, 0x40, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, - 0x03, 0xFF, 0x0F, 0xFC, 0x00, 0xFC, 0x07, 0xF0, 0x00, 0x38, 0x07, 0xF0, - 0x00, 0x38, 0x07, 0xF0, 0x00, 0x30, 0x0F, 0xE0, 0x00, 0x30, 0x0F, 0xE0, - 0x00, 0x70, 0x0F, 0xE0, 0x00, 0x60, 0x0F, 0xE0, 0x00, 0x60, 0x1F, 0xC0, - 0x00, 0xE0, 0x1F, 0xC0, 0x00, 0xC0, 0x1F, 0xC0, 0x00, 0xC0, 0x3F, 0x80, - 0x00, 0xC0, 0x3F, 0x80, 0x01, 0x80, 0x3F, 0x80, 0x01, 0x80, 0x3F, 0x80, - 0x01, 0x80, 0x7F, 0x00, 0x01, 0x80, 0x7F, 0x00, 0x03, 0x00, 0x7F, 0x00, - 0x03, 0x00, 0x7E, 0x00, 0x03, 0x00, 0xFE, 0x00, 0x06, 0x00, 0xFE, 0x00, - 0x06, 0x00, 0xFC, 0x00, 0x06, 0x00, 0xFC, 0x00, 0x0E, 0x00, 0xFC, 0x00, - 0x0C, 0x00, 0xFC, 0x00, 0x1C, 0x00, 0xFC, 0x00, 0x18, 0x00, 0x7E, 0x00, - 0x38, 0x00, 0x7E, 0x00, 0x70, 0x00, 0x3F, 0x81, 0xE0, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xFC, 0x03, 0xFE, 0x7F, 0xE0, - 0x01, 0xF8, 0x7F, 0x80, 0x01, 0xC0, 0xFF, 0x00, 0x03, 0x80, 0xFE, 0x00, - 0x0E, 0x01, 0xFC, 0x00, 0x18, 0x03, 0xF8, 0x00, 0x70, 0x07, 0xF0, 0x00, - 0xC0, 0x0F, 0xF0, 0x03, 0x80, 0x1F, 0xE0, 0x0E, 0x00, 0x1F, 0xC0, 0x18, - 0x00, 0x3F, 0x80, 0x70, 0x00, 0x7F, 0x00, 0xC0, 0x00, 0xFE, 0x03, 0x00, - 0x01, 0xFC, 0x0E, 0x00, 0x03, 0xF8, 0x18, 0x00, 0x07, 0xF8, 0x60, 0x00, - 0x07, 0xF1, 0xC0, 0x00, 0x0F, 0xE3, 0x00, 0x00, 0x1F, 0xCC, 0x00, 0x00, - 0x3F, 0xB8, 0x00, 0x00, 0x7F, 0x60, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xFF, 0xF8, - 0xFF, 0xF0, 0xFF, 0x9F, 0xF8, 0x1F, 0xE0, 0x0F, 0x87, 0xF8, 0x07, 0xE0, - 0x07, 0x03, 0xF8, 0x03, 0xF0, 0x03, 0x80, 0xFE, 0x01, 0xF8, 0x01, 0x80, - 0x7F, 0x00, 0xFC, 0x00, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xC0, 0x1F, 0xC0, - 0x7F, 0x80, 0x60, 0x0F, 0xE0, 0x3F, 0xC0, 0x60, 0x07, 0xF0, 0x37, 0xE0, - 0x30, 0x03, 0xF8, 0x1B, 0xF0, 0x30, 0x00, 0xFC, 0x19, 0xF8, 0x18, 0x00, - 0x7E, 0x0C, 0xFE, 0x18, 0x00, 0x3F, 0x84, 0x7F, 0x0C, 0x00, 0x1F, 0xC6, - 0x3F, 0x8C, 0x00, 0x0F, 0xE2, 0x1F, 0xC6, 0x00, 0x07, 0xF3, 0x07, 0xE6, - 0x00, 0x03, 0xF9, 0x83, 0xF3, 0x00, 0x01, 0xFD, 0x81, 0xFB, 0x00, 0x00, - 0x7E, 0xC0, 0xFD, 0x80, 0x00, 0x3F, 0xC0, 0x7F, 0x80, 0x00, 0x1F, 0xE0, - 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x0F, 0xE0, - 0x00, 0x03, 0xF0, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0x00, - 0x78, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x00, 0x1C, 0x00, - 0x38, 0x00, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x00, 0x06, 0x00, 0x0C, 0x00, - 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0xFF, 0xC0, 0x3F, - 0xE0, 0x0F, 0xC0, 0x03, 0xF8, 0x01, 0xE0, 0x00, 0xFE, 0x00, 0xE0, 0x00, - 0x3F, 0x80, 0x70, 0x00, 0x07, 0xE0, 0x18, 0x00, 0x01, 0xFC, 0x0C, 0x00, - 0x00, 0x7F, 0x06, 0x00, 0x00, 0x0F, 0xC3, 0x00, 0x00, 0x03, 0xF9, 0x80, - 0x00, 0x00, 0xFE, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x00, 0x77, 0xF0, 0x00, 0x00, 0x39, 0xFC, 0x00, 0x00, - 0x1C, 0x3F, 0x00, 0x00, 0x06, 0x0F, 0xE0, 0x00, 0x03, 0x03, 0xF8, 0x00, - 0x01, 0x80, 0x7E, 0x00, 0x00, 0xE0, 0x1F, 0xC0, 0x00, 0x70, 0x07, 0xF0, - 0x00, 0x38, 0x01, 0xFC, 0x00, 0x1E, 0x00, 0x7F, 0x80, 0x1F, 0xC0, 0x1F, - 0xF0, 0x0F, 0xFC, 0x3F, 0xFF, 0x80, 0xFF, 0xF8, 0x3F, 0xF3, 0xFC, 0x00, - 0xFC, 0x1F, 0xC0, 0x07, 0x81, 0xFC, 0x00, 0x70, 0x0F, 0xC0, 0x0E, 0x00, - 0xFE, 0x00, 0xC0, 0x0F, 0xE0, 0x1C, 0x00, 0x7E, 0x03, 0x80, 0x07, 0xF0, - 0x30, 0x00, 0x7F, 0x06, 0x00, 0x03, 0xF0, 0xE0, 0x00, 0x3F, 0x8C, 0x00, - 0x03, 0xF9, 0x80, 0x00, 0x1F, 0xB0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x3F, - 0xFF, 0xFF, 0x03, 0xF8, 0x0F, 0xF0, 0x7C, 0x01, 0xFE, 0x07, 0x80, 0x3F, - 0xC0, 0x70, 0x03, 0xF8, 0x06, 0x00, 0x7F, 0x80, 0xC0, 0x0F, 0xF0, 0x08, - 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x07, 0xF8, 0x00, 0xC0, 0xFF, 0x00, 0x0C, 0x1F, 0xE0, 0x01, 0x81, 0xFE, - 0x00, 0x38, 0x3F, 0xC0, 0x07, 0x87, 0xF8, 0x01, 0xF0, 0xFF, 0x00, 0xFF, - 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x0F, - 0xFC, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, - 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF0, - 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x03, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, - 0x3C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xFE, 0x01, - 0xFF, 0xC0, 0x00, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x1C, - 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, - 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x00, 0x3C, 0x01, 0xE0, 0x0F, 0x00, - 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x01, - 0xC0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x0F, 0x00, 0x78, 0x00, 0x7F, 0xE0, - 0x0F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, - 0x07, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF0, 0x00, - 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, - 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, - 0xE0, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x07, 0xFC, - 0x01, 0xFF, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7F, 0x00, - 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x00, 0xF1, - 0xE0, 0x0F, 0x0F, 0x00, 0x78, 0x3C, 0x07, 0xC1, 0xE0, 0x3C, 0x07, 0x83, - 0xE0, 0x3C, 0x1E, 0x00, 0xF1, 0xF0, 0x07, 0x8F, 0x00, 0x1E, 0xF8, 0x00, - 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x70, 0x3E, - 0x0F, 0x83, 0xF0, 0x3E, 0x07, 0x80, 0xF0, 0x0E, 0x01, 0xC0, 0x00, 0x3C, - 0x0C, 0x03, 0xF9, 0xF0, 0x1F, 0x3F, 0x80, 0xF8, 0x7E, 0x07, 0xC1, 0xF8, - 0x3F, 0x07, 0xC0, 0xF8, 0x1F, 0x07, 0xE0, 0x7C, 0x3F, 0x01, 0xF0, 0xFC, - 0x0F, 0x87, 0xE0, 0x3E, 0x1F, 0x80, 0xF8, 0x7E, 0x03, 0xC3, 0xF8, 0x1F, - 0x0F, 0xC0, 0x7C, 0x3F, 0x03, 0xF0, 0xFC, 0x0F, 0x83, 0xF0, 0x7E, 0x3F, - 0xC2, 0xF8, 0xBF, 0x9B, 0xE4, 0x7F, 0xCF, 0xE0, 0xFE, 0x3F, 0x01, 0xE0, - 0x78, 0x00, 0x00, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x7E, - 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, - 0x03, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x3E, 0x01, 0xF9, 0xFC, 0x07, - 0xEF, 0xF8, 0x1F, 0x47, 0xF0, 0x7E, 0x0F, 0xC3, 0xF8, 0x3F, 0x0F, 0xC0, - 0xFC, 0x3F, 0x03, 0xF1, 0xF8, 0x0F, 0xC7, 0xE0, 0x3F, 0x1F, 0x01, 0xF8, - 0x7C, 0x07, 0xE3, 0xF0, 0x1F, 0x8F, 0xC0, 0xFC, 0x3E, 0x03, 0xF1, 0xF8, - 0x0F, 0x87, 0xE0, 0x7C, 0x1F, 0x03, 0xE0, 0xFC, 0x0F, 0x03, 0xF0, 0x78, - 0x0F, 0xC7, 0xC0, 0x1F, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, - 0x3F, 0xE0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0x87, 0xC3, 0xE1, 0xF1, 0xF0, - 0x38, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, - 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x03, 0x3F, - 0x00, 0xCF, 0xE0, 0x61, 0xFC, 0x70, 0x3F, 0xF8, 0x07, 0xFC, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xE0, 0x00, - 0x07, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, - 0x07, 0x9F, 0x80, 0x0F, 0xFF, 0xC0, 0x0F, 0x9F, 0xE0, 0x0F, 0x87, 0xF0, - 0x0F, 0x83, 0xF0, 0x0F, 0xC1, 0xF8, 0x07, 0xC0, 0xFC, 0x07, 0xE0, 0x7C, - 0x07, 0xE0, 0x7E, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x1F, 0x81, 0xF8, 0x0F, - 0x80, 0xFC, 0x0F, 0xC0, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x3F, 0x03, - 0xF0, 0x1F, 0x83, 0xF8, 0x0F, 0xC1, 0xF8, 0xC7, 0xE1, 0xFC, 0xC3, 0xF9, - 0xBE, 0xC0, 0xFF, 0x9F, 0xC0, 0x7F, 0x8F, 0xC0, 0x0F, 0x83, 0xC0, 0x00, - 0x00, 0x3F, 0x00, 0x3F, 0xE0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0x83, 0xC3, - 0xE0, 0xF1, 0xF0, 0x3C, 0xFC, 0x1E, 0x3F, 0x0F, 0x9F, 0x83, 0xC7, 0xE3, - 0xE1, 0xFB, 0xE0, 0xFF, 0xE0, 0x3F, 0xC0, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0xFC, 0x03, 0x3F, 0x01, 0x8F, 0xC0, 0xC1, 0xF8, 0x70, 0x7F, 0xF8, 0x07, - 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xCE, 0x00, - 0x00, 0x78, 0xF0, 0x00, 0x0F, 0x8F, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x1F, - 0x06, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x06, 0x1F, 0x00, 0x00, 0xF1, 0xE0, - 0x00, 0x0F, 0x3E, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x7F, 0xF0, 0x00, 0x7E, - 0x3F, 0xE0, 0x7C, 0x0F, 0xF0, 0x7E, 0x07, 0xC0, 0x7E, 0x03, 0xE0, 0x3F, - 0x01, 0xF0, 0x1F, 0x01, 0xF8, 0x0F, 0x80, 0xFC, 0x07, 0xC0, 0xFC, 0x01, - 0xE0, 0xFC, 0x00, 0x78, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0xF0, 0x00, - 0x1C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xF8, 0x00, - 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x77, 0xFF, - 0x80, 0xF0, 0x7F, 0xC0, 0xF0, 0x07, 0xE0, 0xF0, 0x01, 0xF0, 0x78, 0x00, - 0xF8, 0x3C, 0x00, 0x78, 0x1F, 0x00, 0x7C, 0x07, 0xC0, 0x78, 0x01, 0xFF, - 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x04, 0x00, 0x01, 0xF8, 0x00, 0x1F, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x87, 0xC0, 0x3E, 0x1F, 0xC0, 0xFC, 0x7F, 0x81, 0xF9, 0x9F, - 0x03, 0xE6, 0x3E, 0x07, 0xD8, 0x7C, 0x1F, 0xA0, 0xF8, 0x3F, 0x83, 0xF0, - 0x7F, 0x07, 0xE0, 0xFC, 0x0F, 0xC3, 0xF8, 0x3F, 0x07, 0xE0, 0x7E, 0x0F, - 0xC0, 0xFC, 0x3F, 0x03, 0xF0, 0x7E, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF0, - 0x3F, 0x17, 0xE0, 0x7E, 0x6F, 0xC0, 0xF9, 0x9F, 0x01, 0xF6, 0x3E, 0x03, - 0xF8, 0xFC, 0x07, 0xF1, 0xC0, 0x07, 0x80, 0x01, 0xE0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC7, - 0xFC, 0x1F, 0xC0, 0xF8, 0x0F, 0x81, 0xF8, 0x1F, 0x81, 0xF0, 0x1F, 0x03, - 0xF0, 0x3E, 0x03, 0xE0, 0x3E, 0x07, 0xE0, 0x7C, 0x07, 0xC0, 0xFC, 0x2F, - 0x84, 0xF8, 0xCF, 0x98, 0xFF, 0x0F, 0xE0, 0x78, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xC0, - 0x00, 0x3E, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, - 0x7C, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF0, 0x00, - 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xE0, 0x00, 0x1F, - 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x00, - 0x60, 0xF8, 0x03, 0xC3, 0xC0, 0x0F, 0x1F, 0x00, 0x3C, 0xF8, 0x00, 0x7F, - 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xFC, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x01, - 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x03, - 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xE3, 0xFF, 0x03, 0xE0, 0xFC, 0x07, - 0xE0, 0xF0, 0x07, 0xE0, 0xE0, 0x07, 0xC1, 0xC0, 0x0F, 0xC3, 0x80, 0x0F, - 0xC7, 0x00, 0x0F, 0x8E, 0x00, 0x0F, 0xBE, 0x00, 0x1F, 0xFE, 0x00, 0x1F, - 0xFE, 0x00, 0x1F, 0xFE, 0x00, 0x1F, 0x3E, 0x00, 0x3F, 0x3F, 0x00, 0x3F, - 0x1F, 0x00, 0x3E, 0x1F, 0x00, 0x7E, 0x1F, 0x04, 0x7E, 0x1F, 0x8C, 0x7E, - 0x0F, 0x98, 0x7C, 0x0F, 0xF0, 0xFC, 0x07, 0xE0, 0xE0, 0x03, 0xC0, 0x00, - 0x08, 0x0F, 0xC7, 0xFE, 0x07, 0xF0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7C, - 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0x80, 0x7C, 0x07, 0xE0, 0x3E, 0x01, - 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xC0, 0x3E, 0x03, 0xF0, 0x1F, 0x80, 0xF8, - 0x0F, 0xC0, 0x7E, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x8F, 0x8C, 0x7C, 0x43, - 0xE4, 0x1F, 0xE0, 0xFE, 0x03, 0xC0, 0x00, 0x00, 0x70, 0x78, 0x0F, 0x83, - 0xFE, 0x3F, 0x87, 0xF8, 0x1F, 0xCF, 0xF1, 0xFF, 0x03, 0xF1, 0x3E, 0x73, - 0xE0, 0x7E, 0x47, 0xD8, 0x7C, 0x0F, 0xD0, 0xFB, 0x1F, 0x81, 0xF4, 0x3E, - 0xC3, 0xF0, 0x3E, 0x87, 0xF0, 0x7C, 0x0F, 0xE0, 0xFE, 0x1F, 0x81, 0xF4, - 0x1F, 0x83, 0xF0, 0x3F, 0x07, 0xE0, 0x7C, 0x07, 0xE0, 0xFC, 0x1F, 0x81, - 0xF8, 0x1F, 0x83, 0xF0, 0x3F, 0x07, 0xE0, 0x7C, 0x07, 0xE0, 0xFC, 0x0F, - 0x80, 0xF8, 0x1F, 0x03, 0xF0, 0x3F, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0xFC, - 0x0F, 0x88, 0xF8, 0x1F, 0x81, 0xF3, 0x3F, 0x03, 0xE0, 0x3E, 0x47, 0xE0, - 0xFC, 0x07, 0xF0, 0xFC, 0x1F, 0x80, 0xFE, 0x18, 0x00, 0x00, 0x0F, 0x00, - 0x00, 0x70, 0xF8, 0x7F, 0xC3, 0xF8, 0x1F, 0x8F, 0xF0, 0x3F, 0x33, 0xE0, - 0x7C, 0x87, 0xC1, 0xF9, 0x0F, 0x83, 0xF4, 0x1F, 0x07, 0xD0, 0x3E, 0x0F, - 0xE0, 0xFC, 0x3F, 0x81, 0xF8, 0x7F, 0x03, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, - 0x1F, 0x87, 0xE0, 0x3E, 0x0F, 0xC0, 0xFC, 0x1F, 0x81, 0xF0, 0x3E, 0x03, - 0xE0, 0xFC, 0x0F, 0xC9, 0xF8, 0x1F, 0x33, 0xE0, 0x3E, 0x47, 0xC0, 0x7F, - 0x1F, 0x80, 0xFE, 0x38, 0x00, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x0E, 0x38, - 0x03, 0xC1, 0xC0, 0x78, 0x1E, 0x0F, 0x81, 0xF0, 0xF0, 0x1F, 0x1F, 0x01, - 0xF3, 0xE0, 0x1F, 0x3E, 0x03, 0xF7, 0xC0, 0x3F, 0x7C, 0x03, 0xF7, 0xC0, - 0x3E, 0xFC, 0x03, 0xEF, 0xC0, 0x7E, 0xF8, 0x07, 0xCF, 0x80, 0x7C, 0xF8, - 0x0F, 0x8F, 0x80, 0xF8, 0xF8, 0x1F, 0x07, 0x81, 0xE0, 0x78, 0x3C, 0x03, - 0xC7, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x1F, 0x00, 0x3F, 0xE7, 0xF8, - 0x01, 0xF9, 0xFF, 0x00, 0x1F, 0x47, 0xF0, 0x07, 0xF0, 0x7E, 0x00, 0xFE, - 0x0F, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0xFC, 0x07, 0xE0, - 0x1F, 0x81, 0xFC, 0x03, 0xE0, 0x3F, 0x00, 0x7C, 0x07, 0xE0, 0x1F, 0x81, - 0xFC, 0x03, 0xF0, 0x3F, 0x00, 0x7C, 0x07, 0xE0, 0x0F, 0x81, 0xF8, 0x03, - 0xF0, 0x3E, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0x81, 0xF0, 0x01, 0xF0, 0x7C, - 0x00, 0x7F, 0x1F, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xF3, 0xE0, 0x00, 0x3E, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0xF9, 0xF0, 0x1F, 0x1F, 0xC0, 0xF8, - 0x7E, 0x07, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xF8, 0x1F, 0x87, 0xE0, 0x7C, - 0x3F, 0x01, 0xF0, 0xFC, 0x0F, 0xC7, 0xE0, 0x3E, 0x1F, 0x80, 0xF8, 0x7E, - 0x07, 0xE3, 0xF0, 0x1F, 0x8F, 0xC0, 0x7C, 0x3F, 0x03, 0xF0, 0xFC, 0x0F, - 0xC3, 0xF0, 0x7E, 0x0F, 0xC3, 0xF8, 0x3F, 0x9B, 0xE0, 0x7F, 0xDF, 0x01, - 0xFE, 0x7C, 0x01, 0xF1, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3E, 0x00, 0x00, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xF8, - 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x71, 0xE1, 0xFF, 0x3E, 0x07, 0xE7, 0xF0, - 0x7E, 0xFF, 0x07, 0xE9, 0xE0, 0x7D, 0x0E, 0x07, 0xD0, 0x00, 0xFE, 0x00, - 0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0x80, - 0x01, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, - 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0x01, - 0xF1, 0x07, 0xFF, 0x0F, 0x0F, 0x0E, 0x07, 0x1E, 0x06, 0x1E, 0x06, 0x1F, - 0x02, 0x1F, 0x02, 0x1F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x0F, 0xF0, 0x07, - 0xF8, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFC, 0x40, 0x7C, 0x40, 0x7C, 0x60, - 0x3C, 0xE0, 0x38, 0xF0, 0x38, 0xF8, 0xF0, 0xDF, 0xC0, 0x00, 0x20, 0x03, - 0x00, 0x38, 0x03, 0x80, 0x3C, 0x03, 0xE0, 0x7F, 0x07, 0xFF, 0x3F, 0xF8, - 0x7C, 0x07, 0xE0, 0x3F, 0x01, 0xF0, 0x0F, 0x80, 0xFC, 0x07, 0xC0, 0x3E, - 0x03, 0xF0, 0x1F, 0x80, 0xF8, 0x07, 0xC0, 0x7E, 0x03, 0xF1, 0x1F, 0x08, - 0xF8, 0x87, 0xC8, 0x3F, 0xC1, 0xFC, 0x07, 0x80, 0x00, 0x00, 0x40, 0x00, - 0x1F, 0x03, 0xF7, 0xF8, 0x0F, 0x87, 0xE0, 0x3E, 0x1F, 0x81, 0xF8, 0x7E, - 0x07, 0xC1, 0xF0, 0x1F, 0x07, 0xC0, 0xFC, 0x3F, 0x03, 0xE0, 0xF8, 0x0F, - 0x83, 0xE0, 0x7E, 0x0F, 0x81, 0xF8, 0x7E, 0x0F, 0xC1, 0xF0, 0x3F, 0x07, - 0xC1, 0xFC, 0x1F, 0x07, 0xE0, 0xF8, 0x2F, 0x83, 0xE1, 0x3C, 0x6F, 0x8D, - 0xF1, 0x3E, 0x67, 0xC8, 0xFF, 0x1F, 0xE3, 0xF8, 0x7F, 0x07, 0xC0, 0xF0, - 0x00, 0x06, 0x07, 0x1F, 0x07, 0xBF, 0x83, 0xE7, 0xC1, 0xF3, 0xE0, 0xF9, - 0xF8, 0x3C, 0x7C, 0x0C, 0x3E, 0x06, 0x1F, 0x03, 0x0F, 0x83, 0x07, 0xC1, - 0x83, 0xE1, 0x81, 0xF1, 0x80, 0xF9, 0x80, 0x7C, 0xC0, 0x3E, 0xC0, 0x1F, - 0xC0, 0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xC0, 0x01, 0xC0, 0x00, 0xC0, 0x00, - 0x40, 0x00, 0x06, 0x01, 0x81, 0xC7, 0xC0, 0x30, 0x7F, 0xF8, 0x0E, 0x0F, - 0x9F, 0x01, 0xC1, 0xF3, 0xE0, 0x78, 0x3E, 0x7C, 0x1F, 0x03, 0xCF, 0xC3, - 0xE0, 0x30, 0xF8, 0xFC, 0x06, 0x1F, 0x1F, 0xC0, 0x83, 0xE7, 0xF8, 0x30, - 0x7C, 0xFF, 0x04, 0x0F, 0xB7, 0xE1, 0x81, 0xF6, 0xFC, 0x60, 0x3F, 0x8F, - 0x98, 0x07, 0xE1, 0xF3, 0x00, 0xFC, 0x3E, 0xC0, 0x1F, 0x07, 0xF0, 0x03, - 0xE0, 0xFC, 0x00, 0x78, 0x1F, 0x80, 0x0F, 0x03, 0xE0, 0x01, 0xC0, 0x78, - 0x00, 0x30, 0x0E, 0x00, 0x06, 0x01, 0x80, 0x00, 0x00, 0xF0, 0x1E, 0x0F, - 0xF0, 0x3E, 0x01, 0xF8, 0x7F, 0x01, 0xF8, 0xFF, 0x00, 0xF9, 0x8E, 0x00, - 0xFB, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xBF, 0x00, 0x01, - 0xBF, 0x08, 0x73, 0x1F, 0x18, 0xFF, 0x1F, 0x30, 0xFE, 0x1F, 0xE0, 0xFC, - 0x0F, 0xC0, 0x78, 0x07, 0x80, 0x00, 0x30, 0x1C, 0x0F, 0xF0, 0x7C, 0x07, - 0xE0, 0xF8, 0x0F, 0xC1, 0xF0, 0x0F, 0xC1, 0xE0, 0x1F, 0x81, 0xC0, 0x3F, - 0x03, 0x00, 0x3E, 0x06, 0x00, 0x7E, 0x08, 0x00, 0xFC, 0x30, 0x01, 0xF8, - 0x60, 0x01, 0xF1, 0x80, 0x03, 0xE3, 0x00, 0x07, 0xCC, 0x00, 0x0F, 0xD8, - 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0xF8, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x01, 0xC1, 0x80, 0x07, 0xE6, - 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xE1, 0xFF, 0xF8, 0x3F, 0xFF, 0x07, 0xFF, 0xC0, 0x80, 0x70, 0x30, - 0x1C, 0x04, 0x07, 0x00, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, - 0x80, 0x00, 0x60, 0x00, 0x18, 0x00, 0x06, 0x00, 0x01, 0xC0, 0x00, 0x30, - 0x00, 0x0C, 0x00, 0x03, 0xE0, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0xC7, 0xFC, - 0x3D, 0xCF, 0xC7, 0x90, 0xF8, 0xF0, 0x07, 0x9C, 0x00, 0x3E, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xE0, - 0x00, 0x3E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, - 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, - 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, - 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, - 0x3E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, - 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, - 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x03, 0xE0, 0x00, - 0x7C, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, - 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x03, 0xF0, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x03, 0xFF, 0x01, 0x3F, - 0xFE, 0x1D, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x1F, - 0x00}; - -const GFXglyph FreeSerifBoldItalic24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 12, 0, 1}, // 0x20 ' ' - {0, 15, 33, 18, 3, -31}, // 0x21 '!' - {62, 19, 13, 26, 6, -31}, // 0x22 '"' - {93, 27, 33, 23, -2, -32}, // 0x23 '#' - {205, 24, 39, 24, -1, -33}, // 0x24 '$' - {322, 35, 32, 39, 2, -30}, // 0x25 '%' - {462, 33, 33, 37, 0, -31}, // 0x26 '&' - {599, 7, 13, 13, 6, -31}, // 0x27 ''' - {611, 14, 41, 16, 1, -31}, // 0x28 '(' - {683, 14, 41, 16, -2, -31}, // 0x29 ')' - {755, 19, 20, 23, 3, -31}, // 0x2A '*' - {803, 22, 23, 27, 2, -22}, // 0x2B '+' - {867, 10, 15, 12, -3, -5}, // 0x2C ',' - {886, 12, 5, 16, 0, -12}, // 0x2D '-' - {894, 8, 7, 12, 0, -5}, // 0x2E '.' - {901, 19, 33, 16, 0, -31}, // 0x2F '/' - {980, 22, 33, 23, 1, -31}, // 0x30 '0' - {1071, 20, 32, 23, 0, -31}, // 0x31 '1' - {1151, 22, 32, 23, 1, -31}, // 0x32 '2' - {1239, 22, 33, 24, 0, -31}, // 0x33 '3' - {1330, 25, 32, 23, 0, -31}, // 0x34 '4' - {1430, 24, 32, 24, 0, -30}, // 0x35 '5' - {1526, 23, 32, 24, 1, -30}, // 0x36 '6' - {1618, 23, 31, 23, 3, -30}, // 0x37 '7' - {1708, 21, 33, 23, 1, -31}, // 0x38 '8' - {1795, 23, 33, 23, 0, -31}, // 0x39 '9' - {1890, 13, 22, 12, 0, -20}, // 0x3A ':' - {1926, 15, 30, 12, -2, -20}, // 0x3B ';' - {1983, 24, 25, 27, 1, -23}, // 0x3C '<' - {2058, 24, 14, 27, 3, -18}, // 0x3D '=' - {2100, 24, 25, 27, 3, -23}, // 0x3E '>' - {2175, 18, 33, 24, 4, -31}, // 0x3F '?' - {2250, 33, 33, 39, 3, -31}, // 0x40 '@' - {2387, 31, 32, 33, 0, -31}, // 0x41 'A' - {2511, 31, 31, 30, 0, -30}, // 0x42 'B' - {2632, 29, 33, 29, 2, -31}, // 0x43 'C' - {2752, 35, 31, 34, 0, -30}, // 0x44 'D' - {2888, 32, 31, 30, 0, -30}, // 0x45 'E' - {3012, 31, 31, 29, 0, -30}, // 0x46 'F' - {3133, 32, 33, 33, 2, -31}, // 0x47 'G' - {3265, 39, 31, 35, 0, -30}, // 0x48 'H' - {3417, 21, 31, 18, 0, -30}, // 0x49 'I' - {3499, 27, 36, 23, 0, -30}, // 0x4A 'J' - {3621, 34, 31, 31, 0, -30}, // 0x4B 'K' - {3753, 29, 31, 29, 0, -30}, // 0x4C 'L' - {3866, 44, 32, 41, 0, -30}, // 0x4D 'M' - {4042, 37, 32, 33, 0, -30}, // 0x4E 'N' - {4190, 31, 33, 32, 2, -31}, // 0x4F 'O' - {4318, 31, 31, 28, 0, -30}, // 0x50 'P' - {4439, 31, 42, 32, 2, -31}, // 0x51 'Q' - {4602, 32, 31, 31, 0, -30}, // 0x52 'R' - {4726, 24, 33, 24, 0, -31}, // 0x53 'S' - {4825, 27, 31, 28, 4, -30}, // 0x54 'T' - {4930, 32, 32, 34, 5, -30}, // 0x55 'U' - {5058, 31, 32, 33, 6, -30}, // 0x56 'V' - {5182, 41, 32, 44, 6, -30}, // 0x57 'W' - {5346, 34, 31, 33, 0, -30}, // 0x58 'X' - {5478, 28, 31, 30, 6, -30}, // 0x59 'Y' - {5587, 28, 31, 26, 0, -30}, // 0x5A 'Z' - {5696, 19, 38, 16, -2, -30}, // 0x5B '[' - {5787, 13, 33, 19, 6, -31}, // 0x5C '\' - {5841, 19, 38, 16, -3, -30}, // 0x5D ']' - {5932, 21, 17, 27, 3, -30}, // 0x5E '^' - {5977, 24, 3, 23, 0, 5}, // 0x5F '_' - {5986, 10, 9, 16, 4, -32}, // 0x60 '`' - {5998, 22, 23, 24, 1, -21}, // 0x61 'a' - {6062, 22, 33, 23, 1, -31}, // 0x62 'b' - {6153, 18, 23, 20, 1, -21}, // 0x63 'c' - {6205, 25, 34, 24, 1, -32}, // 0x64 'd' - {6312, 18, 23, 20, 1, -21}, // 0x65 'e' - {6364, 28, 41, 23, -4, -31}, // 0x66 'f' - {6508, 25, 31, 23, -1, -21}, // 0x67 'g' - {6605, 23, 34, 26, 1, -32}, // 0x68 'h' - {6703, 12, 33, 14, 2, -31}, // 0x69 'i' - {6753, 22, 42, 16, -4, -31}, // 0x6A 'j' - {6869, 24, 34, 24, 1, -32}, // 0x6B 'k' - {6971, 13, 34, 14, 2, -32}, // 0x6C 'l' - {7027, 35, 23, 36, 0, -21}, // 0x6D 'm' - {7128, 23, 23, 25, 0, -21}, // 0x6E 'n' - {7195, 20, 23, 22, 1, -21}, // 0x6F 'o' - {7253, 27, 31, 23, -4, -21}, // 0x70 'p' - {7358, 22, 31, 23, 1, -21}, // 0x71 'q' - {7444, 20, 22, 19, 0, -21}, // 0x72 'r' - {7499, 16, 23, 17, 0, -21}, // 0x73 's' - {7545, 13, 29, 13, 2, -27}, // 0x74 't' - {7593, 22, 23, 25, 2, -21}, // 0x75 'u' - {7657, 17, 23, 21, 3, -21}, // 0x76 'v' - {7706, 27, 23, 31, 3, -21}, // 0x77 'w' - {7784, 24, 23, 22, -1, -21}, // 0x78 'x' - {7853, 23, 31, 20, -3, -21}, // 0x79 'y' - {7943, 19, 25, 19, 0, -20}, // 0x7A 'z' - {8003, 20, 41, 16, 0, -31}, // 0x7B '{' - {8106, 4, 33, 13, 5, -31}, // 0x7C '|' - {8123, 20, 41, 16, -6, -31}, // 0x7D '}' - {8226, 21, 7, 27, 3, -14}}; // 0x7E '~' - -const GFXfont FreeSerifBoldItalic24pt7b PROGMEM = { - (uint8_t *)FreeSerifBoldItalic24pt7bBitmaps, - (GFXglyph *)FreeSerifBoldItalic24pt7bGlyphs, 0x20, 0x7E, 56}; - -// Approx. 8917 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic9pt7b.h deleted file mode 100644 index b5d9a55..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifBoldItalic9pt7b.h +++ /dev/null @@ -1,217 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifBoldItalic9pt7bBitmaps[] PROGMEM = { - 0x0C, 0x31, 0xC6, 0x18, 0x41, 0x08, 0x20, 0x0E, 0x38, 0xE0, 0xCF, 0x38, - 0xA2, 0x88, 0x02, 0x40, 0xC8, 0x13, 0x06, 0x43, 0xFC, 0x32, 0x06, 0x40, - 0x98, 0x7F, 0x84, 0xC0, 0x90, 0x32, 0x04, 0xC0, 0x01, 0x01, 0xF0, 0x4B, - 0x99, 0x33, 0x24, 0x78, 0x07, 0x80, 0x38, 0x0B, 0x89, 0x31, 0x26, 0x64, - 0xC7, 0x30, 0x3C, 0x04, 0x00, 0x38, 0x41, 0x9F, 0x06, 0x48, 0x31, 0x60, - 0xCD, 0x03, 0x2C, 0x07, 0x27, 0x81, 0x39, 0x05, 0xC4, 0x26, 0x10, 0x98, - 0x84, 0x66, 0x10, 0xE0, 0x03, 0x80, 0x22, 0x03, 0x10, 0x19, 0x00, 0xF0, - 0x0F, 0x3C, 0xF8, 0xCC, 0xC4, 0xE7, 0x47, 0x3E, 0x38, 0xE1, 0xE7, 0x97, - 0xCF, 0x00, 0xFA, 0x80, 0x08, 0x88, 0x84, 0x62, 0x10, 0x84, 0x21, 0x08, - 0x41, 0x00, 0x20, 0x84, 0x10, 0x84, 0x21, 0x08, 0xC6, 0x23, 0x11, 0x00, - 0x18, 0x18, 0xD6, 0x38, 0x18, 0xF7, 0x18, 0x18, 0x08, 0x04, 0x02, 0x01, - 0x0F, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0x6D, 0x95, 0x00, 0xFF, 0xC0, - 0xFF, 0x80, 0x06, 0x0C, 0x30, 0x60, 0x83, 0x04, 0x18, 0x20, 0xC1, 0x06, - 0x00, 0x0F, 0x0C, 0x8C, 0x6E, 0x37, 0x1B, 0x1F, 0x8F, 0xC7, 0xC7, 0x63, - 0xB1, 0x89, 0x83, 0x80, 0x06, 0x1E, 0x0E, 0x0E, 0x0C, 0x0C, 0x1C, 0x18, - 0x18, 0x18, 0x38, 0x38, 0xFC, 0x1F, 0x13, 0xD0, 0xE0, 0x70, 0x38, 0x38, - 0x18, 0x18, 0x18, 0x08, 0x08, 0x4F, 0xCF, 0xE0, 0x1F, 0x11, 0xC0, 0xE0, - 0x60, 0xC1, 0xF0, 0x38, 0x0C, 0x06, 0x03, 0x01, 0x19, 0x8F, 0x00, 0x00, - 0x80, 0xC0, 0xE1, 0xE0, 0xB0, 0x98, 0x9C, 0x8C, 0xFF, 0x07, 0x03, 0x01, - 0x80, 0x0F, 0x88, 0x08, 0x07, 0x83, 0xE0, 0x78, 0x1C, 0x06, 0x03, 0x01, - 0x80, 0x9C, 0x87, 0x80, 0x03, 0x87, 0x07, 0x07, 0x07, 0x03, 0xE3, 0x99, - 0xCC, 0xC6, 0x63, 0x33, 0x89, 0x87, 0x80, 0x3F, 0xBF, 0x90, 0x80, 0xC0, - 0x40, 0x60, 0x20, 0x30, 0x30, 0x10, 0x18, 0x08, 0x00, 0x1E, 0x13, 0x31, - 0x31, 0x3A, 0x1C, 0x1C, 0x6E, 0xC6, 0xC6, 0xC6, 0x44, 0x38, 0x0E, 0x1C, - 0x8C, 0x6C, 0x36, 0x3B, 0x1D, 0x8E, 0x7E, 0x0E, 0x07, 0x07, 0x0E, 0x0C, - 0x00, 0x39, 0xCE, 0x00, 0x03, 0x9C, 0xE0, 0x39, 0xCE, 0x00, 0x01, 0x8C, - 0x22, 0x20, 0x00, 0x01, 0xC3, 0xC7, 0x8E, 0x06, 0x01, 0xE0, 0x3C, 0x07, - 0x80, 0x40, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x60, 0x1E, 0x03, - 0xC0, 0x78, 0x1C, 0x3C, 0x78, 0xF0, 0x40, 0x00, 0x1C, 0x27, 0x37, 0x07, - 0x0E, 0x1C, 0x30, 0x60, 0x40, 0x00, 0xE0, 0xE0, 0xE0, 0x0F, 0x80, 0xC3, - 0x08, 0x04, 0xC3, 0x3C, 0x24, 0xE2, 0x27, 0x33, 0x39, 0x11, 0xC9, 0x93, - 0x77, 0x18, 0x00, 0x70, 0x40, 0xFC, 0x00, 0x00, 0x80, 0x18, 0x01, 0x80, - 0x38, 0x05, 0x80, 0x5C, 0x09, 0xC1, 0x1C, 0x1F, 0xC2, 0x0C, 0x20, 0xC4, - 0x0E, 0xF3, 0xF0, 0x3F, 0xE0, 0xC7, 0x0C, 0x71, 0xC7, 0x1C, 0xE1, 0xF0, - 0x39, 0xC3, 0x8E, 0x38, 0xE3, 0x0E, 0x71, 0xE7, 0x1C, 0xFF, 0x00, 0x07, - 0xD1, 0xC7, 0x38, 0x27, 0x02, 0x70, 0x0F, 0x00, 0xE0, 0x0E, 0x00, 0xE0, - 0x0E, 0x00, 0x60, 0x87, 0x18, 0x1E, 0x00, 0x3F, 0xE0, 0x30, 0xE0, 0xC1, - 0x87, 0x07, 0x1C, 0x1C, 0x60, 0x73, 0x81, 0xCE, 0x07, 0x38, 0x38, 0xC0, - 0xE7, 0x07, 0x1C, 0x78, 0xFF, 0x80, 0x1F, 0xF8, 0x61, 0xC3, 0x04, 0x38, - 0x81, 0xCC, 0x0F, 0xE0, 0xE2, 0x07, 0x10, 0x38, 0x81, 0x81, 0x1C, 0x18, - 0xE3, 0x8F, 0xFC, 0x00, 0x3F, 0xF8, 0x61, 0xC3, 0x04, 0x38, 0x81, 0xCC, - 0x0F, 0xE0, 0xE2, 0x07, 0x10, 0x38, 0x81, 0x80, 0x1C, 0x00, 0xE0, 0x0F, - 0x80, 0x00, 0x07, 0x91, 0xC7, 0x38, 0x27, 0x00, 0x70, 0x0F, 0x00, 0xE1, - 0xFE, 0x0E, 0xE0, 0xCE, 0x0C, 0x60, 0xC7, 0x1C, 0x1F, 0x00, 0x1F, 0x7E, - 0x1C, 0x38, 0x30, 0x60, 0xE1, 0xC1, 0xC3, 0x83, 0x06, 0x0F, 0xFC, 0x1C, - 0x38, 0x38, 0x70, 0x60, 0xC1, 0xC3, 0x83, 0x87, 0x0F, 0x9F, 0x00, 0x3F, - 0x0C, 0x0C, 0x1C, 0x1C, 0x18, 0x38, 0x38, 0x38, 0x30, 0x70, 0x70, 0xF8, - 0x07, 0xC0, 0xE0, 0x38, 0x0C, 0x07, 0x01, 0xC0, 0x70, 0x18, 0x0E, 0x03, - 0x80, 0xC3, 0x30, 0xDC, 0x1E, 0x00, 0x1F, 0x78, 0x71, 0x83, 0x18, 0x39, - 0x81, 0xD0, 0x0D, 0x00, 0xFC, 0x07, 0x60, 0x3B, 0x81, 0x8C, 0x1C, 0x70, - 0xE1, 0x8F, 0xBE, 0x00, 0x1F, 0x00, 0xC0, 0x0C, 0x01, 0xC0, 0x1C, 0x01, - 0x80, 0x38, 0x03, 0x80, 0x38, 0x03, 0x01, 0x70, 0x37, 0x0E, 0xFF, 0xE0, - 0x1E, 0x07, 0x87, 0x07, 0x83, 0x83, 0x82, 0xC3, 0xC1, 0x62, 0xE0, 0xB1, - 0x70, 0x99, 0x30, 0x4D, 0xB8, 0x27, 0x9C, 0x13, 0x8C, 0x11, 0xC6, 0x0C, - 0xC7, 0x0F, 0x47, 0xC0, 0x3C, 0x3C, 0x38, 0x20, 0xE0, 0x85, 0xC4, 0x13, - 0x10, 0x4E, 0x42, 0x3A, 0x08, 0x78, 0x21, 0xE0, 0x83, 0x84, 0x0C, 0x18, - 0x10, 0x00, 0x40, 0x07, 0xC1, 0xCE, 0x38, 0x73, 0x87, 0x70, 0x77, 0x07, - 0xF0, 0xFE, 0x0E, 0xE0, 0xEE, 0x1C, 0xE1, 0xC6, 0x38, 0x3E, 0x00, 0x3F, - 0xC0, 0xC7, 0x0C, 0x71, 0xC7, 0x1C, 0x71, 0x8E, 0x3F, 0xC3, 0x80, 0x30, - 0x03, 0x00, 0x70, 0x07, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0xCE, 0x38, 0x73, - 0x87, 0x70, 0x77, 0x07, 0xF0, 0x7E, 0x0E, 0xE0, 0xEE, 0x0C, 0xE1, 0xC6, - 0x38, 0x36, 0x01, 0x80, 0x3C, 0x2D, 0xFC, 0x3F, 0xC0, 0xE7, 0x0C, 0x71, - 0xC7, 0x1C, 0x71, 0x8E, 0x3F, 0x83, 0xB8, 0x3B, 0x83, 0x3C, 0x71, 0xC7, - 0x1C, 0xF9, 0xF0, 0x0C, 0x89, 0x8C, 0x46, 0x23, 0x80, 0xE0, 0x78, 0x0E, - 0x03, 0x21, 0x90, 0xCC, 0xC9, 0xC0, 0x7F, 0xE9, 0xDF, 0x31, 0x4E, 0x21, - 0xC0, 0x38, 0x06, 0x01, 0xC0, 0x38, 0x06, 0x00, 0xC0, 0x38, 0x0F, 0xC0, - 0x7C, 0xF3, 0x82, 0x30, 0x27, 0x04, 0x70, 0x46, 0x04, 0xE0, 0x4E, 0x08, - 0xE0, 0x8E, 0x08, 0xE1, 0x0F, 0x30, 0x3C, 0x00, 0xFC, 0x73, 0x82, 0x38, - 0x23, 0x84, 0x38, 0x83, 0x90, 0x39, 0x01, 0xA0, 0x1C, 0x01, 0xC0, 0x18, - 0x01, 0x00, 0xF9, 0xF7, 0x30, 0xE2, 0x30, 0xC2, 0x38, 0xC4, 0x3B, 0xC4, - 0x3A, 0xE8, 0x3C, 0xE8, 0x3C, 0xF0, 0x18, 0xF0, 0x18, 0x60, 0x10, 0x60, - 0x10, 0x40, 0x3F, 0x78, 0x61, 0x83, 0x98, 0x1D, 0x00, 0x70, 0x03, 0x80, - 0x1C, 0x01, 0x60, 0x0B, 0x80, 0x9C, 0x08, 0x60, 0xC3, 0x8F, 0x7E, 0x00, - 0xF9, 0xE6, 0x18, 0xC2, 0x1C, 0x81, 0xA0, 0x34, 0x07, 0x00, 0xC0, 0x18, - 0x07, 0x00, 0xE0, 0x1C, 0x0F, 0xC0, 0x3F, 0xE6, 0x19, 0x87, 0x21, 0xC0, - 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x07, 0x05, 0xC1, 0x38, 0xEF, 0xFC, - 0x0E, 0x08, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30, 0x30, 0x20, 0x60, 0x60, - 0x60, 0x40, 0xF0, 0xC6, 0x10, 0xC6, 0x10, 0x86, 0x30, 0x86, 0x30, 0x1E, - 0x0C, 0x18, 0x20, 0xC1, 0x83, 0x04, 0x18, 0x30, 0x60, 0x83, 0x06, 0x3C, - 0x00, 0x18, 0x1C, 0x34, 0x26, 0x66, 0x43, 0xC3, 0xFF, 0x80, 0xC6, 0x30, - 0x0D, 0x9D, 0x8C, 0xCC, 0x6E, 0x26, 0x33, 0x19, 0xBE, 0x66, 0x00, 0x00, - 0x78, 0x18, 0x30, 0x30, 0x3E, 0x73, 0x63, 0x63, 0x63, 0xC6, 0xC6, 0xCC, - 0x70, 0x0F, 0x3B, 0x70, 0x70, 0xE0, 0xE0, 0xE2, 0xE4, 0x78, 0x00, 0x00, - 0xF0, 0x1C, 0x06, 0x01, 0x83, 0xE3, 0x30, 0xCC, 0x63, 0x19, 0xCC, 0x63, - 0x38, 0xCF, 0x1D, 0x80, 0x0E, 0x75, 0xCB, 0xBE, 0xDE, 0x38, 0x72, 0x78, - 0x00, 0xE0, 0x34, 0x0C, 0x01, 0x80, 0x30, 0x1F, 0x01, 0x80, 0x30, 0x06, - 0x01, 0xC0, 0x30, 0x06, 0x00, 0xC0, 0x30, 0x06, 0x04, 0x80, 0xE0, 0x00, - 0x1C, 0x19, 0xD8, 0xCC, 0x66, 0x60, 0xE1, 0x80, 0xF0, 0x7E, 0x43, 0x21, - 0x8F, 0x00, 0x00, 0x1E, 0x07, 0x03, 0x01, 0x80, 0xD8, 0xFC, 0x76, 0x33, - 0x19, 0x99, 0xCC, 0xD6, 0x77, 0x30, 0x39, 0xC0, 0x0F, 0x31, 0x8C, 0xC6, - 0x31, 0xAE, 0x00, 0x03, 0x81, 0xC0, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x18, - 0x0C, 0x06, 0x03, 0x03, 0x01, 0x80, 0xC2, 0xC1, 0xC0, 0x00, 0x0F, 0x00, - 0xC0, 0x60, 0x18, 0x06, 0xF3, 0x90, 0xC8, 0x34, 0x0F, 0x06, 0xC1, 0x98, - 0x66, 0xB9, 0xC0, 0x03, 0xCC, 0x63, 0x39, 0x8C, 0x66, 0x31, 0x8E, 0x70, - 0x7B, 0x99, 0xAF, 0xCE, 0x66, 0x63, 0x67, 0x33, 0x31, 0x99, 0x8C, 0xCC, - 0xE7, 0xC6, 0x30, 0x73, 0x7F, 0x73, 0x73, 0x63, 0x67, 0xE6, 0xC7, 0xC6, - 0x1E, 0x33, 0x63, 0x63, 0xC3, 0xC6, 0xC6, 0xCC, 0x78, 0x1D, 0xC3, 0xB1, - 0xCC, 0x63, 0x19, 0xCE, 0x63, 0x18, 0xCC, 0x3E, 0x1C, 0x06, 0x03, 0xE0, - 0x0D, 0x99, 0x8C, 0xCC, 0x6E, 0x76, 0x33, 0x19, 0x9C, 0x7C, 0x06, 0x07, - 0x07, 0xC0, 0x76, 0x3A, 0x30, 0x70, 0x60, 0x60, 0x60, 0xE0, 0x3D, 0x14, - 0x58, 0x38, 0x60, 0xA2, 0xF0, 0x08, 0xCC, 0xF6, 0x31, 0x98, 0xC6, 0x35, - 0xC0, 0xE3, 0x63, 0x66, 0x66, 0x66, 0xCC, 0xCC, 0xFE, 0xEC, 0xE6, 0xCD, - 0x8B, 0x26, 0x8E, 0x18, 0x20, 0xE4, 0xD9, 0x36, 0xE5, 0xDA, 0x77, 0x19, - 0xC6, 0x61, 0x10, 0x39, 0xC7, 0xB0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xE1, - 0x5A, 0x67, 0x00, 0x39, 0x8C, 0xC3, 0x21, 0xA0, 0xD0, 0x68, 0x38, 0x0C, - 0x04, 0x04, 0x14, 0x0C, 0x00, 0x3E, 0x46, 0x0C, 0x08, 0x10, 0x20, 0x70, - 0x1A, 0x0E, 0x03, 0x0E, 0x0C, 0x0C, 0x08, 0x18, 0x18, 0x10, 0x60, 0x30, - 0x30, 0x30, 0x60, 0x60, 0x60, 0x30, 0xFF, 0xF0, 0x0C, 0x06, 0x06, 0x06, - 0x04, 0x0C, 0x0C, 0x0C, 0x06, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0xE0, - 0x71, 0x8F}; - -const GFXglyph FreeSerifBoldItalic9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 6, 13, 7, 1, -11}, // 0x21 '!' - {10, 6, 5, 10, 3, -11}, // 0x22 '"' - {14, 11, 13, 9, -1, -12}, // 0x23 '#' - {32, 11, 15, 9, -1, -12}, // 0x24 '$' - {53, 14, 13, 15, 1, -11}, // 0x25 '%' - {76, 13, 13, 14, 0, -11}, // 0x26 '&' - {98, 2, 5, 5, 3, -11}, // 0x27 ''' - {100, 5, 16, 6, 1, -11}, // 0x28 '(' - {110, 5, 16, 6, -1, -11}, // 0x29 ')' - {120, 8, 8, 9, 1, -11}, // 0x2A '*' - {128, 9, 9, 10, 0, -8}, // 0x2B '+' - {139, 3, 6, 5, -1, -2}, // 0x2C ',' - {142, 5, 2, 6, 0, -4}, // 0x2D '-' - {144, 3, 3, 4, 0, -1}, // 0x2E '.' - {146, 7, 12, 6, 0, -11}, // 0x2F '/' - {157, 9, 13, 9, 0, -11}, // 0x30 '0' - {172, 8, 13, 9, 0, -11}, // 0x31 '1' - {185, 9, 13, 9, 0, -11}, // 0x32 '2' - {200, 9, 13, 9, 0, -11}, // 0x33 '3' - {215, 9, 12, 9, 0, -11}, // 0x34 '4' - {229, 9, 13, 9, 0, -11}, // 0x35 '5' - {244, 9, 13, 9, 1, -11}, // 0x36 '6' - {259, 9, 12, 9, 1, -11}, // 0x37 '7' - {273, 8, 13, 9, 0, -11}, // 0x38 '8' - {286, 9, 13, 9, 0, -11}, // 0x39 '9' - {301, 5, 9, 5, 0, -7}, // 0x3A ':' - {307, 5, 11, 5, 0, -7}, // 0x3B ';' - {314, 9, 10, 10, 1, -9}, // 0x3C '<' - {326, 9, 5, 10, 1, -6}, // 0x3D '=' - {332, 9, 10, 10, 1, -9}, // 0x3E '>' - {344, 8, 13, 9, 1, -11}, // 0x3F '?' - {357, 13, 13, 15, 1, -12}, // 0x40 '@' - {379, 12, 13, 13, 0, -11}, // 0x41 'A' - {399, 12, 13, 12, 0, -11}, // 0x42 'B' - {419, 12, 13, 11, 1, -11}, // 0x43 'C' - {439, 14, 13, 13, 0, -11}, // 0x44 'D' - {462, 13, 13, 11, 0, -11}, // 0x45 'E' - {484, 13, 13, 11, 0, -11}, // 0x46 'F' - {506, 12, 13, 13, 1, -11}, // 0x47 'G' - {526, 15, 13, 14, 0, -11}, // 0x48 'H' - {551, 8, 13, 7, 0, -11}, // 0x49 'I' - {564, 10, 14, 9, 0, -11}, // 0x4A 'J' - {582, 13, 13, 12, 0, -11}, // 0x4B 'K' - {604, 12, 13, 11, 0, -11}, // 0x4C 'L' - {624, 17, 13, 16, 0, -11}, // 0x4D 'M' - {652, 14, 13, 13, 0, -11}, // 0x4E 'N' - {675, 12, 13, 12, 1, -11}, // 0x4F 'O' - {695, 12, 13, 11, 0, -11}, // 0x50 'P' - {715, 12, 16, 12, 1, -11}, // 0x51 'Q' - {739, 12, 13, 12, 0, -11}, // 0x52 'R' - {759, 9, 13, 9, 0, -11}, // 0x53 'S' - {774, 11, 13, 11, 2, -11}, // 0x54 'T' - {792, 12, 13, 13, 2, -11}, // 0x55 'U' - {812, 12, 12, 13, 2, -11}, // 0x56 'V' - {830, 16, 12, 17, 2, -11}, // 0x57 'W' - {854, 13, 13, 13, 0, -11}, // 0x58 'X' - {876, 11, 13, 11, 2, -11}, // 0x59 'Y' - {894, 11, 13, 10, 0, -11}, // 0x5A 'Z' - {912, 8, 15, 6, -1, -11}, // 0x5B '[' - {927, 5, 12, 7, 2, -11}, // 0x5C '\' - {935, 7, 15, 6, -1, -11}, // 0x5D ']' - {949, 8, 7, 10, 1, -11}, // 0x5E '^' - {956, 9, 1, 9, 0, 3}, // 0x5F '_' - {958, 4, 3, 6, 2, -11}, // 0x60 '`' - {960, 9, 9, 9, 0, -7}, // 0x61 'a' - {971, 8, 14, 9, 0, -12}, // 0x62 'b' - {985, 8, 9, 8, 0, -7}, // 0x63 'c' - {994, 10, 14, 9, 0, -12}, // 0x64 'd' - {1012, 7, 9, 7, 0, -7}, // 0x65 'e' - {1020, 11, 17, 9, -2, -12}, // 0x66 'f' - {1044, 9, 12, 9, 0, -7}, // 0x67 'g' - {1058, 9, 14, 10, 0, -12}, // 0x68 'h' - {1074, 5, 13, 5, 1, -11}, // 0x69 'i' - {1083, 9, 16, 6, -1, -11}, // 0x6A 'j' - {1101, 10, 14, 9, 0, -12}, // 0x6B 'k' - {1119, 5, 14, 5, 1, -12}, // 0x6C 'l' - {1128, 13, 9, 14, 0, -7}, // 0x6D 'm' - {1143, 8, 9, 9, 0, -7}, // 0x6E 'n' - {1152, 8, 9, 9, 0, -7}, // 0x6F 'o' - {1161, 10, 12, 9, -2, -7}, // 0x70 'p' - {1176, 9, 12, 9, 0, -7}, // 0x71 'q' - {1190, 8, 8, 7, 0, -7}, // 0x72 'r' - {1198, 6, 9, 6, 0, -7}, // 0x73 's' - {1205, 5, 12, 5, 1, -10}, // 0x74 't' - {1213, 8, 9, 10, 1, -7}, // 0x75 'u' - {1222, 7, 8, 8, 1, -7}, // 0x76 'v' - {1229, 10, 8, 12, 1, -7}, // 0x77 'w' - {1239, 10, 9, 9, -1, -7}, // 0x78 'x' - {1251, 9, 12, 8, -1, -7}, // 0x79 'y' - {1265, 8, 9, 7, 0, -7}, // 0x7A 'z' - {1274, 8, 16, 6, 0, -12}, // 0x7B '{' - {1290, 1, 12, 5, 2, -11}, // 0x7C '|' - {1292, 8, 16, 6, -2, -12}, // 0x7D '}' - {1308, 8, 2, 10, 1, -4}}; // 0x7E '~' - -const GFXfont FreeSerifBoldItalic9pt7b PROGMEM = { - (uint8_t *)FreeSerifBoldItalic9pt7bBitmaps, - (GFXglyph *)FreeSerifBoldItalic9pt7bGlyphs, 0x20, 0x7E, 22}; - -// Approx. 1982 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic12pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic12pt7b.h deleted file mode 100644 index 85de005..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic12pt7b.h +++ /dev/null @@ -1,273 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifItalic12pt7bBitmaps[] PROGMEM = { - 0x0C, 0x31, 0xC6, 0x18, 0x43, 0x0C, 0x20, 0x84, 0x10, 0x03, 0x0C, 0x30, - 0x66, 0xCD, 0x12, 0x24, 0x51, 0x00, 0x03, 0x10, 0x11, 0x80, 0x8C, 0x0C, - 0x40, 0x46, 0x1F, 0xFC, 0x21, 0x01, 0x18, 0x18, 0x80, 0x84, 0x3F, 0xF8, - 0x62, 0x02, 0x30, 0x31, 0x01, 0x08, 0x08, 0xC0, 0x00, 0x40, 0x08, 0x07, - 0xC0, 0xCA, 0x18, 0xA1, 0x92, 0x19, 0x01, 0xD0, 0x0F, 0x00, 0x78, 0x03, - 0xC0, 0x2E, 0x02, 0x64, 0x46, 0x44, 0x64, 0x46, 0x64, 0xC1, 0xF0, 0x08, - 0x00, 0x80, 0x00, 0x08, 0x0F, 0x0C, 0x0C, 0x7C, 0x0C, 0x22, 0x06, 0x12, - 0x06, 0x09, 0x03, 0x09, 0x01, 0x84, 0x80, 0xC4, 0x8F, 0x3C, 0x4C, 0x40, - 0x4C, 0x20, 0x4E, 0x10, 0x26, 0x08, 0x23, 0x08, 0x11, 0x84, 0x10, 0xC4, - 0x08, 0x3C, 0x00, 0x00, 0xE0, 0x02, 0x60, 0x0C, 0xC0, 0x19, 0x80, 0x36, - 0x00, 0x70, 0x00, 0xC0, 0x07, 0x9F, 0x33, 0x08, 0xC3, 0x13, 0x06, 0x46, - 0x0D, 0x0C, 0x0C, 0x18, 0x1C, 0x1C, 0x5C, 0x9F, 0x1E, 0xFA, 0xA0, 0x02, - 0x08, 0x20, 0xC3, 0x06, 0x18, 0x30, 0xE1, 0x83, 0x06, 0x0C, 0x18, 0x30, - 0x60, 0x40, 0x80, 0x81, 0x00, 0x08, 0x10, 0x10, 0x20, 0x40, 0xC1, 0x83, - 0x06, 0x0C, 0x18, 0x70, 0xC1, 0x83, 0x0C, 0x10, 0x41, 0x04, 0x00, 0x18, - 0x18, 0x18, 0x93, 0x74, 0x38, 0xD7, 0x93, 0x18, 0x18, 0x04, 0x00, 0x80, - 0x10, 0x02, 0x00, 0x41, 0xFF, 0xC1, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, - 0x00, 0x6C, 0x95, 0x00, 0xF8, 0xFC, 0x00, 0x40, 0x18, 0x02, 0x00, 0xC0, - 0x30, 0x06, 0x01, 0x80, 0x20, 0x0C, 0x01, 0x00, 0x60, 0x18, 0x03, 0x00, - 0xC0, 0x10, 0x06, 0x00, 0x07, 0x81, 0x98, 0x61, 0x18, 0x33, 0x06, 0xC0, - 0xD8, 0x1B, 0x03, 0xE0, 0xF8, 0x1F, 0x03, 0x60, 0x6C, 0x19, 0x83, 0x10, - 0xC3, 0x30, 0x3C, 0x00, 0x01, 0x87, 0xC0, 0xC0, 0x60, 0x30, 0x18, 0x18, - 0x0C, 0x06, 0x07, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x60, 0x30, 0xFE, 0x00, - 0x0F, 0x0C, 0x64, 0x0C, 0x03, 0x00, 0xC0, 0x20, 0x18, 0x0C, 0x02, 0x01, - 0x00, 0x80, 0x40, 0x20, 0x10, 0x2F, 0xF0, 0x07, 0x86, 0x30, 0x0C, 0x03, - 0x01, 0x81, 0x81, 0xF0, 0x1E, 0x03, 0x80, 0x60, 0x18, 0x06, 0x01, 0x00, - 0xCC, 0x63, 0xE0, 0x00, 0x20, 0x0C, 0x03, 0x80, 0xA0, 0x2C, 0x09, 0x82, - 0x30, 0x84, 0x31, 0x8C, 0x33, 0x06, 0x7F, 0xE0, 0x30, 0x06, 0x00, 0x80, - 0x30, 0x03, 0xE1, 0x80, 0x20, 0x06, 0x00, 0xF0, 0x0F, 0x00, 0x60, 0x06, - 0x00, 0xC0, 0x18, 0x03, 0x00, 0x40, 0x18, 0x02, 0x30, 0x87, 0xE0, 0x00, - 0x70, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x7F, 0x07, 0x18, 0x60, - 0xCE, 0x0C, 0xC0, 0xCC, 0x0C, 0xC0, 0xCC, 0x18, 0x41, 0x86, 0x30, 0x3E, - 0x00, 0x7F, 0xF0, 0x18, 0x03, 0x00, 0xC0, 0x10, 0x06, 0x01, 0x80, 0x30, - 0x0C, 0x01, 0x00, 0x60, 0x08, 0x03, 0x00, 0xC0, 0x10, 0x06, 0x00, 0x0F, - 0x83, 0x18, 0xC1, 0x98, 0x33, 0x06, 0x71, 0x87, 0x60, 0x70, 0x17, 0x0C, - 0x71, 0x07, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x63, 0x1C, 0x3E, 0x00, 0x07, - 0x83, 0x18, 0xC1, 0x18, 0x36, 0x06, 0xC0, 0xD8, 0x1B, 0x07, 0x60, 0xE6, - 0x38, 0x7F, 0x00, 0xC0, 0x30, 0x0C, 0x07, 0x03, 0xC0, 0xC0, 0x00, 0x33, - 0x30, 0x00, 0x00, 0xCC, 0xC0, 0x18, 0xC6, 0x00, 0x00, 0x00, 0x03, 0x18, - 0x44, 0x40, 0x00, 0x00, 0x03, 0x00, 0xF0, 0x38, 0x1E, 0x07, 0x80, 0xE0, - 0x0F, 0x00, 0x1C, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x00, 0x10, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x0C, 0x00, 0xF0, 0x01, - 0xC0, 0x07, 0x80, 0x1E, 0x00, 0x70, 0x0F, 0x03, 0xC1, 0xE0, 0x78, 0x0E, - 0x00, 0x80, 0x00, 0x3E, 0x21, 0x90, 0x60, 0x30, 0x38, 0x38, 0x30, 0x30, - 0x20, 0x20, 0x10, 0x00, 0x00, 0x06, 0x03, 0x01, 0x80, 0x07, 0xE0, 0x1C, - 0x18, 0x30, 0x04, 0x60, 0x02, 0x61, 0xDA, 0xC3, 0x31, 0xC6, 0x31, 0xC4, - 0x31, 0xCC, 0x31, 0xCC, 0x21, 0xCC, 0x62, 0x6C, 0xE4, 0x67, 0x38, 0x30, - 0x00, 0x1C, 0x08, 0x07, 0xF0, 0x00, 0x20, 0x00, 0xC0, 0x03, 0x80, 0x0B, - 0x00, 0x16, 0x00, 0x4E, 0x00, 0x9C, 0x02, 0x18, 0x08, 0x30, 0x1F, 0xE0, - 0x40, 0xC1, 0x81, 0xC2, 0x03, 0x8C, 0x07, 0x3C, 0x1F, 0x80, 0x1F, 0xF0, - 0x1C, 0x60, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x38, 0x60, 0xC3, 0x03, 0xF0, - 0x1C, 0x30, 0x60, 0x61, 0x81, 0x86, 0x06, 0x38, 0x18, 0xC0, 0xC3, 0x06, - 0x3F, 0xF0, 0x01, 0xF9, 0x06, 0x0F, 0x1C, 0x06, 0x38, 0x02, 0x30, 0x02, - 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, - 0xC0, 0x00, 0xC0, 0x08, 0x60, 0x10, 0x30, 0x60, 0x1F, 0x80, 0x1F, 0xF0, - 0x07, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x0E, 0x03, 0x0C, 0x03, - 0x0C, 0x03, 0x1C, 0x03, 0x1C, 0x07, 0x18, 0x06, 0x18, 0x06, 0x38, 0x0C, - 0x30, 0x18, 0x30, 0x70, 0xFF, 0x80, 0x1F, 0xFF, 0x07, 0x07, 0x06, 0x02, - 0x06, 0x02, 0x06, 0x00, 0x0E, 0x10, 0x0C, 0x30, 0x0F, 0xF0, 0x1C, 0x20, - 0x18, 0x20, 0x18, 0x00, 0x18, 0x00, 0x38, 0x04, 0x30, 0x08, 0x30, 0x38, - 0xFF, 0xF8, 0x1F, 0xFF, 0x07, 0x07, 0x07, 0x02, 0x06, 0x02, 0x06, 0x00, - 0x0E, 0x10, 0x0C, 0x30, 0x0F, 0xF0, 0x1C, 0x20, 0x1C, 0x20, 0x18, 0x00, - 0x18, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0xFC, 0x00, 0x01, 0xF1, - 0x06, 0x0F, 0x18, 0x07, 0x38, 0x02, 0x30, 0x02, 0x60, 0x00, 0x60, 0x00, - 0xE0, 0x00, 0xC0, 0x7F, 0xC0, 0x1C, 0xC0, 0x1C, 0xC0, 0x18, 0xC0, 0x18, - 0x60, 0x18, 0x30, 0x38, 0x0F, 0xC0, 0x1F, 0xC7, 0xE0, 0xE0, 0x70, 0x18, - 0x0E, 0x03, 0x01, 0x80, 0x60, 0x30, 0x1C, 0x0E, 0x03, 0x01, 0x80, 0x7F, - 0xF0, 0x1C, 0x06, 0x03, 0x01, 0xC0, 0x60, 0x30, 0x0C, 0x06, 0x03, 0x81, - 0xC0, 0x60, 0x38, 0x0C, 0x06, 0x07, 0xE3, 0xF0, 0x1F, 0x83, 0x81, 0x80, - 0xC0, 0x60, 0x70, 0x30, 0x18, 0x1C, 0x0C, 0x06, 0x03, 0x03, 0x81, 0x80, - 0xC1, 0xF8, 0x03, 0xF0, 0x0C, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x18, 0x03, - 0x80, 0x30, 0x03, 0x00, 0x30, 0x07, 0x00, 0x60, 0x06, 0x0C, 0xE0, 0xCC, - 0x07, 0x80, 0x1F, 0xCF, 0x83, 0x83, 0x81, 0x81, 0x00, 0xC3, 0x00, 0x62, - 0x00, 0x72, 0x00, 0x36, 0x00, 0x1E, 0x00, 0x1D, 0x80, 0x0C, 0xE0, 0x06, - 0x30, 0x03, 0x1C, 0x03, 0x87, 0x01, 0x81, 0x80, 0xC0, 0xE1, 0xF9, 0xFC, - 0x1F, 0xC0, 0x1C, 0x00, 0x60, 0x01, 0x80, 0x06, 0x00, 0x38, 0x00, 0xC0, - 0x03, 0x00, 0x1C, 0x00, 0x60, 0x01, 0x80, 0x06, 0x00, 0x38, 0x0C, 0xC0, - 0x23, 0x03, 0xBF, 0xFE, 0x0F, 0x00, 0x78, 0x38, 0x07, 0x81, 0xC0, 0x38, - 0x0E, 0x02, 0xC0, 0x70, 0x3E, 0x05, 0xC1, 0x70, 0x2E, 0x13, 0x01, 0x31, - 0x98, 0x11, 0x89, 0xC0, 0x8C, 0x8C, 0x04, 0x6C, 0x60, 0x23, 0x43, 0x02, - 0x1C, 0x38, 0x10, 0xE1, 0x81, 0x86, 0x1C, 0x1F, 0x23, 0xF8, 0x1E, 0x07, - 0xC1, 0xC0, 0x60, 0x70, 0x10, 0x1C, 0x0C, 0x05, 0x82, 0x02, 0x60, 0x80, - 0x9C, 0x60, 0x23, 0x10, 0x10, 0xC4, 0x04, 0x19, 0x01, 0x06, 0xC0, 0x40, - 0xE0, 0x20, 0x38, 0x08, 0x0E, 0x06, 0x01, 0x03, 0xE0, 0x40, 0x01, 0xF0, - 0x0C, 0x10, 0x30, 0x10, 0xC0, 0x33, 0x00, 0x6E, 0x00, 0xD8, 0x01, 0xF0, - 0x03, 0xC0, 0x0D, 0x80, 0x1B, 0x00, 0x76, 0x00, 0xCC, 0x03, 0x08, 0x0C, - 0x18, 0x70, 0x0F, 0x80, 0x1F, 0xF0, 0x1C, 0x60, 0x60, 0xC1, 0x83, 0x06, - 0x0C, 0x38, 0x30, 0xC1, 0x83, 0x0E, 0x1F, 0xE0, 0x60, 0x01, 0x80, 0x06, - 0x00, 0x38, 0x00, 0xC0, 0x03, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x06, 0x10, - 0x30, 0x30, 0xC0, 0x33, 0x00, 0x66, 0x00, 0xD8, 0x01, 0xB0, 0x03, 0xE0, - 0x0F, 0x80, 0x1B, 0x00, 0x36, 0x00, 0xCC, 0x03, 0x98, 0x06, 0x18, 0x18, - 0x18, 0xC0, 0x0E, 0x00, 0x20, 0x01, 0xF8, 0x36, 0x7F, 0x80, 0x1F, 0xF0, - 0x1C, 0x60, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x38, 0x70, 0xC3, 0x83, 0xF8, - 0x1D, 0xC0, 0x63, 0x01, 0x8C, 0x06, 0x18, 0x38, 0x60, 0xC1, 0xC3, 0x03, - 0x3F, 0x0F, 0x07, 0x90, 0xC7, 0x18, 0x21, 0x82, 0x18, 0x01, 0xC0, 0x0E, - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xC4, 0x0C, 0x40, 0xC6, 0x08, 0xE1, - 0x89, 0xE0, 0x7F, 0xFE, 0xC7, 0x1D, 0x0C, 0x14, 0x18, 0x20, 0x70, 0x00, - 0xE0, 0x01, 0x80, 0x03, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, - 0x01, 0xC0, 0x03, 0x00, 0x0E, 0x00, 0x7F, 0x80, 0x7E, 0x1F, 0x38, 0x0C, - 0x38, 0x0C, 0x30, 0x08, 0x30, 0x08, 0x70, 0x08, 0x70, 0x10, 0x60, 0x10, - 0x60, 0x10, 0xE0, 0x10, 0xC0, 0x20, 0xC0, 0x20, 0xC0, 0x60, 0xC0, 0x40, - 0x61, 0x80, 0x3F, 0x00, 0xFC, 0x3E, 0xE0, 0x18, 0xC0, 0x21, 0x80, 0xC3, - 0x81, 0x07, 0x04, 0x0E, 0x08, 0x0C, 0x20, 0x18, 0x80, 0x31, 0x00, 0x64, - 0x00, 0xF0, 0x01, 0xE0, 0x01, 0x80, 0x02, 0x00, 0x04, 0x00, 0xFD, 0xF8, - 0xF7, 0x07, 0x06, 0x30, 0x60, 0x63, 0x07, 0x04, 0x30, 0x70, 0x83, 0x8F, - 0x08, 0x38, 0xB1, 0x03, 0x93, 0x10, 0x19, 0x32, 0x01, 0xA3, 0x20, 0x1A, - 0x34, 0x01, 0xC3, 0x40, 0x1C, 0x38, 0x01, 0x83, 0x00, 0x18, 0x30, 0x01, - 0x02, 0x00, 0x1F, 0x9F, 0x0E, 0x06, 0x06, 0x04, 0x07, 0x08, 0x03, 0x10, - 0x03, 0x20, 0x03, 0xC0, 0x01, 0x80, 0x01, 0xC0, 0x03, 0xC0, 0x06, 0xE0, - 0x0C, 0x60, 0x18, 0x60, 0x30, 0x70, 0x70, 0x78, 0xF8, 0xFC, 0xFC, 0xFB, - 0x81, 0x8C, 0x08, 0x60, 0x83, 0x8C, 0x0C, 0xC0, 0x64, 0x03, 0xC0, 0x0C, - 0x00, 0xE0, 0x07, 0x00, 0x30, 0x01, 0x80, 0x1C, 0x00, 0xC0, 0x1F, 0xC0, - 0x1F, 0xFE, 0x30, 0x38, 0xC0, 0xF1, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, - 0x70, 0x01, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x01, 0xC0, - 0x47, 0x01, 0x1C, 0x06, 0x7F, 0xF8, 0x07, 0x04, 0x08, 0x08, 0x08, 0x18, - 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, - 0x80, 0xE0, 0xC0, 0xC0, 0x40, 0x60, 0x20, 0x30, 0x30, 0x18, 0x18, 0x08, - 0x0C, 0x04, 0x06, 0x06, 0x03, 0x03, 0x0E, 0x04, 0x08, 0x10, 0x60, 0x81, - 0x02, 0x04, 0x18, 0x20, 0x40, 0x81, 0x02, 0x08, 0x10, 0x20, 0x47, 0x80, - 0x0C, 0x03, 0x81, 0xE0, 0x4C, 0x33, 0x08, 0x66, 0x19, 0x03, 0xC0, 0xC0, - 0xFF, 0xF0, 0xCE, 0x63, 0x07, 0xA0, 0xCE, 0x18, 0x63, 0x04, 0x60, 0xC6, - 0x0C, 0xC0, 0xCC, 0x18, 0xC3, 0x8C, 0x5A, 0x79, 0xC0, 0x38, 0x06, 0x01, - 0x80, 0x40, 0x30, 0x0C, 0xE3, 0xCC, 0xC3, 0x70, 0xD8, 0x36, 0x19, 0x06, - 0xC3, 0x30, 0x8C, 0xC3, 0xE0, 0x0F, 0x0C, 0xCC, 0x6C, 0x06, 0x06, 0x03, - 0x01, 0x80, 0xC0, 0x73, 0x1E, 0x00, 0x00, 0x70, 0x01, 0x80, 0x0C, 0x00, - 0x60, 0x02, 0x03, 0xF0, 0x31, 0x83, 0x08, 0x30, 0xC3, 0x06, 0x18, 0x31, - 0x81, 0x8C, 0x18, 0x61, 0xCB, 0x16, 0x8F, 0x38, 0x07, 0x19, 0x31, 0x63, - 0x62, 0xEC, 0xD0, 0xC0, 0xC0, 0xE6, 0x78, 0x00, 0x38, 0x01, 0x30, 0x0C, - 0x00, 0x20, 0x01, 0x80, 0x06, 0x00, 0xFE, 0x00, 0x40, 0x03, 0x00, 0x0C, - 0x00, 0x30, 0x00, 0x80, 0x06, 0x00, 0x18, 0x00, 0x60, 0x01, 0x80, 0x04, - 0x00, 0x30, 0x00, 0xC0, 0x02, 0x00, 0x90, 0x03, 0x80, 0x00, 0x07, 0xC0, - 0xC7, 0x18, 0x61, 0x86, 0x18, 0xE1, 0x8C, 0x07, 0x80, 0x80, 0x1C, 0x00, - 0xF0, 0x33, 0x84, 0x18, 0x80, 0x88, 0x08, 0x61, 0x03, 0xE0, 0x1C, 0x00, - 0xC0, 0x0C, 0x00, 0xC0, 0x18, 0x01, 0x8E, 0x1B, 0x61, 0xC6, 0x38, 0x63, - 0x8C, 0x30, 0xC3, 0x0C, 0x60, 0xC6, 0x1A, 0x61, 0xA4, 0x1C, 0x18, 0xC6, - 0x00, 0x0B, 0xC6, 0x23, 0x18, 0x8C, 0x63, 0x5C, 0x01, 0x80, 0xC0, 0x60, - 0x00, 0x00, 0x0C, 0x1E, 0x02, 0x03, 0x01, 0x80, 0xC0, 0x40, 0x60, 0x30, - 0x18, 0x08, 0x0C, 0x06, 0x02, 0x1B, 0x0F, 0x00, 0x1C, 0x01, 0x80, 0x30, - 0x06, 0x01, 0x80, 0x33, 0xC6, 0x30, 0x88, 0x32, 0x06, 0x80, 0xF0, 0x1B, - 0x06, 0x60, 0xC4, 0x18, 0xD2, 0x0C, 0x3C, 0x61, 0x86, 0x18, 0xC3, 0x0C, - 0x21, 0x86, 0x18, 0x43, 0x2D, 0x38, 0x78, 0xE7, 0x0D, 0xB5, 0x8D, 0x1C, - 0xC7, 0x0C, 0x63, 0x8E, 0x31, 0x86, 0x30, 0xC3, 0x18, 0xC1, 0x0C, 0x61, - 0x84, 0xB0, 0xC6, 0xB0, 0x63, 0x80, 0x78, 0xE1, 0xB6, 0x14, 0x63, 0x84, - 0x38, 0xC3, 0x0C, 0x70, 0x86, 0x18, 0x61, 0x96, 0x1A, 0xC1, 0xC0, 0x0F, - 0x06, 0x63, 0x0D, 0x83, 0x60, 0xF0, 0x3C, 0x1B, 0x06, 0xC3, 0x39, 0x87, - 0x80, 0x1E, 0xF0, 0x39, 0xC1, 0x86, 0x0C, 0x30, 0xC1, 0x86, 0x0C, 0x30, - 0xC3, 0x06, 0x18, 0x60, 0xC6, 0x07, 0xC0, 0x60, 0x03, 0x00, 0x18, 0x00, - 0xC0, 0x1F, 0x00, 0x07, 0x81, 0x9C, 0x63, 0x98, 0x76, 0x0C, 0xC1, 0xB0, - 0x76, 0x0E, 0xC3, 0x98, 0xB1, 0xE6, 0x00, 0x80, 0x30, 0x06, 0x00, 0xC0, - 0xFC, 0x79, 0x8F, 0xC5, 0x07, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x60, 0x30, - 0x10, 0x00, 0x1E, 0x98, 0xCC, 0x27, 0x11, 0x80, 0xE0, 0x39, 0x0C, 0x86, - 0x62, 0x2E, 0x00, 0x08, 0x67, 0xCC, 0x30, 0xC6, 0x18, 0x61, 0x8C, 0x34, - 0xE0, 0xF0, 0xCC, 0x19, 0x83, 0x30, 0xC6, 0x18, 0x87, 0x31, 0x66, 0x3C, - 0xCB, 0x1A, 0x6B, 0x8E, 0x00, 0x70, 0xCC, 0x33, 0x04, 0xC2, 0x18, 0x86, - 0x41, 0x90, 0x68, 0x1C, 0x06, 0x01, 0x00, 0x61, 0x0F, 0x84, 0x36, 0x30, - 0xDC, 0xC1, 0x35, 0x08, 0xD4, 0x23, 0x91, 0x0E, 0x48, 0x30, 0xE0, 0xC3, - 0x02, 0x08, 0x00, 0x0C, 0x63, 0x4A, 0x07, 0x00, 0x70, 0x06, 0x00, 0x20, - 0x07, 0x00, 0xB0, 0x0B, 0x21, 0x14, 0xE1, 0x80, 0x38, 0x63, 0x0C, 0x30, - 0x86, 0x10, 0xC4, 0x0C, 0x81, 0xA0, 0x34, 0x07, 0x00, 0x60, 0x08, 0x02, - 0x00, 0x40, 0x10, 0x04, 0x07, 0x00, 0x1F, 0x90, 0x80, 0x80, 0xC0, 0xC0, - 0x40, 0x60, 0x60, 0x60, 0x38, 0x3E, 0x03, 0xA0, 0x60, 0x00, 0x83, 0x81, - 0x01, 0x80, 0xC0, 0x40, 0x60, 0x30, 0x10, 0x10, 0x1C, 0x06, 0x03, 0x03, - 0x01, 0x80, 0xC0, 0x40, 0x60, 0x30, 0x18, 0x07, 0x00, 0xFF, 0xFF, 0x07, - 0x00, 0xC0, 0x60, 0x30, 0x10, 0x18, 0x0C, 0x06, 0x06, 0x03, 0x01, 0x80, - 0x60, 0x40, 0x60, 0x30, 0x10, 0x18, 0x0C, 0x06, 0x06, 0x06, 0x00, 0x78, - 0x18, 0x8C, 0x0F, 0x00}; - -const GFXglyph FreeSerifItalic12pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 6, 16, 8, 1, -15}, // 0x21 '!' - {12, 7, 6, 8, 3, -15}, // 0x22 '"' - {18, 13, 16, 12, 0, -15}, // 0x23 '#' - {44, 12, 20, 12, 0, -17}, // 0x24 '$' - {74, 17, 17, 20, 2, -16}, // 0x25 '%' - {111, 15, 16, 19, 2, -15}, // 0x26 '&' - {141, 2, 6, 5, 4, -15}, // 0x27 ''' - {143, 7, 20, 8, 1, -15}, // 0x28 '(' - {161, 7, 20, 8, 0, -15}, // 0x29 ')' - {179, 8, 10, 12, 4, -15}, // 0x2A '*' - {189, 11, 11, 16, 2, -10}, // 0x2B '+' - {205, 3, 6, 6, 0, -2}, // 0x2C ',' - {208, 5, 1, 8, 1, -5}, // 0x2D '-' - {209, 2, 3, 6, 1, -2}, // 0x2E '.' - {210, 11, 16, 7, 0, -15}, // 0x2F '/' - {232, 11, 17, 12, 1, -16}, // 0x30 '0' - {256, 9, 17, 12, 1, -16}, // 0x31 '1' - {276, 10, 15, 12, 1, -14}, // 0x32 '2' - {295, 10, 16, 12, 1, -15}, // 0x33 '3' - {315, 11, 16, 12, 0, -15}, // 0x34 '4' - {337, 11, 16, 12, 0, -15}, // 0x35 '5' - {359, 12, 17, 12, 1, -16}, // 0x36 '6' - {385, 11, 16, 12, 2, -15}, // 0x37 '7' - {407, 11, 17, 12, 1, -16}, // 0x38 '8' - {431, 11, 17, 12, 1, -16}, // 0x39 '9' - {455, 4, 11, 6, 1, -10}, // 0x3A ':' - {461, 5, 14, 6, 0, -10}, // 0x3B ';' - {470, 12, 13, 14, 1, -12}, // 0x3C '<' - {490, 12, 6, 16, 2, -8}, // 0x3D '=' - {499, 12, 13, 14, 2, -12}, // 0x3E '>' - {519, 9, 16, 11, 3, -15}, // 0x3F '?' - {537, 16, 16, 19, 2, -15}, // 0x40 '@' - {569, 15, 15, 16, 0, -14}, // 0x41 'A' - {598, 14, 16, 14, 0, -15}, // 0x42 'B' - {626, 16, 16, 15, 1, -15}, // 0x43 'C' - {658, 16, 16, 17, 0, -15}, // 0x44 'D' - {690, 16, 16, 14, 0, -15}, // 0x45 'E' - {722, 16, 16, 14, 0, -15}, // 0x46 'F' - {754, 16, 16, 17, 1, -15}, // 0x47 'G' - {786, 19, 16, 17, 0, -15}, // 0x48 'H' - {824, 9, 16, 8, 0, -15}, // 0x49 'I' - {842, 12, 16, 10, 0, -15}, // 0x4A 'J' - {866, 17, 16, 15, 0, -15}, // 0x4B 'K' - {900, 14, 16, 14, 0, -15}, // 0x4C 'L' - {928, 21, 16, 20, 0, -15}, // 0x4D 'M' - {970, 18, 16, 16, 0, -15}, // 0x4E 'N' - {1006, 15, 16, 16, 1, -15}, // 0x4F 'O' - {1036, 14, 16, 14, 0, -15}, // 0x50 'P' - {1064, 15, 20, 16, 1, -15}, // 0x51 'Q' - {1102, 14, 16, 15, 0, -15}, // 0x52 'R' - {1130, 12, 16, 11, 0, -15}, // 0x53 'S' - {1154, 15, 16, 14, 2, -15}, // 0x54 'T' - {1184, 16, 16, 17, 3, -15}, // 0x55 'U' - {1216, 15, 16, 16, 3, -15}, // 0x56 'V' - {1246, 20, 16, 21, 3, -15}, // 0x57 'W' - {1286, 16, 16, 16, 0, -15}, // 0x58 'X' - {1318, 13, 16, 14, 3, -15}, // 0x59 'Y' - {1344, 15, 16, 14, 0, -15}, // 0x5A 'Z' - {1374, 8, 20, 9, 1, -15}, // 0x5B '[' - {1394, 8, 16, 12, 3, -15}, // 0x5C '\' - {1410, 7, 20, 9, 1, -15}, // 0x5D ']' - {1428, 10, 9, 10, 0, -15}, // 0x5E '^' - {1440, 12, 1, 12, 0, 3}, // 0x5F '_' - {1442, 4, 4, 6, 3, -15}, // 0x60 '`' - {1444, 12, 11, 12, 0, -10}, // 0x61 'a' - {1461, 10, 16, 11, 1, -15}, // 0x62 'b' - {1481, 9, 11, 10, 1, -10}, // 0x63 'c' - {1494, 13, 16, 12, 0, -15}, // 0x64 'd' - {1520, 8, 11, 10, 1, -10}, // 0x65 'e' - {1531, 14, 22, 10, -2, -16}, // 0x66 'f' - {1570, 12, 16, 11, -1, -10}, // 0x67 'g' - {1594, 12, 16, 12, 0, -15}, // 0x68 'h' - {1618, 5, 16, 6, 1, -15}, // 0x69 'i' - {1628, 9, 21, 7, -2, -15}, // 0x6A 'j' - {1652, 11, 16, 11, 0, -15}, // 0x6B 'k' - {1674, 6, 16, 6, 1, -15}, // 0x6C 'l' - {1686, 17, 11, 17, 0, -10}, // 0x6D 'm' - {1710, 12, 11, 12, 0, -10}, // 0x6E 'n' - {1727, 10, 11, 11, 1, -10}, // 0x6F 'o' - {1741, 13, 16, 11, -2, -10}, // 0x70 'p' - {1767, 11, 16, 12, 0, -10}, // 0x71 'q' - {1789, 9, 11, 9, 0, -10}, // 0x72 'r' - {1802, 9, 11, 8, 0, -10}, // 0x73 's' - {1815, 6, 13, 6, 1, -12}, // 0x74 't' - {1825, 11, 11, 12, 1, -10}, // 0x75 'u' - {1841, 10, 11, 11, 1, -10}, // 0x76 'v' - {1855, 14, 11, 16, 2, -10}, // 0x77 'w' - {1875, 12, 11, 10, -1, -10}, // 0x78 'x' - {1892, 11, 16, 11, 0, -10}, // 0x79 'y' - {1914, 9, 13, 9, 0, -10}, // 0x7A 'z' - {1929, 9, 21, 10, 1, -16}, // 0x7B '{' - {1953, 1, 16, 7, 3, -15}, // 0x7C '|' - {1955, 9, 21, 10, 0, -16}, // 0x7D '}' - {1979, 11, 3, 13, 1, -6}}; // 0x7E '~' - -const GFXfont FreeSerifItalic12pt7b PROGMEM = { - (uint8_t *)FreeSerifItalic12pt7bBitmaps, - (GFXglyph *)FreeSerifItalic12pt7bGlyphs, 0x20, 0x7E, 29}; - -// Approx. 2656 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic18pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic18pt7b.h deleted file mode 100644 index c25db35..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic18pt7b.h +++ /dev/null @@ -1,452 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifItalic18pt7bBitmaps[] PROGMEM = { - 0x01, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0x81, 0xE0, 0x70, 0x1C, 0x06, 0x01, - 0x80, 0xC0, 0x30, 0x0C, 0x02, 0x01, 0x80, 0x40, 0x10, 0x00, 0x00, 0x01, - 0x80, 0xF0, 0x3C, 0x06, 0x00, 0x38, 0x77, 0x8F, 0x78, 0xF7, 0x0E, 0x60, - 0xE6, 0x0C, 0xC1, 0x8C, 0x18, 0x81, 0x00, 0x00, 0x60, 0xC0, 0x0C, 0x38, - 0x03, 0x86, 0x00, 0x60, 0xC0, 0x0C, 0x38, 0x03, 0x06, 0x00, 0x60, 0xC0, - 0xFF, 0xFF, 0x1F, 0xFF, 0xE0, 0x61, 0xC0, 0x1C, 0x30, 0x03, 0x06, 0x00, - 0x61, 0xC0, 0x18, 0x30, 0x3F, 0xFF, 0xC7, 0xFF, 0xF8, 0x18, 0x30, 0x03, - 0x0E, 0x00, 0xE1, 0x80, 0x18, 0x30, 0x03, 0x0C, 0x00, 0xC1, 0x80, 0x18, - 0x70, 0x00, 0x00, 0x08, 0x00, 0x30, 0x00, 0x40, 0x0F, 0xC0, 0x61, 0xE1, - 0x86, 0xC6, 0x0D, 0x8C, 0x1A, 0x18, 0x24, 0x38, 0xC0, 0x39, 0x80, 0x7F, - 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xDC, 0x03, 0x38, - 0x06, 0x32, 0x0C, 0x64, 0x18, 0xDC, 0x71, 0xB8, 0xC6, 0x39, 0x8C, 0x3F, - 0x30, 0x1F, 0x80, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0x07, 0x80, 0x60, - 0x0F, 0xE0, 0xE0, 0x0F, 0x0F, 0xB0, 0x0E, 0x04, 0x30, 0x07, 0x02, 0x18, - 0x07, 0x01, 0x18, 0x03, 0x00, 0x8C, 0x01, 0x80, 0x8C, 0x00, 0xC0, 0x4C, - 0x00, 0x60, 0x66, 0x1F, 0x30, 0x66, 0x1F, 0xCC, 0x63, 0x1C, 0x67, 0xE3, - 0x1C, 0x19, 0xE1, 0x1C, 0x04, 0x01, 0x8C, 0x02, 0x00, 0x8E, 0x01, 0x00, - 0xC7, 0x00, 0x80, 0xC3, 0x00, 0x80, 0x61, 0x80, 0xC0, 0x60, 0xC0, 0xC0, - 0x20, 0x70, 0xE0, 0x30, 0x1F, 0xC0, 0x10, 0x07, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xFC, 0x00, 0x07, 0x18, 0x00, 0x18, 0x60, 0x00, 0xE1, 0x80, 0x03, - 0x8C, 0x00, 0x0E, 0x60, 0x00, 0x3B, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, - 0x00, 0x7F, 0x1F, 0xC3, 0x3C, 0x1C, 0x38, 0x70, 0x61, 0xE1, 0xE3, 0x87, - 0x07, 0x8C, 0x3C, 0x0F, 0x60, 0xF0, 0x3D, 0x03, 0xC0, 0x78, 0x0F, 0x01, - 0xE0, 0x3E, 0x07, 0xC0, 0x7C, 0x77, 0x84, 0xFF, 0x8F, 0xE1, 0xF8, 0x0F, - 0x00, 0x3B, 0xDE, 0xE7, 0x33, 0x18, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, - 0xC0, 0xC0, 0xE0, 0x60, 0x70, 0x38, 0x18, 0x0C, 0x0E, 0x07, 0x03, 0x01, - 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x01, 0x00, 0x80, 0x40, 0x30, - 0x08, 0x04, 0x02, 0x00, 0x04, 0x01, 0x00, 0x80, 0x60, 0x10, 0x08, 0x04, - 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x0E, 0x07, 0x03, 0x81, - 0x80, 0xC0, 0xE0, 0x60, 0x30, 0x30, 0x18, 0x18, 0x08, 0x08, 0x08, 0x08, - 0x00, 0x06, 0x00, 0x60, 0x06, 0x0C, 0x43, 0xE4, 0xF1, 0x58, 0x0E, 0x00, - 0xF0, 0x74, 0xEE, 0x47, 0xC4, 0x30, 0x60, 0x06, 0x00, 0x60, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, - 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x31, 0xCE, - 0x31, 0x08, 0x98, 0xFF, 0xFF, 0x6F, 0xF6, 0x00, 0x06, 0x00, 0x0E, 0x00, - 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x70, 0x00, 0x60, 0x00, - 0xE0, 0x00, 0xC0, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x00, 0x07, 0x00, 0x06, - 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x70, - 0x00, 0x60, 0x00, 0xE0, 0x00, 0x00, 0x78, 0x00, 0xC3, 0x00, 0xC1, 0xC0, - 0xC0, 0x60, 0xE0, 0x30, 0xE0, 0x1C, 0x70, 0x0E, 0x70, 0x07, 0x38, 0x03, - 0xBC, 0x01, 0xDC, 0x01, 0xEE, 0x00, 0xFF, 0x00, 0x7F, 0x80, 0x3B, 0x80, - 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0F, 0x38, 0x07, 0x1C, 0x07, 0x06, - 0x03, 0x83, 0x83, 0x80, 0xC3, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x7F, 0x00, - 0x70, 0x07, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xC0, 0x1C, 0x01, - 0xC0, 0x38, 0x03, 0x80, 0x38, 0x03, 0x80, 0x70, 0x07, 0x00, 0x70, 0x0E, - 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x1E, 0x0F, 0xF8, 0x01, 0xF0, 0x07, 0xFC, - 0x0C, 0x3E, 0x10, 0x1F, 0x20, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, - 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x70, 0x00, 0xE0, - 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x04, - 0x30, 0x0C, 0x7F, 0xF8, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0xFF, 0x00, 0xC3, - 0xC0, 0x80, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x1C, 0x00, - 0x38, 0x00, 0xF0, 0x03, 0xFC, 0x00, 0x1F, 0x00, 0x03, 0xC0, 0x01, 0xE0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x07, - 0x00, 0x03, 0x07, 0x87, 0x03, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0x01, 0x80, - 0x01, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x01, 0xB0, 0x01, 0xB8, - 0x01, 0x9C, 0x01, 0x8C, 0x00, 0x86, 0x00, 0x87, 0x00, 0x83, 0x80, 0x81, - 0x80, 0x81, 0xC0, 0xC0, 0xE0, 0xC0, 0x70, 0xFF, 0xFF, 0x7F, 0xFF, 0x00, - 0x1C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0x80, - 0x01, 0xFF, 0x01, 0xFF, 0x02, 0x00, 0x02, 0x00, 0x06, 0x00, 0x07, 0x00, - 0x0F, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x1C, - 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x18, - 0x00, 0x30, 0x00, 0x30, 0x70, 0xE0, 0xFF, 0x80, 0x7E, 0x00, 0x00, 0x03, - 0x80, 0x1F, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, - 0x00, 0x3C, 0x00, 0x3D, 0xF0, 0x1F, 0xFE, 0x1F, 0x0F, 0x8E, 0x03, 0xC7, - 0x00, 0xF7, 0x00, 0x7B, 0x80, 0x3D, 0x80, 0x1E, 0xC0, 0x0F, 0x60, 0x0F, - 0xB0, 0x07, 0x98, 0x03, 0xC4, 0x03, 0xC3, 0x03, 0xC0, 0xC3, 0x80, 0x1F, - 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0x40, 0x0E, 0x80, 0x0C, 0x00, 0x18, 0x00, - 0x18, 0x00, 0x30, 0x00, 0x70, 0x00, 0x60, 0x00, 0xC0, 0x01, 0xC0, 0x01, - 0x80, 0x03, 0x80, 0x03, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x1C, - 0x00, 0x18, 0x00, 0x30, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0x00, - 0xF8, 0x03, 0x0E, 0x06, 0x06, 0x0C, 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C, - 0x03, 0x0E, 0x06, 0x07, 0x8E, 0x07, 0xD8, 0x03, 0xE0, 0x07, 0xF0, 0x1C, - 0xF8, 0x30, 0x3C, 0x60, 0x1C, 0x60, 0x0E, 0xC0, 0x06, 0xC0, 0x06, 0xC0, - 0x06, 0xC0, 0x06, 0xE0, 0x0C, 0x60, 0x18, 0x38, 0x30, 0x0F, 0xC0, 0x01, - 0xF8, 0x07, 0x8C, 0x0E, 0x06, 0x1E, 0x02, 0x3C, 0x03, 0x3C, 0x03, 0x78, - 0x03, 0x78, 0x03, 0x78, 0x03, 0x78, 0x07, 0x78, 0x07, 0x78, 0x07, 0x3C, - 0x0E, 0x3E, 0x1E, 0x1F, 0xEE, 0x07, 0x9C, 0x00, 0x38, 0x00, 0x78, 0x00, - 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xE0, 0x00, 0x0C, - 0x3C, 0x78, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x1E, 0x18, - 0x00, 0x07, 0x03, 0xC1, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x03, 0x81, 0xC0, 0xE0, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x01, - 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xE0, - 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x00, 0x03, 0xC0, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0xC0, 0x00, 0x3C, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, - 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3F, 0x00, 0x03, 0xC0, 0x01, - 0xF0, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x01, 0xF0, 0x03, 0xF0, 0x03, - 0xF0, 0x00, 0xF0, 0x00, 0x20, 0x00, 0x00, 0x0F, 0x81, 0x86, 0x30, 0x33, - 0x03, 0x30, 0x30, 0x03, 0x00, 0x60, 0x0E, 0x01, 0xC0, 0x38, 0x06, 0x00, - 0xC0, 0x08, 0x01, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x00, 0xF0, 0x0F, 0x00, 0x60, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFF, 0xE0, - 0x07, 0x80, 0xF0, 0x0E, 0x00, 0x38, 0x1C, 0x00, 0x0C, 0x38, 0x0E, 0x06, - 0x70, 0x3F, 0xE2, 0x70, 0x71, 0xE3, 0xF0, 0x60, 0xE1, 0xE0, 0xC0, 0xC1, - 0xE0, 0xC0, 0xC1, 0xE1, 0x81, 0xC1, 0xE1, 0x81, 0xC1, 0xE1, 0x81, 0x82, - 0xE1, 0x83, 0x82, 0x71, 0x83, 0x86, 0x71, 0xC7, 0x8C, 0x38, 0xF9, 0xF8, - 0x3C, 0xF0, 0xF0, 0x1E, 0x00, 0x00, 0x0F, 0x80, 0x30, 0x03, 0xFF, 0xE0, - 0x00, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x01, 0xC0, 0x00, - 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x5E, 0x00, 0x04, 0xF0, - 0x00, 0x63, 0x80, 0x02, 0x1C, 0x00, 0x20, 0xE0, 0x01, 0x07, 0x00, 0x10, - 0x3C, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0xC0, 0x38, 0x04, 0x01, 0xC0, - 0x60, 0x0E, 0x06, 0x00, 0x78, 0x30, 0x03, 0xC3, 0x00, 0x1E, 0x38, 0x00, - 0xFB, 0xF0, 0x1F, 0xE0, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x78, 0x3C, - 0x03, 0xC0, 0xF0, 0x1E, 0x07, 0x80, 0xE0, 0x3C, 0x07, 0x01, 0xE0, 0x78, - 0x1E, 0x03, 0x83, 0xE0, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0x0F, 0x00, - 0x70, 0x3C, 0x03, 0x80, 0xF0, 0x3C, 0x07, 0x81, 0xC0, 0x3C, 0x0E, 0x01, - 0xE0, 0xF0, 0x0F, 0x07, 0x80, 0xF0, 0x38, 0x0F, 0x81, 0xC1, 0xF8, 0x1F, - 0xFF, 0x83, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0x08, 0x07, 0xFF, 0xC0, 0xF8, - 0x3E, 0x0F, 0x00, 0x70, 0xF0, 0x03, 0x8F, 0x00, 0x08, 0xF0, 0x00, 0x47, - 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, - 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, - 0x00, 0x03, 0x80, 0x02, 0x1E, 0x00, 0x20, 0x78, 0x02, 0x03, 0xE0, 0x60, - 0x07, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, - 0x00, 0x78, 0x1F, 0x00, 0x3C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x0E, 0x00, - 0x78, 0x07, 0x00, 0x1E, 0x07, 0x80, 0x0F, 0x03, 0x80, 0x07, 0x81, 0xC0, - 0x03, 0xC1, 0xE0, 0x01, 0xE0, 0xF0, 0x00, 0xF0, 0x70, 0x00, 0x78, 0x38, - 0x00, 0x78, 0x3C, 0x00, 0x3C, 0x1E, 0x00, 0x3E, 0x0E, 0x00, 0x1E, 0x0F, - 0x00, 0x1E, 0x07, 0x80, 0x1E, 0x03, 0x80, 0x3E, 0x01, 0xC0, 0x7E, 0x01, - 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, - 0x1E, 0x01, 0xC0, 0x78, 0x02, 0x01, 0xE0, 0x08, 0x07, 0x00, 0x00, 0x1C, - 0x08, 0x00, 0xF0, 0x60, 0x03, 0x83, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xF0, - 0x01, 0xE0, 0xC0, 0x07, 0x03, 0x00, 0x1C, 0x08, 0x00, 0xF0, 0x20, 0x03, - 0x80, 0x00, 0x0E, 0x00, 0x00, 0x78, 0x00, 0x81, 0xE0, 0x06, 0x07, 0x00, - 0x38, 0x1C, 0x03, 0xC0, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, - 0xFC, 0x07, 0xFF, 0xF0, 0x1E, 0x01, 0xC0, 0x78, 0x02, 0x01, 0xE0, 0x08, - 0x07, 0x00, 0x20, 0x1C, 0x00, 0x00, 0xF0, 0x20, 0x03, 0x81, 0x80, 0x0E, - 0x0C, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0xC0, 0x07, 0x03, 0x00, 0x1C, 0x0C, - 0x00, 0xF0, 0x20, 0x03, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x78, 0x00, 0x01, - 0xE0, 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x00, 0x3F, 0x02, 0x01, 0xFF, 0x88, 0x0F, 0x81, 0xF0, 0x3C, - 0x01, 0xE0, 0xF0, 0x01, 0xC3, 0xC0, 0x01, 0x0F, 0x80, 0x02, 0x1E, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x07, 0xC0, 0x00, - 0x0F, 0x00, 0x3F, 0xFE, 0x00, 0x1E, 0x3C, 0x00, 0x38, 0x78, 0x00, 0x70, - 0xF0, 0x00, 0xE0, 0xE0, 0x01, 0xC1, 0xE0, 0x07, 0x01, 0xE0, 0x0E, 0x01, - 0xF0, 0x3C, 0x01, 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x3F, - 0xE0, 0x3E, 0x00, 0xF0, 0x07, 0x80, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x1C, - 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, - 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, - 0xFE, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, - 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x78, 0x03, 0xC0, 0x0E, 0x00, 0x78, 0x01, - 0xC0, 0x0E, 0x00, 0x78, 0x01, 0xC0, 0x0E, 0x00, 0x78, 0x03, 0xE0, 0x3F, - 0xE1, 0xFF, 0x00, 0x07, 0xFC, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x01, 0xC0, - 0x07, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xE0, - 0x07, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xE0, - 0x07, 0x00, 0x1C, 0x00, 0xF0, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x0F, - 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, - 0x70, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0F, 0x00, - 0x07, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70, - 0x1E, 0x78, 0x0F, 0x38, 0x07, 0xF8, 0x01, 0xF0, 0x00, 0x07, 0xFC, 0x7F, - 0x80, 0xF8, 0x0F, 0x00, 0x38, 0x07, 0x00, 0x3C, 0x07, 0x00, 0x1C, 0x06, - 0x00, 0x0E, 0x06, 0x00, 0x07, 0x0C, 0x00, 0x07, 0x8C, 0x00, 0x03, 0x9C, - 0x00, 0x01, 0xD8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x73, - 0x80, 0x00, 0x39, 0xE0, 0x00, 0x3C, 0x78, 0x00, 0x1C, 0x1C, 0x00, 0x0E, - 0x0F, 0x00, 0x07, 0x03, 0x80, 0x07, 0x81, 0xE0, 0x03, 0x80, 0x70, 0x01, - 0xC0, 0x3C, 0x01, 0xE0, 0x1F, 0x03, 0xFE, 0x3F, 0xE0, 0x07, 0xFC, 0x00, - 0x1F, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, - 0x01, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x80, - 0x00, 0x78, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0F, 0x00, 0x00, 0xE0, - 0x00, 0x0E, 0x00, 0x11, 0xE0, 0x03, 0x1E, 0x00, 0x61, 0xC0, 0x06, 0x1C, - 0x01, 0xE3, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0x07, 0xF0, 0x00, 0x7E, 0x03, - 0xE0, 0x01, 0xF0, 0x03, 0xC0, 0x03, 0xE0, 0x07, 0x80, 0x0F, 0x80, 0x1F, - 0x00, 0x37, 0x00, 0x2E, 0x00, 0x5E, 0x00, 0x5C, 0x01, 0xB8, 0x01, 0xB8, - 0x06, 0x70, 0x02, 0x78, 0x09, 0xE0, 0x04, 0x70, 0x33, 0xC0, 0x08, 0xE0, - 0xC7, 0x00, 0x31, 0xC1, 0x0E, 0x00, 0x43, 0x86, 0x3C, 0x00, 0x87, 0x18, - 0x70, 0x03, 0x0E, 0x20, 0xE0, 0x06, 0x1C, 0xC3, 0xC0, 0x08, 0x3B, 0x07, - 0x80, 0x10, 0x7C, 0x0E, 0x00, 0x60, 0x78, 0x1C, 0x00, 0x80, 0xE0, 0x78, - 0x03, 0x01, 0x80, 0xF0, 0x07, 0x03, 0x03, 0xE0, 0x3F, 0x84, 0x1F, 0xF0, - 0x00, 0x07, 0xC0, 0x3F, 0xC0, 0x78, 0x03, 0xE0, 0x0E, 0x00, 0x70, 0x03, - 0xC0, 0x18, 0x01, 0xF0, 0x0E, 0x00, 0x6C, 0x03, 0x00, 0x1B, 0x80, 0xC0, - 0x0C, 0xE0, 0x30, 0x03, 0x18, 0x1C, 0x00, 0xC7, 0x06, 0x00, 0x30, 0xC1, - 0x80, 0x18, 0x38, 0xE0, 0x06, 0x06, 0x30, 0x01, 0x81, 0x8C, 0x00, 0xC0, - 0x73, 0x00, 0x30, 0x0D, 0xC0, 0x0C, 0x03, 0xE0, 0x03, 0x00, 0x78, 0x01, - 0x80, 0x1E, 0x00, 0x60, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x0E, 0x00, 0x30, - 0x0F, 0xE0, 0x04, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xE0, 0x07, 0xC1, - 0xE0, 0x1E, 0x01, 0xE0, 0x78, 0x01, 0xC1, 0xE0, 0x03, 0xC7, 0x80, 0x07, - 0x9F, 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3D, 0xE0, 0x00, 0xFF, - 0xC0, 0x01, 0xEF, 0x80, 0x03, 0xDE, 0x00, 0x0F, 0xBC, 0x00, 0x1E, 0x78, - 0x00, 0x7C, 0xF0, 0x00, 0xF1, 0xE0, 0x03, 0xC1, 0xC0, 0x0F, 0x03, 0xC0, - 0x3C, 0x03, 0xC1, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x0E, 0x0F, 0x80, 0x78, 0x1F, 0x01, 0xC0, - 0x3C, 0x07, 0x00, 0xF0, 0x1C, 0x03, 0xC0, 0xF0, 0x0F, 0x03, 0x80, 0x78, - 0x0E, 0x01, 0xE0, 0x78, 0x1F, 0x01, 0xFF, 0xF8, 0x07, 0x7F, 0x00, 0x1C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x78, 0x00, - 0x01, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xF0, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xE0, 0x03, 0xC1, 0xE0, - 0x1E, 0x01, 0xC0, 0x78, 0x03, 0xC1, 0xE0, 0x03, 0x87, 0x80, 0x07, 0x8F, - 0x00, 0x0F, 0x3C, 0x00, 0x1E, 0x78, 0x00, 0x3D, 0xE0, 0x00, 0x7B, 0xC0, - 0x01, 0xFF, 0x80, 0x03, 0xDE, 0x00, 0x07, 0xBC, 0x00, 0x1F, 0x78, 0x00, - 0x3C, 0xF0, 0x00, 0xF1, 0xE0, 0x01, 0xE3, 0xC0, 0x07, 0x83, 0x80, 0x1E, - 0x07, 0x80, 0x78, 0x07, 0x01, 0xC0, 0x03, 0xDE, 0x00, 0x01, 0xC0, 0x00, - 0x06, 0x00, 0x00, 0x18, 0x00, 0x10, 0x7F, 0xC0, 0xC3, 0xFF, 0xFF, 0x08, - 0x07, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x78, 0x3C, 0x03, - 0xC0, 0xF0, 0x1E, 0x07, 0x80, 0xE0, 0x3C, 0x07, 0x01, 0xE0, 0x78, 0x1E, - 0x03, 0x83, 0xF0, 0x1F, 0xFE, 0x01, 0xFF, 0xC0, 0x0F, 0x38, 0x00, 0x71, - 0xE0, 0x03, 0x87, 0x00, 0x3C, 0x38, 0x01, 0xC1, 0xE0, 0x0E, 0x07, 0x00, - 0xF0, 0x3C, 0x07, 0x81, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x3C, 0x1E, 0x00, - 0xF3, 0xFC, 0x07, 0xC0, 0x00, 0xF8, 0x81, 0xFF, 0xC1, 0xE1, 0xE1, 0xE0, - 0x70, 0xF0, 0x10, 0x78, 0x08, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x01, - 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, - 0x80, 0x3C, 0x40, 0x1E, 0x20, 0x0F, 0x38, 0x07, 0x9E, 0x07, 0x8F, 0x87, - 0x84, 0x7F, 0xC2, 0x0F, 0x80, 0x3F, 0xFF, 0xF7, 0xFF, 0xFF, 0x70, 0x78, - 0x76, 0x07, 0x02, 0xC0, 0x70, 0x28, 0x0F, 0x02, 0x00, 0xF0, 0x00, 0x0E, - 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, - 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00, - 0x70, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x01, 0xF0, 0x00, - 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0xFE, 0x3F, 0x00, 0x78, 0x3C, 0x00, 0x60, - 0xF0, 0x01, 0x81, 0xE0, 0x03, 0x03, 0xC0, 0x06, 0x07, 0x00, 0x08, 0x1E, - 0x00, 0x30, 0x3C, 0x00, 0x60, 0x70, 0x00, 0x81, 0xE0, 0x01, 0x03, 0xC0, - 0x06, 0x07, 0x80, 0x0C, 0x0E, 0x00, 0x10, 0x3C, 0x00, 0x60, 0x78, 0x00, - 0xC0, 0xF0, 0x01, 0x01, 0xE0, 0x06, 0x03, 0xC0, 0x08, 0x03, 0xC0, 0x30, - 0x07, 0xC1, 0xC0, 0x07, 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFF, 0x01, - 0xFB, 0xE0, 0x07, 0x8E, 0x00, 0x18, 0x78, 0x01, 0x83, 0xC0, 0x0C, 0x1E, - 0x00, 0xC0, 0xF0, 0x06, 0x03, 0x80, 0x60, 0x1C, 0x02, 0x00, 0xE0, 0x30, - 0x07, 0x83, 0x00, 0x3C, 0x10, 0x01, 0xE1, 0x80, 0x07, 0x08, 0x00, 0x38, - 0x80, 0x01, 0xC4, 0x00, 0x0E, 0x40, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, - 0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFF, - 0x3F, 0xC3, 0xFB, 0xE0, 0x78, 0x07, 0x8E, 0x03, 0xC0, 0x18, 0x78, 0x0E, - 0x01, 0x83, 0xC0, 0x70, 0x0C, 0x1E, 0x03, 0x80, 0x40, 0xF0, 0x3C, 0x06, - 0x03, 0x81, 0xE0, 0x60, 0x1C, 0x17, 0x83, 0x00, 0xE0, 0xBC, 0x30, 0x07, - 0x09, 0xE1, 0x00, 0x38, 0x47, 0x18, 0x01, 0xE4, 0x38, 0x80, 0x0F, 0x21, - 0xCC, 0x00, 0x7A, 0x0E, 0x40, 0x01, 0xD0, 0x76, 0x00, 0x0F, 0x03, 0xA0, - 0x00, 0x78, 0x1F, 0x00, 0x03, 0x80, 0xF0, 0x00, 0x1C, 0x07, 0x00, 0x00, - 0xC0, 0x38, 0x00, 0x06, 0x00, 0x80, 0x00, 0x20, 0x04, 0x00, 0x00, 0x0F, - 0xF8, 0x7F, 0x03, 0xE0, 0x3E, 0x01, 0xC0, 0x18, 0x01, 0xE0, 0x30, 0x01, - 0xE0, 0x60, 0x00, 0xE0, 0xC0, 0x00, 0xF1, 0xC0, 0x00, 0x71, 0x80, 0x00, - 0x7B, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xCE, 0x00, 0x01, 0x8F, 0x00, 0x01, - 0x07, 0x00, 0x03, 0x07, 0x00, 0x06, 0x07, 0x80, 0x0C, 0x03, 0x80, 0x18, - 0x03, 0xC0, 0x78, 0x03, 0xE0, 0xFE, 0x1F, 0xF8, 0xFF, 0x87, 0xE7, 0xC0, - 0x38, 0x70, 0x06, 0x0E, 0x01, 0x81, 0xE0, 0x30, 0x1C, 0x0C, 0x03, 0x83, - 0x00, 0x78, 0xC0, 0x07, 0x30, 0x00, 0xE4, 0x00, 0x1D, 0x80, 0x03, 0xE0, - 0x00, 0x38, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, - 0x01, 0xE0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x01, 0xE0, 0x00, 0x7C, 0x00, - 0x3F, 0xF0, 0x00, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0xE0, 0x0F, 0x82, - 0x00, 0x3C, 0x18, 0x01, 0xE0, 0x40, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, - 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xF0, 0x00, 0x07, - 0x80, 0x00, 0x3C, 0x00, 0xC1, 0xE0, 0x02, 0x0F, 0x00, 0x18, 0x38, 0x01, - 0xE1, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC, 0x00, 0x01, 0xF8, 0x0C, 0x00, 0xC0, - 0x06, 0x00, 0x30, 0x01, 0x80, 0x18, 0x00, 0xC0, 0x06, 0x00, 0x30, 0x03, - 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, 0x60, 0x03, 0x00, 0x18, 0x01, 0xC0, - 0x0C, 0x00, 0x60, 0x03, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x06, - 0x00, 0x30, 0x01, 0xF8, 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x30, - 0x03, 0x80, 0x18, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0x60, 0x07, - 0x00, 0x30, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, - 0x60, 0x07, 0x00, 0x30, 0x03, 0xF0, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x01, 0x80, 0x18, 0x01, 0x80, - 0x18, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x60, 0x06, 0x00, - 0x60, 0x06, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x0F, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x1F, 0x00, 0x36, 0x00, 0xCE, 0x01, 0x8C, 0x06, 0x1C, 0x0C, - 0x18, 0x38, 0x38, 0x60, 0x31, 0xC0, 0x73, 0x00, 0x6E, 0x00, 0xE0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xE3, 0x8F, 0x0E, 0x18, 0x30, 0x01, 0xEC, 0x0E, - 0x58, 0x30, 0x70, 0xE0, 0xC3, 0x81, 0x86, 0x07, 0x1C, 0x0C, 0x38, 0x18, - 0xE0, 0x71, 0xC0, 0xE3, 0x83, 0x87, 0x0B, 0x2F, 0x36, 0xCF, 0xCF, 0x1F, - 0x1C, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, - 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x1C, 0x7C, 0x1C, 0xFE, - 0x19, 0x8F, 0x1A, 0x07, 0x3C, 0x07, 0x38, 0x07, 0x38, 0x07, 0x70, 0x0E, - 0x70, 0x0E, 0x70, 0x1C, 0x60, 0x18, 0xE0, 0x30, 0xE0, 0x60, 0xE1, 0xC0, - 0x3F, 0x00, 0x01, 0xF0, 0x38, 0xC3, 0x8E, 0x78, 0x73, 0x80, 0x3C, 0x01, - 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x47, 0x84, 0x3F, - 0xC0, 0x7C, 0x00, 0x00, 0x01, 0x80, 0x07, 0xC0, 0x00, 0xE0, 0x00, 0x60, - 0x00, 0x30, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x06, 0x00, 0xF7, - 0x01, 0xC7, 0x81, 0xC3, 0x81, 0xC1, 0xC1, 0xE0, 0xE0, 0xE0, 0x60, 0xF0, - 0x30, 0x78, 0x38, 0x78, 0x18, 0x3C, 0x0C, 0x1E, 0x0C, 0x0F, 0x0E, 0x27, - 0xCB, 0x21, 0xF9, 0xE0, 0x78, 0xE0, 0x00, 0xF0, 0x1C, 0xC3, 0x86, 0x38, - 0x33, 0xC3, 0x1C, 0x31, 0xE3, 0x1F, 0xE0, 0xF0, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x47, 0x84, 0x3F, 0xC0, 0x7C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x33, - 0x00, 0x06, 0x30, 0x00, 0xC0, 0x00, 0x0C, 0x00, 0x01, 0xC0, 0x00, 0x18, - 0x00, 0x01, 0x80, 0x00, 0x38, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0x80, 0x03, - 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x06, 0x00, 0x00, - 0x60, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0xC0, 0x00, - 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x18, 0x00, 0x01, 0x80, 0x00, 0x18, 0x00, - 0x03, 0x00, 0x00, 0x30, 0x00, 0xC6, 0x00, 0x0C, 0xC0, 0x00, 0x78, 0x00, - 0x00, 0x01, 0xF8, 0x07, 0x1F, 0x0E, 0x0F, 0x0C, 0x0E, 0x18, 0x0E, 0x18, - 0x0E, 0x18, 0x1E, 0x18, 0x3C, 0x0C, 0x78, 0x07, 0xE0, 0x08, 0x00, 0x18, - 0x00, 0x1E, 0x00, 0x0F, 0xE0, 0x13, 0xF0, 0x60, 0x78, 0xC0, 0x38, 0xC0, - 0x18, 0xC0, 0x18, 0xC0, 0x30, 0x60, 0x60, 0x3F, 0x80, 0x03, 0x00, 0x1F, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x0E, - 0x00, 0x0C, 0x00, 0x1C, 0x38, 0x1C, 0x7C, 0x1C, 0xCC, 0x19, 0x0C, 0x3A, - 0x0C, 0x3C, 0x1C, 0x3C, 0x18, 0x38, 0x18, 0x70, 0x38, 0x70, 0x38, 0x70, - 0x30, 0x60, 0x72, 0xE0, 0x76, 0xE0, 0x7C, 0xC0, 0x70, 0x03, 0x03, 0xC1, - 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x7E, 0x0F, 0x03, 0x81, 0x81, - 0xC0, 0xE0, 0x70, 0x30, 0x38, 0x1C, 0x1C, 0x4C, 0x47, 0xC3, 0xC0, 0x00, - 0x0C, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x03, 0xF0, 0x00, 0xE0, 0x01, 0x80, 0x03, 0x00, - 0x0E, 0x00, 0x1C, 0x00, 0x30, 0x00, 0x60, 0x01, 0xC0, 0x03, 0x80, 0x06, - 0x00, 0x0C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xC0, 0x03, 0x80, 0x06, 0x00, - 0x0C, 0x06, 0x30, 0x0C, 0xC0, 0x0F, 0x00, 0x00, 0x03, 0x00, 0x3E, 0x00, - 0x1C, 0x00, 0x38, 0x00, 0x60, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0C, - 0x00, 0x38, 0xFC, 0x70, 0x60, 0xE1, 0x81, 0x86, 0x07, 0x10, 0x0E, 0x40, - 0x1B, 0x80, 0x3F, 0x00, 0xE7, 0x01, 0xCE, 0x03, 0x0C, 0x06, 0x1C, 0x5C, - 0x1D, 0x38, 0x3E, 0x60, 0x38, 0x03, 0x1F, 0x07, 0x07, 0x06, 0x0E, 0x0E, - 0x0E, 0x0C, 0x1C, 0x1C, 0x18, 0x38, 0x38, 0x38, 0x30, 0x70, 0x70, 0x70, - 0x64, 0xE4, 0xE8, 0xF0, 0xE0, 0x00, 0x06, 0x18, 0x1E, 0x3E, 0x3C, 0x3F, - 0x0E, 0x4C, 0x47, 0x0C, 0x8C, 0x8E, 0x1D, 0x0D, 0x0E, 0x1E, 0x1A, 0x0E, - 0x1C, 0x1E, 0x0C, 0x3C, 0x1C, 0x1C, 0x38, 0x38, 0x1C, 0x38, 0x38, 0x1C, - 0x30, 0x38, 0x18, 0x70, 0x30, 0x39, 0x70, 0x70, 0x32, 0x60, 0x70, 0x3C, - 0x60, 0x60, 0x38, 0x06, 0x0E, 0x1F, 0x1F, 0x83, 0x99, 0xC1, 0x98, 0xC1, - 0xD8, 0xE0, 0xE8, 0x70, 0x78, 0x30, 0x38, 0x38, 0x3C, 0x1C, 0x1C, 0x0E, - 0x0E, 0x06, 0x0E, 0x03, 0x17, 0x01, 0xB3, 0x80, 0xF1, 0x80, 0x70, 0x01, - 0xF0, 0x0E, 0x38, 0x38, 0x30, 0xE0, 0x73, 0x80, 0xEE, 0x01, 0xDC, 0x03, - 0xF8, 0x0F, 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0xE7, 0x03, 0x8E, 0x06, 0x0E, - 0x38, 0x07, 0xC0, 0x00, 0x00, 0xE7, 0xC0, 0x7C, 0xFE, 0x01, 0xD1, 0xF0, - 0x1E, 0x0F, 0x01, 0xC0, 0xF0, 0x38, 0x0F, 0x03, 0x80, 0xF0, 0x38, 0x0E, - 0x03, 0x01, 0xE0, 0x70, 0x1C, 0x07, 0x03, 0xC0, 0x60, 0x78, 0x06, 0x0F, - 0x00, 0xE1, 0xC0, 0x0F, 0xF0, 0x00, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, - 0x00, 0x1C, 0x00, 0x01, 0x80, 0x00, 0x38, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0xF7, 0x03, 0xCE, 0x0F, 0x06, 0x1E, 0x06, 0x1C, 0x04, 0x3C, 0x04, 0x78, - 0x04, 0x78, 0x0C, 0xF0, 0x08, 0xF0, 0x18, 0xF0, 0x38, 0xF0, 0xF0, 0xF9, - 0x70, 0x7E, 0x70, 0x3C, 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x00, - 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x0F, 0xF0, 0x7C, 0x70, 0xE7, 0xC7, 0x4C, - 0x34, 0x01, 0xA0, 0x1E, 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x1C, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x00, 0x07, 0x88, 0x63, 0x86, - 0x0C, 0x30, 0x21, 0xC1, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x1C, - 0x10, 0x60, 0x83, 0x06, 0x18, 0x71, 0x82, 0x78, 0x00, 0x02, 0x03, 0x03, - 0x07, 0xF7, 0xF8, 0xE0, 0x60, 0x70, 0x38, 0x1C, 0x0C, 0x0E, 0x07, 0x03, - 0x01, 0x91, 0xC8, 0xF8, 0x78, 0x00, 0x1C, 0x0D, 0xF8, 0x38, 0x60, 0x70, - 0xC1, 0xC3, 0x83, 0x87, 0x07, 0x0C, 0x1E, 0x38, 0x78, 0x70, 0xB0, 0xE2, - 0x61, 0x8D, 0xC7, 0x33, 0x2C, 0xC6, 0x5F, 0x0F, 0x38, 0x1C, 0x00, 0x18, - 0x1B, 0xE0, 0x73, 0x81, 0xC6, 0x03, 0x18, 0x0C, 0x70, 0x21, 0xC1, 0x83, - 0x0C, 0x0C, 0x20, 0x31, 0x00, 0xC8, 0x03, 0x40, 0x0E, 0x00, 0x30, 0x00, - 0x80, 0x00, 0x18, 0x04, 0x1B, 0xE0, 0x30, 0x71, 0x80, 0xC1, 0xC6, 0x07, - 0x01, 0x1C, 0x2C, 0x08, 0x70, 0xB0, 0x20, 0xC4, 0xC1, 0x03, 0x21, 0x84, - 0x0D, 0x86, 0x20, 0x34, 0x19, 0x00, 0xE0, 0x68, 0x03, 0x81, 0xA0, 0x0C, - 0x07, 0x00, 0x30, 0x18, 0x00, 0x80, 0x40, 0x00, 0x03, 0x07, 0x0F, 0x8F, - 0x13, 0x93, 0x01, 0xB0, 0x01, 0xE0, 0x01, 0xC0, 0x00, 0xC0, 0x00, 0xC0, - 0x01, 0xC0, 0x03, 0xE0, 0x02, 0x60, 0x04, 0x62, 0x08, 0x64, 0xF0, 0x7C, - 0xE0, 0x30, 0x06, 0x06, 0x3F, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x81, - 0x03, 0x82, 0x01, 0x82, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0xC8, 0x00, 0xC8, - 0x00, 0xD0, 0x00, 0xF0, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x80, - 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x78, 0x00, 0x70, 0x00, 0x1F, 0xFC, - 0x7F, 0xE1, 0x01, 0x08, 0x08, 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, - 0x06, 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, 0x38, 0x01, 0xF0, 0x0B, 0xE0, - 0x01, 0xC6, 0x03, 0x98, 0x03, 0x80, 0x00, 0x70, 0x0C, 0x01, 0x80, 0x38, - 0x03, 0x80, 0x30, 0x07, 0x00, 0x70, 0x07, 0x00, 0x60, 0x0E, 0x00, 0xE0, - 0x0C, 0x01, 0xC0, 0x1C, 0x07, 0x80, 0x30, 0x04, 0x00, 0x20, 0x03, 0x00, - 0x30, 0x07, 0x00, 0x70, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xE0, 0x0C, 0x00, - 0xC0, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xC0, 0x06, - 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x70, 0x07, 0x00, 0x70, 0x06, - 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0C, 0x00, 0x40, 0x04, 0x00, 0xC0, 0x1E, - 0x03, 0x80, 0x38, 0x03, 0x00, 0x70, 0x07, 0x00, 0x70, 0x06, 0x00, 0xE0, - 0x0E, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x70, 0x00, 0x1E, 0x00, 0x3F, 0xE1, - 0xF8, 0x7F, 0xC0, 0x07, 0x80}; - -const GFXglyph FreeSerifItalic18pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 10, 23, 12, 1, -22}, // 0x21 '!' - {29, 12, 9, 12, 4, -22}, // 0x22 '"' - {43, 19, 23, 17, 0, -22}, // 0x23 '#' - {98, 15, 29, 17, 1, -25}, // 0x24 '$' - {153, 25, 23, 29, 3, -22}, // 0x25 '%' - {225, 22, 23, 27, 3, -22}, // 0x26 '&' - {289, 5, 9, 7, 4, -22}, // 0x27 ''' - {295, 9, 29, 12, 1, -22}, // 0x28 '(' - {328, 9, 29, 12, 1, -22}, // 0x29 ')' - {361, 12, 14, 18, 5, -22}, // 0x2A '*' - {382, 16, 18, 24, 4, -17}, // 0x2B '+' - {418, 5, 8, 9, -1, -2}, // 0x2C ',' - {423, 8, 2, 12, 2, -8}, // 0x2D '-' - {425, 4, 4, 9, 1, -3}, // 0x2E '.' - {427, 16, 23, 10, 0, -22}, // 0x2F '/' - {473, 17, 24, 17, 1, -23}, // 0x30 '0' - {524, 12, 24, 17, 2, -23}, // 0x31 '1' - {560, 16, 23, 17, 1, -22}, // 0x32 '2' - {606, 17, 24, 18, 0, -23}, // 0x33 '3' - {657, 17, 24, 17, 0, -23}, // 0x34 '4' - {708, 16, 23, 18, 0, -22}, // 0x35 '5' - {754, 17, 24, 18, 1, -23}, // 0x36 '6' - {805, 16, 23, 17, 3, -22}, // 0x37 '7' - {851, 16, 24, 18, 1, -23}, // 0x38 '8' - {899, 16, 24, 17, 1, -23}, // 0x39 '9' - {947, 7, 15, 9, 2, -14}, // 0x3A ':' - {961, 9, 20, 9, 1, -14}, // 0x3B ';' - {984, 18, 18, 20, 2, -17}, // 0x3C '<' - {1025, 18, 9, 23, 3, -12}, // 0x3D '=' - {1046, 18, 18, 20, 2, -17}, // 0x3E '>' - {1087, 12, 23, 16, 4, -22}, // 0x3F '?' - {1122, 24, 23, 27, 2, -22}, // 0x40 '@' - {1191, 21, 23, 23, 0, -22}, // 0x41 'A' - {1252, 21, 23, 21, 0, -22}, // 0x42 'B' - {1313, 21, 23, 21, 2, -22}, // 0x43 'C' - {1374, 25, 23, 25, 0, -22}, // 0x44 'D' - {1446, 22, 23, 20, 0, -22}, // 0x45 'E' - {1510, 22, 23, 20, 0, -22}, // 0x46 'F' - {1574, 23, 23, 24, 2, -22}, // 0x47 'G' - {1641, 27, 23, 25, 0, -22}, // 0x48 'H' - {1719, 14, 23, 11, 0, -22}, // 0x49 'I' - {1760, 17, 23, 15, 0, -22}, // 0x4A 'J' - {1809, 25, 23, 22, 0, -22}, // 0x4B 'K' - {1881, 20, 23, 20, 0, -22}, // 0x4C 'L' - {1939, 31, 23, 29, 0, -22}, // 0x4D 'M' - {2029, 26, 23, 24, 0, -22}, // 0x4E 'N' - {2104, 23, 23, 23, 1, -22}, // 0x4F 'O' - {2171, 22, 23, 20, 0, -22}, // 0x50 'P' - {2235, 23, 29, 23, 1, -22}, // 0x51 'Q' - {2319, 21, 23, 22, 0, -22}, // 0x52 'R' - {2380, 17, 23, 16, 0, -22}, // 0x53 'S' - {2429, 20, 23, 21, 3, -22}, // 0x54 'T' - {2487, 23, 23, 25, 4, -22}, // 0x55 'U' - {2554, 21, 23, 23, 5, -22}, // 0x56 'V' - {2615, 29, 23, 31, 5, -22}, // 0x57 'W' - {2699, 24, 23, 23, 0, -22}, // 0x58 'X' - {2768, 19, 23, 21, 4, -22}, // 0x59 'Y' - {2823, 22, 23, 20, 0, -22}, // 0x5A 'Z' - {2887, 13, 28, 14, 1, -22}, // 0x5B '[' - {2933, 12, 23, 17, 4, -22}, // 0x5C '\' - {2968, 12, 28, 14, 1, -22}, // 0x5D ']' - {3010, 15, 13, 15, 0, -22}, // 0x5E '^' - {3035, 18, 2, 17, 0, 3}, // 0x5F '_' - {3040, 6, 6, 9, 5, -22}, // 0x60 '`' - {3045, 15, 15, 17, 1, -14}, // 0x61 'a' - {3074, 16, 24, 17, 1, -23}, // 0x62 'b' - {3122, 13, 15, 14, 1, -14}, // 0x63 'c' - {3147, 17, 24, 18, 1, -23}, // 0x64 'd' - {3198, 13, 15, 14, 1, -14}, // 0x65 'e' - {3223, 20, 31, 15, -3, -23}, // 0x66 'f' - {3301, 16, 22, 15, -1, -14}, // 0x67 'g' - {3345, 16, 24, 17, 1, -23}, // 0x68 'h' - {3393, 9, 23, 9, 1, -22}, // 0x69 'i' - {3419, 15, 30, 10, -3, -22}, // 0x6A 'j' - {3476, 15, 24, 16, 1, -23}, // 0x6B 'k' - {3521, 8, 25, 9, 1, -23}, // 0x6C 'l' - {3546, 24, 15, 25, 0, -14}, // 0x6D 'm' - {3591, 17, 15, 17, 0, -14}, // 0x6E 'n' - {3623, 15, 15, 17, 1, -14}, // 0x6F 'o' - {3652, 20, 22, 16, -3, -14}, // 0x70 'p' - {3707, 16, 22, 17, 1, -14}, // 0x71 'q' - {3751, 13, 15, 13, 1, -14}, // 0x72 'r' - {3776, 13, 15, 12, 0, -14}, // 0x73 's' - {3801, 9, 18, 8, 1, -17}, // 0x74 't' - {3822, 15, 15, 17, 1, -14}, // 0x75 'u' - {3851, 14, 15, 16, 2, -14}, // 0x76 'v' - {3878, 22, 15, 24, 1, -14}, // 0x77 'w' - {3920, 16, 15, 15, -1, -14}, // 0x78 'x' - {3950, 16, 22, 16, 0, -14}, // 0x79 'y' - {3994, 14, 18, 14, 0, -14}, // 0x7A 'z' - {4026, 12, 30, 14, 2, -23}, // 0x7B '{' - {4071, 2, 23, 10, 4, -22}, // 0x7C '|' - {4077, 12, 31, 14, 0, -24}, // 0x7D '}' - {4124, 17, 4, 19, 1, -10}}; // 0x7E '~' - -const GFXfont FreeSerifItalic18pt7b PROGMEM = { - (uint8_t *)FreeSerifItalic18pt7bBitmaps, - (GFXglyph *)FreeSerifItalic18pt7bGlyphs, 0x20, 0x7E, 42}; - -// Approx. 4805 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic24pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic24pt7b.h deleted file mode 100644 index 98233a7..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic24pt7b.h +++ /dev/null @@ -1,739 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifItalic24pt7bBitmaps[] PROGMEM = { - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x01, 0xF0, 0x1E, 0x01, 0xE0, 0x1C, - 0x01, 0xC0, 0x3C, 0x03, 0x80, 0x38, 0x03, 0x80, 0x30, 0x07, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x04, 0x00, 0x40, 0x0C, 0x00, 0x80, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xF8, 0x0F, 0x80, 0xF8, 0x07, 0x00, - 0x38, 0x1D, 0xE0, 0x77, 0x83, 0xDC, 0x0E, 0x70, 0x39, 0xC1, 0xEE, 0x07, - 0x38, 0x1C, 0xC0, 0x63, 0x01, 0x8C, 0x06, 0x20, 0x10, 0x00, 0x06, 0x03, - 0x00, 0x07, 0x03, 0x80, 0x03, 0x81, 0xC0, 0x03, 0x81, 0xC0, 0x01, 0xC0, - 0xE0, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0x70, 0x00, 0x70, 0x38, 0x00, 0x30, - 0x18, 0x00, 0x38, 0x1C, 0x03, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF0, 0x0E, - 0x07, 0x00, 0x06, 0x03, 0x00, 0x07, 0x03, 0x80, 0x03, 0x81, 0xC0, 0x03, - 0x81, 0xC0, 0x01, 0xC0, 0xE0, 0x00, 0xE0, 0x70, 0x1F, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFF, 0x80, 0x70, 0x38, 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x0C, 0x00, - 0x1C, 0x0E, 0x00, 0x0E, 0x07, 0x00, 0x0E, 0x07, 0x00, 0x07, 0x03, 0x80, - 0x03, 0x81, 0xC0, 0x03, 0x81, 0xC0, 0x01, 0xC0, 0xE0, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x18, 0x00, 0x00, 0xC0, 0x00, 0xFF, 0x80, 0x1C, 0x2F, 0x01, - 0x83, 0x3C, 0x1C, 0x18, 0xE1, 0xC0, 0xC3, 0x0E, 0x06, 0x18, 0x70, 0x60, - 0x83, 0x83, 0x04, 0x1E, 0x18, 0x00, 0xF8, 0xC0, 0x03, 0xEC, 0x00, 0x0F, - 0xE0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x7F, 0x00, 0x03, 0x7C, 0x00, 0x19, 0xE0, 0x01, 0x87, 0x80, 0x0C, - 0x3C, 0x00, 0x60, 0xE2, 0x03, 0x07, 0x10, 0x30, 0x39, 0x81, 0x81, 0xCE, - 0x0C, 0x0C, 0x70, 0x60, 0xE3, 0xC6, 0x06, 0x0F, 0x30, 0x60, 0x1F, 0x9E, - 0x00, 0x3F, 0x80, 0x00, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, - 0x80, 0x00, 0x01, 0xF0, 0x00, 0xC0, 0x03, 0xFE, 0x01, 0xE0, 0x03, 0xC7, - 0x83, 0xE0, 0x03, 0xC0, 0x7F, 0x60, 0x03, 0xC0, 0x20, 0x70, 0x01, 0xC0, - 0x10, 0x30, 0x01, 0xE0, 0x08, 0x38, 0x00, 0xE0, 0x04, 0x18, 0x00, 0xF0, - 0x02, 0x1C, 0x00, 0x70, 0x02, 0x0C, 0x00, 0x38, 0x01, 0x0E, 0x00, 0x1C, - 0x01, 0x8E, 0x00, 0x0E, 0x00, 0x86, 0x00, 0x07, 0x00, 0x87, 0x03, 0xE1, - 0x80, 0xC3, 0x07, 0xFC, 0xE1, 0xC3, 0x87, 0xC6, 0x3F, 0x81, 0x87, 0x81, - 0x8F, 0x81, 0xC7, 0x80, 0x40, 0x00, 0xC3, 0xC0, 0x20, 0x00, 0xE3, 0xC0, - 0x10, 0x00, 0x61, 0xC0, 0x08, 0x00, 0x61, 0xE0, 0x04, 0x00, 0x70, 0xF0, - 0x06, 0x00, 0x30, 0x70, 0x02, 0x00, 0x38, 0x38, 0x03, 0x00, 0x18, 0x1C, - 0x01, 0x00, 0x1C, 0x0E, 0x01, 0x80, 0x0C, 0x07, 0x01, 0x80, 0x0E, 0x01, - 0xC3, 0x80, 0x06, 0x00, 0x7F, 0x80, 0x06, 0x00, 0x1F, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x71, - 0xC0, 0x00, 0x01, 0xC3, 0x80, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x38, 0x38, - 0x00, 0x01, 0xE0, 0xE0, 0x00, 0x07, 0x87, 0x00, 0x00, 0x1E, 0x18, 0x00, - 0x00, 0x78, 0xC0, 0x00, 0x01, 0xE6, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, - 0xC1, 0xFE, 0x03, 0x9F, 0x03, 0xE0, 0x3C, 0x3C, 0x07, 0x01, 0xE0, 0xF8, - 0x1C, 0x0F, 0x03, 0xE0, 0xE0, 0x7C, 0x07, 0x83, 0x01, 0xE0, 0x1F, 0x1C, - 0x07, 0x80, 0x7C, 0x60, 0x3E, 0x00, 0xFB, 0x00, 0xF8, 0x03, 0xFC, 0x03, - 0xE0, 0x07, 0xE0, 0x0F, 0x80, 0x1F, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x7C, - 0x00, 0xFC, 0x01, 0xF8, 0x0F, 0xF0, 0x03, 0xF0, 0xF3, 0xF0, 0x87, 0xFF, - 0x07, 0xFC, 0x07, 0xF0, 0x07, 0xC0, 0x39, 0xDE, 0xE7, 0x3B, 0x9C, 0xC6, - 0x31, 0x00, 0x00, 0x10, 0x01, 0x00, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, - 0x1C, 0x00, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, - 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, - 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, - 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x01, 0x80, 0x0C, 0x00, 0x60, - 0x01, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x80, 0x06, 0x00, 0x10, 0x00, - 0x80, 0x06, 0x00, 0x30, 0x00, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x07, - 0x80, 0x38, 0x03, 0xC0, 0x1C, 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x07, 0x00, - 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x10, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0xE1, 0x07, 0xE1, 0x0F, - 0xF1, 0x1F, 0x19, 0x30, 0x07, 0xC0, 0x03, 0x80, 0x0D, 0x60, 0x79, 0x3C, - 0xF1, 0x1F, 0xE1, 0x0F, 0xE1, 0x07, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, - 0x03, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, - 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, - 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x7C, 0xF9, - 0xF1, 0xE1, 0xC3, 0x0C, 0x10, 0xC1, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, - 0x77, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x3C, - 0x00, 0x01, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, - 0xF0, 0x00, 0x07, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x3C, 0x00, - 0x01, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x70, - 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x3C, 0x00, 0x01, - 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x70, 0x00, - 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xE0, - 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x03, 0x86, - 0x00, 0x30, 0x18, 0x03, 0x00, 0xC0, 0x38, 0x03, 0x03, 0x80, 0x18, 0x38, - 0x00, 0xC1, 0xC0, 0x07, 0x1C, 0x00, 0x38, 0xE0, 0x01, 0xCF, 0x00, 0x0E, - 0x70, 0x00, 0x77, 0x80, 0x07, 0xBC, 0x00, 0x3D, 0xE0, 0x01, 0xEE, 0x00, - 0x0F, 0xF0, 0x00, 0x77, 0x80, 0x07, 0xBC, 0x00, 0x3D, 0xC0, 0x01, 0xCE, - 0x00, 0x1E, 0x70, 0x00, 0xF3, 0x80, 0x07, 0x1C, 0x00, 0x78, 0xE0, 0x03, - 0x83, 0x00, 0x38, 0x18, 0x03, 0x80, 0xE0, 0x18, 0x03, 0x01, 0x80, 0x0C, - 0x38, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, - 0x01, 0xF0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, - 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3F, 0x01, 0xFF, - 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xFE, 0x00, 0x7F, 0xF8, 0x07, 0x07, 0xE0, - 0x60, 0x1F, 0x06, 0x00, 0x7C, 0x20, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, - 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, - 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x03, - 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x30, 0x01, 0x03, 0x00, 0x08, - 0x30, 0x00, 0xC3, 0xFF, 0xFC, 0x3F, 0xFF, 0xE3, 0xFF, 0xFE, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0xFF, 0xC0, 0x06, 0x0F, 0x80, 0x30, 0x1E, 0x01, 0x80, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x78, - 0x00, 0x01, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x0E, 0x00, 0x01, - 0xF8, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x0F, - 0x80, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, - 0x00, 0x1E, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x00, 0x00, - 0x38, 0x00, 0x00, 0xC0, 0x70, 0x06, 0x03, 0xF8, 0x70, 0x07, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x70, 0x00, 0x03, 0xC0, - 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x37, 0x80, 0x00, - 0xDC, 0x00, 0x06, 0x70, 0x00, 0x33, 0xC0, 0x01, 0x8F, 0x00, 0x0C, 0x38, - 0x00, 0x60, 0xE0, 0x03, 0x07, 0x80, 0x18, 0x1E, 0x00, 0xC0, 0x70, 0x06, - 0x03, 0xC0, 0x30, 0x0F, 0x01, 0x80, 0x38, 0x0C, 0x00, 0xE0, 0x70, 0x07, - 0x81, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, 0x00, 0x0F, 0x00, - 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, - 0x70, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0xFF, - 0xF0, 0x07, 0xFF, 0x80, 0x10, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x70, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x3F, - 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, - 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0C, 0x00, 0x00, - 0x70, 0x00, 0x01, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x01, 0x80, - 0x70, 0x0E, 0x03, 0xF0, 0xE0, 0x07, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x0E, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x03, - 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xC0, - 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x00, 0xF9, 0xF8, 0x01, 0xFF, 0xFC, - 0x07, 0xE0, 0x7C, 0x0F, 0x80, 0x7C, 0x3E, 0x00, 0x78, 0x78, 0x00, 0x78, - 0xF0, 0x00, 0xF3, 0xC0, 0x01, 0xE7, 0x80, 0x03, 0xCF, 0x00, 0x07, 0x9C, - 0x00, 0x0F, 0x38, 0x00, 0x3E, 0x70, 0x00, 0x78, 0xE0, 0x00, 0xF1, 0xC0, - 0x03, 0xC1, 0x80, 0x07, 0x83, 0x00, 0x1E, 0x03, 0x00, 0x38, 0x06, 0x01, - 0xE0, 0x03, 0x07, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xFF, 0xF9, 0xFF, 0xFF, - 0xCF, 0xFF, 0xFC, 0xE0, 0x00, 0xCC, 0x00, 0x0E, 0x40, 0x00, 0x60, 0x00, - 0x07, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x01, 0x80, - 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x07, - 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x03, 0x80, 0x00, - 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, - 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x38, - 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x03, 0x83, - 0x80, 0x1C, 0x03, 0x00, 0xE0, 0x0E, 0x07, 0x00, 0x1C, 0x1C, 0x00, 0x70, - 0x70, 0x01, 0xC1, 0xC0, 0x07, 0x07, 0x80, 0x1C, 0x1E, 0x00, 0xE0, 0x3C, - 0x07, 0x80, 0xFC, 0x38, 0x01, 0xFB, 0xC0, 0x03, 0xF8, 0x00, 0x0F, 0xE0, - 0x00, 0x7F, 0xC0, 0x07, 0x1F, 0x80, 0x78, 0x3F, 0x03, 0x80, 0x7C, 0x1E, - 0x00, 0xF8, 0x70, 0x01, 0xE3, 0x80, 0x03, 0xCE, 0x00, 0x07, 0x38, 0x00, - 0x1C, 0xE0, 0x00, 0x73, 0x80, 0x01, 0xCE, 0x00, 0x06, 0x1C, 0x00, 0x38, - 0x70, 0x01, 0xC0, 0xE0, 0x0E, 0x01, 0xE0, 0xE0, 0x01, 0xFE, 0x00, 0x00, - 0x1F, 0x80, 0x03, 0xC3, 0x00, 0x1C, 0x02, 0x00, 0xE0, 0x0C, 0x07, 0x00, - 0x18, 0x3C, 0x00, 0x60, 0xE0, 0x01, 0xC7, 0x80, 0x07, 0x1E, 0x00, 0x1C, - 0xF0, 0x00, 0x73, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x3C, 0x00, 0x3C, 0xF0, - 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x1E, 0x1E, 0x00, 0x78, 0x7C, 0x03, - 0xE0, 0xF8, 0x3F, 0x01, 0xFF, 0xBC, 0x03, 0xF1, 0xE0, 0x00, 0x0F, 0x80, - 0x00, 0x3C, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03, - 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x78, 0x00, - 0x0F, 0x80, 0x00, 0xE0, 0x00, 0x00, 0x07, 0x07, 0xC3, 0xE1, 0xF0, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x3E, 0x1F, 0x0F, 0x83, 0x80, 0x01, 0xC0, 0x7C, 0x0F, 0x81, - 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x80, 0xF8, 0x1F, 0x01, 0xE0, - 0x1C, 0x03, 0x00, 0xC0, 0x18, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, - 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, - 0xC0, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, - 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x07, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0x00, - 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xE0, - 0x00, 0x7F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x00, - 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x03, 0xF0, 0x06, 0x1C, 0x0C, 0x0E, 0x1C, 0x06, 0x1C, 0x07, 0x1C, 0x07, - 0x1C, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x00, - 0x06, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xF8, 0x00, - 0xF8, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xFF, 0x80, 0x00, 0x3F, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x7C, - 0x00, 0x07, 0x80, 0x7C, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x38, 0x3C, - 0x00, 0x00, 0x0C, 0x3C, 0x00, 0x78, 0x07, 0x1E, 0x00, 0xFE, 0xE1, 0x9E, - 0x00, 0xF1, 0xF0, 0xEF, 0x00, 0xE0, 0xF0, 0x37, 0x80, 0xE0, 0x38, 0x1F, - 0x80, 0x70, 0x1C, 0x0F, 0xC0, 0x70, 0x1E, 0x07, 0xE0, 0x38, 0x0F, 0x03, - 0xF0, 0x18, 0x07, 0x01, 0xF8, 0x1C, 0x03, 0x80, 0xFC, 0x0E, 0x01, 0xC0, - 0xDE, 0x07, 0x01, 0xE0, 0x6F, 0x03, 0x80, 0xE0, 0x73, 0xC1, 0xC0, 0xF0, - 0x31, 0xE0, 0xF0, 0xF8, 0x30, 0xF0, 0x38, 0xDC, 0x30, 0x3C, 0x1F, 0xC7, - 0xF0, 0x0E, 0x07, 0x81, 0xF0, 0x07, 0x80, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x03, 0xF0, - 0x0F, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x37, 0x80, 0x00, 0x03, 0x3C, 0x00, 0x00, 0x19, 0xE0, 0x00, - 0x01, 0x8F, 0x80, 0x00, 0x08, 0x7C, 0x00, 0x00, 0xC3, 0xE0, 0x00, 0x0C, - 0x0F, 0x00, 0x00, 0x60, 0x78, 0x00, 0x06, 0x03, 0xC0, 0x00, 0x20, 0x1F, - 0x00, 0x03, 0x00, 0xF8, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, - 0x18, 0x00, 0xF0, 0x00, 0xC0, 0x07, 0x80, 0x0C, 0x00, 0x3E, 0x00, 0xE0, - 0x01, 0xF0, 0x06, 0x00, 0x0F, 0x80, 0x70, 0x00, 0x3C, 0x03, 0x00, 0x01, - 0xE0, 0x38, 0x00, 0x0F, 0x83, 0xC0, 0x00, 0x7C, 0x3E, 0x00, 0x07, 0xF3, - 0xFC, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x3E, 0x07, 0xC0, 0x03, 0xE0, 0x3E, 0x00, 0x3E, 0x01, 0xF0, 0x03, 0xC0, - 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x78, 0x01, 0xF0, - 0x07, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x7C, 0x00, 0xF0, - 0x3F, 0x00, 0x1F, 0xFF, 0x80, 0x01, 0xFF, 0xFC, 0x00, 0x1F, 0x07, 0xE0, - 0x01, 0xE0, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x3C, - 0x00, 0x7C, 0x03, 0xC0, 0x07, 0xC0, 0x7C, 0x00, 0x7C, 0x07, 0xC0, 0x07, - 0xC0, 0x78, 0x00, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xF8, 0x00, 0xF8, 0x0F, - 0x00, 0x1F, 0x00, 0xF0, 0x03, 0xE0, 0x1F, 0x81, 0xFC, 0x03, 0xFF, 0xFF, - 0x80, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x3F, 0xFF, - 0xE0, 0x03, 0xF0, 0x1F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF0, 0x00, 0x78, - 0x0F, 0x80, 0x00, 0xE0, 0x3C, 0x00, 0x03, 0x81, 0xF0, 0x00, 0x04, 0x0F, - 0x80, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x02, 0x07, 0xC0, 0x00, 0x18, 0x0F, 0x80, - 0x00, 0xC0, 0x3E, 0x00, 0x06, 0x00, 0x7C, 0x00, 0x70, 0x00, 0xFC, 0x07, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x07, 0xC0, - 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x01, 0xF0, - 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x3C, - 0x00, 0x07, 0xC0, 0x3E, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x01, 0xF0, 0x0F, - 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x3E, 0x03, - 0xE0, 0x00, 0x1F, 0x01, 0xE0, 0x00, 0x1F, 0x81, 0xF0, 0x00, 0x0F, 0x80, - 0xF8, 0x00, 0x07, 0xC0, 0x78, 0x00, 0x03, 0xE0, 0x3C, 0x00, 0x03, 0xE0, - 0x3E, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x01, 0xF0, 0x0F, 0x00, 0x01, 0xF0, - 0x0F, 0x80, 0x01, 0xF8, 0x07, 0xC0, 0x01, 0xF0, 0x03, 0xE0, 0x01, 0xF0, - 0x01, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, - 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, - 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x7C, 0x00, 0x30, 0x03, 0xE0, 0x01, 0x00, - 0x1E, 0x00, 0x08, 0x01, 0xF0, 0x00, 0x40, 0x0F, 0x80, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x03, 0xC0, 0x10, 0x00, 0x3E, 0x01, 0x80, 0x01, 0xF0, 0x08, - 0x00, 0x0F, 0x01, 0xC0, 0x00, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x00, - 0x3E, 0x07, 0x00, 0x01, 0xE0, 0x18, 0x00, 0x1F, 0x00, 0xC0, 0x00, 0xF8, - 0x04, 0x00, 0x07, 0x80, 0x20, 0x00, 0x3C, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x08, 0x0F, 0x80, 0x00, 0xC0, - 0x7C, 0x00, 0x0E, 0x03, 0xC0, 0x00, 0xE0, 0x1E, 0x00, 0x0F, 0x01, 0xF8, - 0x03, 0xF8, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x7C, 0x00, - 0x30, 0x03, 0xE0, 0x01, 0x00, 0x1E, 0x00, 0x08, 0x01, 0xF0, 0x00, 0x40, - 0x0F, 0x80, 0x02, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x3E, - 0x00, 0x80, 0x01, 0xF0, 0x0C, 0x00, 0x0F, 0x00, 0xC0, 0x00, 0xF8, 0x0E, - 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x01, 0xE0, 0x18, 0x00, - 0x1F, 0x00, 0xC0, 0x00, 0xF8, 0x06, 0x00, 0x07, 0xC0, 0x20, 0x00, 0x3C, - 0x01, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x02, 0x00, 0x1F, 0xFF, 0x8C, 0x00, - 0xFC, 0x07, 0xF8, 0x03, 0xE0, 0x03, 0xF0, 0x0F, 0x00, 0x03, 0xC0, 0x3C, - 0x00, 0x03, 0x80, 0xF0, 0x00, 0x07, 0x03, 0xC0, 0x00, 0x0E, 0x0F, 0x80, - 0x00, 0x08, 0x3E, 0x00, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x3F, - 0xFF, 0xE0, 0x00, 0x0F, 0xE7, 0xC0, 0x00, 0x0F, 0x0F, 0x80, 0x00, 0x1E, - 0x1F, 0x00, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0xF0, 0x7C, 0x00, 0x01, 0xE0, - 0x78, 0x00, 0x03, 0xC0, 0xF8, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x1E, 0x01, - 0xF0, 0x00, 0x3C, 0x01, 0xE0, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x01, - 0xF8, 0x0F, 0x80, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x03, - 0xFF, 0xE0, 0x7F, 0xF0, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0x3E, 0x00, 0x0F, - 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0x3E, - 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x00, - 0x03, 0xC0, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x01, - 0xE0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, - 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x03, 0xF8, 0x00, - 0xFE, 0x00, 0xFF, 0xE0, 0x7F, 0xFC, 0x00, 0x01, 0xFF, 0xC0, 0x1F, 0xE0, - 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x01, - 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF0, - 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xE0, 0x00, 0xF8, 0x00, - 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1E, - 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1F, 0x00, - 0x0F, 0xE0, 0x0F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0xF8, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, - 0x00, 0x07, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x01, 0xC1, 0xE0, 0x07, 0xC7, - 0x80, 0x0F, 0x8F, 0x00, 0x1F, 0x3C, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0x80, - 0x00, 0x01, 0xFF, 0xE1, 0xFF, 0x80, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, 0x80, - 0x0F, 0x00, 0x07, 0xC0, 0x0F, 0x00, 0x03, 0xC0, 0x0F, 0x00, 0x01, 0xE0, - 0x0E, 0x00, 0x01, 0xF0, 0x0E, 0x00, 0x00, 0xF8, 0x0E, 0x00, 0x00, 0x78, - 0x1C, 0x00, 0x00, 0x3C, 0x1C, 0x00, 0x00, 0x3E, 0x3C, 0x00, 0x00, 0x1F, - 0x38, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, - 0xFE, 0x00, 0x00, 0x03, 0xDF, 0x00, 0x00, 0x01, 0xE7, 0xC0, 0x00, 0x01, - 0xF3, 0xE0, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x00, - 0x3C, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x1F, 0x03, 0xE0, 0x00, - 0x0F, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x3C, 0x00, 0x07, 0xC0, 0x1F, 0x00, - 0x03, 0xC0, 0x07, 0x80, 0x01, 0xE0, 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xF8, - 0x01, 0xFC, 0x01, 0xFE, 0x03, 0xFF, 0xC3, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, - 0xF0, 0x00, 0x08, 0x3C, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x41, 0xF0, 0x00, - 0x18, 0x3C, 0x00, 0x07, 0x07, 0x80, 0x01, 0xC1, 0xF8, 0x01, 0xF8, 0x7F, - 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xC0, - 0x0F, 0xC0, 0x00, 0x1F, 0xC0, 0x01, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0xFC, - 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, - 0xFF, 0x00, 0x02, 0xF0, 0x00, 0x37, 0x80, 0x01, 0xBC, 0x00, 0x19, 0xE0, - 0x00, 0x6F, 0x80, 0x0E, 0xF8, 0x00, 0x1B, 0xE0, 0x03, 0x3E, 0x00, 0x04, - 0x78, 0x01, 0x8F, 0x00, 0x03, 0x1E, 0x00, 0xE7, 0xC0, 0x00, 0xC7, 0x80, - 0x31, 0xF0, 0x00, 0x21, 0xE0, 0x18, 0x78, 0x00, 0x18, 0x78, 0x0E, 0x1E, - 0x00, 0x06, 0x1E, 0x03, 0x0F, 0x80, 0x01, 0x87, 0x81, 0x83, 0xE0, 0x00, - 0x41, 0xF0, 0xE0, 0xF0, 0x00, 0x30, 0x7C, 0x30, 0x3C, 0x00, 0x0C, 0x0F, - 0x18, 0x1F, 0x00, 0x03, 0x03, 0xCE, 0x07, 0xC0, 0x01, 0x80, 0xF3, 0x01, - 0xE0, 0x00, 0x60, 0x3D, 0x80, 0xF8, 0x00, 0x18, 0x0F, 0xE0, 0x3E, 0x00, - 0x0C, 0x03, 0xF0, 0x0F, 0x00, 0x03, 0x00, 0xF8, 0x03, 0xC0, 0x00, 0xC0, - 0x3E, 0x01, 0xF0, 0x00, 0x70, 0x0F, 0x00, 0x7C, 0x00, 0x1C, 0x01, 0x80, - 0x3F, 0x00, 0x0F, 0x80, 0x60, 0x1F, 0xC0, 0x0F, 0xF8, 0x10, 0x1F, 0xFE, - 0x00, 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0xF8, - 0x00, 0x1C, 0x00, 0x1F, 0x00, 0x03, 0x80, 0x03, 0xF0, 0x00, 0x60, 0x00, - 0x7E, 0x00, 0x0C, 0x00, 0x0B, 0xE0, 0x03, 0x80, 0x03, 0x7C, 0x00, 0x60, - 0x00, 0x67, 0x80, 0x0C, 0x00, 0x0C, 0xF8, 0x03, 0x80, 0x03, 0x0F, 0x00, - 0x70, 0x00, 0x61, 0xF0, 0x0C, 0x00, 0x0C, 0x3E, 0x01, 0x80, 0x01, 0x83, - 0xC0, 0x70, 0x00, 0x60, 0x7C, 0x0C, 0x00, 0x0C, 0x07, 0x81, 0x80, 0x01, - 0x80, 0xF8, 0x30, 0x00, 0x60, 0x0F, 0x0E, 0x00, 0x0C, 0x01, 0xE1, 0x80, - 0x01, 0x80, 0x3E, 0x30, 0x00, 0x30, 0x03, 0xCE, 0x00, 0x0C, 0x00, 0x7D, - 0x80, 0x01, 0x80, 0x07, 0xB0, 0x00, 0x30, 0x00, 0xF6, 0x00, 0x0E, 0x00, - 0x1F, 0xC0, 0x01, 0x80, 0x01, 0xF0, 0x00, 0x30, 0x00, 0x3E, 0x00, 0x0E, - 0x00, 0x03, 0xC0, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x7C, 0x00, 0x06, 0x00, - 0x3F, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x0F, 0x00, 0x78, - 0x00, 0x78, 0x00, 0xF0, 0x07, 0xC0, 0x03, 0xE0, 0x3E, 0x00, 0x07, 0x81, - 0xF0, 0x00, 0x1E, 0x07, 0xC0, 0x00, 0x7C, 0x3E, 0x00, 0x01, 0xF1, 0xF0, - 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x1F, 0x3F, 0x00, 0x00, 0x7C, 0xF8, 0x00, - 0x01, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x00, 0x00, 0x3F, 0x7C, 0x00, 0x00, - 0xFB, 0xF0, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, - 0xF8, 0x00, 0x03, 0xF3, 0xE0, 0x00, 0x0F, 0x8F, 0x80, 0x00, 0x3E, 0x3E, - 0x00, 0x01, 0xF0, 0xF8, 0x00, 0x0F, 0x81, 0xE0, 0x00, 0x3E, 0x07, 0x80, - 0x01, 0xF0, 0x1F, 0x00, 0x0F, 0x80, 0x3C, 0x00, 0x7C, 0x00, 0x78, 0x03, - 0xC0, 0x00, 0xF8, 0x3E, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x0F, 0x81, 0xF8, - 0x00, 0x7C, 0x03, 0xE0, 0x03, 0xE0, 0x1F, 0x00, 0x1E, 0x00, 0x7C, 0x01, - 0xF0, 0x03, 0xE0, 0x0F, 0x80, 0x1F, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, - 0x07, 0xC0, 0x3E, 0x00, 0x3C, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0x00, 0x3E, - 0x00, 0xF8, 0x03, 0xF0, 0x07, 0xC0, 0x7E, 0x00, 0x3F, 0xFF, 0xE0, 0x01, - 0xEF, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, - 0xC0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0x00, 0xF0, 0x7C, 0x00, 0x0F, 0x00, 0x78, 0x00, 0x78, 0x00, - 0xF0, 0x03, 0xC0, 0x03, 0xE0, 0x1E, 0x00, 0x07, 0x80, 0xF0, 0x00, 0x1E, - 0x07, 0xC0, 0x00, 0x7C, 0x3E, 0x00, 0x01, 0xF1, 0xF8, 0x00, 0x07, 0xC7, - 0xC0, 0x00, 0x1F, 0x3F, 0x00, 0x00, 0x7C, 0xF8, 0x00, 0x01, 0xF7, 0xE0, - 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x3F, 0x7C, 0x00, 0x00, 0xFB, 0xF0, 0x00, - 0x03, 0xEF, 0xC0, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xF8, 0x00, 0x01, - 0xF3, 0xE0, 0x00, 0x0F, 0x8F, 0x80, 0x00, 0x3E, 0x3E, 0x00, 0x01, 0xF0, - 0xF8, 0x00, 0x07, 0xC3, 0xE0, 0x00, 0x3E, 0x07, 0x80, 0x01, 0xF0, 0x1F, - 0x00, 0x07, 0x80, 0x3C, 0x00, 0x3C, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xE0, - 0x1E, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x04, 0x0F, 0xF0, 0x00, - 0x60, 0x7F, 0xFC, 0x07, 0x03, 0xFF, 0xFF, 0xF8, 0x38, 0x1F, 0xFF, 0x80, - 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x3E, 0x0F, 0xC0, 0x03, 0xE0, 0x3E, 0x00, 0x3E, 0x01, 0xF0, 0x03, 0xC0, - 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x78, 0x01, 0xF0, - 0x07, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x7C, 0x00, 0xF0, - 0x1F, 0x80, 0x1F, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x00, 0x1E, 0x1E, 0x00, - 0x01, 0xE1, 0xE0, 0x00, 0x3E, 0x1F, 0x00, 0x03, 0xE0, 0xF0, 0x00, 0x3C, - 0x0F, 0x00, 0x03, 0xC0, 0xF8, 0x00, 0x7C, 0x07, 0x80, 0x07, 0xC0, 0x7C, - 0x00, 0x78, 0x03, 0xC0, 0x0F, 0x80, 0x3C, 0x00, 0xF8, 0x03, 0xE0, 0x0F, - 0x00, 0x1E, 0x00, 0xF0, 0x01, 0xE0, 0x1F, 0x00, 0x1F, 0x03, 0xF8, 0x00, - 0xF8, 0xFF, 0xE0, 0x0F, 0xE0, 0x00, 0x3F, 0x06, 0x01, 0xFF, 0xDC, 0x07, - 0xC1, 0xF0, 0x1E, 0x01, 0xE0, 0x3C, 0x01, 0xC0, 0xF0, 0x03, 0x81, 0xE0, - 0x03, 0x03, 0xC0, 0x04, 0x07, 0x80, 0x08, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x08, 0x00, 0x78, 0x10, - 0x00, 0xF0, 0x20, 0x01, 0xE0, 0xC0, 0x03, 0xC1, 0x80, 0x07, 0x83, 0x80, - 0x1E, 0x07, 0x00, 0x3C, 0x0F, 0x00, 0xF0, 0x1F, 0x87, 0xC0, 0x23, 0xFF, - 0x00, 0x81, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFD, 0xF0, - 0x3E, 0x07, 0xB8, 0x07, 0xC0, 0x76, 0x00, 0xF8, 0x04, 0x80, 0x3E, 0x00, - 0xB0, 0x07, 0xC0, 0x14, 0x00, 0xF8, 0x02, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xFF, 0x00, - 0x00, 0x7F, 0xFE, 0x03, 0xFE, 0x1F, 0xE0, 0x01, 0xF8, 0x1F, 0x80, 0x01, - 0xC0, 0x3E, 0x00, 0x03, 0x80, 0x7C, 0x00, 0x07, 0x00, 0xF8, 0x00, 0x0C, - 0x03, 0xE0, 0x00, 0x18, 0x07, 0xC0, 0x00, 0x70, 0x0F, 0x80, 0x00, 0xC0, - 0x1F, 0x00, 0x01, 0x80, 0x7C, 0x00, 0x03, 0x00, 0xF8, 0x00, 0x0E, 0x01, - 0xF0, 0x00, 0x18, 0x07, 0xC0, 0x00, 0x30, 0x0F, 0x80, 0x00, 0x60, 0x1F, - 0x00, 0x01, 0x80, 0x3E, 0x00, 0x03, 0x00, 0xF8, 0x00, 0x06, 0x01, 0xF0, - 0x00, 0x18, 0x03, 0xE0, 0x00, 0x30, 0x07, 0xC0, 0x00, 0x60, 0x1F, 0x00, - 0x00, 0xC0, 0x3E, 0x00, 0x03, 0x00, 0x7C, 0x00, 0x06, 0x00, 0xF8, 0x00, - 0x18, 0x01, 0xF0, 0x00, 0x30, 0x03, 0xE0, 0x00, 0xC0, 0x03, 0xE0, 0x03, - 0x80, 0x03, 0xE0, 0x0E, 0x00, 0x03, 0xF0, 0x78, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0xE0, 0x0F, 0xF9, 0xFC, 0x00, 0x1F, - 0x07, 0xC0, 0x00, 0x78, 0x3E, 0x00, 0x03, 0x81, 0xF0, 0x00, 0x18, 0x0F, - 0x80, 0x01, 0xC0, 0x7C, 0x00, 0x0C, 0x01, 0xE0, 0x00, 0xC0, 0x0F, 0x80, - 0x06, 0x00, 0x7C, 0x00, 0x60, 0x03, 0xE0, 0x07, 0x00, 0x1F, 0x00, 0x30, - 0x00, 0xF8, 0x03, 0x00, 0x03, 0xC0, 0x18, 0x00, 0x1E, 0x01, 0x80, 0x00, - 0xF8, 0x1C, 0x00, 0x07, 0xC0, 0xC0, 0x00, 0x3E, 0x0C, 0x00, 0x01, 0xF0, - 0x60, 0x00, 0x07, 0x86, 0x00, 0x00, 0x3C, 0x30, 0x00, 0x01, 0xE3, 0x00, - 0x00, 0x0F, 0xB0, 0x00, 0x00, 0x7D, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0xFF, 0xE3, 0xFF, 0x81, 0xFE, 0x7F, 0x01, 0xFC, 0x00, 0xF8, 0x7C, - 0x01, 0xF0, 0x00, 0xE0, 0xF8, 0x03, 0xE0, 0x01, 0x81, 0xF0, 0x03, 0xC0, - 0x07, 0x03, 0xE0, 0x07, 0x80, 0x0C, 0x03, 0xC0, 0x0F, 0x00, 0x18, 0x07, - 0x80, 0x1E, 0x00, 0x60, 0x0F, 0x00, 0x7E, 0x00, 0xC0, 0x1F, 0x00, 0xFC, - 0x03, 0x00, 0x3E, 0x03, 0xF8, 0x06, 0x00, 0x7C, 0x05, 0xF0, 0x18, 0x00, - 0xF8, 0x1B, 0xE0, 0x30, 0x01, 0xF0, 0x33, 0xC0, 0xC0, 0x01, 0xE0, 0xC7, - 0x83, 0x80, 0x03, 0xC1, 0x8F, 0x06, 0x00, 0x07, 0x86, 0x1E, 0x1C, 0x00, - 0x0F, 0x0C, 0x3C, 0x30, 0x00, 0x1F, 0x30, 0x7C, 0xE0, 0x00, 0x3E, 0x60, - 0xF9, 0x80, 0x00, 0x7D, 0x81, 0xF7, 0x00, 0x00, 0xFB, 0x03, 0xEC, 0x00, - 0x01, 0xFC, 0x03, 0xF8, 0x00, 0x01, 0xF8, 0x07, 0xE0, 0x00, 0x03, 0xE0, - 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x3C, 0x00, - 0x00, 0x1E, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x00, 0x00, 0x70, - 0x01, 0xC0, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, - 0x00, 0x07, 0xFF, 0x83, 0xFF, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0x7C, 0x00, - 0x78, 0x00, 0x7C, 0x00, 0x70, 0x00, 0x3C, 0x00, 0xE0, 0x00, 0x3E, 0x01, - 0xC0, 0x00, 0x3E, 0x01, 0x80, 0x00, 0x1F, 0x03, 0x00, 0x00, 0x1F, 0x07, - 0x00, 0x00, 0x0F, 0x0E, 0x00, 0x00, 0x0F, 0x9C, 0x00, 0x00, 0x0F, 0xB8, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xC0, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1C, 0xF0, 0x00, 0x00, 0x38, 0xF8, - 0x00, 0x00, 0x30, 0xF8, 0x00, 0x00, 0x60, 0x7C, 0x00, 0x00, 0xC0, 0x7C, - 0x00, 0x01, 0xC0, 0x3C, 0x00, 0x03, 0x80, 0x3E, 0x00, 0x07, 0x00, 0x3E, - 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x7F, 0x00, 0x3F, - 0xC0, 0xFF, 0xC1, 0xFF, 0xF0, 0x7F, 0xF0, 0x7F, 0xC7, 0xF0, 0x03, 0xE0, - 0xF8, 0x00, 0x70, 0x3E, 0x00, 0x38, 0x07, 0x80, 0x0C, 0x01, 0xE0, 0x07, - 0x00, 0x7C, 0x03, 0x80, 0x1F, 0x00, 0xC0, 0x03, 0xC0, 0x60, 0x00, 0xF0, - 0x30, 0x00, 0x3E, 0x1C, 0x00, 0x07, 0x8E, 0x00, 0x01, 0xE3, 0x00, 0x00, - 0x7D, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, - 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x03, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xF0, 0x00, 0xFC, 0x0E, 0x00, 0x0F, - 0xC0, 0x60, 0x00, 0xFC, 0x06, 0x00, 0x0F, 0xC0, 0x20, 0x00, 0x7C, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, - 0x08, 0x0F, 0xC0, 0x00, 0x80, 0xFC, 0x00, 0x0C, 0x07, 0xC0, 0x00, 0x60, - 0x7E, 0x00, 0x07, 0x07, 0xE0, 0x01, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x3C, 0x00, 0x1C, 0x00, 0x0E, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0xE0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, - 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, - 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x07, 0x00, - 0x03, 0x80, 0x01, 0xC0, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x07, 0x80, 0x03, - 0xFC, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, - 0xC0, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x03, 0x80, - 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, - 0x80, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x00, - 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, - 0x80, 0x00, 0xFF, 0x80, 0x07, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0xF0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x07, - 0x00, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70, 0x00, - 0x38, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, - 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x78, 0x00, 0x38, - 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, - 0xC0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x38, 0x03, 0xFC, 0x00, - 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xBC, - 0x00, 0x39, 0xC0, 0x07, 0x1E, 0x00, 0x70, 0xE0, 0x0E, 0x0F, 0x00, 0xE0, - 0x70, 0x1E, 0x07, 0x81, 0xC0, 0x38, 0x3C, 0x03, 0xC3, 0x80, 0x1C, 0x78, - 0x01, 0xE7, 0x00, 0x0E, 0xF0, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x60, 0xF0, 0xF8, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x00, 0x1E, 0x70, - 0x03, 0x0B, 0x80, 0x70, 0x3C, 0x07, 0x01, 0xE0, 0x70, 0x0E, 0x07, 0x00, - 0x70, 0x78, 0x03, 0x83, 0x80, 0x38, 0x3C, 0x01, 0xC1, 0xC0, 0x0E, 0x1E, - 0x00, 0xF0, 0xF0, 0x07, 0x0F, 0x00, 0x78, 0x78, 0x03, 0xC3, 0xC0, 0x3E, - 0x1E, 0x01, 0x70, 0xF0, 0x17, 0x0F, 0x81, 0x38, 0xBE, 0x11, 0xC8, 0xFF, - 0x0F, 0x83, 0xF0, 0x70, 0x00, 0x00, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, - 0x78, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x0F, - 0x80, 0x71, 0xFE, 0x03, 0x98, 0xF8, 0x3D, 0x03, 0xE1, 0xE8, 0x0F, 0x0E, - 0x80, 0x78, 0x78, 0x03, 0xC7, 0xC0, 0x1E, 0x3C, 0x00, 0xF1, 0xE0, 0x0F, - 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC7, 0x80, 0x3C, 0x38, 0x01, 0xE3, 0xC0, - 0x1E, 0x1E, 0x00, 0xE0, 0xE0, 0x0E, 0x07, 0x00, 0xF0, 0x78, 0x07, 0x03, - 0xC0, 0xE0, 0x0F, 0x0E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x38, - 0x60, 0x38, 0x1C, 0x1C, 0x0F, 0x0E, 0x03, 0x87, 0x80, 0x03, 0xC0, 0x00, - 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0xC0, 0x00, 0xF0, - 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x02, 0x3E, 0x01, - 0x87, 0x80, 0xC1, 0xF0, 0x60, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x78, 0x00, 0x71, - 0x70, 0x00, 0xC1, 0x70, 0x03, 0x80, 0xF0, 0x07, 0x80, 0xE0, 0x07, 0x01, - 0xE0, 0x0E, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x01, 0xC0, 0x3C, 0x01, - 0xC0, 0x78, 0x03, 0xC0, 0x78, 0x03, 0xC0, 0x78, 0x03, 0x80, 0xF0, 0x07, - 0x80, 0xF0, 0x07, 0x80, 0xF0, 0x0F, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x17, - 0x08, 0xF0, 0x27, 0x10, 0x78, 0x47, 0x20, 0x7F, 0x87, 0xC0, 0x1E, 0x07, - 0x00, 0x00, 0x1F, 0x00, 0x1C, 0xF0, 0x1C, 0x1C, 0x0E, 0x07, 0x07, 0x01, - 0xC3, 0xC0, 0xF1, 0xE0, 0x38, 0x70, 0x1C, 0x3C, 0x0E, 0x1F, 0x0F, 0x07, - 0x8F, 0x01, 0xFE, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF0, 0x01, 0x3C, 0x00, 0xC7, 0x80, 0x61, 0xF0, 0x60, 0x3F, 0xF0, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x03, 0x1C, 0x00, 0x00, - 0xC3, 0x80, 0x00, 0x38, 0x70, 0x00, 0x06, 0x00, 0x00, 0x01, 0xC0, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0xFF, 0xF8, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0xE0, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x0E, 0x00, 0x00, - 0x03, 0xC0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, 0xC0, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, 0x80, 0x00, 0x38, - 0x60, 0x00, 0x07, 0x0C, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x07, 0x0E, 0x00, 0x70, 0x3E, 0x07, 0x01, 0xF0, - 0x70, 0x0E, 0x07, 0x80, 0x70, 0x3C, 0x03, 0x81, 0xC0, 0x1C, 0x0E, 0x01, - 0xE0, 0x70, 0x0E, 0x03, 0x80, 0xF0, 0x0E, 0x0F, 0x00, 0x30, 0xE0, 0x00, - 0xFE, 0x00, 0x0C, 0x00, 0x00, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x7E, 0x00, - 0x03, 0xFE, 0x00, 0x0F, 0xFC, 0x00, 0x8F, 0xF0, 0x18, 0x0F, 0xC1, 0x80, - 0x1F, 0x18, 0x00, 0x78, 0xC0, 0x01, 0xC6, 0x00, 0x0E, 0x30, 0x00, 0x61, - 0xC0, 0x07, 0x06, 0x00, 0x70, 0x1C, 0x0E, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1C, - 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x03, 0x80, 0x78, 0x7E, 0x03, 0x86, 0x70, - 0x3C, 0x43, 0x81, 0xE4, 0x1C, 0x0E, 0x40, 0xE0, 0x74, 0x0E, 0x07, 0xA0, - 0x70, 0x3E, 0x03, 0x81, 0xE0, 0x1C, 0x0F, 0x00, 0xE0, 0xF0, 0x0E, 0x07, - 0x80, 0x70, 0x38, 0x03, 0x81, 0xC0, 0x1C, 0x1E, 0x00, 0xC2, 0xF0, 0x0E, - 0x27, 0x00, 0x73, 0x38, 0x03, 0x93, 0xC0, 0x1F, 0x1E, 0x00, 0xE0, 0x03, - 0x81, 0xF0, 0x7C, 0x1F, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xFC, 0x1F, 0x07, 0x81, 0xE0, 0x78, 0x1C, 0x07, 0x03, 0xC0, 0xF0, - 0x38, 0x0E, 0x07, 0x81, 0xE0, 0x70, 0x1C, 0x0F, 0x03, 0x84, 0xE2, 0x39, - 0x0F, 0x81, 0xC0, 0x00, 0x01, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, - 0xF0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x3F, 0xC0, 0x00, 0xF0, 0x00, 0x1E, - 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x01, 0xE0, - 0x00, 0x38, 0x00, 0x07, 0x00, 0x01, 0xE0, 0x00, 0x38, 0x00, 0x07, 0x00, - 0x00, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, - 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x01, 0xC7, 0x00, 0x38, 0xC0, 0x07, - 0x30, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, - 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, - 0x00, 0x70, 0xFF, 0x83, 0x80, 0xF0, 0x3C, 0x06, 0x01, 0xE0, 0x60, 0x0E, - 0x06, 0x00, 0x70, 0xE0, 0x07, 0x8C, 0x00, 0x3C, 0xC0, 0x01, 0xCC, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0x9E, 0x00, 0x38, 0xF0, 0x01, 0xC3, - 0x80, 0x1E, 0x1E, 0x00, 0xF0, 0x70, 0x07, 0x03, 0xC2, 0x78, 0x0E, 0x13, - 0xC0, 0x79, 0x1E, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0xE1, 0xFC, 0x0F, - 0x80, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1C, 0x07, 0x80, 0xF0, 0x1E, 0x03, - 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x70, 0x1E, 0x03, 0xC0, 0x78, 0x0E, 0x03, - 0xC0, 0x78, 0x0E, 0x01, 0xC0, 0x78, 0x0F, 0x01, 0xC0, 0x38, 0x4F, 0x11, - 0xE4, 0x39, 0x07, 0xC0, 0x70, 0x00, 0x07, 0x81, 0xC0, 0x78, 0xFE, 0x0F, - 0xC1, 0xF8, 0x3C, 0x33, 0x84, 0x70, 0x78, 0x87, 0x10, 0xE0, 0xF2, 0x0E, - 0x41, 0xC1, 0xC8, 0x39, 0x07, 0x87, 0xA0, 0x74, 0x0F, 0x0F, 0x40, 0xE8, - 0x1E, 0x1F, 0x01, 0xE0, 0x38, 0x3C, 0x07, 0xC0, 0xF0, 0xF8, 0x0F, 0x01, - 0xE1, 0xE0, 0x1E, 0x03, 0xC3, 0xC0, 0x38, 0x07, 0x07, 0x00, 0xF0, 0x1E, - 0x1E, 0x01, 0xE0, 0x3C, 0x3C, 0x03, 0x80, 0x79, 0x70, 0x07, 0x00, 0xE2, - 0xE0, 0x1E, 0x03, 0x8B, 0xC0, 0x3C, 0x07, 0x27, 0x80, 0x70, 0x0F, 0x8E, - 0x00, 0xE0, 0x1E, 0x00, 0x07, 0x81, 0xE3, 0xFC, 0x3F, 0x83, 0xC2, 0x3C, - 0x1E, 0x21, 0xE0, 0xF2, 0x0F, 0x07, 0x20, 0x70, 0x39, 0x07, 0x83, 0xD0, - 0x3C, 0x1F, 0x01, 0xE0, 0xE8, 0x0E, 0x0F, 0x80, 0xF0, 0x78, 0x07, 0x83, - 0xC0, 0x38, 0x1C, 0x01, 0xC1, 0xE0, 0x1E, 0x0F, 0x00, 0xF1, 0x70, 0x07, - 0x0B, 0x80, 0x38, 0xBC, 0x01, 0xC9, 0xE0, 0x0F, 0x8E, 0x00, 0x38, 0x00, - 0x00, 0x1F, 0x80, 0x07, 0x8F, 0x00, 0x70, 0x3C, 0x07, 0x00, 0xE0, 0x70, - 0x07, 0x87, 0x80, 0x3C, 0x78, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x7B, - 0xC0, 0x03, 0xDE, 0x00, 0x3D, 0xF0, 0x01, 0xEF, 0x80, 0x0F, 0x78, 0x00, - 0xF3, 0xC0, 0x07, 0x9E, 0x00, 0x78, 0xF0, 0x03, 0x87, 0x80, 0x38, 0x1C, - 0x03, 0x80, 0xF0, 0x38, 0x03, 0xC3, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3C, - 0x3F, 0x00, 0x7F, 0x8F, 0xF0, 0x01, 0xF7, 0x3F, 0x00, 0x1D, 0x83, 0xF0, - 0x07, 0xA0, 0x3E, 0x00, 0xF8, 0x07, 0xC0, 0x1E, 0x00, 0xF8, 0x03, 0xC0, - 0x1F, 0x00, 0xF0, 0x03, 0xE0, 0x1E, 0x00, 0x7C, 0x03, 0xC0, 0x1F, 0x00, - 0x70, 0x03, 0xE0, 0x1E, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0x00, 0x70, 0x03, - 0xC0, 0x0E, 0x00, 0xF8, 0x03, 0xC0, 0x1E, 0x00, 0x78, 0x07, 0x80, 0x0F, - 0x01, 0xE0, 0x01, 0xE0, 0x70, 0x00, 0x7C, 0x3C, 0x00, 0x0F, 0x7C, 0x00, - 0x01, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x8D, - 0xC0, 0x38, 0x2E, 0x07, 0x80, 0xF0, 0x78, 0x07, 0x03, 0x80, 0x38, 0x38, - 0x03, 0xC3, 0xC0, 0x1E, 0x3C, 0x00, 0xE1, 0xE0, 0x07, 0x1E, 0x00, 0x78, - 0xF0, 0x03, 0x87, 0x80, 0x3C, 0x78, 0x01, 0xE3, 0xC0, 0x1F, 0x1E, 0x01, - 0x70, 0xF0, 0x17, 0x87, 0x80, 0xBC, 0x3C, 0x09, 0xC0, 0xF1, 0x8E, 0x07, - 0xF8, 0xF0, 0x1F, 0x07, 0x80, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, - 0x3E, 0x00, 0x0F, 0xFE, 0x00, 0x07, 0x87, 0x3F, 0x87, 0xC3, 0xC7, 0xE1, - 0xE6, 0xF0, 0xF6, 0x00, 0x72, 0x00, 0x3A, 0x00, 0x1D, 0x00, 0x1F, 0x00, - 0x0E, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, - 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0F, - 0x00, 0x00, 0x01, 0xF8, 0x81, 0x87, 0xC1, 0x80, 0xE1, 0xC0, 0x60, 0xE0, - 0x10, 0x70, 0x08, 0x3C, 0x04, 0x1F, 0x00, 0x07, 0xC0, 0x03, 0xE0, 0x00, - 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x03, 0xC1, 0x01, 0xE0, 0x80, 0x70, - 0x40, 0x38, 0x30, 0x1C, 0x38, 0x0C, 0x1C, 0x0E, 0x0F, 0x0E, 0x04, 0x7C, - 0x00, 0x00, 0xC0, 0x18, 0x03, 0x80, 0x78, 0x1F, 0x03, 0xFF, 0x7F, 0xF0, - 0xF0, 0x0E, 0x00, 0xE0, 0x1E, 0x01, 0xE0, 0x1C, 0x01, 0xC0, 0x3C, 0x03, - 0xC0, 0x38, 0x03, 0x80, 0x78, 0x07, 0x80, 0x70, 0x8F, 0x10, 0xF1, 0x0F, - 0x20, 0xFC, 0x07, 0x80, 0x00, 0x00, 0x00, 0xF0, 0x0E, 0x7F, 0x00, 0xE0, - 0xF0, 0x1E, 0x0E, 0x01, 0xE1, 0xE0, 0x3C, 0x1E, 0x03, 0xC1, 0xE0, 0x3C, - 0x1C, 0x07, 0xC3, 0xC0, 0x78, 0x3C, 0x0F, 0x83, 0xC0, 0xB8, 0x38, 0x1F, - 0x87, 0x83, 0x70, 0x78, 0x27, 0x07, 0x86, 0x70, 0x70, 0xC7, 0x1F, 0x08, - 0xE1, 0xE1, 0x0E, 0x2E, 0x60, 0xE4, 0xFC, 0x0F, 0x87, 0x00, 0x70, 0x1C, - 0x03, 0xBF, 0x00, 0xF1, 0xE0, 0x3C, 0x78, 0x07, 0x1E, 0x00, 0xC3, 0x80, - 0x30, 0xE0, 0x08, 0x38, 0x06, 0x0E, 0x01, 0x03, 0x80, 0xC0, 0xF0, 0x20, - 0x3C, 0x10, 0x07, 0x04, 0x01, 0xC2, 0x00, 0x71, 0x00, 0x1C, 0xC0, 0x07, - 0x60, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x01, 0x00, - 0x00, 0x0C, 0x00, 0x40, 0x3B, 0xF8, 0x01, 0x00, 0xF1, 0xE0, 0x0C, 0x03, - 0xC3, 0x80, 0x78, 0x07, 0x0E, 0x01, 0xE0, 0x0C, 0x38, 0x0F, 0x80, 0x20, - 0xE0, 0x6E, 0x00, 0x83, 0x81, 0x38, 0x04, 0x0F, 0x0C, 0xE0, 0x10, 0x1C, - 0x23, 0x80, 0x80, 0x71, 0x8E, 0x06, 0x01, 0xCC, 0x38, 0x10, 0x07, 0x20, - 0xE0, 0x80, 0x1D, 0x83, 0x86, 0x00, 0x7C, 0x07, 0x30, 0x01, 0xF0, 0x1C, - 0x80, 0x07, 0x80, 0x74, 0x00, 0x1E, 0x01, 0xF0, 0x00, 0x70, 0x07, 0x80, - 0x01, 0xC0, 0x1C, 0x00, 0x06, 0x00, 0x60, 0x00, 0x10, 0x01, 0x00, 0x00, - 0x00, 0xE0, 0x38, 0x1F, 0x81, 0xF0, 0x8F, 0x09, 0x80, 0x3C, 0x40, 0x00, - 0x72, 0x00, 0x01, 0xD0, 0x00, 0x07, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x38, - 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x7C, 0x00, - 0x01, 0x70, 0x00, 0x09, 0xC0, 0x00, 0x67, 0x00, 0x01, 0x1E, 0x10, 0x08, - 0x38, 0x40, 0x40, 0xE2, 0x39, 0x03, 0xD0, 0xF8, 0x0F, 0x83, 0xC0, 0x1C, - 0x00, 0x07, 0x80, 0x33, 0xFC, 0x03, 0xC1, 0xE0, 0x1E, 0x07, 0x80, 0x70, - 0x3C, 0x01, 0x80, 0xE0, 0x0C, 0x07, 0x80, 0x40, 0x3C, 0x02, 0x00, 0xE0, - 0x20, 0x07, 0x81, 0x00, 0x3C, 0x18, 0x01, 0xE0, 0x80, 0x07, 0x0C, 0x00, - 0x38, 0x40, 0x01, 0xE4, 0x00, 0x0F, 0x60, 0x00, 0x3A, 0x00, 0x01, 0xF0, - 0x00, 0x0F, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x18, 0x00, 0x00, - 0x80, 0x00, 0x0C, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, - 0x04, 0x00, 0x0E, 0x40, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x0F, - 0xFF, 0x87, 0xFF, 0x82, 0x00, 0x83, 0x00, 0xC1, 0x00, 0xC0, 0x00, 0xC0, - 0x00, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x20, - 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x18, 0x00, 0x1E, - 0x00, 0x1F, 0xC0, 0x1F, 0xF0, 0xE8, 0xFC, 0x70, 0x1E, 0x38, 0x03, 0x88, - 0x00, 0x78, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, - 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, - 0x70, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0F, 0x00, - 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x80, - 0x00, 0x60, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, - 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00, - 0x38, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x01, 0x80, - 0x00, 0x70, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x18, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x07, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3C, - 0x00, 0x3C, 0x00, 0x38, 0x00, 0x38, 0x00, 0x18, 0x00, 0x08, 0x00, 0x1C, - 0x00, 0x7E, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xE0, - 0x01, 0xC0, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x80, - 0x07, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, - 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFF, 0x80, 0xC7, 0xFF, 0x87, 0xBC, 0x3F, - 0xFE, 0x60, 0x3F, 0xF0, 0x00, 0x1F, 0x00}; - -const GFXglyph FreeSerifItalic24pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 12, 0, 1}, // 0x20 ' ' - {0, 12, 32, 16, 2, -30}, // 0x21 '!' - {48, 14, 12, 16, 6, -31}, // 0x22 '"' - {69, 25, 31, 23, 0, -30}, // 0x23 '#' - {166, 21, 38, 24, 2, -33}, // 0x24 '$' - {266, 33, 32, 39, 4, -30}, // 0x25 '%' - {398, 30, 33, 37, 4, -31}, // 0x26 '&' - {522, 5, 12, 9, 6, -31}, // 0x27 ''' - {530, 13, 39, 16, 2, -30}, // 0x28 '(' - {594, 13, 39, 16, 0, -30}, // 0x29 ')' - {658, 16, 20, 23, 7, -31}, // 0x2A '*' - {698, 23, 23, 32, 4, -22}, // 0x2B '+' - {765, 7, 11, 12, -1, -4}, // 0x2C ',' - {775, 11, 3, 16, 2, -11}, // 0x2D '-' - {780, 5, 5, 12, 1, -3}, // 0x2E '.' - {784, 21, 33, 14, 0, -31}, // 0x2F '/' - {871, 21, 31, 23, 2, -30}, // 0x30 '0' - {953, 17, 32, 23, 2, -31}, // 0x31 '1' - {1021, 21, 31, 24, 0, -30}, // 0x32 '2' - {1103, 22, 32, 23, 0, -31}, // 0x33 '3' - {1191, 22, 32, 23, 0, -31}, // 0x34 '4' - {1279, 22, 32, 24, 0, -31}, // 0x35 '5' - {1367, 23, 32, 23, 1, -31}, // 0x36 '6' - {1459, 21, 32, 23, 4, -31}, // 0x37 '7' - {1543, 22, 32, 23, 1, -31}, // 0x38 '8' - {1631, 22, 33, 23, 1, -31}, // 0x39 '9' - {1722, 9, 22, 12, 2, -20}, // 0x3A ':' - {1747, 11, 27, 12, 1, -20}, // 0x3B ';' - {1785, 23, 25, 27, 3, -24}, // 0x3C '<' - {1857, 24, 12, 31, 4, -17}, // 0x3D '=' - {1893, 24, 25, 27, 3, -24}, // 0x3E '>' - {1968, 16, 33, 21, 6, -31}, // 0x3F '?' - {2034, 33, 33, 37, 3, -31}, // 0x40 '@' - {2171, 29, 31, 31, 0, -30}, // 0x41 'A' - {2284, 28, 31, 28, 0, -30}, // 0x42 'B' - {2393, 30, 33, 29, 2, -31}, // 0x43 'C' - {2517, 33, 31, 33, 0, -30}, // 0x44 'D' - {2645, 29, 31, 27, 0, -30}, // 0x45 'E' - {2758, 29, 31, 27, 0, -30}, // 0x46 'F' - {2871, 31, 33, 32, 2, -31}, // 0x47 'G' - {2999, 36, 31, 33, 0, -30}, // 0x48 'H' - {3139, 18, 31, 15, 0, -30}, // 0x49 'I' - {3209, 23, 32, 20, 0, -30}, // 0x4A 'J' - {3301, 33, 31, 30, 0, -30}, // 0x4B 'K' - {3429, 27, 31, 27, 0, -30}, // 0x4C 'L' - {3534, 42, 31, 39, 0, -30}, // 0x4D 'M' - {3697, 35, 32, 32, 0, -30}, // 0x4E 'N' - {3837, 30, 33, 31, 2, -31}, // 0x4F 'O' - {3961, 29, 31, 27, 0, -30}, // 0x50 'P' - {4074, 30, 41, 31, 2, -31}, // 0x51 'Q' - {4228, 28, 31, 29, 0, -30}, // 0x52 'R' - {4337, 23, 33, 21, 0, -31}, // 0x53 'S' - {4432, 27, 31, 28, 4, -30}, // 0x54 'T' - {4537, 31, 32, 33, 5, -30}, // 0x55 'U' - {4661, 29, 32, 31, 6, -30}, // 0x56 'V' - {4777, 39, 32, 42, 6, -30}, // 0x57 'W' - {4933, 32, 31, 31, 0, -30}, // 0x58 'X' - {5057, 26, 31, 28, 5, -30}, // 0x59 'Y' - {5158, 29, 31, 26, 0, -30}, // 0x5A 'Z' - {5271, 17, 39, 18, 1, -31}, // 0x5B '[' - {5354, 17, 33, 23, 5, -31}, // 0x5C '\' - {5425, 17, 39, 18, 1, -31}, // 0x5D ']' - {5508, 20, 17, 20, 0, -31}, // 0x5E '^' - {5551, 24, 2, 23, 0, 5}, // 0x5F '_' - {5557, 8, 8, 12, 6, -31}, // 0x60 '`' - {5565, 21, 21, 23, 1, -20}, // 0x61 'a' - {5621, 21, 33, 22, 1, -31}, // 0x62 'b' - {5708, 18, 22, 19, 1, -20}, // 0x63 'c' - {5758, 24, 33, 23, 1, -31}, // 0x64 'd' - {5857, 18, 22, 19, 1, -20}, // 0x65 'e' - {5907, 27, 42, 20, -4, -31}, // 0x66 'f' - {6049, 21, 31, 21, -1, -20}, // 0x67 'g' - {6131, 21, 32, 23, 1, -31}, // 0x68 'h' - {6215, 10, 32, 12, 2, -30}, // 0x69 'i' - {6255, 19, 41, 13, -3, -30}, // 0x6A 'j' - {6353, 21, 33, 21, 1, -31}, // 0x6B 'k' - {6440, 11, 33, 12, 2, -31}, // 0x6C 'l' - {6486, 31, 21, 34, 1, -20}, // 0x6D 'm' - {6568, 21, 21, 23, 1, -20}, // 0x6E 'n' - {6624, 21, 22, 22, 1, -20}, // 0x6F 'o' - {6682, 27, 31, 22, -4, -20}, // 0x70 'p' - {6787, 21, 31, 23, 1, -20}, // 0x71 'q' - {6869, 17, 21, 17, 1, -20}, // 0x72 'r' - {6914, 17, 22, 16, 0, -20}, // 0x73 's' - {6961, 12, 26, 11, 1, -24}, // 0x74 't' - {7000, 20, 22, 23, 1, -20}, // 0x75 'u' - {7055, 18, 22, 21, 3, -20}, // 0x76 'v' - {7105, 30, 22, 32, 2, -20}, // 0x77 'w' - {7188, 22, 22, 20, -1, -20}, // 0x78 'x' - {7249, 21, 31, 22, 1, -20}, // 0x79 'y' - {7331, 17, 24, 18, 0, -19}, // 0x7A 'z' - {7382, 17, 40, 19, 2, -31}, // 0x7B '{' - {7467, 3, 33, 13, 5, -31}, // 0x7C '|' - {7480, 16, 41, 19, 0, -32}, // 0x7D '}' - {7562, 22, 6, 25, 2, -14}}; // 0x7E '~' - -const GFXfont FreeSerifItalic24pt7b PROGMEM = { - (uint8_t *)FreeSerifItalic24pt7bBitmaps, - (GFXglyph *)FreeSerifItalic24pt7bGlyphs, 0x20, 0x7E, 56}; - -// Approx. 8251 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic9pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic9pt7b.h deleted file mode 100644 index be4ad05..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/FreeSerifItalic9pt7b.h +++ /dev/null @@ -1,204 +0,0 @@ -#pragma once -#include - -const uint8_t FreeSerifItalic9pt7bBitmaps[] PROGMEM = { - 0x11, 0x12, 0x22, 0x24, 0x40, 0x0C, 0xDE, 0xE5, 0x40, 0x04, 0x82, 0x20, - 0x98, 0x24, 0x7F, 0xC4, 0x82, 0x23, 0xFC, 0x24, 0x11, 0x04, 0x83, 0x20, - 0x1C, 0x1B, 0x99, 0x4D, 0x26, 0x81, 0xC0, 0x70, 0x1C, 0x13, 0x49, 0xA4, - 0xDA, 0xC7, 0xC1, 0x00, 0x80, 0x1C, 0x61, 0xCF, 0x0E, 0x28, 0x30, 0xA0, - 0xC5, 0x03, 0x34, 0xE7, 0xAE, 0x40, 0xB1, 0x05, 0x84, 0x26, 0x20, 0x99, - 0x84, 0x3C, 0x03, 0x80, 0x6C, 0x06, 0xC0, 0x78, 0x06, 0x01, 0xEF, 0x66, - 0x24, 0x24, 0xC3, 0x8C, 0x10, 0xE3, 0x87, 0xCE, 0xFA, 0x08, 0x21, 0x08, - 0x61, 0x8C, 0x30, 0xC3, 0x0C, 0x30, 0x41, 0x02, 0x00, 0x10, 0x40, 0x82, - 0x0C, 0x30, 0xC3, 0x0C, 0x61, 0x84, 0x21, 0x08, 0x00, 0x30, 0xCA, 0x5E, - 0x6A, 0x93, 0x08, 0x08, 0x04, 0x02, 0x01, 0x0F, 0xF8, 0x40, 0x20, 0x10, - 0x08, 0x00, 0x56, 0xF0, 0xF0, 0x03, 0x02, 0x06, 0x04, 0x08, 0x08, 0x10, - 0x30, 0x20, 0x60, 0x40, 0xC0, 0x0E, 0x0C, 0x8C, 0x6C, 0x36, 0x1F, 0x0F, - 0x07, 0x87, 0xC3, 0x61, 0xB1, 0x88, 0x83, 0x80, 0x04, 0x70, 0xC3, 0x08, - 0x21, 0x86, 0x10, 0x43, 0x08, 0xF8, 0x1C, 0x67, 0x83, 0x03, 0x02, 0x06, - 0x0C, 0x08, 0x10, 0x20, 0x42, 0xFC, 0x0F, 0x08, 0xC0, 0x60, 0xC1, 0xE0, - 0x38, 0x0C, 0x06, 0x03, 0x01, 0x01, 0x1F, 0x00, 0x01, 0x01, 0x81, 0x41, - 0x61, 0x21, 0x11, 0x18, 0x88, 0xFF, 0x02, 0x03, 0x01, 0x00, 0x0F, 0x84, - 0x04, 0x03, 0x80, 0x60, 0x18, 0x0C, 0x06, 0x03, 0x03, 0x03, 0x1E, 0x00, - 0x01, 0x83, 0x87, 0x07, 0x03, 0x03, 0x73, 0xCD, 0x86, 0xC3, 0x61, 0xB1, - 0x88, 0xC3, 0xC0, 0x7F, 0x40, 0x80, 0x80, 0x40, 0x40, 0x60, 0x20, 0x20, - 0x10, 0x10, 0x18, 0x08, 0x00, 0x1E, 0x19, 0xCC, 0x66, 0x33, 0xB0, 0xE0, - 0x50, 0xCC, 0xC3, 0x61, 0xB0, 0xCC, 0xC3, 0xC0, 0x0E, 0x19, 0x8C, 0x6C, - 0x36, 0x1B, 0x0D, 0x86, 0xE6, 0x3F, 0x03, 0x03, 0x06, 0x0C, 0x00, 0x33, - 0x00, 0x00, 0xCC, 0x33, 0x00, 0x00, 0x44, 0x48, 0x01, 0x83, 0x86, 0x1C, - 0x0C, 0x03, 0x80, 0x30, 0x07, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x00, 0x0F, - 0xF8, 0xC0, 0x1C, 0x03, 0x80, 0x70, 0x18, 0x38, 0x70, 0xC0, 0x80, 0x00, - 0x3C, 0x8C, 0x18, 0x30, 0xC3, 0x0C, 0x20, 0x40, 0x80, 0x06, 0x00, 0x0F, - 0xC0, 0xC3, 0x0C, 0x04, 0xC7, 0xBC, 0x64, 0xE2, 0x27, 0x31, 0x39, 0x91, - 0xCC, 0x93, 0x3B, 0x0E, 0x00, 0x1F, 0x80, 0x01, 0x00, 0x60, 0x14, 0x04, - 0xC0, 0x98, 0x23, 0x07, 0xE1, 0x04, 0x20, 0x88, 0x1B, 0x8F, 0x80, 0x3F, - 0xC1, 0x8C, 0x21, 0x8C, 0x31, 0x8C, 0x3E, 0x04, 0x61, 0x86, 0x30, 0xC4, - 0x19, 0x86, 0x7F, 0x80, 0x07, 0x91, 0x86, 0x30, 0x26, 0x02, 0x60, 0x0C, - 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x61, 0x83, 0xE0, 0x3F, 0xC0, - 0x63, 0x82, 0x0C, 0x30, 0x31, 0x81, 0x8C, 0x0C, 0x40, 0x66, 0x07, 0x30, - 0x31, 0x03, 0x18, 0x71, 0xFE, 0x00, 0x3F, 0xF0, 0xC2, 0x08, 0x21, 0x80, - 0x19, 0x81, 0xF8, 0x11, 0x03, 0x10, 0x30, 0x02, 0x04, 0x60, 0x8F, 0xF8, - 0x3F, 0xF0, 0xC2, 0x08, 0x21, 0x80, 0x19, 0x81, 0xF8, 0x11, 0x03, 0x10, - 0x30, 0x02, 0x00, 0x60, 0x0F, 0x80, 0x07, 0x91, 0x87, 0x30, 0x26, 0x02, - 0x60, 0x0C, 0x00, 0xC1, 0xFC, 0x0C, 0xC0, 0xCC, 0x0C, 0x60, 0x83, 0xF0, - 0x3E, 0x3C, 0x30, 0x60, 0x81, 0x06, 0x0C, 0x18, 0x30, 0x7F, 0x81, 0x06, - 0x0C, 0x18, 0x30, 0x60, 0x81, 0x06, 0x0C, 0x3C, 0x78, 0x1E, 0x18, 0x20, - 0xC1, 0x83, 0x04, 0x18, 0x30, 0x41, 0x87, 0x80, 0x0F, 0x81, 0x80, 0x80, - 0xC0, 0x60, 0x20, 0x30, 0x18, 0x0C, 0x04, 0x36, 0x1E, 0x00, 0x3E, 0x78, - 0x61, 0x82, 0x10, 0x31, 0x01, 0xB0, 0x0E, 0x00, 0x58, 0x06, 0x60, 0x33, - 0x01, 0x0C, 0x18, 0x61, 0xE7, 0xC0, 0x3E, 0x01, 0x80, 0x20, 0x0C, 0x01, - 0x80, 0x30, 0x04, 0x01, 0x80, 0x30, 0x04, 0x0D, 0x83, 0x7F, 0xE0, 0x1C, - 0x07, 0x0C, 0x0E, 0x0C, 0x14, 0x14, 0x1C, 0x14, 0x2C, 0x16, 0x4C, 0x26, - 0x48, 0x26, 0x98, 0x27, 0x18, 0x27, 0x10, 0x42, 0x30, 0xF4, 0x7C, 0x38, - 0x78, 0x60, 0x83, 0x04, 0x2C, 0x41, 0x22, 0x09, 0x10, 0x4D, 0x84, 0x28, - 0x21, 0x41, 0x06, 0x10, 0x21, 0xE1, 0x00, 0x07, 0x83, 0x18, 0xC1, 0xB0, - 0x36, 0x07, 0xC0, 0xF0, 0x3E, 0x06, 0xC0, 0xD8, 0x31, 0x8C, 0x1E, 0x00, - 0x3F, 0xC1, 0x9C, 0x21, 0x8C, 0x31, 0x86, 0x31, 0x87, 0xE1, 0x80, 0x30, - 0x04, 0x01, 0x80, 0x78, 0x00, 0x07, 0x83, 0x18, 0xC1, 0x98, 0x36, 0x07, - 0xC0, 0xF0, 0x1E, 0x06, 0xC0, 0xD8, 0x31, 0x04, 0x13, 0x01, 0x80, 0x70, - 0xB7, 0xE0, 0x3F, 0xC1, 0x8C, 0x21, 0x8C, 0x31, 0x8C, 0x3F, 0x04, 0xC1, - 0x98, 0x31, 0x84, 0x31, 0x86, 0x78, 0x70, 0x1E, 0x4C, 0x63, 0x08, 0xC0, - 0x38, 0x07, 0x00, 0x60, 0x0C, 0x43, 0x10, 0xC6, 0x62, 0x70, 0x7F, 0xE9, - 0x8E, 0x31, 0x04, 0x01, 0x80, 0x30, 0x06, 0x00, 0x80, 0x30, 0x06, 0x00, - 0x80, 0x7E, 0x00, 0x7C, 0xF3, 0x02, 0x30, 0x46, 0x04, 0x60, 0x46, 0x04, - 0x40, 0x8C, 0x08, 0xC0, 0x8C, 0x10, 0xE3, 0x03, 0xC0, 0xF8, 0xEC, 0x0C, - 0x81, 0x18, 0x43, 0x08, 0x62, 0x0C, 0x81, 0x90, 0x14, 0x03, 0x00, 0x60, - 0x08, 0x00, 0xFB, 0xCE, 0x43, 0x0C, 0x86, 0x11, 0x8C, 0x43, 0x38, 0x86, - 0xB2, 0x0D, 0x24, 0x1C, 0x50, 0x38, 0xA0, 0x21, 0x80, 0x42, 0x01, 0x04, - 0x00, 0x3E, 0x71, 0x82, 0x0C, 0x40, 0xC8, 0x07, 0x00, 0x60, 0x06, 0x00, - 0xB0, 0x13, 0x02, 0x18, 0x61, 0x8F, 0x3E, 0xF9, 0xC8, 0x23, 0x10, 0xC8, - 0x34, 0x05, 0x01, 0x80, 0x40, 0x30, 0x0C, 0x03, 0x03, 0xE0, 0x3F, 0xE4, - 0x19, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x40, 0x18, 0x06, 0x05, - 0x81, 0x7F, 0xE0, 0x0E, 0x10, 0x20, 0x81, 0x02, 0x04, 0x10, 0x20, 0x40, - 0x82, 0x04, 0x08, 0x1C, 0x00, 0x81, 0x04, 0x18, 0x20, 0xC1, 0x04, 0x08, - 0x20, 0x41, 0x38, 0x20, 0x82, 0x08, 0x41, 0x04, 0x10, 0xC2, 0x08, 0x20, - 0x8C, 0x00, 0x18, 0x18, 0x2C, 0x24, 0x46, 0x42, 0x83, 0xFF, 0x80, 0xD8, - 0x80, 0x1F, 0x98, 0x98, 0x4C, 0x2C, 0x36, 0x33, 0x3A, 0xEE, 0x38, 0x08, - 0x04, 0x02, 0x03, 0x71, 0xCC, 0xC6, 0xC3, 0x63, 0x21, 0x93, 0x8F, 0x00, - 0x1F, 0x33, 0x60, 0xC0, 0xC0, 0xC0, 0xC4, 0x78, 0x01, 0x80, 0x40, 0x60, - 0x20, 0xF1, 0x89, 0x8C, 0xC4, 0xC2, 0x63, 0x33, 0xAE, 0xE0, 0x0E, 0x65, - 0x8B, 0x2F, 0x98, 0x31, 0x3C, 0x01, 0xE0, 0x40, 0x08, 0x02, 0x00, 0x40, - 0x3E, 0x03, 0x00, 0x40, 0x08, 0x01, 0x00, 0x60, 0x0C, 0x01, 0x00, 0x20, - 0x04, 0x01, 0x00, 0xC0, 0x00, 0x1E, 0x19, 0xD8, 0xCC, 0xE1, 0xC3, 0x01, - 0xE0, 0xBC, 0x82, 0x41, 0x31, 0x0F, 0x00, 0x38, 0x08, 0x04, 0x02, 0x03, - 0x39, 0x6C, 0xC6, 0x46, 0x63, 0x21, 0x11, 0xB8, 0xE0, 0x30, 0x00, 0xE2, - 0x44, 0xC8, 0xCE, 0x06, 0x00, 0x00, 0x00, 0xC0, 0x83, 0x04, 0x08, 0x10, - 0x60, 0x81, 0x02, 0x04, 0x70, 0x38, 0x10, 0x10, 0x10, 0x37, 0x22, 0x24, - 0x38, 0x78, 0x48, 0x4D, 0xC6, 0x73, 0x32, 0x26, 0x64, 0x4C, 0xDE, 0x77, - 0x39, 0x5E, 0xCC, 0xCC, 0xCE, 0x66, 0x62, 0x22, 0x11, 0x11, 0xB9, 0x8E, - 0x77, 0x3B, 0x33, 0x62, 0x62, 0x42, 0x4D, 0xCE, 0x0F, 0x18, 0xD8, 0x7C, - 0x3C, 0x3E, 0x1B, 0x18, 0xF0, 0x3B, 0x87, 0x31, 0x8C, 0x43, 0x31, 0x88, - 0x62, 0x30, 0xF0, 0x60, 0x10, 0x04, 0x03, 0x80, 0x0F, 0x18, 0x98, 0x4C, - 0x2C, 0x26, 0x33, 0x38, 0xEC, 0x04, 0x02, 0x03, 0x03, 0xC0, 0x76, 0x50, - 0xC1, 0x06, 0x08, 0x10, 0x60, 0x1A, 0x6C, 0xC8, 0xC0, 0xD1, 0xB3, 0x5C, - 0x23, 0xC8, 0xC4, 0x21, 0x18, 0xE0, 0xC3, 0x42, 0x42, 0xC6, 0x86, 0x8C, - 0x9D, 0xEE, 0x62, 0xC4, 0x89, 0xA3, 0x47, 0x0C, 0x10, 0xE2, 0x2C, 0x44, - 0xD8, 0x9D, 0x23, 0xA4, 0x65, 0x0C, 0xC1, 0x10, 0x19, 0x95, 0x43, 0x01, - 0x80, 0xC0, 0xA0, 0x91, 0x8E, 0x70, 0x88, 0x46, 0x23, 0x20, 0x90, 0x50, - 0x28, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x3F, 0x42, 0x04, 0x08, 0x10, - 0x20, 0x40, 0x72, 0x0E, 0x08, 0x61, 0x04, 0x30, 0x86, 0x08, 0x61, 0x04, - 0x30, 0xC3, 0x8F, 0x00, 0xFF, 0xF0, 0x1E, 0x0C, 0x10, 0x20, 0xC1, 0x82, - 0x04, 0x1C, 0x30, 0x40, 0x83, 0x04, 0x08, 0x20, 0x60, 0x99, 0x8E}; - -const GFXglyph FreeSerifItalic9pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 5, 0, 1}, // 0x20 ' ' - {0, 4, 12, 6, 1, -11}, // 0x21 '!' - {6, 5, 4, 6, 3, -11}, // 0x22 '"' - {9, 10, 12, 9, 0, -11}, // 0x23 '#' - {24, 9, 15, 9, 1, -12}, // 0x24 '$' - {41, 14, 12, 15, 1, -11}, // 0x25 '%' - {62, 12, 12, 14, 1, -11}, // 0x26 '&' - {80, 2, 4, 4, 3, -11}, // 0x27 ''' - {81, 6, 15, 6, 1, -11}, // 0x28 '(' - {93, 6, 15, 6, 0, -11}, // 0x29 ')' - {105, 6, 8, 9, 3, -11}, // 0x2A '*' - {111, 9, 9, 12, 1, -8}, // 0x2B '+' - {122, 2, 4, 5, 0, -1}, // 0x2C ',' - {123, 4, 1, 6, 1, -3}, // 0x2D '-' - {124, 2, 2, 5, 0, -1}, // 0x2E '.' - {125, 8, 12, 5, 0, -11}, // 0x2F '/' - {137, 9, 13, 9, 1, -12}, // 0x30 '0' - {152, 6, 13, 9, 1, -12}, // 0x31 '1' - {162, 8, 12, 9, 1, -11}, // 0x32 '2' - {174, 9, 12, 9, 0, -11}, // 0x33 '3' - {188, 9, 12, 9, 0, -11}, // 0x34 '4' - {202, 9, 12, 9, 0, -11}, // 0x35 '5' - {216, 9, 13, 9, 1, -12}, // 0x36 '6' - {231, 9, 12, 9, 1, -11}, // 0x37 '7' - {245, 9, 13, 9, 1, -12}, // 0x38 '8' - {260, 9, 13, 9, 0, -12}, // 0x39 '9' - {275, 4, 8, 4, 1, -7}, // 0x3A ':' - {279, 4, 10, 4, 1, -7}, // 0x3B ';' - {284, 9, 9, 10, 1, -8}, // 0x3C '<' - {295, 9, 5, 12, 2, -6}, // 0x3D '=' - {301, 9, 9, 10, 1, -8}, // 0x3E '>' - {312, 7, 12, 8, 2, -11}, // 0x3F '?' - {323, 13, 12, 14, 1, -11}, // 0x40 '@' - {343, 11, 11, 12, 0, -10}, // 0x41 'A' - {359, 11, 12, 11, 0, -11}, // 0x42 'B' - {376, 12, 12, 11, 1, -11}, // 0x43 'C' - {394, 13, 12, 13, 0, -11}, // 0x44 'D' - {414, 12, 12, 10, 0, -11}, // 0x45 'E' - {432, 12, 12, 10, 0, -11}, // 0x46 'F' - {450, 12, 12, 12, 1, -11}, // 0x47 'G' - {468, 14, 12, 13, 0, -11}, // 0x48 'H' - {489, 7, 12, 6, 0, -11}, // 0x49 'I' - {500, 9, 12, 8, 0, -11}, // 0x4A 'J' - {514, 13, 12, 12, 0, -11}, // 0x4B 'K' - {534, 11, 12, 10, 0, -11}, // 0x4C 'L' - {551, 16, 12, 15, 0, -11}, // 0x4D 'M' - {575, 13, 12, 12, 0, -11}, // 0x4E 'N' - {595, 11, 12, 12, 1, -11}, // 0x4F 'O' - {612, 11, 12, 10, 0, -11}, // 0x50 'P' - {629, 11, 15, 12, 1, -11}, // 0x51 'Q' - {650, 11, 12, 11, 0, -11}, // 0x52 'R' - {667, 10, 12, 8, 0, -11}, // 0x53 'S' - {682, 11, 12, 11, 2, -11}, // 0x54 'T' - {699, 12, 12, 13, 2, -11}, // 0x55 'U' - {717, 11, 12, 12, 2, -11}, // 0x56 'V' - {734, 15, 12, 16, 2, -11}, // 0x57 'W' - {757, 12, 12, 12, 0, -11}, // 0x58 'X' - {775, 10, 12, 11, 2, -11}, // 0x59 'Y' - {790, 11, 12, 10, 0, -11}, // 0x5A 'Z' - {807, 7, 15, 7, 0, -11}, // 0x5B '[' - {821, 6, 12, 9, 2, -11}, // 0x5C '\' - {830, 6, 15, 7, 1, -11}, // 0x5D ']' - {842, 8, 7, 8, 0, -11}, // 0x5E '^' - {849, 9, 1, 9, 0, 2}, // 0x5F '_' - {851, 3, 3, 5, 2, -11}, // 0x60 '`' - {853, 9, 8, 9, 0, -7}, // 0x61 'a' - {862, 9, 12, 9, 0, -11}, // 0x62 'b' - {876, 8, 8, 7, 0, -7}, // 0x63 'c' - {884, 9, 12, 9, 0, -11}, // 0x64 'd' - {898, 7, 8, 7, 0, -7}, // 0x65 'e' - {905, 11, 17, 8, -1, -12}, // 0x66 'f' - {929, 9, 12, 8, 0, -7}, // 0x67 'g' - {943, 9, 12, 9, 0, -11}, // 0x68 'h' - {957, 4, 12, 4, 1, -11}, // 0x69 'i' - {963, 7, 16, 5, -1, -11}, // 0x6A 'j' - {977, 8, 12, 8, 0, -11}, // 0x6B 'k' - {989, 4, 12, 5, 1, -11}, // 0x6C 'l' - {995, 13, 8, 13, 0, -7}, // 0x6D 'm' - {1008, 8, 8, 9, 0, -7}, // 0x6E 'n' - {1016, 9, 8, 9, 0, -7}, // 0x6F 'o' - {1025, 10, 12, 8, -1, -7}, // 0x70 'p' - {1040, 9, 12, 9, 0, -7}, // 0x71 'q' - {1054, 7, 8, 7, 0, -7}, // 0x72 'r' - {1061, 7, 8, 6, 0, -7}, // 0x73 's' - {1068, 5, 9, 4, 0, -8}, // 0x74 't' - {1074, 8, 8, 9, 1, -7}, // 0x75 'u' - {1082, 7, 8, 8, 1, -7}, // 0x76 'v' - {1089, 11, 8, 12, 1, -7}, // 0x77 'w' - {1100, 9, 8, 8, -1, -7}, // 0x78 'x' - {1109, 9, 12, 9, 0, -7}, // 0x79 'y' - {1123, 8, 9, 7, 0, -7}, // 0x7A 'z' - {1132, 6, 15, 7, 1, -11}, // 0x7B '{' - {1144, 1, 12, 5, 2, -11}, // 0x7C '|' - {1146, 7, 16, 7, 0, -12}, // 0x7D '}' - {1160, 8, 3, 10, 1, -5}}; // 0x7E '~' - -const GFXfont FreeSerifItalic9pt7b PROGMEM = { - (uint8_t *)FreeSerifItalic9pt7bBitmaps, - (GFXglyph *)FreeSerifItalic9pt7bGlyphs, 0x20, 0x7E, 22}; - -// Approx. 1835 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Org_01.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Org_01.h deleted file mode 100644 index 9b80258..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Org_01.h +++ /dev/null @@ -1,131 +0,0 @@ -#pragma once -#include - -// Org_v01 by Orgdot (www.orgdot.com/aliasfonts). A tiny, -// stylized font with all characters within a 6 pixel height. - -const uint8_t Org_01Bitmaps[] PROGMEM = { - 0xE8, 0xA0, 0x57, 0xD5, 0xF5, 0x00, 0xFD, 0x3E, 0x5F, 0x80, 0x88, 0x88, - 0x88, 0x80, 0xF4, 0xBF, 0x2E, 0x80, 0x80, 0x6A, 0x40, 0x95, 0x80, 0xAA, - 0x80, 0x5D, 0x00, 0xC0, 0xF0, 0x80, 0x08, 0x88, 0x88, 0x00, 0xFC, 0x63, - 0x1F, 0x80, 0xF8, 0xF8, 0x7F, 0x0F, 0x80, 0xF8, 0x7E, 0x1F, 0x80, 0x8C, - 0x7E, 0x10, 0x80, 0xFC, 0x3E, 0x1F, 0x80, 0xFC, 0x3F, 0x1F, 0x80, 0xF8, - 0x42, 0x10, 0x80, 0xFC, 0x7F, 0x1F, 0x80, 0xFC, 0x7E, 0x1F, 0x80, 0x90, - 0xB0, 0x2A, 0x22, 0xF0, 0xF0, 0x88, 0xA8, 0xF8, 0x4E, 0x02, 0x00, 0xFD, - 0x6F, 0x0F, 0x80, 0xFC, 0x7F, 0x18, 0x80, 0xF4, 0x7D, 0x1F, 0x00, 0xFC, - 0x21, 0x0F, 0x80, 0xF4, 0x63, 0x1F, 0x00, 0xFC, 0x3F, 0x0F, 0x80, 0xFC, - 0x3F, 0x08, 0x00, 0xFC, 0x2F, 0x1F, 0x80, 0x8C, 0x7F, 0x18, 0x80, 0xF9, - 0x08, 0x4F, 0x80, 0x78, 0x85, 0x2F, 0x80, 0x8D, 0xB1, 0x68, 0x80, 0x84, - 0x21, 0x0F, 0x80, 0xFD, 0x6B, 0x5A, 0x80, 0xFC, 0x63, 0x18, 0x80, 0xFC, - 0x63, 0x1F, 0x80, 0xFC, 0x7F, 0x08, 0x00, 0xFC, 0x63, 0x3F, 0x80, 0xFC, - 0x7F, 0x29, 0x00, 0xFC, 0x3E, 0x1F, 0x80, 0xF9, 0x08, 0x42, 0x00, 0x8C, - 0x63, 0x1F, 0x80, 0x8C, 0x62, 0xA2, 0x00, 0xAD, 0x6B, 0x5F, 0x80, 0x8A, - 0x88, 0xA8, 0x80, 0x8C, 0x54, 0x42, 0x00, 0xF8, 0x7F, 0x0F, 0x80, 0xEA, - 0xC0, 0x82, 0x08, 0x20, 0x80, 0xD5, 0xC0, 0x54, 0xF8, 0x80, 0xF1, 0xFF, - 0x8F, 0x99, 0xF0, 0xF8, 0x8F, 0x1F, 0x99, 0xF0, 0xFF, 0x8F, 0x6B, 0xA4, - 0xF9, 0x9F, 0x10, 0x8F, 0x99, 0x90, 0xF0, 0x55, 0xC0, 0x8A, 0xF9, 0x90, - 0xF8, 0xFD, 0x63, 0x10, 0xF9, 0x99, 0xF9, 0x9F, 0xF9, 0x9F, 0x80, 0xF9, - 0x9F, 0x20, 0xF8, 0x88, 0x47, 0x1F, 0x27, 0xC8, 0x42, 0x00, 0x99, 0x9F, - 0x99, 0x97, 0x8C, 0x6B, 0xF0, 0x96, 0x69, 0x99, 0x9F, 0x10, 0x2E, 0x8F, - 0x2B, 0x22, 0xF8, 0x89, 0xA8, 0x0F, 0xE0}; - -const GFXglyph Org_01Glyphs[] PROGMEM = {{0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 1, 5, 2, 0, -4}, // 0x21 '!' - {1, 3, 1, 4, 0, -4}, // 0x22 '"' - {2, 5, 5, 6, 0, -4}, // 0x23 '#' - {6, 5, 5, 6, 0, -4}, // 0x24 '$' - {10, 5, 5, 6, 0, -4}, // 0x25 '%' - {14, 5, 5, 6, 0, -4}, // 0x26 '&' - {18, 1, 1, 2, 0, -4}, // 0x27 ''' - {19, 2, 5, 3, 0, -4}, // 0x28 '(' - {21, 2, 5, 3, 0, -4}, // 0x29 ')' - {23, 3, 3, 4, 0, -3}, // 0x2A '*' - {25, 3, 3, 4, 0, -3}, // 0x2B '+' - {27, 1, 2, 2, 0, 0}, // 0x2C ',' - {28, 4, 1, 5, 0, -2}, // 0x2D '-' - {29, 1, 1, 2, 0, 0}, // 0x2E '.' - {30, 5, 5, 6, 0, -4}, // 0x2F '/' - {34, 5, 5, 6, 0, -4}, // 0x30 '0' - {38, 1, 5, 2, 0, -4}, // 0x31 '1' - {39, 5, 5, 6, 0, -4}, // 0x32 '2' - {43, 5, 5, 6, 0, -4}, // 0x33 '3' - {47, 5, 5, 6, 0, -4}, // 0x34 '4' - {51, 5, 5, 6, 0, -4}, // 0x35 '5' - {55, 5, 5, 6, 0, -4}, // 0x36 '6' - {59, 5, 5, 6, 0, -4}, // 0x37 '7' - {63, 5, 5, 6, 0, -4}, // 0x38 '8' - {67, 5, 5, 6, 0, -4}, // 0x39 '9' - {71, 1, 4, 2, 0, -3}, // 0x3A ':' - {72, 1, 4, 2, 0, -3}, // 0x3B ';' - {73, 3, 5, 4, 0, -4}, // 0x3C '<' - {75, 4, 3, 5, 0, -3}, // 0x3D '=' - {77, 3, 5, 4, 0, -4}, // 0x3E '>' - {79, 5, 5, 6, 0, -4}, // 0x3F '?' - {83, 5, 5, 6, 0, -4}, // 0x40 '@' - {87, 5, 5, 6, 0, -4}, // 0x41 'A' - {91, 5, 5, 6, 0, -4}, // 0x42 'B' - {95, 5, 5, 6, 0, -4}, // 0x43 'C' - {99, 5, 5, 6, 0, -4}, // 0x44 'D' - {103, 5, 5, 6, 0, -4}, // 0x45 'E' - {107, 5, 5, 6, 0, -4}, // 0x46 'F' - {111, 5, 5, 6, 0, -4}, // 0x47 'G' - {115, 5, 5, 6, 0, -4}, // 0x48 'H' - {119, 5, 5, 6, 0, -4}, // 0x49 'I' - {123, 5, 5, 6, 0, -4}, // 0x4A 'J' - {127, 5, 5, 6, 0, -4}, // 0x4B 'K' - {131, 5, 5, 6, 0, -4}, // 0x4C 'L' - {135, 5, 5, 6, 0, -4}, // 0x4D 'M' - {139, 5, 5, 6, 0, -4}, // 0x4E 'N' - {143, 5, 5, 6, 0, -4}, // 0x4F 'O' - {147, 5, 5, 6, 0, -4}, // 0x50 'P' - {151, 5, 5, 6, 0, -4}, // 0x51 'Q' - {155, 5, 5, 6, 0, -4}, // 0x52 'R' - {159, 5, 5, 6, 0, -4}, // 0x53 'S' - {163, 5, 5, 6, 0, -4}, // 0x54 'T' - {167, 5, 5, 6, 0, -4}, // 0x55 'U' - {171, 5, 5, 6, 0, -4}, // 0x56 'V' - {175, 5, 5, 6, 0, -4}, // 0x57 'W' - {179, 5, 5, 6, 0, -4}, // 0x58 'X' - {183, 5, 5, 6, 0, -4}, // 0x59 'Y' - {187, 5, 5, 6, 0, -4}, // 0x5A 'Z' - {191, 2, 5, 3, 0, -4}, // 0x5B '[' - {193, 5, 5, 6, 0, -4}, // 0x5C '\' - {197, 2, 5, 3, 0, -4}, // 0x5D ']' - {199, 3, 2, 4, 0, -4}, // 0x5E '^' - {200, 5, 1, 6, 0, 1}, // 0x5F '_' - {201, 1, 1, 2, 0, -4}, // 0x60 '`' - {202, 4, 4, 5, 0, -3}, // 0x61 'a' - {204, 4, 5, 5, 0, -4}, // 0x62 'b' - {207, 4, 4, 5, 0, -3}, // 0x63 'c' - {209, 4, 5, 5, 0, -4}, // 0x64 'd' - {212, 4, 4, 5, 0, -3}, // 0x65 'e' - {214, 3, 5, 4, 0, -4}, // 0x66 'f' - {216, 4, 5, 5, 0, -3}, // 0x67 'g' - {219, 4, 5, 5, 0, -4}, // 0x68 'h' - {222, 1, 4, 2, 0, -3}, // 0x69 'i' - {223, 2, 5, 3, 0, -3}, // 0x6A 'j' - {225, 4, 5, 5, 0, -4}, // 0x6B 'k' - {228, 1, 5, 2, 0, -4}, // 0x6C 'l' - {229, 5, 4, 6, 0, -3}, // 0x6D 'm' - {232, 4, 4, 5, 0, -3}, // 0x6E 'n' - {234, 4, 4, 5, 0, -3}, // 0x6F 'o' - {236, 4, 5, 5, 0, -3}, // 0x70 'p' - {239, 4, 5, 5, 0, -3}, // 0x71 'q' - {242, 4, 4, 5, 0, -3}, // 0x72 'r' - {244, 4, 4, 5, 0, -3}, // 0x73 's' - {246, 5, 5, 6, 0, -4}, // 0x74 't' - {250, 4, 4, 5, 0, -3}, // 0x75 'u' - {252, 4, 4, 5, 0, -3}, // 0x76 'v' - {254, 5, 4, 6, 0, -3}, // 0x77 'w' - {257, 4, 4, 5, 0, -3}, // 0x78 'x' - {259, 4, 5, 5, 0, -3}, // 0x79 'y' - {262, 4, 4, 5, 0, -3}, // 0x7A 'z' - {264, 3, 5, 4, 0, -4}, // 0x7B '{' - {266, 1, 5, 2, 0, -4}, // 0x7C '|' - {267, 3, 5, 4, 0, -4}, // 0x7D '}' - {269, 5, 3, 6, 0, -3}}; // 0x7E '~' - -const GFXfont Org_01 PROGMEM = {(uint8_t *)Org_01Bitmaps, - (GFXglyph *)Org_01Glyphs, 0x20, 0x7E, 7}; - -// Approx. 943 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Picopixel.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Picopixel.h deleted file mode 100644 index 463b1b5..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Picopixel.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once -#include - -// Picopixel by Sebastian Weber. A tiny font -// with all characters within a 6 pixel height. - -const uint8_t PicopixelBitmaps[] PROGMEM = { - 0xE8, 0xB4, 0x57, 0xD5, 0xF5, 0x00, 0x4E, 0x3E, 0x80, 0xA5, 0x4A, 0x4A, - 0x5A, 0x50, 0xC0, 0x6A, 0x40, 0x95, 0x80, 0xAA, 0x80, 0x5D, 0x00, 0x60, - 0xE0, 0x80, 0x25, 0x48, 0x56, 0xD4, 0x75, 0x40, 0xC5, 0x4E, 0xC5, 0x1C, - 0x97, 0x92, 0xF3, 0x1C, 0x53, 0x54, 0xE5, 0x48, 0x55, 0x54, 0x55, 0x94, - 0xA0, 0x46, 0x64, 0xE3, 0x80, 0x98, 0xC5, 0x04, 0x56, 0xC6, 0x57, 0xDA, - 0xD7, 0x5C, 0x72, 0x46, 0xD6, 0xDC, 0xF3, 0xCE, 0xF3, 0x48, 0x72, 0xD4, - 0xB7, 0xDA, 0xF8, 0x24, 0xD4, 0xBB, 0x5A, 0x92, 0x4E, 0x8E, 0xEB, 0x58, - 0x80, 0x9D, 0xB9, 0x90, 0x56, 0xD4, 0xD7, 0x48, 0x56, 0xD4, 0x40, 0xD7, - 0x5A, 0x71, 0x1C, 0xE9, 0x24, 0xB6, 0xD4, 0xB6, 0xA4, 0x8C, 0x6B, 0x55, - 0x00, 0xB5, 0x5A, 0xB5, 0x24, 0xE5, 0x4E, 0xEA, 0xC0, 0x91, 0x12, 0xD5, - 0xC0, 0x54, 0xF0, 0x90, 0xC7, 0xF0, 0x93, 0x5E, 0x71, 0x80, 0x25, 0xDE, - 0x5E, 0x30, 0x6E, 0x80, 0x77, 0x9C, 0x93, 0x5A, 0xB8, 0x45, 0x60, 0x92, - 0xEA, 0xAA, 0x40, 0xD5, 0x6A, 0xD6, 0x80, 0x55, 0x00, 0xD7, 0x40, 0x75, - 0x90, 0xE8, 0x71, 0xE0, 0xBA, 0x40, 0xB5, 0x80, 0xB5, 0x00, 0x8D, 0x54, - 0xAA, 0x80, 0xAC, 0xE0, 0xE5, 0x70, 0x6A, 0x26, 0xFC, 0xC8, 0xAC, 0x5A}; - -const GFXglyph PicopixelGlyphs[] PROGMEM = {{0, 0, 0, 2, 0, 1}, // 0x20 ' ' - {0, 1, 5, 2, 0, -4}, // 0x21 '!' - {1, 3, 2, 4, 0, -4}, // 0x22 '"' - {2, 5, 5, 6, 0, -4}, // 0x23 '#' - {6, 3, 6, 4, 0, -4}, // 0x24 '$' - {9, 3, 5, 4, 0, -4}, // 0x25 '%' - {11, 4, 5, 5, 0, -4}, // 0x26 '&' - {14, 1, 2, 2, 0, -4}, // 0x27 ''' - {15, 2, 5, 3, 0, -4}, // 0x28 '(' - {17, 2, 5, 3, 0, -4}, // 0x29 ')' - {19, 3, 3, 4, 0, -3}, // 0x2A '*' - {21, 3, 3, 4, 0, -3}, // 0x2B '+' - {23, 2, 2, 3, 0, 0}, // 0x2C ',' - {24, 3, 1, 4, 0, -2}, // 0x2D '-' - {25, 1, 1, 2, 0, 0}, // 0x2E '.' - {26, 3, 5, 4, 0, -4}, // 0x2F '/' - {28, 3, 5, 4, 0, -4}, // 0x30 '0' - {30, 2, 5, 3, 0, -4}, // 0x31 '1' - {32, 3, 5, 4, 0, -4}, // 0x32 '2' - {34, 3, 5, 4, 0, -4}, // 0x33 '3' - {36, 3, 5, 4, 0, -4}, // 0x34 '4' - {38, 3, 5, 4, 0, -4}, // 0x35 '5' - {40, 3, 5, 4, 0, -4}, // 0x36 '6' - {42, 3, 5, 4, 0, -4}, // 0x37 '7' - {44, 3, 5, 4, 0, -4}, // 0x38 '8' - {46, 3, 5, 4, 0, -4}, // 0x39 '9' - {48, 1, 3, 2, 0, -3}, // 0x3A ':' - {49, 2, 4, 3, 0, -3}, // 0x3B ';' - {50, 2, 3, 3, 0, -3}, // 0x3C '<' - {51, 3, 3, 4, 0, -3}, // 0x3D '=' - {53, 2, 3, 3, 0, -3}, // 0x3E '>' - {54, 3, 5, 4, 0, -4}, // 0x3F '?' - {56, 3, 5, 4, 0, -4}, // 0x40 '@' - {58, 3, 5, 4, 0, -4}, // 0x41 'A' - {60, 3, 5, 4, 0, -4}, // 0x42 'B' - {62, 3, 5, 4, 0, -4}, // 0x43 'C' - {64, 3, 5, 4, 0, -4}, // 0x44 'D' - {66, 3, 5, 4, 0, -4}, // 0x45 'E' - {68, 3, 5, 4, 0, -4}, // 0x46 'F' - {70, 3, 5, 4, 0, -4}, // 0x47 'G' - {72, 3, 5, 4, 0, -4}, // 0x48 'H' - {74, 1, 5, 2, 0, -4}, // 0x49 'I' - {75, 3, 5, 4, 0, -4}, // 0x4A 'J' - {77, 3, 5, 4, 0, -4}, // 0x4B 'K' - {79, 3, 5, 4, 0, -4}, // 0x4C 'L' - {81, 5, 5, 6, 0, -4}, // 0x4D 'M' - {85, 4, 5, 5, 0, -4}, // 0x4E 'N' - {88, 3, 5, 4, 0, -4}, // 0x4F 'O' - {90, 3, 5, 4, 0, -4}, // 0x50 'P' - {92, 3, 6, 4, 0, -4}, // 0x51 'Q' - {95, 3, 5, 4, 0, -4}, // 0x52 'R' - {97, 3, 5, 4, 0, -4}, // 0x53 'S' - {99, 3, 5, 4, 0, -4}, // 0x54 'T' - {101, 3, 5, 4, 0, -4}, // 0x55 'U' - {103, 3, 5, 4, 0, -4}, // 0x56 'V' - {105, 5, 5, 6, 0, -4}, // 0x57 'W' - {109, 3, 5, 4, 0, -4}, // 0x58 'X' - {111, 3, 5, 4, 0, -4}, // 0x59 'Y' - {113, 3, 5, 4, 0, -4}, // 0x5A 'Z' - {115, 2, 5, 3, 0, -4}, // 0x5B '[' - {117, 3, 5, 4, 0, -4}, // 0x5C '\' - {119, 2, 5, 3, 0, -4}, // 0x5D ']' - {121, 3, 2, 4, 0, -4}, // 0x5E '^' - {122, 4, 1, 4, 0, 1}, // 0x5F '_' - {123, 2, 2, 3, 0, -4}, // 0x60 '`' - {124, 3, 4, 4, 0, -3}, // 0x61 'a' - {126, 3, 5, 4, 0, -4}, // 0x62 'b' - {128, 3, 3, 4, 0, -2}, // 0x63 'c' - {130, 3, 5, 4, 0, -4}, // 0x64 'd' - {132, 3, 4, 4, 0, -3}, // 0x65 'e' - {134, 2, 5, 3, 0, -4}, // 0x66 'f' - {136, 3, 5, 4, 0, -3}, // 0x67 'g' - {138, 3, 5, 4, 0, -4}, // 0x68 'h' - {140, 1, 5, 2, 0, -4}, // 0x69 'i' - {141, 2, 6, 3, 0, -4}, // 0x6A 'j' - {143, 3, 5, 4, 0, -4}, // 0x6B 'k' - {145, 2, 5, 3, 0, -4}, // 0x6C 'l' - {147, 5, 3, 6, 0, -2}, // 0x6D 'm' - {149, 3, 3, 4, 0, -2}, // 0x6E 'n' - {151, 3, 3, 4, 0, -2}, // 0x6F 'o' - {153, 3, 4, 4, 0, -2}, // 0x70 'p' - {155, 3, 4, 4, 0, -2}, // 0x71 'q' - {157, 2, 3, 3, 0, -2}, // 0x72 'r' - {158, 3, 4, 4, 0, -3}, // 0x73 's' - {160, 2, 5, 3, 0, -4}, // 0x74 't' - {162, 3, 3, 4, 0, -2}, // 0x75 'u' - {164, 3, 3, 4, 0, -2}, // 0x76 'v' - {166, 5, 3, 6, 0, -2}, // 0x77 'w' - {168, 3, 3, 4, 0, -2}, // 0x78 'x' - {170, 3, 4, 4, 0, -2}, // 0x79 'y' - {172, 3, 4, 4, 0, -3}, // 0x7A 'z' - {174, 3, 5, 4, 0, -4}, // 0x7B '{' - {176, 1, 6, 2, 0, -4}, // 0x7C '|' - {177, 3, 5, 4, 0, -4}, // 0x7D '}' - {179, 4, 2, 5, 0, -3}}; // 0x7E '~' - -const GFXfont Picopixel PROGMEM = {(uint8_t *)PicopixelBitmaps, - (GFXglyph *)PicopixelGlyphs, 0x20, 0x7E, 7}; - -// Approx. 852 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Tiny3x3a2pt7b.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Tiny3x3a2pt7b.h deleted file mode 100644 index 5b0ba4a..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/Tiny3x3a2pt7b.h +++ /dev/null @@ -1,133 +0,0 @@ -#pragma once -#include - -/** -** The FontStruction “Tiny3x3a” -** (https://fontstruct.com/fontstructions/show/670512) by “Michaelangel007” is -** licensed under a Creative Commons Attribution Non-commercial Share Alike -*license -** (http://creativecommons.org/licenses/by-nc-sa/3.0/). -** “Tiny3x3a” was originally cloned (copied) from the FontStruction -** “CHECKER” (https://fontstruct.com/fontstructions/show/2391) by Wolf grant -** Grant, which is licensed under a Creative Commons Attribution Non-commercial -** Share Alike license (http://creativecommons.org/licenses/by-nc-sa/3.0/). -* -* Converted by eadmaster with fontconvert -**/ - -const uint8_t Tiny3x3a2pt7bBitmaps[] PROGMEM = { - 0xC0, 0xB4, 0xBF, 0x80, 0x6B, 0x00, 0xDD, 0x80, 0x59, 0x80, 0x80, 0x64, - 0x98, 0xF0, 0x5D, 0x00, 0xC0, 0xE0, 0x80, 0x2A, 0x00, 0x55, 0x00, 0x94, - 0xC9, 0x80, 0xEF, 0x80, 0xBC, 0x80, 0x6B, 0x00, 0x9F, 0x80, 0xE4, 0x80, - 0x7F, 0x00, 0xFC, 0x80, 0xA0, 0x58, 0x64, 0xE3, 0x80, 0x98, 0xD8, 0xD8, - 0x80, 0x5E, 0x80, 0xDF, 0x80, 0x71, 0x80, 0xD7, 0x00, 0xFB, 0x80, 0xFA, - 0x00, 0xD7, 0x80, 0xBE, 0x80, 0xE0, 0x27, 0x00, 0xBA, 0x80, 0x93, 0x80, - 0xFE, 0x80, 0xF6, 0x80, 0xF7, 0x80, 0xFE, 0x00, 0xF7, 0x00, 0xDE, 0x80, - 0x6B, 0x00, 0xE9, 0x00, 0xB7, 0x80, 0xB5, 0x00, 0xBF, 0x80, 0xAA, 0x80, - 0xA9, 0x00, 0xEB, 0x80, 0xEC, 0x88, 0x80, 0xDC, 0x54, 0xE0, 0x90, 0x70, - 0xBC, 0xF0, 0x7C, 0xB0, 0x68, 0xFC, 0xBC, 0xC0, 0x58, 0x9A, 0x80, 0xA4, - 0xDC, 0xD4, 0xF0, 0xF8, 0xF4, 0xE0, 0x60, 0x59, 0x80, 0xBC, 0xA8, 0xEC, - 0xF0, 0xAC, 0x80, 0x90, 0x79, 0x80, 0xF0, 0xCF, 0x00, 0x78}; - -const GFXglyph Tiny3x3a2pt7bGlyphs[] PROGMEM = { - {0, 0, 0, 4, 0, 1}, // 0x20 ' ' - {0, 1, 2, 3, 1, -2}, // 0x21 '!' - {1, 3, 2, 4, 0, -2}, // 0x22 '"' - {2, 3, 3, 4, 0, -2}, // 0x23 '#' - {4, 3, 3, 4, 0, -2}, // 0x24 '$' - {6, 3, 3, 4, 0, -2}, // 0x25 '%' - {8, 3, 3, 4, 0, -2}, // 0x26 '&' - {10, 1, 1, 3, 1, -2}, // 0x27 ''' - {11, 2, 3, 3, 0, -2}, // 0x28 '(' - {12, 2, 3, 4, 1, -2}, // 0x29 ')' - {13, 2, 2, 4, 1, -2}, // 0x2A '*' - {14, 3, 3, 4, 0, -2}, // 0x2B '+' - {16, 1, 2, 2, 0, 0}, // 0x2C ',' - {17, 3, 1, 4, 0, -1}, // 0x2D '-' - {18, 1, 1, 2, 0, 0}, // 0x2E '.' - {19, 3, 3, 4, 0, -2}, // 0x2F '/' - {21, 3, 3, 4, 0, -2}, // 0x30 '0' - {23, 2, 3, 3, 0, -2}, // 0x31 '1' - {24, 3, 3, 4, 0, -2}, // 0x32 '2' - {26, 3, 3, 4, 0, -2}, // 0x33 '3' - {28, 3, 3, 4, 0, -2}, // 0x34 '4' - {30, 3, 3, 4, 0, -2}, // 0x35 '5' - {32, 3, 3, 4, 0, -2}, // 0x36 '6' - {34, 3, 3, 4, 0, -2}, // 0x37 '7' - {36, 3, 3, 4, 0, -2}, // 0x38 '8' - {38, 3, 3, 4, 0, -2}, // 0x39 '9' - {40, 1, 3, 3, 1, -2}, // 0x3A ':' - {41, 2, 3, 3, 0, -1}, // 0x3B ';' - {42, 2, 3, 3, 0, -2}, // 0x3C '<' - {43, 3, 3, 4, 0, -2}, // 0x3D '=' - {45, 2, 3, 4, 1, -2}, // 0x3E '>' - {46, 2, 3, 4, 1, -2}, // 0x3F '?' - {47, 3, 3, 4, 0, -2}, // 0x40 '@' - {49, 3, 3, 4, 0, -2}, // 0x41 'A' - {51, 3, 3, 4, 0, -2}, // 0x42 'B' - {53, 3, 3, 4, 0, -2}, // 0x43 'C' - {55, 3, 3, 4, 0, -2}, // 0x44 'D' - {57, 3, 3, 4, 0, -2}, // 0x45 'E' - {59, 3, 3, 4, 0, -2}, // 0x46 'F' - {61, 3, 3, 4, 0, -2}, // 0x47 'G' - {63, 3, 3, 4, 0, -2}, // 0x48 'H' - {65, 1, 3, 3, 1, -2}, // 0x49 'I' - {66, 3, 3, 4, 0, -2}, // 0x4A 'J' - {68, 3, 3, 4, 0, -2}, // 0x4B 'K' - {70, 3, 3, 4, 0, -2}, // 0x4C 'L' - {72, 3, 3, 4, 0, -2}, // 0x4D 'M' - {74, 3, 3, 4, 0, -2}, // 0x4E 'N' - {76, 3, 3, 4, 0, -2}, // 0x4F 'O' - {78, 3, 3, 4, 0, -2}, // 0x50 'P' - {80, 3, 3, 4, 0, -2}, // 0x51 'Q' - {82, 3, 3, 4, 0, -2}, // 0x52 'R' - {84, 3, 3, 4, 0, -2}, // 0x53 'S' - {86, 3, 3, 4, 0, -2}, // 0x54 'T' - {88, 3, 3, 4, 0, -2}, // 0x55 'U' - {90, 3, 3, 4, 0, -2}, // 0x56 'V' - {92, 3, 3, 4, 0, -2}, // 0x57 'W' - {94, 3, 3, 4, 0, -2}, // 0x58 'X' - {96, 3, 3, 4, 0, -2}, // 0x59 'Y' - {98, 3, 3, 4, 0, -2}, // 0x5A 'Z' - {100, 2, 3, 3, 0, -2}, // 0x5B '[' - {101, 3, 3, 4, 0, -2}, // 0x5C '\' - {103, 2, 3, 4, 1, -2}, // 0x5D ']' - {104, 3, 2, 4, 0, -2}, // 0x5E '^' - {105, 3, 1, 4, 0, 0}, // 0x5F '_' - {106, 2, 2, 3, 0, -2}, // 0x60 '`' - {107, 2, 2, 3, 0, -1}, // 0x61 'a' - {108, 2, 3, 3, 0, -2}, // 0x62 'b' - {109, 2, 2, 3, 0, -1}, // 0x63 'c' - {110, 2, 3, 3, 0, -2}, // 0x64 'd' - {111, 2, 2, 3, 0, -1}, // 0x65 'e' - {112, 2, 3, 3, 0, -2}, // 0x66 'f' - {113, 2, 3, 3, 0, -1}, // 0x67 'g' - {114, 2, 3, 3, 0, -2}, // 0x68 'h' - {115, 1, 2, 2, 0, -1}, // 0x69 'i' - {116, 2, 3, 3, 0, -1}, // 0x6A 'j' - {117, 3, 3, 4, 0, -2}, // 0x6B 'k' - {119, 2, 3, 3, 0, -2}, // 0x6C 'l' - {120, 3, 2, 4, 0, -1}, // 0x6D 'm' - {121, 3, 2, 4, 0, -1}, // 0x6E 'n' - {122, 2, 2, 3, 0, -1}, // 0x6F 'o' - {123, 2, 3, 3, 0, -1}, // 0x70 'p' - {124, 2, 3, 3, 0, -1}, // 0x71 'q' - {125, 2, 2, 3, 0, -1}, // 0x72 'r' - {126, 2, 2, 3, 0, -1}, // 0x73 's' - {127, 3, 3, 4, 0, -2}, // 0x74 't' - {129, 3, 2, 4, 0, -1}, // 0x75 'u' - {130, 3, 2, 4, 0, -1}, // 0x76 'v' - {131, 3, 2, 4, 0, -1}, // 0x77 'w' - {132, 2, 2, 3, 0, -1}, // 0x78 'x' - {133, 3, 3, 4, 0, -1}, // 0x79 'y' - {135, 2, 2, 3, 0, -1}, // 0x7A 'z' - {136, 3, 3, 4, 0, -2}, // 0x7B '{' - {138, 1, 4, 3, 1, -2}, // 0x7C '|' - {139, 3, 3, 4, 0, -2}, // 0x7D '}' - {141, 3, 2, 4, 0, -2}}; // 0x7E '~' - -const GFXfont Tiny3x3a2pt7b PROGMEM = {(uint8_t *)Tiny3x3a2pt7bBitmaps, - (GFXglyph *)Tiny3x3a2pt7bGlyphs, 0x20, - 0x7E, 4}; - -// Approx. 814 bytes diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/TomThumb.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/TomThumb.h deleted file mode 100644 index 2155500..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/Fonts/TomThumb.h +++ /dev/null @@ -1,477 +0,0 @@ -#pragma once -#include - -/** -** The original 3x5 font is licensed under the 3-clause BSD license: -** -** Copyright 1999 Brian J. Swetland -** Copyright 1999 Vassilii Khachaturov -** Portions (of vt100.c/vt100.h) copyright Dan Marks -** -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions, and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions, and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the authors may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -** -** Modifications to Tom Thumb for improved readability are from Robey Pointer, -** see: -** http://robey.lag.net/2010/01/23/tiny-monospace-font.html -** -** The original author does not have any objection to relicensing of Robey -** Pointer's modifications (in this file) in a more permissive license. See -** the discussion at the above blog, and also here: -** http://opengameart.org/forumtopic/how-to-submit-art-using-the-3-clause-bsd-license -** -** Feb 21, 2016: Conversion from Linux BDF --> Adafruit GFX font, -** with the help of this Python script: -** https://gist.github.com/skelliam/322d421f028545f16f6d -** William Skellenger (williamj@skellenger.net) -** Twitter: @skelliam -** -** Jan 09, 2020: Bitmaps now compressed, to fix the bounding box problem, -** because non-compressed the calculated text width were wrong. -** Andreas Merkle (web@blue-andi.de) -*/ - -#define TOMTHUMB_USE_EXTENDED 0 - -const uint8_t TomThumbBitmaps[] PROGMEM = { - 0x00, /* 0x20 space */ - 0xE8, /* 0x21 exclam */ - 0xB4, /* 0x22 quotedbl */ - 0xBE, 0xFA, /* 0x23 numbersign */ - 0x79, 0xE4, /* 0x24 dollar */ - 0x85, 0x42, /* 0x25 percent */ - 0xDB, 0xD6, /* 0x26 ampersand */ - 0xC0, /* 0x27 quotesingle */ - 0x6A, 0x40, /* 0x28 parenleft */ - 0x95, 0x80, /* 0x29 parenright */ - 0xAA, 0x80, /* 0x2A asterisk */ - 0x5D, 0x00, /* 0x2B plus */ - 0x60, /* 0x2C comma */ - 0xE0, /* 0x2D hyphen */ - 0x80, /* 0x2E period */ - 0x25, 0x48, /* 0x2F slash */ - 0x76, 0xDC, /* 0x30 zero */ - 0x75, 0x40, /* 0x31 one */ - 0xC5, 0x4E, /* 0x32 two */ - 0xC5, 0x1C, /* 0x33 three */ - 0xB7, 0x92, /* 0x34 four */ - 0xF3, 0x1C, /* 0x35 five */ - 0x73, 0xDE, /* 0x36 six */ - 0xE5, 0x48, /* 0x37 seven */ - 0xF7, 0xDE, /* 0x38 eight */ - 0xF7, 0x9C, /* 0x39 nine */ - 0xA0, /* 0x3A colon */ - 0x46, /* 0x3B semicolon */ - 0x2A, 0x22, /* 0x3C less */ - 0xE3, 0x80, /* 0x3D equal */ - 0x88, 0xA8, /* 0x3E greater */ - 0xE5, 0x04, /* 0x3F question */ - 0x57, 0xC6, /* 0x40 at */ - 0x57, 0xDA, /* 0x41 A */ - 0xD7, 0x5C, /* 0x42 B */ - 0x72, 0x46, /* 0x43 C */ - 0xD6, 0xDC, /* 0x44 D */ - 0xF3, 0xCE, /* 0x45 E */ - 0xF3, 0xC8, /* 0x46 F */ - 0x73, 0xD6, /* 0x47 G */ - 0xB7, 0xDA, /* 0x48 H */ - 0xE9, 0x2E, /* 0x49 I */ - 0x24, 0xD4, /* 0x4A J */ - 0xB7, 0x5A, /* 0x4B K */ - 0x92, 0x4E, /* 0x4C L */ - 0xBF, 0xDA, /* 0x4D M */ - 0xBF, 0xFA, /* 0x4E N */ - 0x56, 0xD4, /* 0x4F O */ - 0xD7, 0x48, /* 0x50 P */ - 0x56, 0xF6, /* 0x51 Q */ - 0xD7, 0xEA, /* 0x52 R */ - 0x71, 0x1C, /* 0x53 S */ - 0xE9, 0x24, /* 0x54 T */ - 0xB6, 0xD6, /* 0x55 U */ - 0xB6, 0xA4, /* 0x56 V */ - 0xB7, 0xFA, /* 0x57 W */ - 0xB5, 0x5A, /* 0x58 X */ - 0xB5, 0x24, /* 0x59 Y */ - 0xE5, 0x4E, /* 0x5A Z */ - 0xF2, 0x4E, /* 0x5B bracketleft */ - 0x88, 0x80, /* 0x5C backslash */ - 0xE4, 0x9E, /* 0x5D bracketright */ - 0x54, /* 0x5E asciicircum */ - 0xE0, /* 0x5F underscore */ - 0x90, /* 0x60 grave */ - 0xCE, 0xF0, /* 0x61 a */ - 0x9A, 0xDC, /* 0x62 b */ - 0x72, 0x30, /* 0x63 c */ - 0x2E, 0xD6, /* 0x64 d */ - 0x77, 0x30, /* 0x65 e */ - 0x2B, 0xA4, /* 0x66 f */ - 0x77, 0x94, /* 0x67 g */ - 0x9A, 0xDA, /* 0x68 h */ - 0xB8, /* 0x69 i */ - 0x20, 0x9A, 0x80, /* 0x6A j */ - 0x97, 0x6A, /* 0x6B k */ - 0xC9, 0x2E, /* 0x6C l */ - 0xFF, 0xD0, /* 0x6D m */ - 0xD6, 0xD0, /* 0x6E n */ - 0x56, 0xA0, /* 0x6F o */ - 0xD6, 0xE8, /* 0x70 p */ - 0x76, 0xB2, /* 0x71 q */ - 0x72, 0x40, /* 0x72 r */ - 0x79, 0xE0, /* 0x73 s */ - 0x5D, 0x26, /* 0x74 t */ - 0xB6, 0xB0, /* 0x75 u */ - 0xB7, 0xA0, /* 0x76 v */ - 0xBF, 0xF0, /* 0x77 w */ - 0xA9, 0x50, /* 0x78 x */ - 0xB5, 0x94, /* 0x79 y */ - 0xEF, 0x70, /* 0x7A z */ - 0x6A, 0x26, /* 0x7B braceleft */ - 0xD8, /* 0x7C bar */ - 0xC8, 0xAC, /* 0x7D braceright */ - 0x78, /* 0x7E asciitilde */ -#if (TOMTHUMB_USE_EXTENDED) - 0xB8, /* 0xA1 exclamdown */ - 0x5E, 0x74, /* 0xA2 cent */ - 0x6B, 0xAE, /* 0xA3 sterling */ - 0xAB, 0xAA, /* 0xA4 currency */ - 0xB5, 0x74, /* 0xA5 yen */ - 0xD8, /* 0xA6 brokenbar */ - 0x6A, 0xAC, /* 0xA7 section */ - 0xA0, /* 0xA8 dieresis */ - 0x71, 0x80, /* 0xA9 copyright */ - 0x77, 0x8E, /* 0xAA ordfeminine */ - 0x64, /* 0xAB guillemotleft */ - 0xE4, /* 0xAC logicalnot */ - 0xC0, /* 0xAD softhyphen */ - 0xDA, 0x80, /* 0xAE registered */ - 0xE0, /* 0xAF macron */ - 0x55, 0x00, /* 0xB0 degree */ - 0x5D, 0x0E, /* 0xB1 plusminus */ - 0xC9, 0x80, /* 0xB2 twosuperior */ - 0xEF, 0x80, /* 0xB3 threesuperior */ - 0x60, /* 0xB4 acute */ - 0xB6, 0xE8, /* 0xB5 mu */ - 0x75, 0xB6, /* 0xB6 paragraph */ - 0xFF, 0x80, /* 0xB7 periodcentered */ - 0x47, 0x00, /* 0xB8 cedilla */ - 0xE0, /* 0xB9 onesuperior */ - 0x55, 0x0E, /* 0xBA ordmasculine */ - 0x98, /* 0xBB guillemotright */ - 0x90, 0x32, /* 0xBC onequarter */ - 0x90, 0x66, /* 0xBD onehalf */ - 0xD8, 0x32, /* 0xBE threequarters */ - 0x41, 0x4E, /* 0xBF questiondown */ - 0x45, 0x7A, /* 0xC0 Agrave */ - 0x51, 0x7A, /* 0xC1 Aacute */ - 0xE1, 0x7A, /* 0xC2 Acircumflex */ - 0x79, 0x7A, /* 0xC3 Atilde */ - 0xAA, 0xFA, /* 0xC4 Adieresis */ - 0xDA, 0xFA, /* 0xC5 Aring */ - 0x7B, 0xEE, /* 0xC6 AE */ - 0x72, 0x32, 0x80, /* 0xC7 Ccedilla */ - 0x47, 0xEE, /* 0xC8 Egrave */ - 0x53, 0xEE, /* 0xC9 Eacute */ - 0xE3, 0xEE, /* 0xCA Ecircumflex */ - 0xA3, 0xEE, /* 0xCB Edieresis */ - 0x47, 0xAE, /* 0xCC Igrave */ - 0x53, 0xAE, /* 0xCD Iacute */ - 0xE3, 0xAE, /* 0xCE Icircumflex */ - 0xA3, 0xAE, /* 0xCF Idieresis */ - 0xD7, 0xDC, /* 0xD0 Eth */ - 0xCE, 0xFA, /* 0xD1 Ntilde */ - 0x47, 0xDE, /* 0xD2 Ograve */ - 0x53, 0xDE, /* 0xD3 Oacute */ - 0xE3, 0xDE, /* 0xD4 Ocircumflex */ - 0xCF, 0xDE, /* 0xD5 Otilde */ - 0xA3, 0xDE, /* 0xD6 Odieresis */ - 0xAA, 0x80, /* 0xD7 multiply */ - 0x77, 0xDC, /* 0xD8 Oslash */ - 0x8A, 0xDE, /* 0xD9 Ugrave */ - 0x2A, 0xDE, /* 0xDA Uacute */ - 0xE2, 0xDE, /* 0xDB Ucircumflex */ - 0xA2, 0xDE, /* 0xDC Udieresis */ - 0x2A, 0xF4, /* 0xDD Yacute */ - 0x9E, 0xF8, /* 0xDE Thorn */ - 0x77, 0x5D, 0x00, /* 0xDF germandbls */ - 0x45, 0xDE, /* 0xE0 agrave */ - 0x51, 0xDE, /* 0xE1 aacute */ - 0xE1, 0xDE, /* 0xE2 acircumflex */ - 0x79, 0xDE, /* 0xE3 atilde */ - 0xA1, 0xDE, /* 0xE4 adieresis */ - 0x6D, 0xDE, /* 0xE5 aring */ - 0x7F, 0xE0, /* 0xE6 ae */ - 0x71, 0x94, /* 0xE7 ccedilla */ - 0x45, 0xF6, /* 0xE8 egrave */ - 0x51, 0xF6, /* 0xE9 eacute */ - 0xE1, 0xF6, /* 0xEA ecircumflex */ - 0xA1, 0xF6, /* 0xEB edieresis */ - 0x9A, 0x80, /* 0xEC igrave */ - 0x65, 0x40, /* 0xED iacute */ - 0xE1, 0x24, /* 0xEE icircumflex */ - 0xA1, 0x24, /* 0xEF idieresis */ - 0x79, 0xD6, /* 0xF0 eth */ - 0xCF, 0x5A, /* 0xF1 ntilde */ - 0x45, 0x54, /* 0xF2 ograve */ - 0x51, 0x54, /* 0xF3 oacute */ - 0xE1, 0x54, /* 0xF4 ocircumflex */ - 0xCD, 0x54, /* 0xF5 otilde */ - 0xA1, 0x54, /* 0xF6 odieresis */ - 0x43, 0x84, /* 0xF7 divide */ - 0x7E, 0xE0, /* 0xF8 oslash */ - 0x8A, 0xD6, /* 0xF9 ugrave */ - 0x2A, 0xD6, /* 0xFA uacute */ - 0xE2, 0xD6, /* 0xFB ucircumflex */ - 0xA2, 0xD6, /* 0xFC udieresis */ - 0x2A, 0xB2, 0x80, /* 0xFD yacute */ - 0x9A, 0xE8, /* 0xFE thorn */ - 0xA2, 0xB2, 0x80, /* 0xFF ydieresis */ - 0x00, /* 0x11D gcircumflex */ - 0x7B, 0xE6, /* 0x152 OE */ - 0x7F, 0x70, /* 0x153 oe */ - 0xAF, 0x3C, /* 0x160 Scaron */ - 0xAF, 0x3C, /* 0x161 scaron */ - 0xA2, 0xA4, /* 0x178 Ydieresis */ - 0xBD, 0xEE, /* 0x17D Zcaron */ - 0xBD, 0xEE, /* 0x17E zcaron */ - 0x00, /* 0xEA4 uni0EA4 */ - 0x00, /* 0x13A0 uni13A0 */ - 0x80, /* 0x2022 bullet */ - 0xA0, /* 0x2026 ellipsis */ - 0x7F, 0xE6, /* 0x20AC Euro */ - 0xEA, 0xAA, 0xE0, /* 0xFFFD uniFFFD */ -#endif /* (TOMTHUMB_USE_EXTENDED) */ -}; - -/* {offset, width, height, advance cursor, x offset, y offset} */ -const GFXglyph TomThumbGlyphs[] PROGMEM = { - {0, 1, 1, 2, 0, -5}, /* 0x20 space */ - {1, 1, 5, 2, 0, -5}, /* 0x21 exclam */ - {2, 3, 2, 4, 0, -5}, /* 0x22 quotedbl */ - {3, 3, 5, 4, 0, -5}, /* 0x23 numbersign */ - {5, 3, 5, 4, 0, -5}, /* 0x24 dollar */ - {7, 3, 5, 4, 0, -5}, /* 0x25 percent */ - {9, 3, 5, 4, 0, -5}, /* 0x26 ampersand */ - {11, 1, 2, 2, 0, -5}, /* 0x27 quotesingle */ - {12, 2, 5, 3, 0, -5}, /* 0x28 parenleft */ - {14, 2, 5, 3, 0, -5}, /* 0x29 parenright */ - {16, 3, 3, 4, 0, -5}, /* 0x2A asterisk */ - {18, 3, 3, 4, 0, -4}, /* 0x2B plus */ - {20, 2, 2, 3, 0, -2}, /* 0x2C comma */ - {21, 3, 1, 4, 0, -3}, /* 0x2D hyphen */ - {22, 1, 1, 2, 0, -1}, /* 0x2E period */ - {23, 3, 5, 4, 0, -5}, /* 0x2F slash */ - {25, 3, 5, 4, 0, -5}, /* 0x30 zero */ - {27, 2, 5, 3, 0, -5}, /* 0x31 one */ - {29, 3, 5, 4, 0, -5}, /* 0x32 two */ - {31, 3, 5, 4, 0, -5}, /* 0x33 three */ - {33, 3, 5, 4, 0, -5}, /* 0x34 four */ - {35, 3, 5, 4, 0, -5}, /* 0x35 five */ - {37, 3, 5, 4, 0, -5}, /* 0x36 six */ - {39, 3, 5, 4, 0, -5}, /* 0x37 seven */ - {41, 3, 5, 4, 0, -5}, /* 0x38 eight */ - {43, 3, 5, 4, 0, -5}, /* 0x39 nine */ - {45, 1, 3, 2, 0, -4}, /* 0x3A colon */ - {46, 2, 4, 3, 0, -4}, /* 0x3B semicolon */ - {47, 3, 5, 4, 0, -5}, /* 0x3C less */ - {49, 3, 3, 4, 0, -4}, /* 0x3D equal */ - {51, 3, 5, 4, 0, -5}, /* 0x3E greater */ - {53, 3, 5, 4, 0, -5}, /* 0x3F question */ - {55, 3, 5, 4, 0, -5}, /* 0x40 at */ - {57, 3, 5, 4, 0, -5}, /* 0x41 A */ - {59, 3, 5, 4, 0, -5}, /* 0x42 B */ - {61, 3, 5, 4, 0, -5}, /* 0x43 C */ - {63, 3, 5, 4, 0, -5}, /* 0x44 D */ - {65, 3, 5, 4, 0, -5}, /* 0x45 E */ - {67, 3, 5, 4, 0, -5}, /* 0x46 F */ - {69, 3, 5, 4, 0, -5}, /* 0x47 G */ - {71, 3, 5, 4, 0, -5}, /* 0x48 H */ - {73, 3, 5, 4, 0, -5}, /* 0x49 I */ - {75, 3, 5, 4, 0, -5}, /* 0x4A J */ - {77, 3, 5, 4, 0, -5}, /* 0x4B K */ - {79, 3, 5, 4, 0, -5}, /* 0x4C L */ - {81, 3, 5, 4, 0, -5}, /* 0x4D M */ - {83, 3, 5, 4, 0, -5}, /* 0x4E N */ - {85, 3, 5, 4, 0, -5}, /* 0x4F O */ - {87, 3, 5, 4, 0, -5}, /* 0x50 P */ - {89, 3, 5, 4, 0, -5}, /* 0x51 Q */ - {91, 3, 5, 4, 0, -5}, /* 0x52 R */ - {93, 3, 5, 4, 0, -5}, /* 0x53 S */ - {95, 3, 5, 4, 0, -5}, /* 0x54 T */ - {97, 3, 5, 4, 0, -5}, /* 0x55 U */ - {99, 3, 5, 4, 0, -5}, /* 0x56 V */ - {101, 3, 5, 4, 0, -5}, /* 0x57 W */ - {103, 3, 5, 4, 0, -5}, /* 0x58 X */ - {105, 3, 5, 4, 0, -5}, /* 0x59 Y */ - {107, 3, 5, 4, 0, -5}, /* 0x5A Z */ - {109, 3, 5, 4, 0, -5}, /* 0x5B bracketleft */ - {111, 3, 3, 4, 0, -4}, /* 0x5C backslash */ - {113, 3, 5, 4, 0, -5}, /* 0x5D bracketright */ - {115, 3, 2, 4, 0, -5}, /* 0x5E asciicircum */ - {116, 3, 1, 4, 0, -1}, /* 0x5F underscore */ - {117, 2, 2, 3, 0, -5}, /* 0x60 grave */ - {118, 3, 4, 4, 0, -4}, /* 0x61 a */ - {120, 3, 5, 4, 0, -5}, /* 0x62 b */ - {122, 3, 4, 4, 0, -4}, /* 0x63 c */ - {124, 3, 5, 4, 0, -5}, /* 0x64 d */ - {126, 3, 4, 4, 0, -4}, /* 0x65 e */ - {128, 3, 5, 4, 0, -5}, /* 0x66 f */ - {130, 3, 5, 4, 0, -4}, /* 0x67 g */ - {132, 3, 5, 4, 0, -5}, /* 0x68 h */ - {134, 1, 5, 2, 0, -5}, /* 0x69 i */ - {135, 3, 6, 4, 0, -5}, /* 0x6A j */ - {138, 3, 5, 4, 0, -5}, /* 0x6B k */ - {140, 3, 5, 4, 0, -5}, /* 0x6C l */ - {142, 3, 4, 4, 0, -4}, /* 0x6D m */ - {144, 3, 4, 4, 0, -4}, /* 0x6E n */ - {146, 3, 4, 4, 0, -4}, /* 0x6F o */ - {148, 3, 5, 4, 0, -4}, /* 0x70 p */ - {150, 3, 5, 4, 0, -4}, /* 0x71 q */ - {152, 3, 4, 4, 0, -4}, /* 0x72 r */ - {154, 3, 4, 4, 0, -4}, /* 0x73 s */ - {156, 3, 5, 4, 0, -5}, /* 0x74 t */ - {158, 3, 4, 4, 0, -4}, /* 0x75 u */ - {160, 3, 4, 4, 0, -4}, /* 0x76 v */ - {162, 3, 4, 4, 0, -4}, /* 0x77 w */ - {164, 3, 4, 4, 0, -4}, /* 0x78 x */ - {166, 3, 5, 4, 0, -4}, /* 0x79 y */ - {168, 3, 4, 4, 0, -4}, /* 0x7A z */ - {170, 3, 5, 4, 0, -5}, /* 0x7B braceleft */ - {172, 1, 5, 2, 0, -5}, /* 0x7C bar */ - {173, 3, 5, 4, 0, -5}, /* 0x7D braceright */ - {175, 3, 2, 4, 0, -5}, /* 0x7E asciitilde */ -#if (TOMTHUMB_USE_EXTENDED) - {176, 1, 5, 2, 0, -5}, /* 0xA1 exclamdown */ - {177, 3, 5, 4, 0, -5}, /* 0xA2 cent */ - {179, 3, 5, 4, 0, -5}, /* 0xA3 sterling */ - {181, 3, 5, 4, 0, -5}, /* 0xA4 currency */ - {183, 3, 5, 4, 0, -5}, /* 0xA5 yen */ - {185, 1, 5, 2, 0, -5}, /* 0xA6 brokenbar */ - {186, 3, 5, 4, 0, -5}, /* 0xA7 section */ - {188, 3, 1, 4, 0, -5}, /* 0xA8 dieresis */ - {189, 3, 3, 4, 0, -5}, /* 0xA9 copyright */ - {191, 3, 5, 4, 0, -5}, /* 0xAA ordfeminine */ - {193, 2, 3, 3, 0, -5}, /* 0xAB guillemotleft */ - {194, 3, 2, 4, 0, -4}, /* 0xAC logicalnot */ - {195, 2, 1, 3, 0, -3}, /* 0xAD softhyphen */ - {196, 3, 3, 4, 0, -5}, /* 0xAE registered */ - {198, 3, 1, 4, 0, -5}, /* 0xAF macron */ - {199, 3, 3, 4, 0, -5}, /* 0xB0 degree */ - {201, 3, 5, 4, 0, -5}, /* 0xB1 plusminus */ - {203, 3, 3, 4, 0, -5}, /* 0xB2 twosuperior */ - {205, 3, 3, 4, 0, -5}, /* 0xB3 threesuperior */ - {207, 2, 2, 3, 0, -5}, /* 0xB4 acute */ - {208, 3, 5, 4, 0, -5}, /* 0xB5 mu */ - {210, 3, 5, 4, 0, -5}, /* 0xB6 paragraph */ - {212, 3, 3, 4, 0, -4}, /* 0xB7 periodcentered */ - {214, 3, 3, 4, 0, -3}, /* 0xB8 cedilla */ - {216, 1, 3, 2, 0, -5}, /* 0xB9 onesuperior */ - {217, 3, 5, 4, 0, -5}, /* 0xBA ordmasculine */ - {219, 2, 3, 3, 0, -5}, /* 0xBB guillemotright */ - {220, 3, 5, 4, 0, -5}, /* 0xBC onequarter */ - {222, 3, 5, 4, 0, -5}, /* 0xBD onehalf */ - {224, 3, 5, 4, 0, -5}, /* 0xBE threequarters */ - {226, 3, 5, 4, 0, -5}, /* 0xBF questiondown */ - {228, 3, 5, 4, 0, -5}, /* 0xC0 Agrave */ - {230, 3, 5, 4, 0, -5}, /* 0xC1 Aacute */ - {232, 3, 5, 4, 0, -5}, /* 0xC2 Acircumflex */ - {234, 3, 5, 4, 0, -5}, /* 0xC3 Atilde */ - {236, 3, 5, 4, 0, -5}, /* 0xC4 Adieresis */ - {238, 3, 5, 4, 0, -5}, /* 0xC5 Aring */ - {240, 3, 5, 4, 0, -5}, /* 0xC6 AE */ - {242, 3, 6, 4, 0, -5}, /* 0xC7 Ccedilla */ - {245, 3, 5, 4, 0, -5}, /* 0xC8 Egrave */ - {247, 3, 5, 4, 0, -5}, /* 0xC9 Eacute */ - {249, 3, 5, 4, 0, -5}, /* 0xCA Ecircumflex */ - {251, 3, 5, 4, 0, -5}, /* 0xCB Edieresis */ - {253, 3, 5, 4, 0, -5}, /* 0xCC Igrave */ - {255, 3, 5, 4, 0, -5}, /* 0xCD Iacute */ - {257, 3, 5, 4, 0, -5}, /* 0xCE Icircumflex */ - {259, 3, 5, 4, 0, -5}, /* 0xCF Idieresis */ - {261, 3, 5, 4, 0, -5}, /* 0xD0 Eth */ - {263, 3, 5, 4, 0, -5}, /* 0xD1 Ntilde */ - {265, 3, 5, 4, 0, -5}, /* 0xD2 Ograve */ - {267, 3, 5, 4, 0, -5}, /* 0xD3 Oacute */ - {269, 3, 5, 4, 0, -5}, /* 0xD4 Ocircumflex */ - {271, 3, 5, 4, 0, -5}, /* 0xD5 Otilde */ - {273, 3, 5, 4, 0, -5}, /* 0xD6 Odieresis */ - {275, 3, 3, 4, 0, -4}, /* 0xD7 multiply */ - {277, 3, 5, 4, 0, -5}, /* 0xD8 Oslash */ - {279, 3, 5, 4, 0, -5}, /* 0xD9 Ugrave */ - {281, 3, 5, 4, 0, -5}, /* 0xDA Uacute */ - {283, 3, 5, 4, 0, -5}, /* 0xDB Ucircumflex */ - {285, 3, 5, 4, 0, -5}, /* 0xDC Udieresis */ - {287, 3, 5, 4, 0, -5}, /* 0xDD Yacute */ - {289, 3, 5, 4, 0, -5}, /* 0xDE Thorn */ - {291, 3, 6, 4, 0, -5}, /* 0xDF germandbls */ - {294, 3, 5, 4, 0, -5}, /* 0xE0 agrave */ - {296, 3, 5, 4, 0, -5}, /* 0xE1 aacute */ - {298, 3, 5, 4, 0, -5}, /* 0xE2 acircumflex */ - {300, 3, 5, 4, 0, -5}, /* 0xE3 atilde */ - {302, 3, 5, 4, 0, -5}, /* 0xE4 adieresis */ - {304, 3, 5, 4, 0, -5}, /* 0xE5 aring */ - {306, 3, 4, 4, 0, -4}, /* 0xE6 ae */ - {308, 3, 5, 4, 0, -4}, /* 0xE7 ccedilla */ - {310, 3, 5, 4, 0, -5}, /* 0xE8 egrave */ - {312, 3, 5, 4, 0, -5}, /* 0xE9 eacute */ - {314, 3, 5, 4, 0, -5}, /* 0xEA ecircumflex */ - {316, 3, 5, 4, 0, -5}, /* 0xEB edieresis */ - {318, 2, 5, 3, 0, -5}, /* 0xEC igrave */ - {320, 2, 5, 3, 0, -5}, /* 0xED iacute */ - {322, 3, 5, 4, 0, -5}, /* 0xEE icircumflex */ - {324, 3, 5, 4, 0, -5}, /* 0xEF idieresis */ - {326, 3, 5, 4, 0, -5}, /* 0xF0 eth */ - {328, 3, 5, 4, 0, -5}, /* 0xF1 ntilde */ - {330, 3, 5, 4, 0, -5}, /* 0xF2 ograve */ - {332, 3, 5, 4, 0, -5}, /* 0xF3 oacute */ - {334, 3, 5, 4, 0, -5}, /* 0xF4 ocircumflex */ - {336, 3, 5, 4, 0, -5}, /* 0xF5 otilde */ - {338, 3, 5, 4, 0, -5}, /* 0xF6 odieresis */ - {340, 3, 5, 4, 0, -5}, /* 0xF7 divide */ - {342, 3, 4, 4, 0, -4}, /* 0xF8 oslash */ - {344, 3, 5, 4, 0, -5}, /* 0xF9 ugrave */ - {346, 3, 5, 4, 0, -5}, /* 0xFA uacute */ - {348, 3, 5, 4, 0, -5}, /* 0xFB ucircumflex */ - {350, 3, 5, 4, 0, -5}, /* 0xFC udieresis */ - {352, 3, 6, 4, 0, -5}, /* 0xFD yacute */ - {355, 3, 5, 4, 0, -4}, /* 0xFE thorn */ - {357, 3, 6, 4, 0, -5}, /* 0xFF ydieresis */ - {360, 1, 1, 2, 0, -1}, /* 0x11D gcircumflex */ - {361, 3, 5, 4, 0, -5}, /* 0x152 OE */ - {363, 3, 4, 4, 0, -4}, /* 0x153 oe */ - {365, 3, 5, 4, 0, -5}, /* 0x160 Scaron */ - {367, 3, 5, 4, 0, -5}, /* 0x161 scaron */ - {369, 3, 5, 4, 0, -5}, /* 0x178 Ydieresis */ - {371, 3, 5, 4, 0, -5}, /* 0x17D Zcaron */ - {373, 3, 5, 4, 0, -5}, /* 0x17E zcaron */ - {375, 1, 1, 2, 0, -1}, /* 0xEA4 uni0EA4 */ - {376, 1, 1, 2, 0, -1}, /* 0x13A0 uni13A0 */ - {377, 1, 1, 2, 0, -3}, /* 0x2022 bullet */ - {378, 3, 1, 4, 0, -1}, /* 0x2026 ellipsis */ - {379, 3, 5, 4, 0, -5}, /* 0x20AC Euro */ - {381, 4, 5, 5, 0, -5}, /* 0xFFFD uniFFFD */ -#endif /* (TOMTHUMB_USE_EXTENDED) */ -}; - -const GFXfont TomThumb PROGMEM = {(uint8_t *)TomThumbBitmaps, - (GFXglyph *)TomThumbGlyphs, 0x20, 0x7E, 6}; diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/README.md b/studies/console/arduino/libraries/Adafruit_GFX_Library/README.md deleted file mode 100644 index 6f36460..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Adafruit GFX Library ![Build Status](https://github.com/adafruit/Adafruit-GFX-Library/workflows/Arduino%20Library%20CI/badge.svg) - -This is the core graphics library for all our displays, providing a common set of graphics primitives (points, lines, circles, etc.). It needs to be paired with a hardware-specific library for each display device we carry (to handle the lower-level functions). - -Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information. -All text above must be included in any redistribution. - -Recent Arduino IDE releases include the Library Manager for easy installation. Otherwise, to download, click the DOWNLOAD ZIP button, uncompress and rename the uncompressed folder Adafruit_GFX. Confirm that the Adafruit_GFX folder contains Adafruit_GFX.cpp and Adafruit_GFX.h. Place the Adafruit_GFX library folder your ArduinoSketchFolder/Libraries/ folder. You may need to create the Libraries subfolder if its your first library. Restart the IDE. - -**You will also need to install the latest Adafruit BusIO library.** Search for "Adafruit BusIO" in the library manager, or install by hand from https://github.com/adafruit/Adafruit_BusIO - -# Useful Resources - -- Image2Code: This is a handy Java GUI utility to convert a BMP file into the array code necessary to display the image with the drawBitmap function. Check out the code at ehubin's GitHub repository: https://github.com/ehubin/Adafruit-GFX-Library/tree/master/Img2Code - -- drawXBitmap function: You can use the GIMP photo editor to save a .xbm file and use the array saved in the file to draw a bitmap with the drawXBitmap function. See the pull request here for more details: https://github.com/adafruit/Adafruit-GFX-Library/pull/31 - -- 'Fonts' folder contains bitmap fonts for use with recent (1.1 and later) Adafruit_GFX. To use a font in your Arduino sketch, \#include the corresponding .h file and pass address of GFXfont struct to setFont(). Pass NULL to revert to 'classic' fixed-space bitmap font. - -- 'fontconvert' folder contains a command-line tool for converting TTF fonts to Adafruit_GFX header format. - -- You can also use [this GFX Font Customiser tool](https://github.com/tchapi/Adafruit-GFX-Font-Customiser) (_web version [here](https://tchapi.github.io/Adafruit-GFX-Font-Customiser/)_) to customize or correct the output from [fontconvert](https://github.com/adafruit/Adafruit-GFX-Library/tree/master/fontconvert), and create fonts with only a subset of characters to optimize size. - ---- - -### Roadmap - -The PRIME DIRECTIVE is to maintain backward compatibility with existing Arduino sketches -- many are hosted elsewhere and don't track changes here, some are in print and can never be changed! This "little" library has grown organically over time and sometimes we paint ourselves into a design corner and just have to live with it or add progressively more ungainly workarounds. - -**We are grateful for everyone's contributions, but pull requests for the following will NOT be merged:** - -- Additional or incompatible font formats (see Prime Directive above). There are already two formats and the code is quite bloaty there as it is. This also creates liabilities for tools and documentation. What's there isn't perfect but it does the job. - -- Additional or incompatible bitmap formats, for similar reasons. It's getting messy. - -- Adding background color to custom fonts to erase prior screen contents. The ONLY acceptable methods are to clear the area with a filled rect, or (to avoid flicker) draw text into a GFXcanvas1 and copy to screen with drawBitmap() w/background color. This is on purpose and by design. We've discussed this. Glyphs can overlap. - -- Scrolling, whether hardware- or software-based. Such implementations tend to rely on hardware-specific features (not universally available), read access to the screen's framebuffer (ditto) and/or the addition of virtual functions in GFX which them must be added in *every* subclass, of which there are many. The GFX API is largely "set" at this point and this is just a limitation we live with now. - -- Please don't reformat code for the sake of reformatting code. The resulting large "visual diff" makes it impossible to untangle actual bug fixes from merely rearranged lines. clang-format will be the final arbiter. - -- Please no more pentagram-drawing PRs. Any oddly-specific drawing functions can go in your own code and aren't helpful in a library context. - -If you *must* have one of these features, consider creating a fork with the features required for your project...it's easy to keep synced with the upstream code. diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/component.mk b/studies/console/arduino/libraries/Adafruit_GFX_Library/component.mk deleted file mode 100644 index 049f190..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/component.mk +++ /dev/null @@ -1 +0,0 @@ -COMPONENT_ADD_INCLUDEDIRS = . diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvas.ino b/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvas.ino deleted file mode 100644 index d4e3370..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvas.ino +++ /dev/null @@ -1,113 +0,0 @@ -/*** -This example is intended to demonstrate the use of getPixel() versus -getRawPixel() and the fast horizontal and vertical drawing routines -in the GFXcanvas family of classes, - -When using the GFXcanvas* classes as the image buffer for a hardware driver, -there is a need to get individual pixel color values at given physical -coordinates. Rather than subclasses or client classes call getBuffer() and -reinterpret the byte layout of the buffer, two methods are added to each of the -GFXcanvas* classes that allow fetching of specific pixel values. - - * getPixel(x, y) : Gets the pixel color value at the rotated coordinates in -the image. - * getRawPixel(x,y) : Gets the pixel color value at the unrotated coordinates -in the image. This is useful for getting the pixel value to map to a hardware -pixel location. This method was made protected as only the hardware driver -should be accessing it. - -The GFXcanvas*SerialDemo classes in this example will print to Serial the -contents of the underlying GFXcanvas buffer in both the current rotated layout -and the underlying physical layout. -***/ - -#include "GFXcanvasSerialDemo.h" -#include - -void setup() { - Serial.begin(115200); - - // first create a rectangular GFXcanvas8SerialDemo object and draw to it - GFXcanvas8SerialDemo demo8(21, 11); - - demo8.fillScreen(0x00); - demo8.setRotation(1); // now canvas is 11x21 - demo8.fillCircle(5, 10, 5, 0xAA); - demo8.writeFastHLine(0, 0, 11, 0x11); - demo8.writeFastHLine(10, 10, -11, 0x22); - demo8.writeFastHLine(0, 20, 11, 0x33); - demo8.writeFastVLine(0, 0, 21, 0x44); - demo8.writeFastVLine(10, 20, -21, 0x55); - - Serial.println("Demonstrating GFXcanvas rotated and raw pixels.\n"); - - // print it out rotated - - Serial.println("The canvas's content in the rotation of '0':\n"); - demo8.setRotation(0); - demo8.print(true); - Serial.println("\n"); - - Serial.println("The canvas's content in the rotation of '1' (which is what " - "it was drawn in):\n"); - demo8.setRotation(1); - demo8.print(true); - Serial.println("\n"); - - Serial.println("The canvas's content in the rotation of '2':\n"); - demo8.setRotation(2); - demo8.print(true); - Serial.println("\n"); - - Serial.println("The canvas's content in the rotation of '3':\n"); - demo8.setRotation(3); - demo8.print(true); - Serial.println("\n"); - - // print it out unrotated - Serial.println("The canvas's content in it's raw, physical layout:\n"); - demo8.print(false); - Serial.println("\n"); - - // Demonstrate GFXcanvas1SerialDemo - - GFXcanvas1SerialDemo demo1(21, 11); - demo1.fillScreen(0); - demo1.setRotation(0); - demo1.writeFastHLine(0, 0, 9, 1); - demo1.setRotation(1); - demo1.writeFastHLine(0, 0, 9, 1); - demo1.setRotation(2); - demo1.writeFastHLine(0, 0, 9, 1); - demo1.setRotation(3); - demo1.writeFastHLine(0, 0, 9, 1); - demo1.setRotation(1); - demo1.fillRect(3, 8, 5, 5, 1); - - Serial.println("\nThe GFXcanvas1 raw content after drawing a fast horizontal " - "line in each rotation:\n"); - demo1.print(false); - Serial.println("\n"); - - // Demonstrate GFXcanvas16SerialDemo - - GFXcanvas16SerialDemo demo16(21, 11); - demo16.fillScreen(0); - demo16.setRotation(0); - demo16.writeFastHLine(0, 0, 9, 0x1111); - demo16.setRotation(1); - demo16.writeFastHLine(0, 0, 9, 0x2222); - demo16.setRotation(2); - demo16.writeFastHLine(0, 0, 9, 0x3333); - demo16.setRotation(3); - demo16.writeFastHLine(0, 0, 9, 0x4444); - demo16.setRotation(1); - demo16.fillRect(3, 8, 5, 5, 0x8888); - - Serial.println("\nThe GFXcanvas16 raw content after drawing a fast " - "horizontal line in each rotation:\n"); - demo16.print(false); - Serial.println("\n"); -} - -void loop() {} diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.cpp b/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.cpp deleted file mode 100644 index ed83a96..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include "GFXcanvasSerialDemo.h" -#include - -GFXcanvas1SerialDemo::GFXcanvas1SerialDemo(uint16_t w, uint16_t h) - : GFXcanvas1(w, h) {} - -void GFXcanvas1SerialDemo::print(bool rotated) { - char pixel_buffer[8]; - uint16_t width, height; - - if (rotated) { - width = this->width(); - height = this->height(); - } else { - width = this->WIDTH; - height = this->HEIGHT; - } - - for (uint16_t y = 0; y < height; y++) { - for (uint16_t x = 0; x < width; x++) { - bool pixel; - if (rotated) { - pixel = this->getPixel(x, y); - } else { - pixel = this->getRawPixel(x, y); - } - sprintf(pixel_buffer, " %d", pixel); - Serial.print(pixel_buffer); - } - Serial.print("\n"); - } -} - -GFXcanvas8SerialDemo::GFXcanvas8SerialDemo(uint16_t w, uint16_t h) - : GFXcanvas8(w, h) {} - -void GFXcanvas8SerialDemo::print(bool rotated) { - char pixel_buffer[8]; - uint16_t width, height; - - if (rotated) { - width = this->width(); - height = this->height(); - } else { - width = this->WIDTH; - height = this->HEIGHT; - } - - for (uint16_t y = 0; y < height; y++) { - for (uint16_t x = 0; x < width; x++) { - uint8_t pixel; - if (rotated) { - pixel = this->getPixel(x, y); - } else { - pixel = this->getRawPixel(x, y); - } - sprintf(pixel_buffer, " %02x", pixel); - Serial.print(pixel_buffer); - } - Serial.print("\n"); - } -} - -GFXcanvas16SerialDemo::GFXcanvas16SerialDemo(uint16_t w, uint16_t h) - : GFXcanvas16(w, h) {} - -void GFXcanvas16SerialDemo::print(bool rotated) { - char pixel_buffer[8]; - uint16_t width, height; - - if (rotated) { - width = this->width(); - height = this->height(); - } else { - width = this->WIDTH; - height = this->HEIGHT; - } - - for (uint16_t y = 0; y < height; y++) { - for (uint16_t x = 0; x < width; x++) { - uint16_t pixel; - if (rotated) { - pixel = this->getPixel(x, y); - } else { - pixel = this->getRawPixel(x, y); - } - sprintf(pixel_buffer, " %04x", pixel); - Serial.print(pixel_buffer); - } - Serial.print("\n"); - } -} diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.h deleted file mode 100644 index 80589d9..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/GFXcanvas/GFXcanvasSerialDemo.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef __GFXcanvasSerialDemo__ -#define __GFXcanvasSerialDemo__ -#include - -/**********************************************************************/ -/*! - @brief Demonstrates using the GFXconvas classes as the backing store - for a device driver. -*/ -/**********************************************************************/ -class GFXcanvas1SerialDemo : public GFXcanvas1 { -public: - GFXcanvas1SerialDemo(uint16_t w, uint16_t h); - - /**********************************************************************/ - /*! - @brief Prints the current contents of the canvas to Serial - @param rotated true to print according to the current GFX rotation, - false to print to the native rotation of the canvas (or unrotated). - */ - /**********************************************************************/ - void print(bool rotated); -}; - -/**********************************************************************/ -/*! - @brief Demonstrates using the GFXconvas classes as the backing store - for a device driver. -*/ -/**********************************************************************/ -class GFXcanvas8SerialDemo : public GFXcanvas8 { -public: - GFXcanvas8SerialDemo(uint16_t w, uint16_t h); - - /**********************************************************************/ - /*! - @brief Prints the current contents of the canvas to Serial - @param rotated true to print according to the current GFX rotation, - false to print to the native rotation of the canvas (or unrotated). - */ - /**********************************************************************/ - void print(bool rotated); -}; - -/**********************************************************************/ -/*! - @brief Demonstrates using the GFXconvas classes as the backing store - for a device driver. -*/ -/**********************************************************************/ -class GFXcanvas16SerialDemo : public GFXcanvas16 { -public: - GFXcanvas16SerialDemo(uint16_t w, uint16_t h); - - /**********************************************************************/ - /*! - @brief Prints the current contents of the canvas to Serial - @param rotated true to print according to the current GFX rotation, - false to print to the native rotation of the canvas (or unrotated). - */ - /**********************************************************************/ - void print(bool rotated); -}; - -#endif // __GFXcanvasSerialDemo__ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/mock_ili9341/mock_ili9341.ino b/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/mock_ili9341/mock_ili9341.ino deleted file mode 100644 index d141839..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/examples/mock_ili9341/mock_ili9341.ino +++ /dev/null @@ -1,365 +0,0 @@ -/*************************************************** - This is our GFX example for the Adafruit ILI9341 Breakout and Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - - -#include "SPI.h" -#include "Adafruit_GFX.h" -#include "Adafruit_ILI9341.h" - -// For the Adafruit shield, these are the default. -#define TFT_DC 9 -#define TFT_CS 10 - -// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); -// If using the breakout, change pins as desired -//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); - -void setup() { - Serial.begin(9600); - Serial.println("ILI9341 Test!"); - - tft.begin(); - - // read diagnostics (optional but can help debug problems) - uint8_t x = tft.readcommand8(ILI9341_RDMODE); - Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDMADCTL); - Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDPIXFMT); - Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDIMGFMT); - Serial.print("Image Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDSELFDIAG); - Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); - - Serial.println(F("Benchmark Time (microseconds)")); - delay(10); - Serial.print(F("Screen fill ")); - Serial.println(testFillScreen()); - delay(500); - - Serial.print(F("Text ")); - Serial.println(testText()); - delay(3000); - - Serial.print(F("Lines ")); - Serial.println(testLines(ILI9341_CYAN)); - delay(500); - - Serial.print(F("Horiz/Vert Lines ")); - Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); - delay(500); - - Serial.print(F("Rectangles (outline) ")); - Serial.println(testRects(ILI9341_GREEN)); - delay(500); - - Serial.print(F("Rectangles (filled) ")); - Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); - delay(500); - - Serial.print(F("Circles (filled) ")); - Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); - - Serial.print(F("Circles (outline) ")); - Serial.println(testCircles(10, ILI9341_WHITE)); - delay(500); - - Serial.print(F("Triangles (outline) ")); - Serial.println(testTriangles()); - delay(500); - - Serial.print(F("Triangles (filled) ")); - Serial.println(testFilledTriangles()); - delay(500); - - Serial.print(F("Rounded rects (outline) ")); - Serial.println(testRoundRects()); - delay(500); - - Serial.print(F("Rounded rects (filled) ")); - Serial.println(testFilledRoundRects()); - delay(500); - - Serial.println(F("Done!")); - -} - - -void loop(void) { - for(uint8_t rotation=0; rotation<4; rotation++) { - tft.setRotation(rotation); - testText(); - delay(1000); - } -} - -unsigned long testFillScreen() { - unsigned long start = micros(); - tft.fillScreen(ILI9341_BLACK); - yield(); - tft.fillScreen(ILI9341_RED); - yield(); - tft.fillScreen(ILI9341_GREEN); - yield(); - tft.fillScreen(ILI9341_BLUE); - yield(); - tft.fillScreen(ILI9341_BLACK); - yield(); - return micros() - start; -} - -unsigned long testText() { - tft.fillScreen(ILI9341_BLACK); - unsigned long start = micros(); - tft.setCursor(0, 0); - tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); - tft.println(1234.56); - tft.setTextColor(ILI9341_RED); tft.setTextSize(3); - tft.println(0xDEADBEEF, HEX); - tft.println(); - tft.setTextColor(ILI9341_GREEN); - tft.setTextSize(5); - tft.println("Groop"); - tft.setTextSize(2); - tft.println("I implore thee,"); - tft.setTextSize(1); - tft.println("my foonting turlingdromes."); - tft.println("And hooptiously drangle me"); - tft.println("with crinkly bindlewurdles,"); - tft.println("Or I will rend thee"); - tft.println("in the gobberwarts"); - tft.println("with my blurglecruncheon,"); - tft.println("see if I don't!"); - return micros() - start; -} - -unsigned long testLines(uint16_t color) { - unsigned long start, t; - int x1, y1, x2, y2, - w = tft.width(), - h = tft.height(); - - tft.fillScreen(ILI9341_BLACK); - yield(); - - x1 = y1 = 0; - y2 = h - 1; - start = micros(); - for(x2=0; x20; i-=6) { - i2 = i / 2; - start = micros(); - tft.fillRect(cx-i2, cy-i2, i, i, color1); - t += micros() - start; - // Outlines are not included in timing results - tft.drawRect(cx-i2, cy-i2, i, i, color2); - yield(); - } - - return t; -} - -unsigned long testFilledCircles(uint8_t radius, uint16_t color) { - unsigned long start; - int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; - - tft.fillScreen(ILI9341_BLACK); - start = micros(); - for(x=radius; x10; i-=5) { - start = micros(); - tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(0, i*10, i*10)); - t += micros() - start; - tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(i*10, i*10, 0)); - yield(); - } - - return t; -} - -unsigned long testRoundRects() { - unsigned long start; - int w, i, i2, - cx = tft.width() / 2 - 1, - cy = tft.height() / 2 - 1; - - tft.fillScreen(ILI9341_BLACK); - w = min(tft.width(), tft.height()); - start = micros(); - for(i=0; i20; i-=6) { - i2 = i / 2; - tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); - yield(); - } - - return micros() - start; -} diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/Makefile b/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/Makefile deleted file mode 100644 index 47f5a0e..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -all: fontconvert - -CC = gcc -CFLAGS = -Wall -I/usr/local/include/freetype2 -I/usr/include/freetype2 -I/usr/include -LIBS = -lfreetype - -fontconvert: fontconvert.c - $(CC) $(CFLAGS) $< $(LIBS) -o $@ - strip $@ - -clean: - rm -f fontconvert diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/bdf2adafruit.py b/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/bdf2adafruit.py deleted file mode 100644 index 9d9ee8a..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/bdf2adafruit.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/python2 - -# MIT License. - -# Copyright (c) 2016 William Skellenger -# -# 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. - -# This small script is designed to mostly take a BDF file and convert it to a -# format that can largely be cut/pasted as an Adafruit-format font. -# It was written in an hour or so and did what I needed it to do. -# I used it for one file. Maybe it bombs on other files. -# William Skellenger, Feb 2016 -# (email: williamj@skellenger.net) -# (Twitter: @skelliam) -# -# Usage: bdf2adafruit.py > out.txt -# -# Once you have out.txt you can cut/paste the contents into a new font -# header file as part of the Adafruit GFX library. - -import sys - -myfile = open(sys.argv[1]) - -processing = 0 -getting_rows = 0 - -chars = [] -bitmapData = [] - -class Glyph: - encoding = -1 - rows = [] - comment = "" - offset = -1 - width = 0 - height = 0 - advance = 0 - xoffs = 0 - yoffs = 0 - def __init__(self, comment): - self.comment = comment - self.rows = [] - -for line in myfile.readlines(): - if 'STARTCHAR' in line: - processing = 1 - vals = line.split() - g = Glyph(vals[1]) - #g.width = 8 #in this example always 8 bits wide - elif 'ENDCHAR' in line: - dataByteCompressed = 0 - dataByteCompressedIndex = 8 - g.height = len(bitmapData) - for value in bitmapData: - bitIndex = 0 - while bitIndex < g.width: - bit = (value >> (7 - bitIndex)) & 0x01 - dataByteCompressed |= bit << (dataByteCompressedIndex - 1) - dataByteCompressedIndex -= 1 - if dataByteCompressedIndex == 0: - dataByteCompressedIndex = 8 - g.rows.append(dataByteCompressed) - dataByteCompressed = 0 - bitIndex += 1 - if 8 != dataByteCompressedIndex: - g.rows.append(dataByteCompressed) - - chars.append(g) #append the completed glyph into list - processing = 0 - getting_rows = 0 - bitmapData.clear() - - if processing: - if 'ENCODING' in line: - vals = line.split() - g.encoding = int(vals[1]) - elif 'DWIDTH' in line: - vals = line.split() - #g.advance = int(vals[1]) #cursor advance seems to be the first number in DWIDTH - elif 'BBX' in line: - vals = line.split() - g.xoffs = 0 - g.yoffs = -(int(vals[2]) + int(vals[4])) - g.advance = (int(vals[1]) + 1) #x bounding box + 1 - g.width = int(vals[1]) - elif 'BITMAP' in line: - getting_rows = 1 - elif getting_rows: - #g.rows.append(int(line, 16)) #append pixel rows into glyph's list of rows - bitmapData.append(int(line, 16)) - -print - -i=0 -for char in chars: - char.offset = i - print("\t", end='') - num = 3 - for row in char.rows: - if num != 3: - print(" ", end = '') - print("0x%02X," %(row), end = ''), - i+=1 - num-=1 - - if num == 1: - print("\t\t", end = '') - if num == 2: - print("\t\t\t", end = '') - print("\t/* 0x%02X %s */" %(char.encoding, char.comment)) - -for char in chars: - # offset, bit-width, bit-height, advance cursor, x offset, y offset - print("\t{ %d, %d, %d, %d, %d, %d }, /* 0x%02X %s */" %( - char.offset, char.width, char.height, - char.advance, char.xoffs, char.yoffs, - char.encoding, char.comment)) diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert.c b/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert.c deleted file mode 100644 index 302d1da..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert.c +++ /dev/null @@ -1,291 +0,0 @@ -/* -TrueType to Adafruit_GFX font converter. Derived from Peter Jakobs' -Adafruit_ftGFX fork & makefont tool, and Paul Kourany's Adafruit_mfGFX. - -NOT AN ARDUINO SKETCH. This is a command-line tool for preprocessing -fonts to be used with the Adafruit_GFX Arduino library. - -For UNIX-like systems. Outputs to stdout; redirect to header file, e.g.: - ./fontconvert ~/Library/Fonts/FreeSans.ttf 18 > FreeSans18pt7b.h - -REQUIRES FREETYPE LIBRARY. www.freetype.org - -Currently this only extracts the printable 7-bit ASCII chars of a font. -Will eventually extend with some int'l chars a la ftGFX, not there yet. -Keep 7-bit fonts around as an option in that case, more compact. - -See notes at end for glyph nomenclature & other tidbits. -*/ -#ifndef ARDUINO - -#include -#include -#include -#include -#include FT_GLYPH_H -#include FT_MODULE_H -#include FT_TRUETYPE_DRIVER_H -#include "../gfxfont.h" // Adafruit_GFX font structures - -#define DPI 141 // Approximate res. of Adafruit 2.8" TFT - -// Accumulate bits for output, with periodic hexadecimal byte write -void enbit(uint8_t value) { - static uint8_t row = 0, sum = 0, bit = 0x80, firstCall = 1; - if (value) - sum |= bit; // Set bit if needed - if (!(bit >>= 1)) { // Advance to next bit, end of byte reached? - if (!firstCall) { // Format output table nicely - if (++row >= 12) { // Last entry on line? - printf(",\n "); // Newline format output - row = 0; // Reset row counter - } else { // Not end of line - printf(", "); // Simple comma delim - } - } - printf("0x%02X", sum); // Write byte value - sum = 0; // Clear for next byte - bit = 0x80; // Reset bit counter - firstCall = 0; // Formatting flag - } -} - -int main(int argc, char *argv[]) { - int i, j, err, size, first = ' ', last = '~', bitmapOffset = 0, x, y, byte; - char *fontName, c, *ptr; - FT_Library library; - FT_Face face; - FT_Glyph glyph; - FT_Bitmap *bitmap; - FT_BitmapGlyphRec *g; - GFXglyph *table; - uint8_t bit; - - // Parse command line. Valid syntaxes are: - // fontconvert [filename] [size] - // fontconvert [filename] [size] [last char] - // fontconvert [filename] [size] [first char] [last char] - // Unless overridden, default first and last chars are - // ' ' (space) and '~', respectively - - if (argc < 3) { - fprintf(stderr, "Usage: %s fontfile size [first] [last]\n", argv[0]); - return 1; - } - - size = atoi(argv[2]); - - if (argc == 4) { - last = atoi(argv[3]); - } else if (argc == 5) { - first = atoi(argv[3]); - last = atoi(argv[4]); - } - - if (last < first) { - i = first; - first = last; - last = i; - } - - ptr = strrchr(argv[1], '/'); // Find last slash in filename - if (ptr) - ptr++; // First character of filename (path stripped) - else - ptr = argv[1]; // No path; font in local dir. - - // Allocate space for font name and glyph table - if ((!(fontName = malloc(strlen(ptr) + 20))) || - (!(table = (GFXglyph *)malloc((last - first + 1) * sizeof(GFXglyph))))) { - fprintf(stderr, "Malloc error\n"); - return 1; - } - - // Derive font table names from filename. Period (filename - // extension) is truncated and replaced with the font size & bits. - strcpy(fontName, ptr); - ptr = strrchr(fontName, '.'); // Find last period (file ext) - if (!ptr) - ptr = &fontName[strlen(fontName)]; // If none, append - // Insert font size and 7/8 bit. fontName was alloc'd w/extra - // space to allow this, we're not sprintfing into Forbidden Zone. - sprintf(ptr, "%dpt%db", size, (last > 127) ? 8 : 7); - // Space and punctuation chars in name replaced w/ underscores. - for (i = 0; (c = fontName[i]); i++) { - if (isspace(c) || ispunct(c)) - fontName[i] = '_'; - } - - // Init FreeType lib, load font - if ((err = FT_Init_FreeType(&library))) { - fprintf(stderr, "FreeType init error: %d", err); - return err; - } - - // Use TrueType engine version 35, without subpixel rendering. - // This improves clarity of fonts since this library does not - // support rendering multiple levels of gray in a glyph. - // See https://github.com/adafruit/Adafruit-GFX-Library/issues/103 - FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; - FT_Property_Set(library, "truetype", "interpreter-version", - &interpreter_version); - - if ((err = FT_New_Face(library, argv[1], 0, &face))) { - fprintf(stderr, "Font load error: %d", err); - FT_Done_FreeType(library); - return err; - } - - // << 6 because '26dot6' fixed-point format - FT_Set_Char_Size(face, size << 6, 0, DPI, 0); - - // Currently all symbols from 'first' to 'last' are processed. - // Fonts may contain WAY more glyphs than that, but this code - // will need to handle encoding stuff to deal with extracting - // the right symbols, and that's not done yet. - // fprintf(stderr, "%ld glyphs\n", face->num_glyphs); - - printf("const uint8_t %sBitmaps[] PROGMEM = {\n ", fontName); - - // Process glyphs and output huge bitmap data array - for (i = first, j = 0; i <= last; i++, j++) { - // MONO renderer provides clean image with perfect crop - // (no wasted pixels) via bitmap struct. - if ((err = FT_Load_Char(face, i, FT_LOAD_TARGET_MONO))) { - fprintf(stderr, "Error %d loading char '%c'\n", err, i); - continue; - } - - if ((err = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_MONO))) { - fprintf(stderr, "Error %d rendering char '%c'\n", err, i); - continue; - } - - if ((err = FT_Get_Glyph(face->glyph, &glyph))) { - fprintf(stderr, "Error %d getting glyph '%c'\n", err, i); - continue; - } - - bitmap = &face->glyph->bitmap; - g = (FT_BitmapGlyphRec *)glyph; - - // Minimal font and per-glyph information is stored to - // reduce flash space requirements. Glyph bitmaps are - // fully bit-packed; no per-scanline pad, though end of - // each character may be padded to next byte boundary - // when needed. 16-bit offset means 64K max for bitmaps, - // code currently doesn't check for overflow. (Doesn't - // check that size & offsets are within bounds either for - // that matter...please convert fonts responsibly.) - table[j].bitmapOffset = bitmapOffset; - table[j].width = bitmap->width; - table[j].height = bitmap->rows; - table[j].xAdvance = face->glyph->advance.x >> 6; - table[j].xOffset = g->left; - table[j].yOffset = 1 - g->top; - - for (y = 0; y < bitmap->rows; y++) { - for (x = 0; x < bitmap->width; x++) { - byte = x / 8; - bit = 0x80 >> (x & 7); - enbit(bitmap->buffer[y * bitmap->pitch + byte] & bit); - } - } - - // Pad end of char bitmap to next byte boundary if needed - int n = (bitmap->width * bitmap->rows) & 7; - if (n) { // Pixel count not an even multiple of 8? - n = 8 - n; // # bits to next multiple - while (n--) - enbit(0); - } - bitmapOffset += (bitmap->width * bitmap->rows + 7) / 8; - - FT_Done_Glyph(glyph); - } - - printf(" };\n\n"); // End bitmap array - - // Output glyph attributes table (one per character) - printf("const GFXglyph %sGlyphs[] PROGMEM = {\n", fontName); - for (i = first, j = 0; i <= last; i++, j++) { - printf(" { %5d, %3d, %3d, %3d, %4d, %4d }", table[j].bitmapOffset, - table[j].width, table[j].height, table[j].xAdvance, table[j].xOffset, - table[j].yOffset); - if (i < last) { - printf(", // 0x%02X", i); - if ((i >= ' ') && (i <= '~')) { - printf(" '%c'", i); - } - putchar('\n'); - } - } - printf(" }; // 0x%02X", last); - if ((last >= ' ') && (last <= '~')) - printf(" '%c'", last); - printf("\n\n"); - - // Output font structure - printf("const GFXfont %s PROGMEM = {\n", fontName); - printf(" (uint8_t *)%sBitmaps,\n", fontName); - printf(" (GFXglyph *)%sGlyphs,\n", fontName); - if (face->size->metrics.height == 0) { - // No face height info, assume fixed width and get from a glyph. - printf(" 0x%02X, 0x%02X, %d };\n\n", first, last, table[0].height); - } else { - printf(" 0x%02X, 0x%02X, %ld };\n\n", first, last, - face->size->metrics.height >> 6); - } - printf("// Approx. %d bytes\n", bitmapOffset + (last - first + 1) * 7 + 7); - // Size estimate is based on AVR struct and pointer sizes; - // actual size may vary. - - FT_Done_FreeType(library); - - return 0; -} - -/* ------------------------------------------------------------------------- - -Character metrics are slightly different from classic GFX & ftGFX. -In classic GFX: cursor position is the upper-left pixel of each 5x7 -character; lower extent of most glyphs (except those w/descenders) -is +6 pixels in Y direction. -W/new GFX fonts: cursor position is on baseline, where baseline is -'inclusive' (containing the bottom-most row of pixels in most symbols, -except those with descenders; ftGFX is one pixel lower). - -Cursor Y will be moved automatically when switching between classic -and new fonts. If you switch fonts, any print() calls will continue -along the same baseline. - - ...........#####.. -- yOffset - ..........######.. - ..........######.. - .........#######.. - ........#########. - * = Cursor pos. ........#########. - .......##########. - ......#####..####. - ......#####..####. - *.#.. .....#####...####. - .#.#. ....############## - #...# ...############### - #...# ...############### - ##### ..#####......##### - #...# .#####.......##### -====== #...# ====== #*###.........#### ======= Baseline - || xOffset - -glyph->xOffset and yOffset are pixel offsets, in GFX coordinate space -(+Y is down), from the cursor position to the top-left pixel of the -glyph bitmap. i.e. yOffset is typically negative, xOffset is typically -zero but a few glyphs will have other values (even negative xOffsets -sometimes, totally normal). glyph->xAdvance is the distance to move -the cursor on the X axis after drawing the corresponding symbol. - -There's also some changes with regard to 'background' color and new GFX -fonts (classic fonts unchanged). See Adafruit_GFX.cpp for explanation. -*/ - -#endif /* !ARDUINO */ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert_win.md b/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert_win.md deleted file mode 100644 index 1932841..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/fontconvert_win.md +++ /dev/null @@ -1,88 +0,0 @@ -### A short guide to use fontconvert.c to create your own fonts using MinGW. - -#### STEP 1: INSTALL MinGW - -Install MinGW (Minimalist GNU for Windows) from [MinGW.org](http://www.mingw.org/). -Please read carefully the instructions found on [Getting started page](http://www.mingw.org/wiki/Getting_Started). -I suggest installing with the "Graphical User Interface Installer". -To complete your initial installation you should further install some "packages". -For our purpose you should only install the "Basic Setup" packages. -To do that: - -1. Open the MinGW Installation Manager -2. From the left panel click "Basic Setup". -3. On the right panel choose "mingw32-base", "mingw-gcc-g++", "mingw-gcc-objc" and "msys-base" -and click "Mark for installation" -4. From the Menu click "Installation" and then "Apply changes". In the pop-up window select "Apply". - - -#### STEP 2: INSTALL Freetype Library - -To read about the freetype project visit [freetype.org](https://www.freetype.org/). -To Download the latest version of freetype go to [download page](http://download.savannah.gnu.org/releases/freetype/) -and choose "freetype-2.7.tar.gz" file (or a newer version if available). -To avoid long cd commands later in the command prompt, I suggest you unzip the file in the C:\ directory. -(I also renamed the folder to "ft27") -Before you build the library it's good to read these articles: -* [Using MSYS with MinGW](http://www.mingw.org/wiki/MSYS) -* [Installation and Use of Supplementary Libraries with MinGW](http://www.mingw.org/wiki/LibraryPathHOWTO) -* [Include Path](http://www.mingw.org/wiki/IncludePathHOWTO) - -Inside the unzipped folder there is another folder named "docs". Open it and read the INSTALL.UNIX (using notepad). -Pay attention to paragraph 3 (Build and Install the Library). So, let's begin the installation. -To give the appropriate commands we will use the MSYS command prompt (not cmd.exe of windows) which is UNIX like. -Follow the path C:\MinGW\msys\1.0 and double click "msys.bat". The command prompt environment appears. -Enter "ft27" directory using the cd commands: -``` -cd /c -cd ft27 -``` - -and then type one by one the commands: -``` -./configure --prefix=/mingw -make -make install -``` -Once you're finished, go inside "C:\MinGW\include" and there should be a new folder named "freetype2". -That, hopefully, means that you have installed the library correctly !! - -#### STEP 3: Build fontconvert.c - -Before proceeding I suggest you make a copy of Adafruit_GFX_library folder in C:\ directory. -Then, inside "fontconvert" folder open the "makefile" with an editor ( I used notepad++). -Change the commands so in the end the program looks like : -``` -all: fontconvert - -CC = gcc -CFLAGS = -Wall -I c:/mingw/include/freetype2 -LIBS = -lfreetype - -fontconvert: fontconvert.c - $(CC) $(CFLAGS) $< $(LIBS) -o $@ - -clean: - rm -f fontconvert -``` -Go back in the command prompt and with a cd command enter the fontconvert directory. -``` -cd /c/adafruit_gfx_library\fontconvert -``` -Give the command: -``` -make -``` -This command will, eventually, create a "fontconvert.exe" file inside fontconvert directory. - -#### STEP 4: Create your own font header files - -Now that you have an executable file, you can use it to create your own fonts to work with Adafruit GFX lib. -So, if we suppose that you already have a .ttf file with your favorite fonts, jump to the command prompt and type: -``` -./fontconvert yourfonts.ttf 9 > yourfonts9pt7b.h -``` -You can read more details at: [learn.adafruit](https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts). - -Taraaaaaammm !! you've just created your new font header file. Put it inside the "Fonts" folder, grab a cup of coffee -and start playing with your Arduino (or whatever else ....)+ display module project. diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/makefonts.sh b/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/makefonts.sh deleted file mode 100755 index 35f07ea..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/fontconvert/makefonts.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Ugly little Bash script, generates a set of .h files for GFX using -# GNU FreeFont sources. There are three fonts: 'Mono' (Courier-like), -# 'Sans' (Helvetica-like) and 'Serif' (Times-like); four styles: regular, -# bold, oblique or italic, and bold+oblique or bold+italic; and four -# sizes: 9, 12, 18 and 24 point. No real error checking or anything, -# this just powers through all the combinations, calling the fontconvert -# utility and redirecting the output to a .h file for each combo. - -# Adafruit_GFX repository does not include the source outline fonts -# (huge zipfile, different license) but they're easily acquired: -# http://savannah.gnu.org/projects/freefont/ - -convert=./fontconvert -inpath=~/Desktop/freefont/ -outpath=../Fonts/ -fonts=(FreeMono FreeSans FreeSerif) -styles=("" Bold Italic BoldItalic Oblique BoldOblique) -sizes=(9 12 18 24) - -for f in ${fonts[*]} -do - for index in ${!styles[*]} - do - st=${styles[$index]} - for si in ${sizes[*]} - do - infile=$inpath$f$st".ttf" - if [ -f $infile ] # Does source combination exist? - then - outfile=$outpath$f$st$si"pt7b.h" -# printf "%s %s %s > %s\n" $convert $infile $si $outfile - $convert $infile $si > $outfile - fi - done - done -done diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/gfxfont.h b/studies/console/arduino/libraries/Adafruit_GFX_Library/gfxfont.h deleted file mode 100644 index 175bad6..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/gfxfont.h +++ /dev/null @@ -1,29 +0,0 @@ -// Font structures for newer Adafruit_GFX (1.1 and later). -// Example fonts are included in 'Fonts' directory. -// To use a font in your Arduino sketch, #include the corresponding .h -// file and pass address of GFXfont struct to setFont(). Pass NULL to -// revert to 'classic' fixed-space bitmap font. - -#ifndef _GFXFONT_H_ -#define _GFXFONT_H_ - -/// Font data stored PER GLYPH -typedef struct { - uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap - uint8_t width; ///< Bitmap dimensions in pixels - uint8_t height; ///< Bitmap dimensions in pixels - uint8_t xAdvance; ///< Distance to advance cursor (x axis) - int8_t xOffset; ///< X dist from cursor pos to UL corner - int8_t yOffset; ///< Y dist from cursor pos to UL corner -} GFXglyph; - -/// Data stored for FONT AS A WHOLE -typedef struct { - uint8_t *bitmap; ///< Glyph bitmaps, concatenated - GFXglyph *glyph; ///< Glyph array - uint16_t first; ///< ASCII extents (first char) - uint16_t last; ///< ASCII extents (last char) - uint8_t yAdvance; ///< Newline distance (y axis) -} GFXfont; - -#endif // _GFXFONT_H_ diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/glcdfont.c b/studies/console/arduino/libraries/Adafruit_GFX_Library/glcdfont.c deleted file mode 100644 index 535da3a..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/glcdfont.c +++ /dev/null @@ -1,143 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#ifndef FONT5X7_H -#define FONT5X7_H - -#ifdef __AVR__ -#include -#include -#elif defined(ESP8266) -#include -#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) -// PROGMEM is defefind for T4 to place data in specific memory section -#undef PROGMEM -#define PROGMEM -#else -#define PROGMEM -#endif - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, - 0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C, - 0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, - 0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24, - 0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E, - 0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F, - 0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C, - 0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F, - 0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89, - 0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94, - 0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08, - 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10, - 0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, - 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, - 0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41, - 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, - 0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, - 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49, - 0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F, - 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41, - 0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49, - 0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, - 0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59, - 0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, - 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, - 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73, - 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, - 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, - 0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, - 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, - 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, - 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, - 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, - 0x63, 0x03, 0x04, 0x78, 0x04, 0x03, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, - 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28, - 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28, - 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18, - 0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, - 0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, - 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24, - 0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, - 0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40, - 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C, - 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, - 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, - 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, - 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, - 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, - 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut - 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, - 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, - 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, - 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11, - 0x12, 0x7D, // A-umlaut - 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, - 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, - 0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut - 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, - 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42, - 0x3D, // O-umlaut - 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, - 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, - 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, - 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, - 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, - 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, - 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, - 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, - 0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old - // code - 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block - 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14, - 0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10, - 0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, - 0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17, - 0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00, - 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, - 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00, - 0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, - 0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17, - 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17, - 0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, - 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, - 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, - 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, - 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, - 0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta - 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, - 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, - 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, - 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, - 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, - 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, - 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, - 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, - 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, - 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, - 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, - 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP -}; - -// allow clean compilation with [-Wunused-const-variable=] and [-Wall] -static inline void avoid_unused_const_variable_compiler_warning(void) { - (void)font; -} - -#endif // FONT5X7_H diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/library.properties b/studies/console/arduino/libraries/Adafruit_GFX_Library/library.properties deleted file mode 100644 index 7d8849e..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/library.properties +++ /dev/null @@ -1,10 +0,0 @@ -name=Adafruit GFX Library -version=1.11.9 -author=Adafruit -maintainer=Adafruit -sentence=Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from. -paragraph=Install this library in addition to the display library for your hardware. -category=Display -url=https://github.com/adafruit/Adafruit-GFX-Library -architectures=* -depends=Adafruit BusIO diff --git a/studies/console/arduino/libraries/Adafruit_GFX_Library/license.txt b/studies/console/arduino/libraries/Adafruit_GFX_Library/license.txt deleted file mode 100644 index 7492e93..0000000 --- a/studies/console/arduino/libraries/Adafruit_GFX_Library/license.txt +++ /dev/null @@ -1,24 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2012 Adafruit Industries. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.cpp b/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.cpp deleted file mode 100644 index df7b638..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************/ -/*! - @file Adafruit_MCP4725.cpp - @author K.Townsend (Adafruit Industries) - - I2C Driver for Microchip's MCP4725 I2C DAC - - This is a library for the Adafruit MCP4725 breakout - ----> http://www.adafruit.com/products/935 - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - @section HISTORY - -*/ -/**************************************************************************/ - -#include "Adafruit_MCP4725.h" - -/**************************************************************************/ -/*! - @brief Instantiates a new MCP4725 class -*/ -/**************************************************************************/ -Adafruit_MCP4725::Adafruit_MCP4725() {} - -/**************************************************************************/ -/*! - @brief Setups the hardware and checks the DAC was found - @param i2c_address The I2C address of the DAC, defaults to 0x62 - @param wire The I2C TwoWire object to use, defaults to &Wire - @returns True if DAC was found on the I2C address. -*/ -/**************************************************************************/ -bool Adafruit_MCP4725::begin(uint8_t i2c_address, TwoWire *wire) { - if (i2c_dev) { - delete i2c_dev; - } - - i2c_dev = new Adafruit_I2CDevice(i2c_address, wire); - - if (!i2c_dev->begin()) { - return false; - } - - return true; -} - -/**************************************************************************/ -/*! - @brief Sets the output voltage to a fraction of source vref. (Value - can be 0..4095) - - @param[in] output - The 12-bit value representing the relationship between - the DAC's input voltage and its output voltage. - @param[in] writeEEPROM - If this value is true, 'output' will also be written - to the MCP4725's internal non-volatile memory, meaning - that the DAC will retain the current voltage output - after power-down or reset. - @param i2c_frequency What we should set the I2C clock to when writing - to the DAC, defaults to 400 KHz - @returns True if able to write the value over I2C -*/ -/**************************************************************************/ -bool Adafruit_MCP4725::setVoltage(uint16_t output, bool writeEEPROM, - uint32_t i2c_frequency) { - i2c_dev->setSpeed(i2c_frequency); // Set I2C frequency to desired speed - - uint8_t packet[3]; - - if (writeEEPROM) { - packet[0] = MCP4725_CMD_WRITEDACEEPROM; - } else { - packet[0] = MCP4725_CMD_WRITEDAC; - } - packet[1] = output / 16; // Upper data bits (D11.D10.D9.D8.D7.D6.D5.D4) - packet[2] = (output % 16) << 4; // Lower data bits (D3.D2.D1.D0.x.x.x.x) - - if (!i2c_dev->write(packet, 3)) { - return false; - } - - i2c_dev->setSpeed(100000); // reset to arduino default - return true; -} diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.h b/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.h deleted file mode 100644 index 5a6720b..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/Adafruit_MCP4725.h +++ /dev/null @@ -1,37 +0,0 @@ -/**************************************************************************/ -/*! - @file Adafruit_MCP4725.h -*/ -/**************************************************************************/ - -#ifndef _ADAFRUIT_MCP4725_H_ -#define _ADAFRUIT_MCP4725_H_ - -#include -#include -#include - -#define MCP4725_I2CADDR_DEFAULT (0x62) ///< Default i2c address -#define MCP4725_CMD_WRITEDAC (0x40) ///< Writes data to the DAC -#define MCP4725_CMD_WRITEDACEEPROM \ - (0x60) ///< Writes data to the DAC and the EEPROM (persisting the assigned - ///< value after reset) - -/**************************************************************************/ -/*! - @brief Class for communicating with an MCP4725 DAC -*/ -/**************************************************************************/ -class Adafruit_MCP4725 { -public: - Adafruit_MCP4725(); - bool begin(uint8_t i2c_address = MCP4725_I2CADDR_DEFAULT, - TwoWire *wire = &Wire); - bool setVoltage(uint16_t output, bool writeEEPROM, - uint32_t dac_frequency = 400000); - -private: - Adafruit_I2CDevice *i2c_dev = NULL; -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/README.md b/studies/console/arduino/libraries/Adafruit_MCP4725/README.md deleted file mode 100644 index 103a1b1..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/README.md +++ /dev/null @@ -1,22 +0,0 @@ -Adafruit_MCP4725 [![Build Status](https://github.com/adafruit/Adafruit_MCP4725/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_MCP4725/actions) -================ - -This is the Adafruit MCP4725 12-bit I2C DAC Driver library - -Tested and works great with the Adafruit MCP4725 Breakout Board - ------> http://www.adafruit.com/products/935 - -This chip uses I2C to communicate, 2 pins are required to -interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Kevin Townsend/Limor Fried for Adafruit Industries. -BSD license, check license.txt for more information -All text above must be included in any redistribution - -To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_MCP4725. Check that the Adafruit_MCP4725 folder contains Adafruit_MCP4725.cpp and Adafruit_MCP4725.h - -Place the Adafruit_MCP4725 library folder your arduinosketchfolder/libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE. diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/code-of-conduct.md b/studies/console/arduino/libraries/Adafruit_MCP4725/code-of-conduct.md deleted file mode 100644 index 8ee6e44..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/code-of-conduct.md +++ /dev/null @@ -1,127 +0,0 @@ -# Adafruit Community Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and leaders pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level or type of -experience, education, socio-economic status, nationality, personal appearance, -race, religion, or sexual identity and orientation. - -## Our Standards - -We are committed to providing a friendly, safe and welcoming environment for -all. - -Examples of behavior that contributes to creating a positive environment -include: - -* Be kind and courteous to others -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Collaborating with other community members -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and sexual attention or advances -* The use of inappropriate images, including in a community member's avatar -* The use of inappropriate language, including in a community member's nickname -* Any spamming, flaming, baiting or other attention-stealing behavior -* Excessive or unwelcome helping; answering outside the scope of the question - asked -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate - -The goal of the standards and moderation guidelines outlined here is to build -and maintain a respectful community. We ask that you don’t just aim to be -"technically unimpeachable", but rather try to be your best self. - -We value many things beyond technical expertise, including collaboration and -supporting others within our community. Providing a positive experience for -other community members can have a much more significant impact than simply -providing the correct answer. - -## Our Responsibilities - -Project leaders are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project leaders have the right and responsibility to remove, edit, or -reject messages, comments, commits, code, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any community member for other behaviors that they deem -inappropriate, threatening, offensive, or harmful. - -## Moderation - -Instances of behaviors that violate the Adafruit Community Code of Conduct -may be reported by any member of the community. Community members are -encouraged to report these situations, including situations they witness -involving other community members. - -You may report in the following ways: - -In any situation, you may send an email to . - -On the Adafruit Discord, you may send an open message from any channel -to all Community Helpers by tagging @community helpers. You may also send an -open message from any channel, or a direct message to @kattni#1507, -@tannewt#4653, @Dan Halbert#1614, @cater#2442, @sommersoft#0222, or -@Andon#8175. - -Email and direct message reports will be kept confidential. - -In situations on Discord where the issue is particularly egregious, possibly -illegal, requires immediate action, or violates the Discord terms of service, -you should also report the message directly to Discord. - -These are the steps for upholding our community’s standards of conduct. - -1. Any member of the community may report any situation that violates the -Adafruit Community Code of Conduct. All reports will be reviewed and -investigated. -2. If the behavior is an egregious violation, the community member who -committed the violation may be banned immediately, without warning. -3. Otherwise, moderators will first respond to such behavior with a warning. -4. Moderators follow a soft "three strikes" policy - the community member may -be given another chance, if they are receptive to the warning and change their -behavior. -5. If the community member is unreceptive or unreasonable when warned by a -moderator, or the warning goes unheeded, they may be banned for a first or -second offense. Repeated offenses will result in the community member being -banned. - -## Scope - -This Code of Conduct and the enforcement policies listed above apply to all -Adafruit Community venues. This includes but is not limited to any community -spaces (both public and private), the entire Adafruit Discord server, and -Adafruit GitHub repositories. Examples of Adafruit Community spaces include -but are not limited to meet-ups, audio chats on the Adafruit Discord, or -interaction at a conference. - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. As a community -member, you are representing our community, and are expected to behave -accordingly. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.4, available at -, -and the [Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html). - -For other projects adopting the Adafruit Community Code of -Conduct, please contact the maintainers of those projects for enforcement. -If you wish to use this code of conduct for your own project, consider -explicitly mentioning your moderation policy or making a copy with your -own moderation policy so as to avoid confusion. diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/examples/sinewave/sinewave.ino b/studies/console/arduino/libraries/Adafruit_MCP4725/examples/sinewave/sinewave.ino deleted file mode 100644 index 322b0e7..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/examples/sinewave/sinewave.ino +++ /dev/null @@ -1,216 +0,0 @@ -/**************************************************************************/ -/*! - @file sinewave.pde - @author Adafruit Industries - @license BSD (see license.txt) - - This example will generate a sine wave with the MCP4725 DAC. - - This is an example sketch for the Adafruit MCP4725 breakout board - ----> http://www.adafruit.com/products/935 - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! -*/ -/**************************************************************************/ -#include -#include - -Adafruit_MCP4725 dac; - -// Set this value to 9, 8, 7, 6 or 5 to adjust the resolution -#define DAC_RESOLUTION (8) - -/* Note: If flash space is tight a quarter sine wave is enough - to generate full sine and cos waves, but some additional - calculation will be required at each step after the first - quarter wave. */ - -const PROGMEM uint16_t DACLookup_FullSine_9Bit[512] = -{ - 2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224, - 2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423, - 2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618, - 2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808, - 2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991, - 3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165, - 3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328, - 3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478, - 3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615, - 3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737, - 3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842, - 3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930, - 3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000, - 4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052, - 4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084, - 4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095, - 4095, 4095, 4095, 4095, 4094, 4092, 4090, 4088, - 4086, 4084, 4081, 4077, 4074, 4070, 4066, 4061, - 4057, 4052, 4046, 4041, 4035, 4028, 4022, 4015, - 4008, 4000, 3993, 3985, 3976, 3968, 3959, 3950, - 3940, 3930, 3920, 3910, 3899, 3888, 3877, 3866, - 3854, 3842, 3830, 3817, 3805, 3792, 3778, 3765, - 3751, 3737, 3722, 3708, 3693, 3678, 3663, 3647, - 3631, 3615, 3599, 3582, 3565, 3548, 3531, 3514, - 3496, 3478, 3460, 3442, 3423, 3405, 3386, 3367, - 3347, 3328, 3308, 3288, 3268, 3248, 3227, 3207, - 3186, 3165, 3144, 3122, 3101, 3079, 3057, 3036, - 3013, 2991, 2969, 2946, 2924, 2901, 2878, 2855, - 2832, 2808, 2785, 2762, 2738, 2714, 2690, 2667, - 2643, 2618, 2594, 2570, 2546, 2521, 2497, 2472, - 2448, 2423, 2398, 2373, 2349, 2324, 2299, 2274, - 2249, 2224, 2199, 2174, 2148, 2123, 2098, 2073, - 2048, 2023, 1998, 1973, 1948, 1922, 1897, 1872, - 1847, 1822, 1797, 1772, 1747, 1723, 1698, 1673, - 1648, 1624, 1599, 1575, 1550, 1526, 1502, 1478, - 1453, 1429, 1406, 1382, 1358, 1334, 1311, 1288, - 1264, 1241, 1218, 1195, 1172, 1150, 1127, 1105, - 1083, 1060, 1039, 1017, 995, 974, 952, 931, - 910, 889, 869, 848, 828, 808, 788, 768, - 749, 729, 710, 691, 673, 654, 636, 618, - 600, 582, 565, 548, 531, 514, 497, 481, - 465, 449, 433, 418, 403, 388, 374, 359, - 345, 331, 318, 304, 291, 279, 266, 254, - 242, 230, 219, 208, 197, 186, 176, 166, - 156, 146, 137, 128, 120, 111, 103, 96, - 88, 81, 74, 68, 61, 55, 50, 44, - 39, 35, 30, 26, 22, 19, 15, 12, - 10, 8, 6, 4, 2, 1, 1, 0, - 0, 0, 1, 1, 2, 4, 6, 8, - 10, 12, 15, 19, 22, 26, 30, 35, - 39, 44, 50, 55, 61, 68, 74, 81, - 88, 96, 103, 111, 120, 128, 137, 146, - 156, 166, 176, 186, 197, 208, 219, 230, - 242, 254, 266, 279, 291, 304, 318, 331, - 345, 359, 374, 388, 403, 418, 433, 449, - 465, 481, 497, 514, 531, 548, 565, 582, - 600, 618, 636, 654, 673, 691, 710, 729, - 749, 768, 788, 808, 828, 848, 869, 889, - 910, 931, 952, 974, 995, 1017, 1039, 1060, - 1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241, - 1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429, - 1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624, - 1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822, - 1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023 -}; - -const PROGMEM uint16_t DACLookup_FullSine_8Bit[256] = -{ - 2048, 2098, 2148, 2198, 2248, 2298, 2348, 2398, - 2447, 2496, 2545, 2594, 2642, 2690, 2737, 2784, - 2831, 2877, 2923, 2968, 3013, 3057, 3100, 3143, - 3185, 3226, 3267, 3307, 3346, 3385, 3423, 3459, - 3495, 3530, 3565, 3598, 3630, 3662, 3692, 3722, - 3750, 3777, 3804, 3829, 3853, 3876, 3898, 3919, - 3939, 3958, 3975, 3992, 4007, 4021, 4034, 4045, - 4056, 4065, 4073, 4080, 4085, 4089, 4093, 4094, - 4095, 4094, 4093, 4089, 4085, 4080, 4073, 4065, - 4056, 4045, 4034, 4021, 4007, 3992, 3975, 3958, - 3939, 3919, 3898, 3876, 3853, 3829, 3804, 3777, - 3750, 3722, 3692, 3662, 3630, 3598, 3565, 3530, - 3495, 3459, 3423, 3385, 3346, 3307, 3267, 3226, - 3185, 3143, 3100, 3057, 3013, 2968, 2923, 2877, - 2831, 2784, 2737, 2690, 2642, 2594, 2545, 2496, - 2447, 2398, 2348, 2298, 2248, 2198, 2148, 2098, - 2048, 1997, 1947, 1897, 1847, 1797, 1747, 1697, - 1648, 1599, 1550, 1501, 1453, 1405, 1358, 1311, - 1264, 1218, 1172, 1127, 1082, 1038, 995, 952, - 910, 869, 828, 788, 749, 710, 672, 636, - 600, 565, 530, 497, 465, 433, 403, 373, - 345, 318, 291, 266, 242, 219, 197, 176, - 156, 137, 120, 103, 88, 74, 61, 50, - 39, 30, 22, 15, 10, 6, 2, 1, - 0, 1, 2, 6, 10, 15, 22, 30, - 39, 50, 61, 74, 88, 103, 120, 137, - 156, 176, 197, 219, 242, 266, 291, 318, - 345, 373, 403, 433, 465, 497, 530, 565, - 600, 636, 672, 710, 749, 788, 828, 869, - 910, 952, 995, 1038, 1082, 1127, 1172, 1218, - 1264, 1311, 1358, 1405, 1453, 1501, 1550, 1599, - 1648, 1697, 1747, 1797, 1847, 1897, 1947, 1997 -}; - -const PROGMEM uint16_t DACLookup_FullSine_7Bit[128] = -{ - 2048, 2148, 2248, 2348, 2447, 2545, 2642, 2737, - 2831, 2923, 3013, 3100, 3185, 3267, 3346, 3423, - 3495, 3565, 3630, 3692, 3750, 3804, 3853, 3898, - 3939, 3975, 4007, 4034, 4056, 4073, 4085, 4093, - 4095, 4093, 4085, 4073, 4056, 4034, 4007, 3975, - 3939, 3898, 3853, 3804, 3750, 3692, 3630, 3565, - 3495, 3423, 3346, 3267, 3185, 3100, 3013, 2923, - 2831, 2737, 2642, 2545, 2447, 2348, 2248, 2148, - 2048, 1947, 1847, 1747, 1648, 1550, 1453, 1358, - 1264, 1172, 1082, 995, 910, 828, 749, 672, - 600, 530, 465, 403, 345, 291, 242, 197, - 156, 120, 88, 61, 39, 22, 10, 2, - 0, 2, 10, 22, 39, 61, 88, 120, - 156, 197, 242, 291, 345, 403, 465, 530, - 600, 672, 749, 828, 910, 995, 1082, 1172, - 1264, 1358, 1453, 1550, 1648, 1747, 1847, 1947 -}; - -const PROGMEM uint16_t DACLookup_FullSine_6Bit[64] = -{ - 2048, 2248, 2447, 2642, 2831, 3013, 3185, 3346, - 3495, 3630, 3750, 3853, 3939, 4007, 4056, 4085, - 4095, 4085, 4056, 4007, 3939, 3853, 3750, 3630, - 3495, 3346, 3185, 3013, 2831, 2642, 2447, 2248, - 2048, 1847, 1648, 1453, 1264, 1082, 910, 749, - 600, 465, 345, 242, 156, 88, 39, 10, - 0, 10, 39, 88, 156, 242, 345, 465, - 600, 749, 910, 1082, 1264, 1453, 1648, 1847 -}; - -const PROGMEM uint16_t DACLookup_FullSine_5Bit[32] = -{ - 2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056, - 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, - 2048, 1648, 1264, 910, 600, 345, 156, 39, - 0, 39, 156, 345, 600, 910, 1264, 1648 -}; - -void setup(void) { - Serial.begin(9600); - Serial.println("Hello!"); - - // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC) - // For MCP4725A0 the address is 0x60 or 0x61 - // For MCP4725A2 the address is 0x64 or 0x65 - dac.begin(0x62); - - Serial.println("Generating a sine wave"); -} - -void loop(void) { - uint16_t i; - - // Push out the right lookup table, depending on the selected resolution - #if DAC_RESOLUTION == 5 - for (i = 0; i < 32; i++) - { - dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_5Bit[i])), false); - } - #elif DAC_RESOLUTION == 6 - for (i = 0; i < 64; i++) - { - dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_6Bit[i])), false); - } - #elif DAC_RESOLUTION == 7 - for (i = 0; i < 128; i++) - { - dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_7Bit[i])), false); - } - #elif DAC_RESOLUTION == 9 - for (i = 0; i < 512; i++) - { - dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_9Bit[i])), false); - } - #else // Use 8-bit data if nothing else is specified - for (i = 0; i < 256; i++) - { - dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_8Bit[i])), false); - } - #endif -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/examples/trianglewave/trianglewave.ino b/studies/console/arduino/libraries/Adafruit_MCP4725/examples/trianglewave/trianglewave.ino deleted file mode 100644 index 1d9d637..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/examples/trianglewave/trianglewave.ino +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************/ -/*! - @file trianglewave.pde - @author Adafruit Industries - @license BSD (see license.txt) - - This example will generate a triangle wave with the MCP4725 DAC. - - This is an example sketch for the Adafruit MCP4725 breakout board - ----> http://www.adafruit.com/products/935 - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! -*/ -/**************************************************************************/ -#include -#include - -Adafruit_MCP4725 dac; - -void setup(void) { - Serial.begin(9600); - Serial.println("Hello!"); - - // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC) - // For MCP4725A0 the address is 0x60 or 0x61 - // For MCP4725A2 the address is 0x64 or 0x65 - dac.begin(0x62); - - Serial.println("Generating a triangle wave"); -} - -void loop(void) { - uint32_t counter; - // Run through the full 12-bit scale for a triangle wave - for (counter = 0; counter < 4095; counter++) - { - dac.setVoltage(counter, false); - } - for (counter = 4095; counter > 0; counter--) - { - dac.setVoltage(counter, false); - } -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/library.properties b/studies/console/arduino/libraries/Adafruit_MCP4725/library.properties deleted file mode 100644 index 5583e24..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/library.properties +++ /dev/null @@ -1,10 +0,0 @@ -name=Adafruit MCP4725 -version=2.0.2 -author=Adafruit -maintainer=Adafruit -sentence=MCP4725 12-bit I2C DAC -paragraph=MCP4725 12-bit I2C DAC -category=Signal Input/Output -url=https://github.com/adafruit/Adafruit_MCP4725 -architectures=* -depends=Adafruit BusIO diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/license.txt b/studies/console/arduino/libraries/Adafruit_MCP4725/license.txt deleted file mode 100644 index f6a0f22..0000000 --- a/studies/console/arduino/libraries/Adafruit_MCP4725/license.txt +++ /dev/null @@ -1,26 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2012, Adafruit Industries -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holders nor the -names of its contributors may be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/studies/console/arduino/libraries/Adafruit_MCP4725/trianglewave.png b/studies/console/arduino/libraries/Adafruit_MCP4725/trianglewave.png deleted file mode 100644 index ac27bca..0000000 Binary files a/studies/console/arduino/libraries/Adafruit_MCP4725/trianglewave.png and /dev/null differ diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.cpp b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.cpp deleted file mode 100644 index 532ca84..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.cpp +++ /dev/null @@ -1,384 +0,0 @@ -#include "Adafruit_ST7735.h" -#include "Adafruit_ST77xx.h" - -// CONSTRUCTORS ************************************************************ - -/*! - @brief Instantiate Adafruit ST7735 driver with software SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param mosi SPI MOSI pin # - @param sclk SPI Clock pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7735::Adafruit_ST7735(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, - int8_t rst) - : Adafruit_ST77xx(ST7735_TFTWIDTH_128, ST7735_TFTHEIGHT_160, cs, dc, mosi, - sclk, rst) {} - -/*! - @brief Instantiate Adafruit ST7735 driver with default hardware SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7735::Adafruit_ST7735(int8_t cs, int8_t dc, int8_t rst) - : Adafruit_ST77xx(ST7735_TFTWIDTH_128, ST7735_TFTHEIGHT_160, cs, dc, rst) {} - -#if !defined(ESP8266) -/*! - @brief Instantiate Adafruit ST7735 driver with selectable hardware SPI - @param spiClass Pointer to an SPI device to use (e.g. &SPI1) - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7735::Adafruit_ST7735(SPIClass *spiClass, int8_t cs, int8_t dc, - int8_t rst) - : Adafruit_ST77xx(ST7735_TFTWIDTH_128, ST7735_TFTHEIGHT_160, spiClass, cs, - dc, rst) {} -#endif // end !ESP8266 - -// SCREEN INITIALIZATION *************************************************** - -// Rather than a bazillion writecommand() and writedata() calls, screen -// initialization commands and arguments are organized in these tables -// stored in PROGMEM. The table may look bulky, but that's mostly the -// formatting -- storage-wise this is hundreds of bytes more compact -// than the equivalent code. Companion function follows. - -// clang-format off -static const uint8_t PROGMEM - Bcmd[] = { // Init commands for 7735B screens - 18, // 18 commands in list: - ST77XX_SWRESET, ST_CMD_DELAY, // 1: Software reset, no args, w/delay - 50, // 50 ms delay - ST77XX_SLPOUT, ST_CMD_DELAY, // 2: Out of sleep mode, no args, w/delay - 255, // 255 = max (500 ms) delay - ST77XX_COLMOD, 1+ST_CMD_DELAY, // 3: Set color mode, 1 arg + delay: - 0x05, // 16-bit color - 10, // 10 ms delay - ST7735_FRMCTR1, 3+ST_CMD_DELAY, // 4: Frame rate control, 3 args + delay: - 0x00, // fastest refresh - 0x06, // 6 lines front porch - 0x03, // 3 lines back porch - 10, // 10 ms delay - ST77XX_MADCTL, 1, // 5: Mem access ctl (directions), 1 arg: - 0x08, // Row/col addr, bottom-top refresh - ST7735_DISSET5, 2, // 6: Display settings #5, 2 args: - 0x15, // 1 clk cycle nonoverlap, 2 cycle gate - // rise, 3 cycle osc equalize - 0x02, // Fix on VTL - ST7735_INVCTR, 1, // 7: Display inversion control, 1 arg: - 0x0, // Line inversion - ST7735_PWCTR1, 2+ST_CMD_DELAY, // 8: Power control, 2 args + delay: - 0x02, // GVDD = 4.7V - 0x70, // 1.0uA - 10, // 10 ms delay - ST7735_PWCTR2, 1, // 9: Power control, 1 arg, no delay: - 0x05, // VGH = 14.7V, VGL = -7.35V - ST7735_PWCTR3, 2, // 10: Power control, 2 args, no delay: - 0x01, // Opamp current small - 0x02, // Boost frequency - ST7735_VMCTR1, 2+ST_CMD_DELAY, // 11: Power control, 2 args + delay: - 0x3C, // VCOMH = 4V - 0x38, // VCOML = -1.1V - 10, // 10 ms delay - ST7735_PWCTR6, 2, // 12: Power control, 2 args, no delay: - 0x11, 0x15, - ST7735_GMCTRP1,16, // 13: Gamma Adjustments (pos. polarity), 16 args + delay: - 0x09, 0x16, 0x09, 0x20, // (Not entirely necessary, but provides - 0x21, 0x1B, 0x13, 0x19, // accurate colors) - 0x17, 0x15, 0x1E, 0x2B, - 0x04, 0x05, 0x02, 0x0E, - ST7735_GMCTRN1,16+ST_CMD_DELAY, // 14: Gamma Adjustments (neg. polarity), 16 args + delay: - 0x0B, 0x14, 0x08, 0x1E, // (Not entirely necessary, but provides - 0x22, 0x1D, 0x18, 0x1E, // accurate colors) - 0x1B, 0x1A, 0x24, 0x2B, - 0x06, 0x06, 0x02, 0x0F, - 10, // 10 ms delay - ST77XX_CASET, 4, // 15: Column addr set, 4 args, no delay: - 0x00, 0x02, // XSTART = 2 - 0x00, 0x81, // XEND = 129 - ST77XX_RASET, 4, // 16: Row addr set, 4 args, no delay: - 0x00, 0x02, // XSTART = 1 - 0x00, 0x81, // XEND = 160 - ST77XX_NORON, ST_CMD_DELAY, // 17: Normal display on, no args, w/delay - 10, // 10 ms delay - ST77XX_DISPON, ST_CMD_DELAY, // 18: Main screen turn on, no args, delay - 255 }, // 255 = max (500 ms) delay - - Rcmd1[] = { // 7735R init, part 1 (red or green tab) - 15, // 15 commands in list: - ST77XX_SWRESET, ST_CMD_DELAY, // 1: Software reset, 0 args, w/delay - 150, // 150 ms delay - ST77XX_SLPOUT, ST_CMD_DELAY, // 2: Out of sleep mode, 0 args, w/delay - 255, // 500 ms delay - ST7735_FRMCTR1, 3, // 3: Framerate ctrl - normal mode, 3 arg: - 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D) - ST7735_FRMCTR2, 3, // 4: Framerate ctrl - idle mode, 3 args: - 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D) - ST7735_FRMCTR3, 6, // 5: Framerate - partial mode, 6 args: - 0x01, 0x2C, 0x2D, // Dot inversion mode - 0x01, 0x2C, 0x2D, // Line inversion mode - ST7735_INVCTR, 1, // 6: Display inversion ctrl, 1 arg: - 0x07, // No inversion - ST7735_PWCTR1, 3, // 7: Power control, 3 args, no delay: - 0xA2, - 0x02, // -4.6V - 0x84, // AUTO mode - ST7735_PWCTR2, 1, // 8: Power control, 1 arg, no delay: - 0xC5, // VGH25=2.4C VGSEL=-10 VGH=3 * AVDD - ST7735_PWCTR3, 2, // 9: Power control, 2 args, no delay: - 0x0A, // Opamp current small - 0x00, // Boost frequency - ST7735_PWCTR4, 2, // 10: Power control, 2 args, no delay: - 0x8A, // BCLK/2, - 0x2A, // opamp current small & medium low - ST7735_PWCTR5, 2, // 11: Power control, 2 args, no delay: - 0x8A, 0xEE, - ST7735_VMCTR1, 1, // 12: Power control, 1 arg, no delay: - 0x0E, - ST77XX_INVOFF, 0, // 13: Don't invert display, no args - ST77XX_MADCTL, 1, // 14: Mem access ctl (directions), 1 arg: - 0xC8, // row/col addr, bottom-top refresh - ST77XX_COLMOD, 1, // 15: set color mode, 1 arg, no delay: - 0x05 }, // 16-bit color - - Rcmd2green[] = { // 7735R init, part 2 (green tab only) - 2, // 2 commands in list: - ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay: - 0x00, 0x02, // XSTART = 0 - 0x00, 0x7F+0x02, // XEND = 127 - ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay: - 0x00, 0x01, // XSTART = 0 - 0x00, 0x9F+0x01 }, // XEND = 159 - - Rcmd2red[] = { // 7735R init, part 2 (red tab only) - 2, // 2 commands in list: - ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x7F, // XEND = 127 - ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x9F }, // XEND = 159 - - Rcmd2green144[] = { // 7735R init, part 2 (green 1.44 tab) - 2, // 2 commands in list: - ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x7F, // XEND = 127 - ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x7F }, // XEND = 127 - - Rcmd2green160x80[] = { // 7735R init, part 2 (mini 160x80) - 2, // 2 commands in list: - ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x4F, // XEND = 79 - ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x9F }, // XEND = 159 - - Rcmd2green160x80plugin[] = { // 7735R init, part 2 (mini 160x80 with plugin FPC) - 3, // 3 commands in list: - ST77XX_INVON, 0, // 1: Display is inverted - ST77XX_CASET, 4, // 2: Column addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x4F, // XEND = 79 - ST77XX_RASET, 4, // 3: Row addr set, 4 args, no delay: - 0x00, 0x00, // XSTART = 0 - 0x00, 0x9F }, // XEND = 159 - - Rcmd3[] = { // 7735R init, part 3 (red or green tab) - 4, // 4 commands in list: - ST7735_GMCTRP1, 16 , // 1: Gamma Adjustments (pos. polarity), 16 args + delay: - 0x02, 0x1c, 0x07, 0x12, // (Not entirely necessary, but provides - 0x37, 0x32, 0x29, 0x2d, // accurate colors) - 0x29, 0x25, 0x2B, 0x39, - 0x00, 0x01, 0x03, 0x10, - ST7735_GMCTRN1, 16 , // 2: Gamma Adjustments (neg. polarity), 16 args + delay: - 0x03, 0x1d, 0x07, 0x06, // (Not entirely necessary, but provides - 0x2E, 0x2C, 0x29, 0x2D, // accurate colors) - 0x2E, 0x2E, 0x37, 0x3F, - 0x00, 0x00, 0x02, 0x10, - ST77XX_NORON, ST_CMD_DELAY, // 3: Normal display on, no args, w/delay - 10, // 10 ms delay - ST77XX_DISPON, ST_CMD_DELAY, // 4: Main screen turn on, no args w/delay - 100 }; // 100 ms delay - -// clang-format on - -/**************************************************************************/ -/*! - @brief Initialization code common to all ST7735B displays -*/ -/**************************************************************************/ -void Adafruit_ST7735::initB(void) { - commonInit(Bcmd); - setRotation(0); -} - -/**************************************************************************/ -/*! - @brief Initialization code common to all ST7735R displays - @param options Tab color from adafruit purchase -*/ -/**************************************************************************/ -void Adafruit_ST7735::initR(uint8_t options) { - commonInit(Rcmd1); - if (options == INITR_GREENTAB) { - displayInit(Rcmd2green); - _colstart = 2; - _rowstart = 1; - } else if ((options == INITR_144GREENTAB) || (options == INITR_HALLOWING)) { - _height = ST7735_TFTHEIGHT_128; - _width = ST7735_TFTWIDTH_128; - displayInit(Rcmd2green144); - _colstart = 2; - _rowstart = 3; // For default rotation 0 - } else if (options == INITR_MINI160x80) { - _height = ST7735_TFTWIDTH_80; - _width = ST7735_TFTHEIGHT_160; - displayInit(Rcmd2green160x80); - _colstart = 24; - _rowstart = 0; - } else if (options == INITR_MINI160x80_PLUGIN) { - _height = ST7735_TFTWIDTH_80; - _width = ST7735_TFTHEIGHT_160; - displayInit(Rcmd2green160x80plugin); - _colstart = 26; - _rowstart = 1; - invertOnCommand = ST77XX_INVOFF; - invertOffCommand = ST77XX_INVON; - } else { - // colstart, rowstart left at default '0' values - displayInit(Rcmd2red); - } - displayInit(Rcmd3); - - // Black tab, change MADCTL color filter - if ((options == INITR_BLACKTAB) || (options == INITR_MINI160x80)) { - uint8_t data = 0xC0; - sendCommand(ST77XX_MADCTL, &data, 1); - } - - if (options == INITR_HALLOWING) { - // Hallowing is simply a 1.44" green tab upside-down: - tabcolor = INITR_144GREENTAB; - setRotation(2); - } else { - tabcolor = options; - setRotation(0); - } -} - -// OTHER FUNCTIONS ********************************************************* - -/**************************************************************************/ -/*! - @brief Set origin of (0,0) and orientation of TFT display - @param m The index for rotation, from 0-3 inclusive -*/ -/**************************************************************************/ -void Adafruit_ST7735::setRotation(uint8_t m) { - uint8_t madctl = 0; - - rotation = m & 3; // can't be higher than 3 - - // For ST7735 with GREEN TAB (including HalloWing)... - if ((tabcolor == INITR_144GREENTAB) || (tabcolor == INITR_HALLOWING)) { - // ..._rowstart is 3 for rotations 0&1, 1 for rotations 2&3 - _rowstart = (rotation < 2) ? 3 : 1; - } - - switch (rotation) { - case 0: - if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB; - } else { - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST7735_MADCTL_BGR; - } - - if (tabcolor == INITR_144GREENTAB) { - _height = ST7735_TFTHEIGHT_128; - _width = ST7735_TFTWIDTH_128; - } else if (tabcolor == INITR_MINI160x80 || - tabcolor == INITR_MINI160x80_PLUGIN) { - _height = ST7735_TFTHEIGHT_160; - _width = ST7735_TFTWIDTH_80; - } else { - _height = ST7735_TFTHEIGHT_160; - _width = ST7735_TFTWIDTH_128; - } - _xstart = _colstart; - _ystart = _rowstart; - break; - case 1: - if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { - madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - } else { - madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; - } - - if (tabcolor == INITR_144GREENTAB) { - _width = ST7735_TFTHEIGHT_128; - _height = ST7735_TFTWIDTH_128; - } else if (tabcolor == INITR_MINI160x80 || - tabcolor == INITR_MINI160x80_PLUGIN) { - _width = ST7735_TFTHEIGHT_160; - _height = ST7735_TFTWIDTH_80; - } else { - _width = ST7735_TFTHEIGHT_160; - _height = ST7735_TFTWIDTH_128; - } - _ystart = _colstart; - _xstart = _rowstart; - break; - case 2: - if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { - madctl = ST77XX_MADCTL_RGB; - } else { - madctl = ST7735_MADCTL_BGR; - } - - if (tabcolor == INITR_144GREENTAB) { - _height = ST7735_TFTHEIGHT_128; - _width = ST7735_TFTWIDTH_128; - } else if (tabcolor == INITR_MINI160x80 || - tabcolor == INITR_MINI160x80_PLUGIN) { - _height = ST7735_TFTHEIGHT_160; - _width = ST7735_TFTWIDTH_80; - } else { - _height = ST7735_TFTHEIGHT_160; - _width = ST7735_TFTWIDTH_128; - } - _xstart = _colstart; - _ystart = _rowstart; - break; - case 3: - if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - } else { - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; - } - - if (tabcolor == INITR_144GREENTAB) { - _width = ST7735_TFTHEIGHT_128; - _height = ST7735_TFTWIDTH_128; - } else if (tabcolor == INITR_MINI160x80 || - tabcolor == INITR_MINI160x80_PLUGIN) { - _width = ST7735_TFTHEIGHT_160; - _height = ST7735_TFTWIDTH_80; - } else { - _width = ST7735_TFTHEIGHT_160; - _height = ST7735_TFTWIDTH_128; - } - _ystart = _colstart; - _xstart = _rowstart; - break; - } - - sendCommand(ST77XX_MADCTL, &madctl, 1); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h deleted file mode 100755 index 3d1f455..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef _ADAFRUIT_ST7735H_ -#define _ADAFRUIT_ST7735H_ - -#include "Adafruit_ST77xx.h" - -// some flags for initR() :( -#define INITR_GREENTAB 0x00 -#define INITR_REDTAB 0x01 -#define INITR_BLACKTAB 0x02 -#define INITR_18GREENTAB INITR_GREENTAB -#define INITR_18REDTAB INITR_REDTAB -#define INITR_18BLACKTAB INITR_BLACKTAB -#define INITR_144GREENTAB 0x01 -#define INITR_MINI160x80 0x04 -#define INITR_HALLOWING 0x05 -#define INITR_MINI160x80_PLUGIN 0x06 - -// Some register settings -#define ST7735_MADCTL_BGR 0x08 -#define ST7735_MADCTL_MH 0x04 - -#define ST7735_FRMCTR1 0xB1 -#define ST7735_FRMCTR2 0xB2 -#define ST7735_FRMCTR3 0xB3 -#define ST7735_INVCTR 0xB4 -#define ST7735_DISSET5 0xB6 - -#define ST7735_PWCTR1 0xC0 -#define ST7735_PWCTR2 0xC1 -#define ST7735_PWCTR3 0xC2 -#define ST7735_PWCTR4 0xC3 -#define ST7735_PWCTR5 0xC4 -#define ST7735_VMCTR1 0xC5 - -#define ST7735_PWCTR6 0xFC - -#define ST7735_GMCTRP1 0xE0 -#define ST7735_GMCTRN1 0xE1 - -// Some ready-made 16-bit ('565') color settings: -#define ST7735_BLACK ST77XX_BLACK -#define ST7735_WHITE ST77XX_WHITE -#define ST7735_RED ST77XX_RED -#define ST7735_GREEN ST77XX_GREEN -#define ST7735_BLUE ST77XX_BLUE -#define ST7735_CYAN ST77XX_CYAN -#define ST7735_MAGENTA ST77XX_MAGENTA -#define ST7735_YELLOW ST77XX_YELLOW -#define ST7735_ORANGE ST77XX_ORANGE - -/// Subclass of ST77XX for ST7735B and ST7735R TFT Drivers: -class Adafruit_ST7735 : public Adafruit_ST77xx { -public: - Adafruit_ST7735(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, int8_t rst); - Adafruit_ST7735(int8_t cs, int8_t dc, int8_t rst); -#if !defined(ESP8266) - Adafruit_ST7735(SPIClass *spiClass, int8_t cs, int8_t dc, int8_t rst); -#endif // end !ESP8266 - - // Differences between displays (usu. identified by colored tab on - // plastic overlay) are odd enough that we need to do this 'by hand': - void initB(void); // for ST7735B displays - void initR(uint8_t options = INITR_GREENTAB); // for ST7735R - - void setRotation(uint8_t m); - -private: - uint8_t tabcolor; -}; - -#endif // _ADAFRUIT_ST7735H_ diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.cpp b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.cpp deleted file mode 100644 index aa14027..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.cpp +++ /dev/null @@ -1,174 +0,0 @@ -#include "Adafruit_ST7789.h" -#include "Adafruit_ST77xx.h" - -// CONSTRUCTORS ************************************************************ - -/*! - @brief Instantiate Adafruit ST7789 driver with software SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param mosi SPI MOSI pin # - @param sclk SPI Clock pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7789::Adafruit_ST7789(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, - int8_t rst) - : Adafruit_ST77xx(240, 320, cs, dc, mosi, sclk, rst) {} - -/*! - @brief Instantiate Adafruit ST7789 driver with hardware SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7789::Adafruit_ST7789(int8_t cs, int8_t dc, int8_t rst) - : Adafruit_ST77xx(240, 320, cs, dc, rst) {} - -#if !defined(ESP8266) -/*! - @brief Instantiate Adafruit ST7789 driver with selectable hardware SPI - @param spiClass Pointer to an SPI device to use (e.g. &SPI1) - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -Adafruit_ST7789::Adafruit_ST7789(SPIClass *spiClass, int8_t cs, int8_t dc, - int8_t rst) - : Adafruit_ST77xx(240, 320, spiClass, cs, dc, rst) {} -#endif // end !ESP8266 - -// SCREEN INITIALIZATION *************************************************** - -// Rather than a bazillion writecommand() and writedata() calls, screen -// initialization commands and arguments are organized in these tables -// stored in PROGMEM. The table may look bulky, but that's mostly the -// formatting -- storage-wise this is hundreds of bytes more compact -// than the equivalent code. Companion function follows. - -// clang-format off - -static const uint8_t PROGMEM - generic_st7789[] = { // Init commands for 7789 screens - 9, // 9 commands in list: - ST77XX_SWRESET, ST_CMD_DELAY, // 1: Software reset, no args, w/delay - 150, // ~150 ms delay - ST77XX_SLPOUT , ST_CMD_DELAY, // 2: Out of sleep mode, no args, w/delay - 10, // 10 ms delay - ST77XX_COLMOD , 1+ST_CMD_DELAY, // 3: Set color mode, 1 arg + delay: - 0x55, // 16-bit color - 10, // 10 ms delay - ST77XX_MADCTL , 1, // 4: Mem access ctrl (directions), 1 arg: - 0x08, // Row/col addr, bottom-top refresh - ST77XX_CASET , 4, // 5: Column addr set, 4 args, no delay: - 0x00, - 0, // XSTART = 0 - 0, - 240, // XEND = 240 - ST77XX_RASET , 4, // 6: Row addr set, 4 args, no delay: - 0x00, - 0, // YSTART = 0 - 320>>8, - 320&0xFF, // YEND = 320 - ST77XX_INVON , ST_CMD_DELAY, // 7: hack - 10, - ST77XX_NORON , ST_CMD_DELAY, // 8: Normal display on, no args, w/delay - 10, // 10 ms delay - ST77XX_DISPON , ST_CMD_DELAY, // 9: Main screen turn on, no args, delay - 10 }; // 10 ms delay - -// clang-format on - -/**************************************************************************/ -/*! - @brief Initialization code common to all ST7789 displays - @param width Display width - @param height Display height - @param mode SPI data mode; one of SPI_MODE0, SPI_MODE1, SPI_MODE2 - or SPI_MODE3 (do NOT pass the numbers 0,1,2 or 3 -- use - the defines only, the values are NOT the same!) -*/ -/**************************************************************************/ -void Adafruit_ST7789::init(uint16_t width, uint16_t height, uint8_t mode) { - // Save SPI data mode. commonInit() calls begin() (in Adafruit_ST77xx.cpp), - // which in turn calls initSPI() (in Adafruit_SPITFT.cpp), passing it the - // value of spiMode. It's done this way because begin() really should not - // be modified at this point to accept an SPI mode -- it's a virtual - // function required in every Adafruit_SPITFT subclass and would require - // updating EVERY such library...whereas, at the moment, we know that - // certain ST7789 displays are the only thing that may need a non-default - // SPI mode, hence this roundabout approach... - spiMode = mode; - // (Might get added similarly to other display types as needed on a - // case-by-case basis.) - - commonInit(NULL); - if (width == 240 && height == 240) { - // 1.3", 1.54" displays (right justified) - _rowstart = (320 - height); - _rowstart2 = 0; - _colstart = _colstart2 = (240 - width); - } else if (width == 135 && height == 240) { - // 1.14" display (centered, with odd size) - _rowstart = _rowstart2 = (int)((320 - height) / 2); - // This is the only device currently supported device that has different - // values for _colstart & _colstart2. You must ensure that the extra - // pixel lands in _colstart and not in _colstart2 - _colstart = (int)((240 - width + 1) / 2); - _colstart2 = (int)((240 - width) / 2); - } else { - // 1.47", 1.69, 1.9", 2.0" displays (centered) - _rowstart = _rowstart2 = (int)((320 - height) / 2); - _colstart = _colstart2 = (int)((240 - width) / 2); - } - - windowWidth = width; - windowHeight = height; - - displayInit(generic_st7789); - setRotation(0); -} - -/**************************************************************************/ -/*! - @brief Set origin of (0,0) and orientation of TFT display - @param m The index for rotation, from 0-3 inclusive -*/ -/**************************************************************************/ -void Adafruit_ST7789::setRotation(uint8_t m) { - uint8_t madctl = 0; - - rotation = m & 3; // can't be higher than 3 - - switch (rotation) { - case 0: - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB; - _xstart = _colstart; - _ystart = _rowstart; - _width = windowWidth; - _height = windowHeight; - break; - case 1: - madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - _xstart = _rowstart; - _ystart = _colstart2; - _height = windowWidth; - _width = windowHeight; - break; - case 2: - madctl = ST77XX_MADCTL_RGB; - _xstart = _colstart2; - _ystart = _rowstart2; - _width = windowWidth; - _height = windowHeight; - break; - case 3: - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - _xstart = _rowstart2; - _ystart = _colstart; - _height = windowWidth; - _width = windowHeight; - break; - } - - sendCommand(ST77XX_MADCTL, &madctl, 1); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.h b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.h deleted file mode 100644 index 7fe09d6..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7789.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _ADAFRUIT_ST7789H_ -#define _ADAFRUIT_ST7789H_ - -#include "Adafruit_ST77xx.h" - -/// Subclass of ST77XX type display for ST7789 TFT Driver -class Adafruit_ST7789 : public Adafruit_ST77xx { -public: - Adafruit_ST7789(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, - int8_t rst = -1); - Adafruit_ST7789(int8_t cs, int8_t dc, int8_t rst); -#if !defined(ESP8266) - Adafruit_ST7789(SPIClass *spiClass, int8_t cs, int8_t dc, int8_t rst); -#endif // end !ESP8266 - - void setRotation(uint8_t m); - void init(uint16_t width, uint16_t height, uint8_t spiMode = SPI_MODE0); - -protected: - uint8_t _colstart2 = 0, ///< Offset from the right - _rowstart2 = 0; ///< Offset from the bottom - -private: - uint16_t windowWidth; - uint16_t windowHeight; -}; - -#endif // _ADAFRUIT_ST7789H_ diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.cpp b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.cpp deleted file mode 100644 index 34eda6e..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.cpp +++ /dev/null @@ -1,361 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit 1.8" TFT Breakout w/SD card - ----> http://www.adafruit.com/products/358 - The 1.8" TFT shield - ----> https://www.adafruit.com/product/802 - The 1.44" TFT breakout - ----> https://www.adafruit.com/product/2088 - as well as Adafruit raw 1.8" TFT display - ----> http://www.adafruit.com/products/618 - - Check out the links above for our tutorials and wiring diagrams. - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional). - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include "Adafruit_ST77xx.h" -#include -#if !defined(ARDUINO_STM32_FEATHER) && !defined(ARDUINO_UNOR4_WIFI) -#if !defined(ARDUINO_UNOR4_MINIMA) -#include "pins_arduino.h" -#include "wiring_private.h" -#endif -#endif -#include - -#define SPI_DEFAULT_FREQ 32000000 ///< Default SPI data clock frequency - -/**************************************************************************/ -/*! - @brief Instantiate Adafruit ST77XX driver with software SPI - @param w Display width in pixels at default rotation setting (0) - @param h Display height in pixels at default rotation setting (0) - @param cs Chip select pin # - @param dc Data/Command pin # - @param mosi SPI MOSI pin # - @param sclk SPI Clock pin # - @param rst Reset pin # (optional, pass -1 if unused) - @param miso SPI MISO pin # (optional, pass -1 if unused) -*/ -/**************************************************************************/ -Adafruit_ST77xx::Adafruit_ST77xx(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t mosi, int8_t sclk, int8_t rst, - int8_t miso) - : Adafruit_SPITFT(w, h, cs, dc, mosi, sclk, rst, miso) {} - -/**************************************************************************/ -/*! - @brief Instantiate Adafruit ST77XX driver with hardware SPI - @param w Display width in pixels at default rotation setting (0) - @param h Display height in pixels at default rotation setting (0) - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -/**************************************************************************/ -Adafruit_ST77xx::Adafruit_ST77xx(uint16_t w, uint16_t h, int8_t cs, int8_t dc, - int8_t rst) - : Adafruit_SPITFT(w, h, cs, dc, rst) {} - -#if !defined(ESP8266) -/**************************************************************************/ -/*! - @brief Instantiate Adafruit ST77XX driver with selectable hardware SPI - @param w Display width in pixels at default rotation setting (0) - @param h Display height in pixels at default rotation setting (0) - @param spiClass A pointer to an SPI device to use (e.g. &SPI1) - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -/**************************************************************************/ -Adafruit_ST77xx::Adafruit_ST77xx(uint16_t w, uint16_t h, SPIClass *spiClass, - int8_t cs, int8_t dc, int8_t rst) - : Adafruit_SPITFT(w, h, spiClass, cs, dc, rst) {} -#endif // end !ESP8266 - -/**************************************************************************/ -/*! - @brief Companion code to the initiliazation tables. Reads and issues - a series of LCD commands stored in PROGMEM byte array. - @param addr Flash memory array with commands and data to send -*/ -/**************************************************************************/ -void Adafruit_ST77xx::displayInit(const uint8_t *addr) { - - uint8_t numCommands, cmd, numArgs; - uint16_t ms; - - numCommands = pgm_read_byte(addr++); // Number of commands to follow - while (numCommands--) { // For each command... - cmd = pgm_read_byte(addr++); // Read command - numArgs = pgm_read_byte(addr++); // Number of args to follow - ms = numArgs & ST_CMD_DELAY; // If hibit set, delay follows args - numArgs &= ~ST_CMD_DELAY; // Mask out delay bit - sendCommand(cmd, addr, numArgs); - addr += numArgs; - - if (ms) { - ms = pgm_read_byte(addr++); // Read post-command delay time (ms) - if (ms == 255) - ms = 500; // If 255, delay for 500 ms - delay(ms); - } - } -} - -/**************************************************************************/ -/*! - @brief Initialize ST77xx chip. Connects to the ST77XX over SPI and - sends initialization procedure commands - @param freq Desired SPI clock frequency -*/ -/**************************************************************************/ -void Adafruit_ST77xx::begin(uint32_t freq) { - if (!freq) { - freq = SPI_DEFAULT_FREQ; - } - _freq = freq; - - invertOnCommand = ST77XX_INVON; - invertOffCommand = ST77XX_INVOFF; - - initSPI(freq, spiMode); -} - -/**************************************************************************/ -/*! - @brief Initialization code common to all ST77XX displays - @param cmdList Flash memory array with commands and data to send -*/ -/**************************************************************************/ -void Adafruit_ST77xx::commonInit(const uint8_t *cmdList) { - begin(); - - if (cmdList) { - displayInit(cmdList); - } -} - -/**************************************************************************/ -/*! - @brief SPI displays set an address window rectangle for blitting pixels - @param x Top left corner x coordinate - @param y Top left corner x coordinate - @param w Width of window - @param h Height of window -*/ -/**************************************************************************/ -void Adafruit_ST77xx::setAddrWindow(uint16_t x, uint16_t y, uint16_t w, - uint16_t h) { - x += _xstart; - y += _ystart; - uint32_t xa = ((uint32_t)x << 16) | (x + w - 1); - uint32_t ya = ((uint32_t)y << 16) | (y + h - 1); - - writeCommand(ST77XX_CASET); // Column addr set - SPI_WRITE32(xa); - - writeCommand(ST77XX_RASET); // Row addr set - SPI_WRITE32(ya); - - writeCommand(ST77XX_RAMWR); // write to RAM -} - -/**************************************************************************/ -/*! - @brief Set origin of (0,0) and orientation of TFT display - @param m The index for rotation, from 0-3 inclusive -*/ -/**************************************************************************/ -void Adafruit_ST77xx::setRotation(uint8_t m) { - uint8_t madctl = 0; - - rotation = m % 4; // can't be higher than 3 - - switch (rotation) { - case 0: - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB; - _xstart = _colstart; - _ystart = _rowstart; - break; - case 1: - madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - _ystart = _colstart; - _xstart = _rowstart; - break; - case 2: - madctl = ST77XX_MADCTL_RGB; - _xstart = _colstart; - _ystart = _rowstart; - break; - case 3: - madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; - _ystart = _colstart; - _xstart = _rowstart; - break; - } - - sendCommand(ST77XX_MADCTL, &madctl, 1); -} - -/**************************************************************************/ -/*! - @brief Set origin of (0,0) of display with offsets - @param col The offset from 0 for the column address - @param row The offset from 0 for the row address -*/ -/**************************************************************************/ -void Adafruit_ST77xx::setColRowStart(int8_t col, int8_t row) { - _colstart = col; - _rowstart = row; -} - -/**************************************************************************/ -/*! - @brief Change whether display is on or off - @param enable True if you want the display ON, false OFF - */ -/**************************************************************************/ -void Adafruit_ST77xx::enableDisplay(boolean enable) { - sendCommand(enable ? ST77XX_DISPON : ST77XX_DISPOFF); -} - -/**************************************************************************/ -/*! - @brief Change whether TE pin output is on or off - @param enable True if you want the TE pin ON, false OFF - */ -/**************************************************************************/ -void Adafruit_ST77xx::enableTearing(boolean enable) { - sendCommand(enable ? ST77XX_TEON : ST77XX_TEOFF); -} - -/**************************************************************************/ -/*! - @brief Change whether sleep mode is on or off - @param enable True if you want sleep mode ON, false OFF - */ -/**************************************************************************/ -void Adafruit_ST77xx::enableSleep(boolean enable) { - sendCommand(enable ? ST77XX_SLPIN : ST77XX_SLPOUT); -} - -////////// stuff not actively being used, but kept for posterity -/* - - uint8_t Adafruit_ST77xx::spiread(void) { - uint8_t r = 0; - if (_sid > 0) { - r = shiftIn(_sid, _sclk, MSBFIRST); - } else { - //SID_DDR &= ~_BV(SID); - //int8_t i; - //for (i=7; i>=0; i--) { - // SCLK_PORT &= ~_BV(SCLK); - // r <<= 1; - // r |= (SID_PIN >> SID) & 0x1; - // SCLK_PORT |= _BV(SCLK); - //} - //SID_DDR |= _BV(SID); - - } - return r; - } - - void Adafruit_ST77xx::dummyclock(void) { - - if (_sid > 0) { - digitalWrite(_sclk, LOW); - digitalWrite(_sclk, HIGH); - } else { - // SCLK_PORT &= ~_BV(SCLK); - //SCLK_PORT |= _BV(SCLK); - } - } - uint8_t Adafruit_ST77xx::readdata(void) { - *portOutputRegister(rsport) |= rspin; - - *portOutputRegister(csport) &= ~ cspin; - - uint8_t r = spiread(); - - *portOutputRegister(csport) |= cspin; - - return r; - - } - - uint8_t Adafruit_ST77xx::readcommand8(uint8_t c) { - digitalWrite(_rs, LOW); - - *portOutputRegister(csport) &= ~ cspin; - - spiwrite(c); - - digitalWrite(_rs, HIGH); - pinMode(_sid, INPUT); // input! - digitalWrite(_sid, LOW); // low - spiread(); - uint8_t r = spiread(); - - - *portOutputRegister(csport) |= cspin; - - - pinMode(_sid, OUTPUT); // back to output - return r; - } - - - uint16_t Adafruit_ST77xx::readcommand16(uint8_t c) { - digitalWrite(_rs, LOW); - if (_cs) - digitalWrite(_cs, LOW); - - spiwrite(c); - pinMode(_sid, INPUT); // input! - uint16_t r = spiread(); - r <<= 8; - r |= spiread(); - if (_cs) - digitalWrite(_cs, HIGH); - - pinMode(_sid, OUTPUT); // back to output - return r; - } - - uint32_t Adafruit_ST77xx::readcommand32(uint8_t c) { - digitalWrite(_rs, LOW); - if (_cs) - digitalWrite(_cs, LOW); - spiwrite(c); - pinMode(_sid, INPUT); // input! - - dummyclock(); - dummyclock(); - - uint32_t r = spiread(); - r <<= 8; - r |= spiread(); - r <<= 8; - r |= spiread(); - r <<= 8; - r |= spiread(); - if (_cs) - digitalWrite(_cs, HIGH); - - pinMode(_sid, OUTPUT); // back to output - return r; - } - - */ diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.h b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.h deleted file mode 100644 index 599b299..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.h +++ /dev/null @@ -1,117 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit 1.8" TFT Breakout w/SD card - ----> http://www.adafruit.com/products/358 - The 1.8" TFT shield - ----> https://www.adafruit.com/product/802 - The 1.44" TFT breakout - ----> https://www.adafruit.com/product/2088 - as well as Adafruit raw 1.8" TFT display - ----> http://www.adafruit.com/products/618 - - Check out the links above for our tutorials and wiring diagrams. - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional). - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#ifndef _ADAFRUIT_ST77XXH_ -#define _ADAFRUIT_ST77XXH_ - -#include "Arduino.h" -#include "Print.h" -#include -#include -#include - -#define ST7735_TFTWIDTH_128 128 // for 1.44 and mini -#define ST7735_TFTWIDTH_80 80 // for mini -#define ST7735_TFTHEIGHT_128 128 // for 1.44" display -#define ST7735_TFTHEIGHT_160 160 // for 1.8" and mini display - -#define ST_CMD_DELAY 0x80 // special signifier for command lists - -#define ST77XX_NOP 0x00 -#define ST77XX_SWRESET 0x01 -#define ST77XX_RDDID 0x04 -#define ST77XX_RDDST 0x09 - -#define ST77XX_SLPIN 0x10 -#define ST77XX_SLPOUT 0x11 -#define ST77XX_PTLON 0x12 -#define ST77XX_NORON 0x13 - -#define ST77XX_INVOFF 0x20 -#define ST77XX_INVON 0x21 -#define ST77XX_DISPOFF 0x28 -#define ST77XX_DISPON 0x29 -#define ST77XX_CASET 0x2A -#define ST77XX_RASET 0x2B -#define ST77XX_RAMWR 0x2C -#define ST77XX_RAMRD 0x2E - -#define ST77XX_PTLAR 0x30 -#define ST77XX_TEOFF 0x34 -#define ST77XX_TEON 0x35 -#define ST77XX_MADCTL 0x36 -#define ST77XX_COLMOD 0x3A - -#define ST77XX_MADCTL_MY 0x80 -#define ST77XX_MADCTL_MX 0x40 -#define ST77XX_MADCTL_MV 0x20 -#define ST77XX_MADCTL_ML 0x10 -#define ST77XX_MADCTL_RGB 0x00 - -#define ST77XX_RDID1 0xDA -#define ST77XX_RDID2 0xDB -#define ST77XX_RDID3 0xDC -#define ST77XX_RDID4 0xDD - -// Some ready-made 16-bit ('565') color settings: -#define ST77XX_BLACK 0x0000 -#define ST77XX_WHITE 0xFFFF -#define ST77XX_RED 0xF800 -#define ST77XX_GREEN 0x07E0 -#define ST77XX_BLUE 0x001F -#define ST77XX_CYAN 0x07FF -#define ST77XX_MAGENTA 0xF81F -#define ST77XX_YELLOW 0xFFE0 -#define ST77XX_ORANGE 0xFC00 - -/// Subclass of SPITFT for ST77xx displays (lots in common!) -class Adafruit_ST77xx : public Adafruit_SPITFT { -public: - Adafruit_ST77xx(uint16_t w, uint16_t h, int8_t _CS, int8_t _DC, int8_t _MOSI, - int8_t _SCLK, int8_t _RST = -1, int8_t _MISO = -1); - Adafruit_ST77xx(uint16_t w, uint16_t h, int8_t CS, int8_t RS, - int8_t RST = -1); -#if !defined(ESP8266) - Adafruit_ST77xx(uint16_t w, uint16_t h, SPIClass *spiClass, int8_t CS, - int8_t RS, int8_t RST = -1); -#endif // end !ESP8266 - - void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); - void setRotation(uint8_t r); - void enableDisplay(boolean enable); - void enableTearing(boolean enable); - void enableSleep(boolean enable); - -protected: - uint8_t _colstart = 0, ///< Some displays need this changed to offset - _rowstart = 0, ///< Some displays need this changed to offset - spiMode = SPI_MODE0; ///< Certain display needs MODE3 instead - - void begin(uint32_t freq = 0); - void commonInit(const uint8_t *cmdList); - void displayInit(const uint8_t *addr); - void setColRowStart(int8_t col, int8_t row); -}; - -#endif // _ADAFRUIT_ST77XXH_ diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/README.txt b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/README.txt deleted file mode 100644 index 7689d77..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/README.txt +++ /dev/null @@ -1,25 +0,0 @@ -This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit 1.8" TFT Breakout w/SD card - ----> http://www.adafruit.com/products/358 - The 1.8" TFT shield - ----> https://www.adafruit.com/product/802 - The 1.44" TFT breakout - ----> https://www.adafruit.com/product/2088 - as well as Adafruit raw 1.8" TFT display - ----> http://www.adafruit.com/products/618 - -Check out the links above for our tutorials and wiring diagrams. -These displays use SPI to communicate, 4 or 5 pins are required to -interface (RST is optional). - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -MIT license, all text above must be included in any redistribution. - -Recent Arduino IDE releases include the Library Manager for easy installation. Otherwise, to download, click the DOWNLOAD ZIP button, uncompress and rename the uncompressed folder Adafruit_ST7735. Confirm that the Adafruit_ST7735 folder contains Adafruit_ST7735.cpp, Adafruit_ST7735.h and related source files. Place the Adafruit_ST7735 library folder your ArduinoSketchFolder/Libraries/ folder. You may need to create the Libraries subfolder if its your first library. Restart the IDE. - -Also requires the Adafruit_GFX library for Arduino. diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/displayOnOffTest/displayOnOffTest.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/displayOnOffTest/displayOnOffTest.ino deleted file mode 100644 index fee4a51..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/displayOnOffTest/displayOnOffTest.ino +++ /dev/null @@ -1,246 +0,0 @@ -/* - * This is an example sketch that shows how to toggle the display - * on and off at runtime to avoid screen burn-in. - * - * The sketch also demonstrates how to erase a previous value by re-drawing the - * older value in the screen background color prior to writing a new value in - * the same location. This avoids the need to call fillScreen() to erase the - * entire screen followed by a complete redraw of screen contents. - * - * Originally written by Phill Kelley. BSD license. - * Adapted for ST77xx by Melissa LeBlanc-Williams - */ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include // Hardware-specific library for ST7789 -#include - -#ifdef ADAFRUIT_HALLOWING - #define TFT_CS 39 // Hallowing display control pins: chip select - #define TFT_RST 37 // Display reset - #define TFT_DC 38 // Display data/command select - #define TFT_BACKLIGHT 7 // Display backlight pin - -#elif defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32 - #define TFT_CS 14 - #define TFT_RST 15 - #define TFT_DC 32 - -#elif defined(ESP8266) - #define TFT_CS 4 - #define TFT_RST 16 - #define TFT_DC 5 - -#else - // For the breakout board, you can use any 2 or 3 pins. - // These pins will also work for the 1.8" TFT shield. - #define TFT_CS 10 - #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin - #define TFT_DC 8 -#endif - -#define SerialDebugging true - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and -// SCLK = pin 13. This is the fastest mode of operation and is required if -// using the breakout board's microSD card. - -// For 1.44" and 1.8" TFT with ST7735 (including HalloWing) use: -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -// For 1.3", 1.54", and 2.0" TFT with ST7789: -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 11 // Data out -//#define TFT_SCLK 13 // Clock out -//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -// connect a push button between ground and... -const uint8_t Button_pin = 2; - -// color definitions -const uint16_t Display_Color_Black = 0x0000; -const uint16_t Display_Color_Blue = 0x001F; -const uint16_t Display_Color_Red = 0xF800; -const uint16_t Display_Color_Green = 0x07E0; -const uint16_t Display_Color_Cyan = 0x07FF; -const uint16_t Display_Color_Magenta = 0xF81F; -const uint16_t Display_Color_Yellow = 0xFFE0; -const uint16_t Display_Color_White = 0xFFFF; - -// The colors we actually want to use -uint16_t Display_Text_Color = Display_Color_Black; -uint16_t Display_Backround_Color = Display_Color_Blue; - -// assume the display is off until configured in setup() -bool isDisplayVisible = false; - -// declare size of working string buffers. Basic strlen("d hh:mm:ss") = 10 -const size_t MaxString = 16; - -// the string being displayed on the SSD1331 (initially empty) -char oldTimeString[MaxString] = { 0 }; - -// the interrupt service routine affects this -volatile bool isButtonPressed = false; - - -// interrupt service routine -void senseButtonPressed() { - if (!isButtonPressed) { - isButtonPressed = true; - } -} - - -void displayUpTime() { - - // calculate seconds, truncated to the nearest whole second - unsigned long upSeconds = millis() / 1000; - - // calculate days, truncated to nearest whole day - unsigned long days = upSeconds / 86400; - - // the remaining hhmmss are - upSeconds = upSeconds % 86400; - - // calculate hours, truncated to the nearest whole hour - unsigned long hours = upSeconds / 3600; - - // the remaining mmss are - upSeconds = upSeconds % 3600; - - // calculate minutes, truncated to the nearest whole minute - unsigned long minutes = upSeconds / 60; - - // the remaining ss are - upSeconds = upSeconds % 60; - - // allocate a buffer - char newTimeString[MaxString] = { 0 }; - - // construct the string representation - sprintf( - newTimeString, - "%lu %02lu:%02lu:%02lu", - days, hours, minutes, upSeconds - ); - - // has the time string changed since the last tft update? - if (strcmp(newTimeString,oldTimeString) != 0) { - - // yes! home the cursor - tft.setCursor(0,0); - - // change the text color to the background color - tft.setTextColor(Display_Backround_Color); - - // redraw the old value to erase - tft.print(oldTimeString); - - // home the cursor - tft.setCursor(0,0); - - // change the text color to foreground color - tft.setTextColor(Display_Text_Color); - - // draw the new time value - tft.print(newTimeString); - - // and remember the new value - strcpy(oldTimeString,newTimeString); - } -} - -void setup() { - - // button press pulls pin LOW so configure HIGH - pinMode(Button_pin,INPUT_PULLUP); - - // use an interrupt to sense when the button is pressed - attachInterrupt(digitalPinToInterrupt(Button_pin), senseButtonPressed, FALLING); - - #if (SerialDebugging) - Serial.begin(115200); while (!Serial); Serial.println(); - #endif - - // settling time - delay(250); - - // ignore any power-on-reboot garbage - isButtonPressed = false; - - #ifdef ADAFRUIT_HALLOWING - // HalloWing is a special case. It uses a ST7735R display just like the - // breakout board, but the orientation and backlight control are different. - tft.initR(INITR_HALLOWING); // Initialize HalloWing-oriented screen - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - #else - // Use this initializer if using a 1.8" TFT screen: - tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab - - // OR use this initializer (uncomment) if using a 1.44" TFT: - //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab - - // OR use this initializer (uncomment) if using a 0.96" 180x60 TFT: - //tft.initR(INITR_MINI160x80); // Init ST7735S mini display - - // OR use this initializer (uncomment) if using a 1.54" 240x240 TFT: - //tft.init(240, 240); // Init ST7789 240x240 - - // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: - //tft.init(240, 320); // Init ST7789 320x240 - - // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here - // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you - // may end up with a black screen some times, or all the time. - //tft.setSPISpeed(40000000); - #endif - - // initialise the display - tft.setFont(); - tft.fillScreen(Display_Backround_Color); - tft.setTextColor(Display_Text_Color); - tft.setTextSize(1); - - // the display is now on - isDisplayVisible = true; - -} - - -void loop() { - - // unconditional display, regardless of whether display is visible - displayUpTime(); - - // has the button been pressed? - if (isButtonPressed) { - - // yes! toggle display visibility - isDisplayVisible = !isDisplayVisible; - - // apply - tft.enableDisplay(isDisplayVisible); - - #if (SerialDebugging) - Serial.print("button pressed @ "); - Serial.print(millis()); - Serial.print(", display is now "); - Serial.println((isDisplayVisible ? "ON" : "OFF")); - #endif - - // confirm button handled - isButtonPressed = false; - - } - - // no need to be in too much of a hurry - delay(100); - -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest/graphicstest.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest/graphicstest.ino deleted file mode 100644 index 492ef3c..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest/graphicstest.ino +++ /dev/null @@ -1,371 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit 1.8" TFT Breakout w/SD card - ----> http://www.adafruit.com/products/358 - The 1.8" TFT shield - ----> https://www.adafruit.com/product/802 - The 1.44" TFT breakout - ----> https://www.adafruit.com/product/2088 - The 1.14" TFT breakout - ----> https://www.adafruit.com/product/4383 - The 1.3" TFT breakout - ----> https://www.adafruit.com/product/4313 - The 1.54" TFT breakout - ----> https://www.adafruit.com/product/3787 - The 1.69" TFT breakout - ----> https://www.adafruit.com/product/5206 - The 2.0" TFT breakout - ----> https://www.adafruit.com/product/4311 - as well as Adafruit raw 1.8" TFT display - ----> http://www.adafruit.com/products/618 - - Check out the links above for our tutorials and wiring diagrams. - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional). - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include // Hardware-specific library for ST7789 -#include - -#if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32 - #define TFT_CS 14 - #define TFT_RST 15 - #define TFT_DC 32 - -#elif defined(ESP8266) - #define TFT_CS 4 - #define TFT_RST 16 - #define TFT_DC 5 - -#else - // For the breakout board, you can use any 2 or 3 pins. - // These pins will also work for the 1.8" TFT shield. - #define TFT_CS 10 - #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin - #define TFT_DC 8 -#endif - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and -// SCLK = pin 13. This is the fastest mode of operation and is required if -// using the breakout board's microSD card. - -// For 1.44" and 1.8" TFT with ST7735 use: -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -// For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789: -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); - - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 11 // Data out -//#define TFT_SCLK 13 // Clock out - -// For ST7735-based displays, we will use this call -//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -// OR for the ST7789-based displays, we will use this call -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! ST77xx TFT Test")); - - // Use this initializer if using a 1.8" TFT screen: - tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab - - // OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare: - // tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab - - // OR use this initializer (uncomment) if using a 1.44" TFT: - //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab - - // OR use this initializer (uncomment) if using a 0.96" 160x80 TFT: - //tft.initR(INITR_MINI160x80); // Init ST7735S mini display - // OR use this initializer (uncomment) if using a 0.96" 160x80 TFT with - // plug-in FPC (if you see the display is inverted!) - //tft.initR(INITR_MINI160x80_PLUGIN); // Init ST7735S mini display - - // OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT: - //tft.init(240, 240); // Init ST7789 240x240 - - // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT: - //tft.init(240, 280); // Init ST7789 280x240 - - // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: - //tft.init(240, 320); // Init ST7789 320x240 - - // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT: - //tft.init(135, 240); // Init ST7789 240x135 - - // OR use this initializer (uncomment) if using a 1.47" 172x320 TFT: - //tft.init(172, 320); // Init ST7789 172x320 - - // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here - // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you - // may end up with a black screen some times, or all the time. - //tft.setSPISpeed(40000000); - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_feather_esp32s2_tft/graphicstest_feather_esp32s2_tft.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_feather_esp32s2_tft/graphicstest_feather_esp32s2_tft.ino deleted file mode 100644 index 809a812..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_feather_esp32s2_tft/graphicstest_feather_esp32s2_tft.ino +++ /dev/null @@ -1,302 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit ESP32-S2 TFT Feather - ----> http://www.adafruit.com/products/5300 - - Check out the links above for our tutorials and wiring diagrams. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7789 -#include - -// Use dedicated hardware SPI pins -Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! Feather TFT Test")); - - // turn on backlite - pinMode(TFT_BACKLITE, OUTPUT); - digitalWrite(TFT_BACKLITE, HIGH); - - // turn on the TFT / I2C power supply - pinMode(TFT_I2C_POWER, OUTPUT); - digitalWrite(TFT_I2C_POWER, HIGH); - delay(10); - - // initialize TFT - tft.init(135, 240); // Init ST7789 240x135 - tft.setRotation(3); - tft.fillScreen(ST77XX_BLACK); - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur " - "adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, " - "fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor " - "neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet " - "ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a " - "tortor imperdiet posuere. ", - ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width() / 2, tft.height() / 2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = 0; x < tft.width(); x += 6) { - tft.drawLine(0, 0, x, tft.height() - 1, color); - delay(0); - } - for (int16_t y = 0; y < tft.height(); y += 6) { - tft.drawLine(0, 0, tft.width() - 1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = 0; x < tft.width(); x += 6) { - tft.drawLine(tft.width() - 1, 0, x, tft.height() - 1, color); - delay(0); - } - for (int16_t y = 0; y < tft.height(); y += 6) { - tft.drawLine(tft.width() - 1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = 0; x < tft.width(); x += 6) { - tft.drawLine(0, tft.height() - 1, x, 0, color); - delay(0); - } - for (int16_t y = 0; y < tft.height(); y += 6) { - tft.drawLine(0, tft.height() - 1, tft.width() - 1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = 0; x < tft.width(); x += 6) { - tft.drawLine(tft.width() - 1, tft.height() - 1, x, 0, color); - delay(0); - } - for (int16_t y = 0; y < tft.height(); y += 6) { - tft.drawLine(tft.width() - 1, tft.height() - 1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y = 0; y < tft.height(); y += 5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x = 0; x < tft.width(); x += 5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = 0; x < tft.width(); x += 6) { - tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, - color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x = tft.width() - 1; x > 6; x -= 6) { - tft.fillRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, - color1); - tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, - color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x = radius; x < tft.width(); x += radius * 2) { - for (int16_t y = radius; y < tft.height(); y += radius * 2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x = 0; x < tft.width() + radius; x += radius * 2) { - for (int16_t y = 0; y < tft.height() + radius; y += radius * 2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width() / 2; - int x = tft.height() - 1; - int y = 0; - int z = tft.width(); - for (t = 0; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x -= 4; - y += 4; - z -= 4; - color += 100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for (t = 0; t <= 4; t += 1) { - int x = 0; - int y = 0; - int w = tft.width() - 2; - int h = tft.height() - 2; - for (i = 0; i <= 16; i += 1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x += 2; - y += 3; - w -= 4; - h -= 6; - color += 1100; - } - color += 100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 5, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 12, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 70, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 78, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 78, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 12, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 78, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 78, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 12, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m0/graphicstest_hallowing_m0.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m0/graphicstest_hallowing_m0.ino deleted file mode 100644 index 60f00ad..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m0/graphicstest_hallowing_m0.ino +++ /dev/null @@ -1,295 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the HalloWing M0 Express - ----> http://www.adafruit.com/products/3900 - - Check out the links above for our tutorials and wiring diagrams. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include - -#define TFT_CS 39 // Hallowing display control pins: chip select -#define TFT_RST 37 // Display reset -#define TFT_DC 38 // Display data/command select -#define TFT_BACKLIGHT 7 // Display backlight pin - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 29 // Data out -//#define TFT_SCLK 30 // Clock out -//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! HalloWing TFT Test")); - - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - tft.initR(INITR_HALLOWING); // Initialize HalloWing-oriented screen - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m4/graphicstest_hallowing_m4.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m4/graphicstest_hallowing_m4.ino deleted file mode 100644 index 9d088e9..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_hallowing_m4/graphicstest_hallowing_m4.ino +++ /dev/null @@ -1,296 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the HalloWing M4 Express - ----> http://www.adafruit.com/products/4300 - - Check out the links above for our tutorials and wiring diagrams. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7789 -#include - -#define TFT_CS 44 // HalloWing M4 display control pins: chip select -#define TFT_RST 46 // Display reset -#define TFT_DC 45 // Display data/command select -#define TFT_BACKLIGHT 47 // Display backlight pin - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. -Adafruit_ST7789 tft = Adafruit_ST7789(&SPI1, TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 41 // Data out -//#define TFT_SCLK 42 // Clock out -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! HalloWing TFT Test")); - - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - tft.init(240, 240); // Initialize ST7789 screen - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_pybadge_pygamer/graphicstest_pybadge_pygamer.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_pybadge_pygamer/graphicstest_pybadge_pygamer.ino deleted file mode 100644 index 39e4f28..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_pybadge_pygamer/graphicstest_pybadge_pygamer.ino +++ /dev/null @@ -1,299 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the following products with integrated displays - The PyBadge - ----> http://www.adafruit.com/products/4200 - The PyGamer - ----> http://www.adafruit.com/products/4242 - - Check out the links above for our tutorials and wiring diagrams. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include - -#define TFT_CS 44 // PyBadge/PyGamer display control pins: chip select -#define TFT_RST 46 // Display reset -#define TFT_DC 45 // Display data/command select -#define TFT_BACKLIGHT 47 // Display backlight pin - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. -Adafruit_ST7735 tft = Adafruit_ST7735(&SPI1, TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 41 // Data out -//#define TFT_SCLK 42 // Clock out -//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! PyBadge/PyGamer TFT Test")); - - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - tft.initR(INITR_BLACKTAB); // Initialize ST7735R screen - tft.setRotation(1); - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_st7789/graphicstest_st7789.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_st7789/graphicstest_st7789.ino deleted file mode 100644 index 2de13e5..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_st7789/graphicstest_st7789.ino +++ /dev/null @@ -1,345 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - This example works with the 1.14" TFT breakout - ----> https://www.adafruit.com/product/4383 - The 1.3" TFT breakout - ----> https://www.adafruit.com/product/4313 - The 1.47" TFT breakout - ----> https://www.adafruit.com/product/5393 - The 1.54" TFT breakout - ----> https://www.adafruit.com/product/3787 - The 1.69" TFT breakout - ----> https://www.adafruit.com/product/5206 - The 1.9" TFT breakout - ----> https://www.adafruit.com/product/5394 - The 2.0" TFT breakout - ----> https://www.adafruit.com/product/4311 - - - Check out the links above for our tutorials and wiring diagrams. - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional). - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7789 -#include - -#if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32 - #define TFT_CS 14 - #define TFT_RST 15 - #define TFT_DC 32 - -#elif defined(ESP8266) - #define TFT_CS 4 - #define TFT_RST 16 - #define TFT_DC 5 - -#else - // For the breakout board, you can use any 2 or 3 pins. - // These pins will also work for the 1.8" TFT shield. - #define TFT_CS 10 - #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin - #define TFT_DC 8 -#endif - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and -// SCLK = pin 13. This is the fastest mode of operation and is required if -// using the breakout board's microSD card. - -Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI 11 // Data out -//#define TFT_SCLK 13 // Clock out - -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! ST77xx TFT Test")); - - // Use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT: - tft.init(240, 240); // Init ST7789 240x240 - - // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT: - //tft.init(240, 280); // Init ST7789 280x240 - - // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: - //tft.init(240, 320); // Init ST7789 320x240 - - // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT: - //tft.init(135, 240); // Init ST7789 240x135 - - // OR use this initializer (uncomment) if using a 1.47" 172x320 TFT: - //tft.init(172, 320); // Init ST7789 172x320 - - // OR use this initializer (uncomment) if using a 1.9" 170x320 TFT: - //tft.init(170, 320); // Init ST7789 170x320 - - // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here - // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you - // may end up with a black screen some times, or all the time. - //tft.setSPISpeed(40000000); - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_tft_gizmo/graphicstest_tft_gizmo.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_tft_gizmo/graphicstest_tft_gizmo.ino deleted file mode 100644 index 84c892d..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/graphicstest_tft_gizmo/graphicstest_tft_gizmo.ino +++ /dev/null @@ -1,307 +0,0 @@ -/************************************************************************** - This is a library for several Adafruit displays based on ST77* drivers. - - Works with the Adafruit TFT Gizmo - ----> http://www.adafruit.com/products/4367 - - Check out the links above for our tutorials and wiring diagrams. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - **************************************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7789 -#include - -// Because of the limited number of pins available on the Circuit Playground Boards -// Software SPI is used -#define TFT_CS 0 -#define TFT_RST -1 // Or set to -1 and connect to Arduino RESET pin -#define TFT_DC 1 -#define TFT_BACKLIGHT PIN_A3 // Display backlight pin - -// You will need to use Adafruit's CircuitPlayground Express Board Definition -// for Gizmos rather than the Arduino version since there are additional SPI -// ports exposed. -#if (SPI_INTERFACES_COUNT == 1) - SPIClass* spi = &SPI; -#else - SPIClass* spi = &SPI1; -#endif - -// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique -// to each board and not reassignable. -Adafruit_ST7789 tft = Adafruit_ST7789(spi, TFT_CS, TFT_DC, TFT_RST); - -// OPTION 2 lets you interface the display using ANY TWO or THREE PINS, -// tradeoff being that performance is not as fast as hardware SPI above. -//#define TFT_MOSI PIN_WIRE_SDA // Data out -//#define TFT_SCLK PIN_WIRE_SCL // Clock out -//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -float p = 3.1415926; - -void setup(void) { - Serial.begin(9600); - Serial.print(F("Hello! Gizmo TFT Test")); - - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - tft.init(240, 240); // Init ST7789 240x240 - tft.setRotation(2); - - Serial.println(F("Initialized")); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(4000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - delay(0); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - delay(0); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - delay(0); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.width()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int i; - int t; - for(t = 0 ; t <= 4; t+=1) { - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - for(i = 0 ; i <= 16; i+=1) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } - color+=100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/basic/basic.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/basic/basic.ino deleted file mode 100644 index 6c63792..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/basic/basic.ino +++ /dev/null @@ -1,165 +0,0 @@ -#include -#include -#include -#include "Adafruit_miniTFTWing.h" - -Adafruit_miniTFTWing ss; -#define TFT_RST -1 // we use the seesaw for resetting to save a pin - -#ifdef ESP8266 - #define TFT_CS 0 - #define TFT_DC 15 -#elif defined(ESP32) && !defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2) - #define TFT_CS 15 - #define TFT_DC 33 -#elif defined(TEENSYDUINO) - #define TFT_DC 10 - #define TFT_CS 4 -#elif defined(ARDUINO_STM32_FEATHER) - #define TFT_DC PB4 - #define TFT_CS PA15 -#elif defined(ARDUINO_NRF52832_FEATHER) /* BSP 0.6.5 and higher! */ - #define TFT_DC 11 - #define TFT_CS 31 -#elif defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) - #define TFT_DC P5_4 - #define TFT_CS P5_3 -#else - // Anything else, defaults! - #define TFT_CS 5 - #define TFT_DC 6 -#endif - -Adafruit_ST7789 tft_7789 = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); -Adafruit_ST7735 tft_7735 = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -// we'll assign it later -Adafruit_ST77xx *tft = NULL; -uint32_t version; - -void setup() { - Serial.begin(115200); - - while (!Serial) delay(10); // Wait until serial console is opened - - if (!ss.begin()) { - Serial.println("seesaw couldn't be found!"); - while(1); - } - - version = ((ss.getVersion() >> 16) & 0xFFFF); - Serial.print("Version: "); Serial.println(version); - if (version == 3322) { - Serial.println("Version 2 TFT FeatherWing found"); - - } else { - Serial.println("Version 1 TFT FeatherWing found"); - } - - ss.tftReset(); // reset the display - ss.setBacklight(TFTWING_BACKLIGHT_ON); // turn off the backlight - - if (version == 3322) { - tft_7789.init(135, 240); - tft = &tft_7789; - } else { - tft_7735.initR(INITR_MINI160x80); // initialize a ST7735S chip, mini display - tft = &tft_7735; - } - tft->setRotation(1); - Serial.println("TFT initialized"); - - tft->fillScreen(ST77XX_RED); - delay(100); - tft->fillScreen(ST77XX_GREEN); - delay(100); - tft->fillScreen(ST77XX_BLUE); - delay(100); - tft->fillScreen(ST77XX_BLACK); -} - -void loop() { - delay(10); - - uint32_t buttons = ss.readButtons(); - //Serial.println(buttons, BIN); - - uint16_t color; - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_LEFT)) { - Serial.println("LEFT"); - color = ST77XX_WHITE; - } - if (version == 3322) { - tft->fillTriangle(200, 45, 200, 85, 220, 65, color); - } else { - tft->fillTriangle(150, 30, 150, 50, 160, 40, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_RIGHT)) { - Serial.println("RIGHT"); - color = ST77XX_WHITE; - } - if (version == 3322) { - tft->fillTriangle(120, 45, 120, 85, 100, 65, color); - } else { - tft->fillTriangle(120, 30, 120, 50, 110, 40, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_DOWN)) { - Serial.println("DOWN"); - color = ST77XX_WHITE; - } - if (version == 3322) { - tft->fillTriangle(140, 25, 180, 25, 160, 10, color); - } else { - tft->fillTriangle(125, 26, 145, 26, 135, 16, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_UP)) { - Serial.println("UP"); - color = ST77XX_WHITE; - } - if (version == 3322) { - tft->fillTriangle(140, 100, 180, 100, 160, 120, color); - } else { - tft->fillTriangle(125, 53, 145, 53, 135, 63, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_A)) { - Serial.println("A"); - color = ST7735_GREEN; - } - if (version == 3322) { - tft->fillCircle(40, 100, 20, color); - } else { - tft->fillCircle(30, 57, 10, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_B)) { - Serial.println("B"); - color = ST77XX_YELLOW; - } - if (version == 3322) { - tft->fillCircle(40, 30, 20, color); - } else { - tft->fillCircle(30, 18, 10, color); - } - - color = ST77XX_BLACK; - if (! (buttons & TFTWING_BUTTON_SELECT)) { - Serial.println("SELECT"); - color = ST77XX_RED; - } - if (version == 3322) { - tft->fillCircle(160, 65, 20, color); - } else { - tft->fillCircle(80, 40, 7, color); - } -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/graphicstest_v1_160x80/graphicstest_v1_160x80.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/graphicstest_v1_160x80/graphicstest_v1_160x80.ino deleted file mode 100644 index aa16dcd..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/miniTFTWing/graphicstest_v1_160x80/graphicstest_v1_160x80.ino +++ /dev/null @@ -1,303 +0,0 @@ -/*************************************************** - This is a library for the Adafruit 0.96" Mini TFT Featherwing - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include "Adafruit_miniTFTWing.h" - -Adafruit_miniTFTWing ss; -#define TFT_RST -1 // we use the seesaw for resetting to save a pin - - -#ifdef ESP8266 - #define TFT_CS 0 - #define TFT_DC 15 -#elif defined(ESP32) && !defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2) - #define TFT_CS 15 - #define TFT_DC 33 -#elif defined(TEENSYDUINO) - #define TFT_DC 10 - #define TFT_CS 4 -#elif defined(ARDUINO_STM32_FEATHER) - #define TFT_DC PB4 - #define TFT_CS PA15 -#elif defined(ARDUINO_NRF52832_FEATHER) /* BSP 0.6.5 and higher! */ - #define TFT_DC 11 - #define TFT_CS 31 -#elif defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) - #define TFT_DC P5_4 - #define TFT_CS P5_3 -#else - // Anything else, defaults! - #define TFT_CS 5 - #define TFT_DC 6 -#endif - -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - - -float p = 3.1415926; - -void setup(void) { - Serial.begin(115200); - - Serial.print("Hello! ST77xx TFT Test"); - - if (!ss.begin()) { - Serial.println("seesaw init error!"); - while(1); - } - else Serial.println("seesaw started"); - - ss.tftReset(); - ss.setBacklight(0x0); //set the backlight fully on - - // Use this initializer (uncomment) if you're using a 0.96" 180x60 TFT - tft.initR(INITR_MINI160x80); // initialize a ST7735S chip, mini display - - tft.setRotation(3); - - Serial.println("Initialized"); - - uint16_t time = millis(); - tft.fillScreen(ST77XX_BLACK); - time = millis() - time; - - Serial.println(time, DEC); - delay(500); - - // large block of text - tft.fillScreen(ST77XX_BLACK); - testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE); - delay(1000); - - // tft print function! - tftPrintTest(); - delay(1000); - - // a single pixel - tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN); - delay(500); - - // line draw test - testlines(ST77XX_YELLOW); - delay(500); - - // optimized lines - testfastlines(ST77XX_RED, ST77XX_BLUE); - delay(500); - - testdrawrects(ST77XX_GREEN); - delay(500); - - testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA); - delay(500); - - tft.fillScreen(ST77XX_BLACK); - testfillcircles(10, ST77XX_BLUE); - testdrawcircles(10, ST77XX_WHITE); - delay(500); - - testroundrects(); - delay(500); - - testtriangles(); - delay(500); - - mediabuttons(); - delay(500); - - Serial.println("done"); - delay(1000); -} - -void loop() { - tft.invertDisplay(true); - delay(500); - tft.invertDisplay(false); - delay(500); -} - -void testlines(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, 0, x, tft.height()-1, color); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, 0, tft.width()-1, y, color); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, 0, 0, y, color); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(0, tft.height()-1, x, 0, color); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); - } - - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.width(); x+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); - } - for (int16_t y=0; y < tft.height(); y+=6) { - tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); - } -} - -void testdrawtext(char *text, uint16_t color) { - tft.setCursor(0, 0); - tft.setTextColor(color); - tft.setTextWrap(true); - tft.print(text); -} - -void testfastlines(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t y=0; y < tft.height(); y+=5) { - tft.drawFastHLine(0, y, tft.width(), color1); - } - for (int16_t x=0; x < tft.width(); x+=5) { - tft.drawFastVLine(x, 0, tft.height(), color2); - } -} - -void testdrawrects(uint16_t color) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=0; x < tft.height(); x+=6) { - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); - } -} - -void testfillrects(uint16_t color1, uint16_t color2) { - tft.fillScreen(ST77XX_BLACK); - for (int16_t x=tft.height()-1; x > 6; x-=6) { - tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); - tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); - } -} - -void testfillcircles(uint8_t radius, uint16_t color) { - for (int16_t x=radius; x < tft.width(); x+=radius*2) { - for (int16_t y=radius; y < tft.height(); y+=radius*2) { - tft.fillCircle(x, y, radius, color); - } - } -} - -void testdrawcircles(uint8_t radius, uint16_t color) { - for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { - for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { - tft.drawCircle(x, y, radius, color); - } - } -} - -void testtriangles() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 0xF800; - int t; - int w = tft.width()/2; - int x = tft.height()-1; - int y = 0; - int z = tft.width(); - for(t = 0 ; t <= 15; t++) { - tft.drawTriangle(w, y, y, x, z, x, color); - x-=4; - y+=4; - z-=4; - color+=100; - } -} - -void testroundrects() { - tft.fillScreen(ST77XX_BLACK); - uint16_t color = 100; - int x = 0; - int y = 0; - int w = tft.width()-2; - int h = tft.height()-2; - while ((w > 10) && (h > 10)) { - tft.drawRoundRect(x, y, w, h, 5, color); - x+=2; - y+=3; - w-=4; - h-=6; - color+=1100; - } -} - -void tftPrintTest() { - tft.setTextWrap(false); - tft.fillScreen(ST77XX_BLACK); - tft.setCursor(0, 0); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - delay(1500); - tft.setCursor(0, 0); - tft.fillScreen(ST77XX_BLACK); - tft.setTextColor(ST77XX_WHITE); - tft.setTextSize(0); - tft.println("Hello World!"); - tft.setTextSize(1); - tft.setTextColor(ST77XX_GREEN); - tft.print(p, 6); - tft.println(" Want pi?"); - tft.println(" "); - tft.print(8675309, HEX); // print 8,675,309 out in HEX! - tft.println(" Print HEX!"); - tft.println(" "); - tft.setTextColor(ST77XX_WHITE); - tft.println("Sketch has been"); - tft.println("running for: "); - tft.setTextColor(ST77XX_MAGENTA); - tft.print(millis() / 1000); - tft.setTextColor(ST77XX_WHITE); - tft.print(" seconds."); -} - -void mediabuttons() { - // play - tft.fillScreen(ST77XX_BLACK); - tft.fillRoundRect(0, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillTriangle(17, 20, 17, 60, 65, 40, ST77XX_RED); - delay(500); - // pause - tft.fillRoundRect(82, 10, 78, 60, 8, ST77XX_WHITE); - tft.fillRoundRect(96, 18, 20, 45, 5, ST77XX_GREEN); - tft.fillRoundRect(127, 18, 20, 45, 5, ST77XX_GREEN); - delay(500); - // play color - tft.fillTriangle(17, 20, 17, 60, 65, 40, ST77XX_BLUE); - delay(50); - // pause color - tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED); - tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED); - // play color - tft.fillTriangle(17, 20, 17, 60, 65, 40, ST77XX_GREEN); -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/rotationtest/rotationtest.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/rotationtest/rotationtest.ino deleted file mode 100644 index 18cf220..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/rotationtest/rotationtest.ino +++ /dev/null @@ -1,382 +0,0 @@ -/*************************************************** - This is a library for the Adafruit 1.8" SPI display. - -This library works with the Adafruit 1.8" TFT Breakout w/SD card - ----> http://www.adafruit.com/products/358 -The 1.8" TFT shield - ----> https://www.adafruit.com/product/802 -The 1.44" TFT breakout - ----> https://www.adafruit.com/product/2088 -The 1.14" TFT breakout -----> https://www.adafruit.com/product/4383 -The 1.3" TFT breakout - ----> https://www.adafruit.com/product/4313 -The 1.54" TFT breakout - ----> https://www.adafruit.com/product/3787 -The 2.0" TFT breakout - ----> https://www.adafruit.com/product/4311 -as well as Adafruit raw 1.8" TFT display - ----> http://www.adafruit.com/products/618 - -This also works with many of the products with integrated displays - -The HalloWing M0 Express - ----> http://www.adafruit.com/products/3900 -The PyBadge - ----> http://www.adafruit.com/products/4200 -The PyGamer - ----> http://www.adafruit.com/products/4242 -The HalloWing M4 Express - ----> http://www.adafruit.com/products/4300 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include // Core graphics library -#include // Hardware-specific library for ST7735 -#include // Hardware-specific library for ST7789 -#include - -// For the breakout, you can use any 2 or 3 pins -// These pins will also work for the 1.8" TFT shield -#ifdef ADAFRUIT_HALLOWING - #define TFT_CS 39 // Hallowing display control pins: chip select - #define TFT_RST 37 // Display reset - #define TFT_DC 38 // Display data/command select - #define TFT_BACKLIGHT 7 // Display backlight pin - -#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - #define TFT_CS 44 // PyBadge/PyGamer display control pins: chip select - #define TFT_RST 46 // Display reset - #define TFT_DC 45 // Display data/command select - #define TFT_BACKLIGHT 47 // Display backlight pin - -#elif defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32 - #define TFT_CS 14 - #define TFT_RST 15 - #define TFT_DC 32 - -#elif defined(ESP8266) - #define TFT_CS 4 - #define TFT_RST 16 - #define TFT_DC 5 - // -#else - // For the breakout board, you can use any 2 or 3 pins. - // These pins will also work for the 1.8" TFT shield. - #define TFT_CS 10 - #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin - #define TFT_DC 8 -#endif - -// Option 1 (recommended): must use the hardware SPI pins -// (for UNO that's sclk = 13 and sid = 11) and pin 10 must be -// an output. This is much faster - also required if you want -// to use the microSD card (see the image drawing example) -#if defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - // For Hallowing M4 Express - Adafruit_ST7789 tft = Adafruit_ST7789(&SPI1, TFT_CS, TFT_DC, TFT_RST); -#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - // For PyBadge and PyGamer - Adafruit_ST7735 tft = Adafruit_ST7735(&SPI1, TFT_CS, TFT_DC, TFT_RST); -#else - // For 1.44" and 1.8" TFT with ST7735 (including HalloWing) use: - Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - - // For 1.14", 1.3", 1.54", and 2.0" TFT with ST7789: - //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); -#endif - -// Option 2: use any pins but a little slower! -//#define TFT_SCLK 13 // set these to be whatever pins you like! -//#define TFT_MOSI 11 // set these to be whatever pins you like! -//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); - -void setup(void) { - Serial.begin(9600); - Serial.print("Hello! Adafruit ST77XX rotation test"); - - #ifdef ADAFRUIT_HALLOWING_M4_EXPRESS - // HalloWing M4 is a special case. It uses a ST7789 display just like the - // breakout board, but the orientation and backlight control are different. - tft.init(240, 240); // Initialize ST7789 screen - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - #elif ADAFRUIT_HALLOWING - // HalloWing is a special case. It uses a ST7735R display just like the - // breakout board, but the orientation and backlight control are different. - tft.initR(INITR_HALLOWING); // Initialize HalloWing-oriented screen - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - #elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - tft.initR(INITR_BLACKTAB); // Initialize ST7735R screen - tft.setRotation(1); - pinMode(TFT_BACKLIGHT, OUTPUT); - digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on - - #else - // Use this initializer if you're using a 1.8" TFT - tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab - - // Use this initializer (uncomment) if you're using a 1.44" TFT - //tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab - - // Use this initializer (uncomment) if you're using a 0.96" 180x60 TFT - //tft.initR(INITR_MINI160x80); // initialize a ST7735S chip, mini display - - // Use this initializer (uncomment) if you're using a 1.54" 240x240 TFT - //tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels - - // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: - //tft.init(240, 320); // Init ST7789 320x240 - - // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT: - //tft.init(135, 240); // Init ST7789 240x135 - - // OR use this initializer (uncomment) if using a 1.47" 174x320 TFT: - //tft.init(174, 320); // Init ST7789 174x320 - - // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here - // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you - // may end up with a black screen some times, or all the time. - //tft.setSPISpeed(40000000); -#endif - - Serial.println("init"); - - tft.setTextWrap(false); // Allow text to run off right edge - tft.fillScreen(ST77XX_BLACK); - - Serial.println("This is a test of the rotation capabilities of the TFT library!"); - Serial.println("Press (or type a character) to advance"); -} - -void loop(void) { - rotateLine(); - rotateText(); - rotatePixel(); - rotateFastline(); - rotateDrawrect(); - rotateFillrect(); - rotateDrawcircle(); - rotateFillcircle(); - rotateTriangle(); - rotateFillTriangle(); - rotateRoundRect(); - rotateFillRoundRect(); - rotateChar(); - rotateString(); -} - -void rotateText() { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.setCursor(0, 30); - tft.setTextColor(ST77XX_RED); - tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_YELLOW); - tft.setTextSize(2); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_GREEN); - tft.setTextSize(3); - tft.println("Hello World!"); - tft.setTextColor(ST77XX_BLUE); - tft.setTextSize(4); - tft.print(1234.567); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateFillcircle(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.fillCircle(10, 30, 10, ST77XX_YELLOW); - - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateDrawcircle(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawCircle(10, 30, 10, ST77XX_YELLOW); - - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateFillrect(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.fillRect(10, 20, 10, 20, ST77XX_GREEN); - - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateDrawrect(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawRect(10, 20, 10, 20, ST77XX_GREEN); - - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateFastline(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawFastHLine(0, 20, tft.width(), ST77XX_RED); - tft.drawFastVLine(20, 0, tft.height(), ST77XX_BLUE); - - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateLine(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawLine(tft.width()/2, tft.height()/2, 0, 0, ST77XX_RED); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotatePixel(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawPixel(10,20, ST77XX_WHITE); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateTriangle(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawTriangle(20, 10, 10, 30, 30, 30, ST77XX_GREEN); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateFillTriangle(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.fillTriangle(20, 10, 10, 30, 30, 30, ST77XX_RED); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateRoundRect(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawRoundRect(20, 10, 25, 15, 5, ST77XX_BLUE); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateFillRoundRect(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.fillRoundRect(20, 10, 25, 15, 5, ST77XX_CYAN); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateChar(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.drawChar(25, 15, 'A', ST77XX_WHITE, ST77XX_WHITE, 1); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} - -void rotateString(void) { - for (uint8_t i=0; i<4; i++) { - tft.fillScreen(ST77XX_BLACK); - Serial.println(tft.getRotation(), DEC); - - tft.setCursor(8, 25); - tft.setTextSize(1); - tft.setTextColor(ST77XX_WHITE); - tft.print("Adafruit Industries"); - while (!Serial.available()); - Serial.read(); Serial.read(); Serial.read(); - - tft.setRotation(tft.getRotation()+1); - } -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/seesaw_shield18_test/seesaw_shield18_test.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/seesaw_shield18_test/seesaw_shield18_test.ino deleted file mode 100644 index 02bf727..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/seesaw_shield18_test/seesaw_shield18_test.ino +++ /dev/null @@ -1,338 +0,0 @@ -/*************************************************** - This is an example sketch for the Adafruit 1.8" TFT shield with joystick - This example is for the Seesaw version - ----> http://www.adafruit.com/products/802 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 pins are required to - interface - One pin is also needed for the joystick, we use analog 3 - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include -#include -#include -// Be sure to install Adafruit seesaw library! -#include -#include - -Adafruit_TFTShield18 ss; - - -// TFT display and SD card will share the hardware SPI interface. -// Hardware SPI pins are specific to the Arduino board type and -// cannot be remapped to alternate pins. For Arduino Uno, -// Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK. -#define SD_CS 4 // Chip select line for SD card on Shield -#define TFT_CS 10 // Chip select line for TFT display on Shield -#define TFT_DC 8 // Data/command line for TFT on Shield -#define TFT_RST -1 // Reset line for TFT is handled by seesaw! - -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -void setup(void) { - Serial.begin(9600); - while (!Serial); - - // start by disabling both SD and TFT - pinMode(TFT_CS, OUTPUT); - digitalWrite(TFT_CS, HIGH); - pinMode(SD_CS, OUTPUT); - digitalWrite(SD_CS, HIGH); - - // Start seesaw helper chip - if (!ss.begin()){ - Serial.println("seesaw could not be initialized!"); - while(1); - } - Serial.println("seesaw started"); - Serial.print("Version: "); Serial.println(ss.getVersion(), HEX); - - // Start set the backlight off - ss.setBacklight(TFTSHIELD_BACKLIGHT_OFF); - // Reset the TFT - ss.tftReset(); - - // Initialize 1.8" TFT - tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab - - Serial.println("TFT OK!"); - tft.fillScreen(ST77XX_CYAN); - - Serial.print("Initializing SD card..."); - if (!SD.begin(SD_CS)) { - Serial.println("failed!"); - } else { - Serial.println("OK!"); - File root = SD.open("/"); - printDirectory(root, 0); - root.close(); - bmpDraw("/parrot.bmp", 0, 0); - } - - // Set backlight on fully - // ss.setBacklight(TFTSHIELD_BACKLIGHT_ON); - // Or you can set the backlight one third on - // ss.setBacklight(TFTSHIELD_BACKLIGHT_ON / 3); - // Or dim it up - for (int32_t i=TFTSHIELD_BACKLIGHT_OFF; i= tft.width()) || (y >= tft.height())) return; - - Serial.println(); - Serial.print(F("Loading image '")); - Serial.print(filename); - Serial.println('\''); - - // Open requested file on SD card - if ((bmpFile = SD.open(filename)) == NULL) { - Serial.print(F("File not found")); - return; - } - - // Parse BMP header - if(read16(bmpFile) == 0x4D42) { // BMP signature - Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); - (void)read32(bmpFile); // Read & ignore creator bytes - bmpImageoffset = read32(bmpFile); // Start of image data - Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); - // Read DIB header - Serial.print(F("Header size: ")); Serial.println(read32(bmpFile)); - bmpWidth = read32(bmpFile); - bmpHeight = read32(bmpFile); - if(read16(bmpFile) == 1) { // # planes -- must be '1' - bmpDepth = read16(bmpFile); // bits per pixel - Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); - if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed - - goodBmp = true; // Supported BMP format -- proceed! - Serial.print(F("Image size: ")); - Serial.print(bmpWidth); - Serial.print('x'); - Serial.println(bmpHeight); - - // BMP rows are padded (if needed) to 4-byte boundary - rowSize = (bmpWidth * 3 + 3) & ~3; - - // If bmpHeight is negative, image is in top-down order. - // This is not canon but has been observed in the wild. - if(bmpHeight < 0) { - bmpHeight = -bmpHeight; - flip = false; - } - - // Crop area to be loaded - w = bmpWidth; - h = bmpHeight; - if((x+w-1) >= tft.width()) w = tft.width() - x; - if((y+h-1) >= tft.height()) h = tft.height() - y; - - // Set TFT address window to clipped image bounds - tft.startWrite(); - tft.setAddrWindow(x, y, w, h); - - for (row=0; row= sizeof(sdbuffer)) { // Indeed - bmpFile.read(sdbuffer, sizeof(sdbuffer)); - buffidx = 0; // Set index to beginning - tft.startWrite(); - } - - // Convert pixel from BMP to TFT format, push to display - b = sdbuffer[buffidx++]; - g = sdbuffer[buffidx++]; - r = sdbuffer[buffidx++]; - tft.pushColor(tft.color565(r,g,b)); - } // end pixel - } // end scanline - tft.endWrite(); - Serial.print(F("Loaded in ")); - Serial.print(millis() - startTime); - Serial.println(" ms"); - } // end goodBmp - } - } - - bmpFile.close(); - if(!goodBmp) Serial.println(F("BMP format not recognized.")); -} - - -// These read 16- and 32-bit types from the SD card file. -// BMP data is stored little-endian, Arduino is little-endian too. -// May need to reverse subscript order if porting elsewhere. - -uint16_t read16(File f) { - uint16_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); // MSB - return result; -} - -uint32_t read32(File f) { - uint32_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); - ((uint8_t *)&result)[2] = f.read(); - ((uint8_t *)&result)[3] = f.read(); // MSB - return result; -} - - -void printDirectory(File dir, int numTabs) { - while (true) { - - File entry = dir.openNextFile(); - if (! entry) { - // no more files - break; - } - for (uint8_t i = 0; i < numTabs; i++) { - Serial.print('\t'); - } - Serial.print(entry.name()); - if (entry.isDirectory()) { - Serial.println("/"); - printDirectory(entry, numTabs + 1); - } else { - // files have sizes, directories do not - Serial.print("\t\t"); - Serial.println(entry.size(), DEC); - } - entry.close(); - } -} - diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/shieldtest/shieldtest.ino b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/shieldtest/shieldtest.ino deleted file mode 100644 index 1bf032a..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/examples/shieldtest/shieldtest.ino +++ /dev/null @@ -1,260 +0,0 @@ -/*************************************************** - This is an example sketch for the Adafruit 1.8" TFT shield with joystick - ----> http://www.adafruit.com/products/802 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 pins are required to - interface - One pin is also needed for the joystick, we use analog 3 - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include -#include -#include - -#if defined(__SAM3X8E__) - #undef __FlashStringHelper::F(string_literal) - #define F(string_literal) string_literal -#endif - -// TFT display and SD card will share the hardware SPI interface. -// Hardware SPI pins are specific to the Arduino board type and -// cannot be remapped to alternate pins. For Arduino Uno, -// Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK. -#define SD_CS 4 // Chip select line for SD card -#define TFT_CS 10 // Chip select line for TFT display -#define TFT_DC 8 // Data/command line for TFT -#define TFT_RST -1 // Reset line for TFT (or connect to +5V) - -Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); - -#define BUTTON_NONE 0 -#define BUTTON_DOWN 1 -#define BUTTON_RIGHT 2 -#define BUTTON_SELECT 3 -#define BUTTON_UP 4 -#define BUTTON_LEFT 5 - -void setup(void) { - Serial.begin(9600); - - // Initialize 1.8" TFT - tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab - - Serial.println("OK!"); - tft.fillScreen(ST7735_BLACK); -} - - -uint8_t readButton(void) { - float a = analogRead(3); - - a *= 5.0; - a /= 1024.0; - - Serial.print("Button read analog = "); - Serial.println(a); - if (a < 0.2) return BUTTON_DOWN; - if (a < 1.0) return BUTTON_RIGHT; - if (a < 1.5) return BUTTON_SELECT; - if (a < 2.0) return BUTTON_UP; - if (a < 3.2) return BUTTON_LEFT; - else return BUTTON_NONE; -} - -uint8_t buttonhistory = 0; - -void loop() { - uint8_t b = readButton(); - tft.setTextSize(3); - if (b == BUTTON_DOWN) { - tft.setTextColor(ST7735_RED); - tft.setCursor(0, 10); - tft.print("Down "); - buttonhistory |= 1; - } - if (b == BUTTON_LEFT) { - tft.setTextColor(ST7735_YELLOW); - tft.setCursor(0, 35); - tft.print("Left "); - buttonhistory |= 2; - } - if (b == BUTTON_UP) { - tft.setTextColor(ST7735_GREEN); - tft.setCursor(0, 60); - tft.print("Up"); - buttonhistory |= 4; - } - if (b == BUTTON_RIGHT) { - tft.setTextColor(ST7735_BLUE); - tft.setCursor(0, 85); - tft.print("Right"); - buttonhistory |= 8; - } - if ((b == BUTTON_SELECT) && (buttonhistory == 0xF)) { - tft.setTextColor(ST7735_MAGENTA); - tft.setCursor(0, 110); - tft.print("SELECT"); - buttonhistory |= 8; - delay(2000); - Serial.print("Initializing SD card..."); - if (!SD.begin(SD_CS)) { - Serial.println("failed!"); - return; - } - bmpDraw("parrot.bmp", 0, 0); - while (1); - } - delay(100); -} - -// This function opens a Windows Bitmap (BMP) file and -// displays it at the given coordinates. It's sped up -// by reading many pixels worth of data at a time -// (rather than pixel by pixel). Increasing the buffer -// size takes more of the Arduino's precious RAM but -// makes loading a little faster. 20 pixels seems a -// good balance. - -#define BUFFPIXEL 20 - -void bmpDraw(char *filename, uint8_t x, uint8_t y) { - - File bmpFile; - int bmpWidth, bmpHeight; // W+H in pixels - uint8_t bmpDepth; // Bit depth (currently must be 24) - uint32_t bmpImageoffset; // Start of image data in file - uint32_t rowSize; // Not always = bmpWidth; may have padding - uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel) - uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer - boolean goodBmp = false; // Set to true on valid header parse - boolean flip = true; // BMP is stored bottom-to-top - int w, h, row, col; - uint8_t r, g, b; - uint32_t pos = 0, startTime = millis(); - - if((x >= tft.width()) || (y >= tft.height())) return; - - Serial.println(); - Serial.print("Loading image '"); - Serial.print(filename); - Serial.println('\''); - - // Open requested file on SD card - if ((bmpFile = SD.open(filename)) == NULL) { - Serial.print("File not found"); - return; - } - - // Parse BMP header - if(read16(bmpFile) == 0x4D42) { // BMP signature - Serial.print("File size: "); Serial.println(read32(bmpFile)); - (void)read32(bmpFile); // Read & ignore creator bytes - bmpImageoffset = read32(bmpFile); // Start of image data - Serial.print("Image Offset: "); Serial.println(bmpImageoffset, DEC); - // Read DIB header - Serial.print("Header size: "); Serial.println(read32(bmpFile)); - bmpWidth = read32(bmpFile); - bmpHeight = read32(bmpFile); - if(read16(bmpFile) == 1) { // # planes -- must be '1' - bmpDepth = read16(bmpFile); // bits per pixel - Serial.print("Bit Depth: "); Serial.println(bmpDepth); - if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed - - goodBmp = true; // Supported BMP format -- proceed! - Serial.print("Image size: "); - Serial.print(bmpWidth); - Serial.print('x'); - Serial.println(bmpHeight); - - // BMP rows are padded (if needed) to 4-byte boundary - rowSize = (bmpWidth * 3 + 3) & ~3; - - // If bmpHeight is negative, image is in top-down order. - // This is not canon but has been observed in the wild. - if(bmpHeight < 0) { - bmpHeight = -bmpHeight; - flip = false; - } - - // Crop area to be loaded - w = bmpWidth; - h = bmpHeight; - if((x+w-1) >= tft.width()) w = tft.width() - x; - if((y+h-1) >= tft.height()) h = tft.height() - y; - - // Set TFT address window to clipped image bounds - tft.startWrite(); - tft.setAddrWindow(x, y, w, h); - - for (row=0; row= sizeof(sdbuffer)) { // Indeed - bmpFile.read(sdbuffer, sizeof(sdbuffer)); - buffidx = 0; // Set index to beginning - tft.startWrite(); - } - - // Convert pixel from BMP to TFT format, push to display - b = sdbuffer[buffidx++]; - g = sdbuffer[buffidx++]; - r = sdbuffer[buffidx++]; - tft.pushColor(tft.color565(r,g,b)); - } // end pixel - } // end scanline - tft.endWrite(); - Serial.print("Loaded in "); - Serial.print(millis() - startTime); - Serial.println(" ms"); - } // end goodBmp - } - } - - bmpFile.close(); - if(!goodBmp) Serial.println("BMP format not recognized."); -} - -// These read 16- and 32-bit types from the SD card file. -// BMP data is stored little-endian, Arduino is little-endian too. -// May need to reverse subscript order if porting elsewhere. - -uint16_t read16(File f) { - uint16_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); // MSB - return result; -} - -uint32_t read32(File f) { - uint32_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); - ((uint8_t *)&result)[2] = f.read(); - ((uint8_t *)&result)[3] = f.read(); // MSB - return result; -} diff --git a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/library.properties b/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/library.properties deleted file mode 100644 index 62e9801..0000000 --- a/studies/console/arduino/libraries/Adafruit_ST7735_and_ST7789_Library/library.properties +++ /dev/null @@ -1,10 +0,0 @@ -name=Adafruit ST7735 and ST7789 Library -version=1.10.3 -author=Adafruit -maintainer=Adafruit -sentence=This is a library for the Adafruit ST7735 and ST7789 SPI displays. -paragraph=This is a library for the Adafruit ST7735 and ST7789 SPI displays. -category=Display -url=https://github.com/adafruit/Adafruit-ST7735-Library -architectures=* -depends=Adafruit GFX Library, Adafruit seesaw Library, SD diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.cpp deleted file mode 100644 index b9c0034..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "Adafruit_Crickit.h" - -// the pwm pins -#define CRICKIT_NUM_PWM 12 -static const uint8_t CRICKIT_pwms[CRICKIT_NUM_PWM] = { - CRICKIT_SERVO4, CRICKIT_SERVO3, CRICKIT_SERVO2, CRICKIT_SERVO1, - CRICKIT_MOTOR_B1, CRICKIT_MOTOR_B2, CRICKIT_MOTOR_A1, CRICKIT_MOTOR_A2, - CRICKIT_DRIVE4, CRICKIT_DRIVE3, CRICKIT_DRIVE2, CRICKIT_DRIVE1}; - -// the adc pin -#define CRICKIT_NUM_ADC 8 -static const uint8_t CRICKIT_adc[CRICKIT_NUM_ADC] = { - CRICKIT_SIGNAL1, CRICKIT_SIGNAL2, CRICKIT_SIGNAL3, CRICKIT_SIGNAL4, - CRICKIT_SIGNAL5, CRICKIT_SIGNAL6, CRICKIT_SIGNAL7, CRICKIT_SIGNAL8}; - -void Adafruit_Crickit::analogWrite(uint8_t pin, uint16_t value, uint8_t width) { - (void)width; - - int8_t p = -1; - for (int i = 0; i < CRICKIT_NUM_PWM; i++) { - if (CRICKIT_pwms[i] == pin) { - p = i; - break; - } - } - - if (p > -1) { - uint8_t cmd[] = {(uint8_t)p, (uint8_t)(value >> 8), (uint8_t)value}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3); - } -} - -uint16_t Adafruit_Crickit::analogRead(uint8_t pin) { - uint8_t buf[2]; - int8_t p = -1; - for (int i = 0; i < CRICKIT_NUM_ADC; i++) { - if (CRICKIT_adc[i] == pin) { - p = i; - break; - } - } - - if (p > -1) { - this->read(SEESAW_ADC_BASE, SEESAW_ADC_CHANNEL_OFFSET + p, buf, 2, 500); - uint16_t ret = ((uint16_t)buf[0] << 8) | buf[1]; - delay(1); - return ret; - } else - return 0; -} - -void Adafruit_Crickit::setPWMFreq(uint8_t pin, uint16_t freq) { - int8_t p = -1; - for (int i = 0; i < CRICKIT_NUM_PWM; i++) { - if (CRICKIT_pwms[i] == pin) { - p = i; - break; - } - } - - if (p > -1) { - uint8_t cmd[] = {(uint8_t)p, (uint8_t)(freq >> 8), (uint8_t)freq}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3); - } -} diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.h deleted file mode 100644 index 0f2ffa5..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_Crickit.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _CRICKIT_TERSTER_H -#define _CRICKIT_TERSTER_H - -#include "Adafruit_seesaw.h" - -#define CRICKIT_SIGNAL1 2 -#define CRICKIT_SIGNAL2 3 -#define CRICKIT_SIGNAL3 40 -#define CRICKIT_SIGNAL4 41 -#define CRICKIT_SIGNAL5 11 -#define CRICKIT_SIGNAL6 10 -#define CRICKIT_SIGNAL7 9 -#define CRICKIT_SIGNAL8 8 - -#define CRICKIT_SERVO4 14 -#define CRICKIT_SERVO3 15 -#define CRICKIT_SERVO2 16 -#define CRICKIT_SERVO1 17 - -#define CRICKIT_MOTOR_A1 22 -#define CRICKIT_MOTOR_A2 23 -#define CRICKIT_MOTOR_B1 19 -#define CRICKIT_MOTOR_B2 18 -#define CRICKIT_DRIVE1 13 -#define CRICKIT_DRIVE2 12 -#define CRICKIT_DRIVE3 43 -#define CRICKIT_DRIVE4 42 - -#define CRICKIT_TOUCH1 0 -#define CRICKIT_TOUCH2 1 -#define CRICKIT_TOUCH3 2 -#define CRICKIT_TOUCH4 3 - -#define CRICKIT_DUTY_CYCLE_OFF 0 -#define CRICKIT_DUTY_CYCLE_MAX 65535 - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with Crickit - variant of seesaw helper IC -*/ -/**************************************************************************/ -class Adafruit_Crickit : public Adafruit_seesaw { -public: - Adafruit_Crickit(){}; - ~Adafruit_Crickit(){}; - - void analogWrite(uint8_t pin, uint16_t value, uint8_t width = 8); - uint16_t analogRead(uint8_t pin); - void setPWMFreq(uint8_t pin, uint16_t freq); -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.cpp deleted file mode 100644 index c069df7..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.cpp +++ /dev/null @@ -1,336 +0,0 @@ -#include "Adafruit_NeoKey_1x4.h" - -/**************************************************************************/ -/*! - @brief Class constructor - @param addr the I2C address this neotrellis object uses - @param i2c_bus the I2C bus connected to this neokey, defaults to "Wire" -*/ -/**************************************************************************/ -Adafruit_NeoKey_1x4::Adafruit_NeoKey_1x4(uint8_t addr, TwoWire *i2c_bus) - : Adafruit_seesaw(i2c_bus), pixels(NEOKEY_1X4_KEYS, NEOKEY_1X4_NEOPIN, - NEO_GRB + NEO_KHZ800, i2c_bus) { - for (int i = 0; i < NEOKEY_1X4_KEYS; i++) { - _callbacks[i] = NULL; - } - this->_addr = addr; -} - -/**************************************************************************/ -/*! - @brief Begin communication with the RGB trellis. - @param addr optional i2c address where the device can be found. Defaults to - NEOKEY_1X4_ADDR - @param flow optional flow control pin - @returns true on success, false on error. -*/ -/**************************************************************************/ -bool Adafruit_NeoKey_1x4::begin(uint8_t addr, int8_t flow) { - _addr = addr; - - bool ret = pixels.begin(addr, flow); - if (!ret) - return ret; - - ret = Adafruit_seesaw::begin(addr, flow, false); - if (!ret) - return ret; - - pixels.setBrightness(40); - pixels.show(); // Initialize all pixels to 'off' - delay(5); - pinModeBulk(NEOKEY_1X4_BUTTONMASK, INPUT_PULLUP); - setGPIOInterrupts(NEOKEY_1X4_BUTTONMASK, 1); - - return ret; -} - -/**************************************************************************/ -/*! - @brief register a callback function on the passed key. - @param key the key number to register the callback on - @param cb the callback function that should be called when an event on that - key happens -*/ -/**************************************************************************/ -void Adafruit_NeoKey_1x4::registerCallback(uint8_t key, - NeoKey1x4Callback (*cb)(keyEvent)) { - _callbacks[key] = cb; -} - -/**************************************************************************/ -/*! - @brief unregister a callback on a given key - @param key the key number the callback is currently mapped to. -*/ -/**************************************************************************/ -void Adafruit_NeoKey_1x4::unregisterCallback(uint8_t key) { - _callbacks[key] = NULL; -} - -/**************************************************************************/ -/*! - @brief Read key GPIO pins, possibly generating callback events - @returns Byte with the bottom 4 bits corresponding to each keypress status -*/ -/**************************************************************************/ -uint8_t Adafruit_NeoKey_1x4::read(void) { - - uint32_t buttons = digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - buttons ^= NEOKEY_1X4_BUTTONMASK; - buttons &= NEOKEY_1X4_BUTTONMASK; - buttons >>= NEOKEY_1X4_BUTTONA; - - uint8_t just_pressed = (buttons ^ last_buttons) & buttons; - uint8_t just_released = (buttons ^ last_buttons) & ~buttons; - if (just_pressed | just_released) { - // Serial.print("pressed 0x"); Serial.println(just_pressed, HEX); - // Serial.print("released 0x"); Serial.println(just_released, HEX); - - for (int b = 0; b < 4; b++) { - if (just_pressed & (1 << b)) { // if button b is pressed - if (_callbacks[b] != NULL) { - keyEvent evt = {SEESAW_KEYPAD_EDGE_RISING, (uint16_t)b}; - _callbacks[b](evt); - } - } - - if (just_released & (1 << b)) { // if button b is released - if (_callbacks[b] != NULL) { - keyEvent evt = {SEESAW_KEYPAD_EDGE_FALLING, (uint16_t)b}; - _callbacks[b](evt); - } - } - } - } - last_buttons = buttons; - return buttons; -} - -/**************************************************************************/ -/*! - @brief class constructor - @param neokeys pointer to a multidimensional array of Adafruit_NeoKey_1x4 - objects. these object must have their I2C addresses specified in the class - constructors. - @param rows the number of individual neokey boards in the Y direction - of your matrix. - @param cols the number of individual neokey boards in the X direction - of your matrix. -*/ -/**************************************************************************/ -Adafruit_MultiNeoKey1x4::Adafruit_MultiNeoKey1x4(Adafruit_NeoKey_1x4 *neokeys, - uint8_t rows, uint8_t cols) { - this->_rows = rows; - this->_cols = cols; - this->_neokeys = neokeys; -} - -/**************************************************************************/ -/*! - @brief begin communication with the matrix of neotrellis boards. - @returns true on success, false otherwise. -*/ -/**************************************************************************/ -bool Adafruit_MultiNeoKey1x4::begin() { - Adafruit_NeoKey_1x4 *t; - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - t = (_neokeys + n * _cols) + m; - if (!t->begin(t->_addr)) - return false; - } - } - - return true; -} - -/**************************************************************************/ -/*! - @brief register a callback for a key addressed by key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. - @param cb the function to be called when an event from the specified key is - detected. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::registerCallback( - uint8_t x, uint8_t y, NeoKey1x4Callback (*cb)(keyEvent)) { - Adafruit_NeoKey_1x4 *t = - (_neokeys + y / NEOKEY_1X4_ROWS * _cols) + x / NEOKEY_1X4_COLS; - int xkey = NEOKEY_1X4_X(x); - int ykey = NEOKEY_1X4_Y(y % NEOKEY_1X4_ROWS * NEOKEY_1X4_COLS); - - t->registerCallback(NEOKEY_1X4_XY(xkey, ykey), cb); -} - -/**************************************************************************/ -/*! - @brief register a callback for a key addressed by key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. - @param cb the function to be called when an event from the specified key is - detected. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::registerCallback( - uint16_t num, NeoKey1x4Callback (*cb)(keyEvent)) { - uint8_t x = num % (NEOKEY_1X4_COLS * _cols); - uint8_t y = num / (NEOKEY_1X4_COLS * _cols); - - registerCallback(x, y, cb); -} - -/**************************************************************************/ -/*! - @brief Unregister a callback for a key addressed by key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::unregisterCallback(uint8_t x, uint8_t y) { - Adafruit_NeoKey_1x4 *t = - (_neokeys + y / NEOKEY_1X4_ROWS * _cols) + x / NEOKEY_1X4_COLS; - int xkey = NEOKEY_1X4_X(x); - int ykey = NEOKEY_1X4_Y(y % NEOKEY_1X4_ROWS * NEOKEY_1X4_COLS); - - t->unregisterCallback(NEOKEY_1X4_XY(xkey, ykey)); -} - -/**************************************************************************/ -/*! - @brief Unregister a callback for a key addressed by key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::unregisterCallback(uint16_t num) { - uint8_t x = num % (NEOKEY_1X4_COLS * _cols); - uint8_t y = num / (NEOKEY_1X4_COLS * _cols); - - unregisterCallback(x, y); -} - -/**************************************************************************/ -/*! - @brief set the color of a neopixel at a key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. - @param color the color to set the pixel to. This is a 24 bit RGB value. - for example, full brightness red would be 0xFF0000, and full - brightness blue would be 0x0000FF. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::setPixelColor(uint8_t x, uint8_t y, - uint32_t color) { - Adafruit_NeoKey_1x4 *t = - (_neokeys + y / NEOKEY_1X4_ROWS * _cols) + x / NEOKEY_1X4_COLS; - int xkey = NEOKEY_1X4_X(x); - int ykey = NEOKEY_1X4_Y(y % NEOKEY_1X4_ROWS * NEOKEY_1X4_COLS); - - t->pixels.setPixelColor(NEOKEY_1X4_XY(xkey, ykey), color); -} - -/**************************************************************************/ -/*! - @brief set the color of a neopixel at a key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. - @param color the color to set the pixel to. This is a 24 bit RGB value. - for example, full brightness red would be 0xFF0000, and full - brightness blue would be 0x0000FF. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::setPixelColor(uint16_t num, uint32_t color) { - uint8_t x = num % (NEOKEY_1X4_COLS * _cols); - uint8_t y = num / (NEOKEY_1X4_COLS * _cols); - - setPixelColor(x, y, color); -} - -/**************************************************************************/ -/*! - @brief call show for all connected neotrellis boards to show all neopixels -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::show() { - Adafruit_NeoKey_1x4 *t; - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - t = (_neokeys + n * _cols) + m; - t->pixels.show(); - } - } -} - -/**************************************************************************/ -/*! - @brief read all events currently stored in the seesaw fifo and call any - callbacks. -*/ -/**************************************************************************/ -void Adafruit_MultiNeoKey1x4::read() { - Adafruit_NeoKey_1x4 *nk; - - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - // get the individual breakout - nk = (_neokeys + n * _cols) + m; - - // query what buttons are pressed - nk->digitalReadBulk( - NEOKEY_1X4_BUTTONMASK); // not sure why we have to do it 2ce - uint32_t buttons = nk->digitalReadBulk(NEOKEY_1X4_BUTTONMASK); - - // Serial.print("Neokey number "); Serial.print(n * _cols + m); - // Serial.print(" buttons: 0x"); Serial.println(buttons, HEX); - buttons ^= NEOKEY_1X4_BUTTONMASK; - buttons &= NEOKEY_1X4_BUTTONMASK; - buttons >>= NEOKEY_1X4_BUTTONA; - - // compared to last time - uint8_t just_pressed = (buttons ^ nk->last_buttons) & buttons; - uint8_t just_released = (buttons ^ nk->last_buttons) & ~buttons; - // stash for next run - nk->last_buttons = buttons; - if (just_pressed | just_released) { - // Serial.print("pressed 0x"); Serial.println(just_pressed, HEX); - // Serial.print("released 0x"); Serial.println(just_released, HEX); - - // for each key, process the event - for (int b = 0; b < 4; b++) { - int x = b; // column is the button - int y = 0; // a 1x4 neokey only has one row - - // extend into whole grid - x = x + m * NEOKEY_1X4_COLS; - y = y + n * NEOKEY_1X4_ROWS; - - int event_key = y * NEOKEY_1X4_COLS * _cols + x; - - if (just_pressed & (1 << b)) { // if button b is pressed - if (nk->_callbacks[b] != NULL) { - keyEvent evt = {SEESAW_KEYPAD_EDGE_RISING, (uint16_t)event_key}; - nk->_callbacks[b](evt); - } - } - if (just_released & (1 << b)) { // if button b is pressed - if (nk->_callbacks[b] != NULL) { - keyEvent evt = {SEESAW_KEYPAD_EDGE_FALLING, (uint16_t)event_key}; - nk->_callbacks[b](evt); - } - } - } - } - } - } -} diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.h deleted file mode 100644 index 410773a..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoKey_1x4.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef _NEOKEY_1X4_H -#define _NEOKEY_1X4_H - -#include "Adafruit_seesaw.h" -#include "seesaw_neopixel.h" -#include - -#define NEOKEY_1X4_ADDR 0x30 - -#define NEOKEY_1X4_NEOPIN 3 -#define NEOKEY_1X4_BUTTONA 4 -#define NEOKEY_1X4_BUTTONB 5 -#define NEOKEY_1X4_BUTTONC 6 -#define NEOKEY_1X4_BUTTOND 7 -#define NEOKEY_1X4_BUTTONMASK ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7)) - -#define NEOKEY_1X4_ROWS 1 -#define NEOKEY_1X4_COLS 4 -#define NEOKEY_1X4_KEYS (NEOKEY_1X4_ROWS * NEOKEY_1X4_COLS) - -#define NEOKEY_1X4_MAX_CALLBACKS 32 - -/* NEOKEY_1X4_KEY depends on PCB routing */ -// #define NEOKEY_1X4_KEY(x) (((x) / 4) * 8 + ((x) % 4)) -#define NEOKEY_1X4_KEY(x) (((x) / 8) * 4 + ((x) % 8)) - -#define NEOKEY_1X4_X(k) ((k) % 4) -#define NEOKEY_1X4_Y(k) ((k) / 4) - -#define NEOKEY_1X4_XY(x, y) ((y)*NEOKEY_1X4_ROWS + (x)) - -typedef void (*NeoKey1x4Callback)(keyEvent evt); - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with the - seesaw NeoKey module -*/ -/**************************************************************************/ -class Adafruit_NeoKey_1x4 : public Adafruit_seesaw { -public: - Adafruit_NeoKey_1x4(uint8_t addr = NEOKEY_1X4_ADDR, TwoWire *i2c_bus = &Wire); - ~Adafruit_NeoKey_1x4(){}; - - bool begin(uint8_t addr = NEOKEY_1X4_ADDR, int8_t flow = -1); - - void registerCallback(uint8_t key, NeoKey1x4Callback (*cb)(keyEvent)); - void unregisterCallback(uint8_t key); - - uint8_t read(void); - - seesaw_NeoPixel pixels; ///< the onboard neopixel matrix - - friend class Adafruit_MultiNeoKey1x4; ///< for allowing use of protected - ///< methods by aggregate class - -protected: - uint8_t last_buttons = 0; ///< The last reading for the buttons - uint8_t _addr; ///< the I2C address of this board - NeoKey1x4Callback (*_callbacks[NEOKEY_1X4_KEYS])( - keyEvent); ///< the array of callback functions -}; - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with multiple - neotrellis boards -*/ -/**************************************************************************/ -class Adafruit_MultiNeoKey1x4 { -public: - Adafruit_MultiNeoKey1x4(Adafruit_NeoKey_1x4 *neokeys, uint8_t rows, - uint8_t cols); - ~Adafruit_MultiNeoKey1x4(){}; - - bool begin(); - - void registerCallback(uint16_t num, NeoKey1x4Callback (*cb)(keyEvent)); - void registerCallback(uint8_t x, uint8_t y, - NeoKey1x4Callback (*cb)(keyEvent)); - void unregisterCallback(uint16_t num); - void unregisterCallback(uint8_t x, uint8_t y); - - void setPixelColor(uint8_t x, uint8_t y, uint32_t color); - void setPixelColor(uint16_t num, uint32_t color); - void show(); - - void read(); - -protected: - uint8_t _rows; ///< the number of trellis boards in the Y direction - uint8_t _cols; ///< the number of trellis boards in the X direction - Adafruit_NeoKey_1x4 *_neokeys; ///< a multidimensional array of neokey objects -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.cpp deleted file mode 100644 index e38bfcd..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include "Adafruit_NeoTrellis.h" - -/**************************************************************************/ -/*! - @brief Class constructor - @param addr the I2C address this neotrellis object uses - @param i2c_bus the I2C bus connected to this neotrellis, defaults to "Wire" -*/ -/**************************************************************************/ -Adafruit_NeoTrellis::Adafruit_NeoTrellis(uint8_t addr, TwoWire *i2c_bus) - : Adafruit_seesaw(i2c_bus), - pixels(NEO_TRELLIS_NUM_KEYS, NEO_TRELLIS_NEOPIX_PIN, NEO_GRB + NEO_KHZ800, - i2c_bus) { - for (int i = 0; i < NEO_TRELLIS_NUM_KEYS; i++) { - _callbacks[i] = NULL; - } - this->_addr = addr; -} - -/**************************************************************************/ -/*! - @brief Begin communication with the RGB trellis. - @param addr optional i2c address where the device can be found. Defaults to - NEO_TRELLIS_ADDR - @param flow optional flow control pin - @returns true on success, false on error. -*/ -/**************************************************************************/ -bool Adafruit_NeoTrellis::begin(uint8_t addr, int8_t flow) { - _addr = addr; - - bool ret = pixels.begin(addr, flow); - - ret = Adafruit_seesaw::begin(addr, flow, false); - if (!ret) - return ret; - - enableKeypadInterrupt(); - - return ret; -} - -/**************************************************************************/ -/*! - @brief register a callback function on the passed key. - @param key the key number to register the callback on - @param cb the callback function that should be called when an event on that - key happens -*/ -/**************************************************************************/ -void Adafruit_NeoTrellis::registerCallback(uint8_t key, - TrellisCallback (*cb)(keyEvent)) { - _callbacks[key] = cb; -} - -/**************************************************************************/ -/*! - @brief unregister a callback on a given key - @param key the key number the callback is currently mapped to. -*/ -/**************************************************************************/ -void Adafruit_NeoTrellis::unregisterCallback(uint8_t key) { - _callbacks[key] = NULL; -} - -/**************************************************************************/ -/*! - @brief activate or deactivate a given key event - @param key the key number to map the event to - @param edge the edge sensitivity of the event - @param enable pass true to enable the passed event, false to disable it. -*/ -/**************************************************************************/ -void Adafruit_NeoTrellis::activateKey(uint8_t key, uint8_t edge, bool enable) { - setKeypadEvent(NEO_TRELLIS_KEY(key), edge, enable); -} - -/**************************************************************************/ -/*! - @brief read all events currently stored in the seesaw fifo and call any - callbacks. - @param polling pass true if the interrupt pin is not being used, false if - it is. Defaults to true. -*/ -/**************************************************************************/ -void Adafruit_NeoTrellis::read(bool polling) { - uint8_t count = getKeypadCount(); - delayMicroseconds(500); - if (count > 0) { - if (polling) - count = count + 2; - keyEventRaw e[count]; - readKeypad(e, count); - for (int i = 0; i < count; i++) { - // call any callbacks associated with the key - e[i].bit.NUM = NEO_TRELLIS_SEESAW_KEY(e[i].bit.NUM); - if (e[i].bit.NUM < NEO_TRELLIS_NUM_KEYS && - _callbacks[e[i].bit.NUM] != NULL) { - keyEvent evt = {e[i].bit.EDGE, e[i].bit.NUM}; - _callbacks[e[i].bit.NUM](evt); - } - } - } -} - -/**************************************************************************/ -/*! - @brief class constructor - @param trelli pointer to a multidimensional array of neotrellis objects. - these object must have their I2C addresses specified in the class - constructors. - @param rows the number of individual neotrellis boards in the Y direction - of your matrix. - @param cols the number of individual neotrellis boards in the X direction - of your matrix. -*/ -/**************************************************************************/ -Adafruit_MultiTrellis::Adafruit_MultiTrellis(Adafruit_NeoTrellis *trelli, - uint8_t rows, uint8_t cols) { - this->_rows = rows; - this->_cols = cols; - this->_trelli = trelli; -} - -/**************************************************************************/ -/*! - @brief begin communication with the matrix of neotrellis boards. - @returns true on success, false otherwise. -*/ -/**************************************************************************/ -bool Adafruit_MultiTrellis::begin() { - Adafruit_NeoTrellis *t; - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - t = (_trelli + n * _cols) + m; - if (!t->begin(t->_addr)) - return false; - } - } - - return true; -} - -/**************************************************************************/ -/*! - @brief register a callback for a key addressed by key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. - @param cb the function to be called when an event from the specified key is - detected. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::registerCallback(uint8_t x, uint8_t y, - TrellisCallback (*cb)(keyEvent)) { - Adafruit_NeoTrellis *t = - (_trelli + y / NEO_TRELLIS_NUM_ROWS * _cols) + x / NEO_TRELLIS_NUM_COLS; - int xkey = NEO_TRELLIS_X(x); - int ykey = NEO_TRELLIS_Y(y % NEO_TRELLIS_NUM_ROWS * NEO_TRELLIS_NUM_COLS); - - t->registerCallback(NEO_TRELLIS_XY(xkey, ykey), cb); -} - -/**************************************************************************/ -/*! - @brief register a callback for a key addressed by key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. - @param cb the function to be called when an event from the specified key is - detected. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::registerCallback(uint16_t num, - TrellisCallback (*cb)(keyEvent)) { - uint8_t x = num % (NEO_TRELLIS_NUM_COLS * _cols); - uint8_t y = num / (NEO_TRELLIS_NUM_COLS * _cols); - - registerCallback(x, y, cb); -} - -/**************************************************************************/ -/*! - @brief Unregister a callback for a key addressed by key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::unregisterCallback(uint8_t x, uint8_t y) { - Adafruit_NeoTrellis *t = - (_trelli + y / NEO_TRELLIS_NUM_ROWS * _cols) + x / NEO_TRELLIS_NUM_COLS; - int xkey = NEO_TRELLIS_X(x); - int ykey = NEO_TRELLIS_Y(y % NEO_TRELLIS_NUM_ROWS * NEO_TRELLIS_NUM_COLS); - - t->unregisterCallback(NEO_TRELLIS_XY(xkey, ykey)); -} - -/**************************************************************************/ -/*! - @brief Unregister a callback for a key addressed by key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::unregisterCallback(uint16_t num) { - uint8_t x = num % (NEO_TRELLIS_NUM_COLS * _cols); - uint8_t y = num / (NEO_TRELLIS_NUM_COLS * _cols); - - unregisterCallback(x, y); -} - -/**************************************************************************/ -/*! - @brief Activate or deactivate a key by number. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. - @param edge the edge that the key triggers an event on. Use - SEESAW_KEYPAD_EDGE_FALLING or SEESAW_KEYPAD_EDGE_RISING. - @param enable pass true to enable the key on the passed edge, false to - disable. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::activateKey(uint8_t x, uint8_t y, uint8_t edge, - bool enable) { - Adafruit_NeoTrellis *t = - (_trelli + y / NEO_TRELLIS_NUM_ROWS * _cols) + x / NEO_TRELLIS_NUM_COLS; - int xkey = NEO_TRELLIS_X(x); - int ykey = NEO_TRELLIS_Y(y % NEO_TRELLIS_NUM_ROWS * NEO_TRELLIS_NUM_COLS); - - t->activateKey(NEO_TRELLIS_XY(xkey, ykey), edge, enable); -} - -/**************************************************************************/ -/*! - @brief Activate or deactivate a key by number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. - @param edge the edge that the key triggers an event on. Use - SEESAW_KEYPAD_EDGE_FALLING or SEESAW_KEYPAD_EDGE_RISING. - @param enable pass true to enable the key on the passed edge, false to - disable. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::activateKey(uint16_t num, uint8_t edge, - bool enable) { - uint8_t x = num % (NEO_TRELLIS_NUM_COLS * _cols); - uint8_t y = num / (NEO_TRELLIS_NUM_COLS * _cols); - - activateKey(x, y, edge, enable); -} - -/**************************************************************************/ -/*! - @brief set the color of a neopixel at a key index. - @param x the column index of the key. column 0 is on the lefthand side of - the matix. - @param y the row index of the key. row 0 is at the top of the matrix and - the numbers increase downwards. - @param color the color to set the pixel to. This is a 24 bit RGB value. - for example, full brightness red would be 0xFF0000, and full - brightness blue would be 0x0000FF. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::setPixelColor(uint8_t x, uint8_t y, - uint32_t color) { - Adafruit_NeoTrellis *t = - (_trelli + y / NEO_TRELLIS_NUM_ROWS * _cols) + x / NEO_TRELLIS_NUM_COLS; - int xkey = NEO_TRELLIS_X(x); - int ykey = NEO_TRELLIS_Y(y % NEO_TRELLIS_NUM_ROWS * NEO_TRELLIS_NUM_COLS); - - t->pixels.setPixelColor(NEO_TRELLIS_XY(xkey, ykey), color); -} - -/**************************************************************************/ -/*! - @brief set the color of a neopixel at a key number. - @param num the keynumber to set the color of. Key 0 is in the top left - corner of the trellis matrix, key 1 is directly to the right of it, - and the last key number is in the bottom righthand corner. - @param color the color to set the pixel to. This is a 24 bit RGB value. - for example, full brightness red would be 0xFF0000, and full - brightness blue would be 0x0000FF. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::setPixelColor(uint16_t num, uint32_t color) { - uint8_t x = num % (NEO_TRELLIS_NUM_COLS * _cols); - uint8_t y = num / (NEO_TRELLIS_NUM_COLS * _cols); - - setPixelColor(x, y, color); -} - -/**************************************************************************/ -/*! - @brief call show for all connected neotrellis boards to show all neopixels -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::show() { - Adafruit_NeoTrellis *t; - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - t = (_trelli + n * _cols) + m; - t->pixels.show(); - } - } -} - -/**************************************************************************/ -/*! - @brief read all events currently stored in the seesaw fifo and call any - callbacks. -*/ -/**************************************************************************/ -void Adafruit_MultiTrellis::read() { - Adafruit_NeoTrellis *t; - for (int n = 0; n < _rows; n++) { - for (int m = 0; m < _cols; m++) { - t = (_trelli + n * _cols) + m; - - uint8_t count = t->getKeypadCount(); - delayMicroseconds(500); - if (count > 0) { - count = count + 2; - keyEventRaw e[count]; - t->readKeypad(e, count); - for (int i = 0; i < count; i++) { - // call any callbacks associated with the key - e[i].bit.NUM = NEO_TRELLIS_SEESAW_KEY(e[i].bit.NUM); - if (e[i].bit.NUM < NEO_TRELLIS_NUM_KEYS && - t->_callbacks[e[i].bit.NUM] != NULL) { - // update the event with the multitrellis number - keyEvent evt = {e[i].bit.EDGE, e[i].bit.NUM}; - int x = NEO_TRELLIS_X(e[i].bit.NUM); - int y = NEO_TRELLIS_Y(e[i].bit.NUM); - - x = x + m * NEO_TRELLIS_NUM_COLS; - y = y + n * NEO_TRELLIS_NUM_ROWS; - - evt.bit.NUM = y * NEO_TRELLIS_NUM_COLS * _cols + x; - - t->_callbacks[e[i].bit.NUM](evt); - } - } - } - } - } -} diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.h deleted file mode 100644 index 1460954..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_NeoTrellis.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef _NEO_TRELLIS_H -#define _NEO_TRELLIS_H - -#include "Adafruit_seesaw.h" -#include "seesaw_neopixel.h" -#include - -#define NEO_TRELLIS_ADDR 0x2E - -#define NEO_TRELLIS_NEOPIX_PIN 3 - -#define NEO_TRELLIS_NUM_ROWS 4 -#define NEO_TRELLIS_NUM_COLS 4 -#define NEO_TRELLIS_NUM_KEYS (NEO_TRELLIS_NUM_ROWS * NEO_TRELLIS_NUM_COLS) - -#define NEO_TRELLIS_MAX_CALLBACKS 32 - -#define NEO_TRELLIS_KEY(x) (((x) / 4) * 8 + ((x) % 4)) -#define NEO_TRELLIS_SEESAW_KEY(x) (((x) / 8) * 4 + ((x) % 8)) - -#define NEO_TRELLIS_X(k) ((k) % 4) -#define NEO_TRELLIS_Y(k) ((k) / 4) - -#define NEO_TRELLIS_XY(x, y) ((y)*NEO_TRELLIS_NUM_COLS + (x)) - -typedef void (*TrellisCallback)(keyEvent evt); - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with the - seesaw keypad module -*/ -/**************************************************************************/ -class Adafruit_NeoTrellis : public Adafruit_seesaw { -public: - Adafruit_NeoTrellis(uint8_t addr = NEO_TRELLIS_ADDR, - TwoWire *i2c_bus = &Wire); - ~Adafruit_NeoTrellis(){}; - - bool begin(uint8_t addr = NEO_TRELLIS_ADDR, int8_t flow = -1); - - void registerCallback(uint8_t key, TrellisCallback (*cb)(keyEvent)); - void unregisterCallback(uint8_t key); - - void activateKey(uint8_t key, uint8_t edge, bool enable = true); - - void read(bool polling = true); - - seesaw_NeoPixel pixels; ///< the onboard neopixel matrix - - friend class Adafruit_MultiTrellis; ///< for allowing use of protected methods - ///< by aggregate class - -protected: - uint8_t _addr; ///< the I2C address of this board - TrellisCallback (*_callbacks[NEO_TRELLIS_NUM_KEYS])( - keyEvent); ///< the array of callback functions -}; - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with multiple - neotrellis boards -*/ -/**************************************************************************/ -class Adafruit_MultiTrellis { -public: - Adafruit_MultiTrellis(Adafruit_NeoTrellis *trelli, uint8_t rows, - uint8_t cols); - ~Adafruit_MultiTrellis(){}; - - bool begin(); - - void registerCallback(uint16_t num, TrellisCallback (*cb)(keyEvent)); - void registerCallback(uint8_t x, uint8_t y, TrellisCallback (*cb)(keyEvent)); - void unregisterCallback(uint16_t num); - void unregisterCallback(uint8_t x, uint8_t y); - - void activateKey(uint16_t num, uint8_t edge, bool enable = true); - void activateKey(uint8_t x, uint8_t y, uint8_t edge, bool enable = true); - - void setPixelColor(uint8_t x, uint8_t y, uint32_t color); - void setPixelColor(uint16_t num, uint32_t color); - void show(); - - void read(); - -protected: - uint8_t _rows; ///< the number of trellis boards in the Y direction - uint8_t _cols; ///< the number of trellis boards in the X direction - Adafruit_NeoTrellis - *_trelli; ///< a multidimensional array of neotrellis objects -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.cpp deleted file mode 100644 index c4db3ec..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "Adafruit_TFTShield18.h" - -/**************************************************************************/ -/*! - @brief set up the TFT shield - @param addr optional address the seesaw chip can be found on - @param flow optional flow control pin to use - @returns true on success, false on error -*/ -/**************************************************************************/ -bool Adafruit_TFTShield18::begin(uint8_t addr, int8_t flow) { - if (!Adafruit_seesaw::begin(addr, flow)) { - return false; - } - - pinMode(TFTSHIELD_RESET_PIN, OUTPUT); - pinModeBulk(TFTSHIELD_BUTTON_ALL, INPUT_PULLUP); - return true; -} - -/**************************************************************************/ -/*! - @brief set the intensity of the backlight - @param value to set the backlight to, - 0x0000 = 0% (TFTSHIELD_BACKLIGHT_OFF) - to - 0xFFFF = 100% (TFTSHIELD_BACKLIGHT_ON) - -*/ -/**************************************************************************/ -void Adafruit_TFTShield18::setBacklight(uint16_t value) { - uint8_t cmd[] = {0x00, (uint8_t)(value >> 8), (uint8_t)value}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3); -} - -/**************************************************************************/ -/*! - @brief set the PWM frequency for the backlight - @param freq the frequency to set the backlight to -*/ -/**************************************************************************/ -void Adafruit_TFTShield18::setBacklightFreq(uint16_t freq) { - uint8_t cmd[] = {0x0, (uint8_t)(freq >> 8), (uint8_t)freq}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3); -} - -/**************************************************************************/ -/*! - @brief reset the TFT screen by setting the value of the reset pin - @param rst the value to set the reset pin to -*/ -/**************************************************************************/ -void Adafruit_TFTShield18::tftReset(bool rst) { - digitalWrite(TFTSHIELD_RESET_PIN, rst); -} - -/**************************************************************************/ -/*! - @brief read all buttons on the wing and return as a 32 bit integer - @returns the value of the buttons -*/ -/**************************************************************************/ -uint32_t Adafruit_TFTShield18::readButtons() { - return digitalReadBulk(TFTSHIELD_BUTTON_ALL); -} \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.h deleted file mode 100644 index 40bc131..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_TFTShield18.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef _TFT_SHIELD_18_H -#define _TFT_SHIELD_18_H - -#include "Adafruit_seesaw.h" - -#define TFTSHIELD_ADDR 0x2E -#define TFTSHIELD_RESET_PIN 3 - -#define TFTSHIELD_BACKLIGHT_ON 0xFFFF -#define TFTSHIELD_BACKLIGHT_OFF 0x0000 - -#define TFTSHIELD_BUTTON_UP_PIN 5 -#define TFTSHIELD_BUTTON_UP (1UL << TFTSHIELD_BUTTON_UP_PIN) - -#define TFTSHIELD_BUTTON_DOWN_PIN 8 -#define TFTSHIELD_BUTTON_DOWN (1UL << TFTSHIELD_BUTTON_DOWN_PIN) - -#define TFTSHIELD_BUTTON_LEFT_PIN 6 -#define TFTSHIELD_BUTTON_LEFT (1UL << TFTSHIELD_BUTTON_LEFT_PIN) - -#define TFTSHIELD_BUTTON_RIGHT_PIN 9 -#define TFTSHIELD_BUTTON_RIGHT (1UL << TFTSHIELD_BUTTON_RIGHT_PIN) - -#define TFTSHIELD_BUTTON_IN_PIN 7 -#define TFTSHIELD_BUTTON_IN (1UL << TFTSHIELD_BUTTON_IN_PIN) - -#define TFTSHIELD_BUTTON_1_PIN 10 -#define TFTSHIELD_BUTTON_1 (1UL << TFTSHIELD_BUTTON_1_PIN) - -#define TFTSHIELD_BUTTON_2_PIN 11 -#define TFTSHIELD_BUTTON_2 (1UL << TFTSHIELD_BUTTON_2_PIN) - -#define TFTSHIELD_BUTTON_3_PIN 14 -#define TFTSHIELD_BUTTON_3 (1UL << TFTSHIELD_BUTTON_3_PIN) - -#define TFTSHIELD_BUTTON_ALL \ - (TFTSHIELD_BUTTON_UP | TFTSHIELD_BUTTON_DOWN | TFTSHIELD_BUTTON_LEFT | \ - TFTSHIELD_BUTTON_RIGHT | TFTSHIELD_BUTTON_IN | TFTSHIELD_BUTTON_1 | \ - TFTSHIELD_BUTTON_2 | TFTSHIELD_BUTTON_3) - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with 1.8" tft - shield variant of seesaw helper IC -*/ -/**************************************************************************/ -class Adafruit_TFTShield18 : public Adafruit_seesaw { -public: - Adafruit_TFTShield18(){}; - ~Adafruit_TFTShield18(){}; - - bool begin(uint8_t addr = TFTSHIELD_ADDR, int8_t flow = -1); - - void setBacklight(uint16_t value); - void setBacklightFreq(uint16_t freq); - void tftReset(bool rst = true); - uint32_t readButtons(); -}; - -#endif \ No newline at end of file diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.cpp deleted file mode 100644 index 4bce525..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include "Adafruit_miniTFTWing.h" - -// These are the default SAMD09 version pins! (for back compatibility) -uint8_t TFTWING_RESET_PIN = 8; - -uint8_t TFTWING_BUTTON_UP_PIN = 2; -uint32_t TFTWING_BUTTON_UP = (1UL << TFTWING_BUTTON_UP_PIN); - -uint8_t TFTWING_BUTTON_DOWN_PIN = 4; -uint32_t TFTWING_BUTTON_DOWN = (1UL << TFTWING_BUTTON_DOWN_PIN); - -uint8_t TFTWING_BUTTON_LEFT_PIN = 3; -uint32_t TFTWING_BUTTON_LEFT = (1UL << TFTWING_BUTTON_LEFT_PIN); - -uint8_t TFTWING_BUTTON_RIGHT_PIN = 7; -uint32_t TFTWING_BUTTON_RIGHT = (1UL << TFTWING_BUTTON_RIGHT_PIN); - -uint8_t TFTWING_BUTTON_SELECT_PIN = 11; -uint32_t TFTWING_BUTTON_SELECT = (1UL << TFTWING_BUTTON_SELECT_PIN); - -uint8_t TFTWING_BUTTON_A_PIN = 10; -uint32_t TFTWING_BUTTON_A = (1UL << TFTWING_BUTTON_A_PIN); - -uint8_t TFTWING_BUTTON_B_PIN = 9; -uint32_t TFTWING_BUTTON_B = (1UL << TFTWING_BUTTON_B_PIN); - -uint32_t TFTWING_BUTTON_ALL = - (TFTWING_BUTTON_UP | TFTWING_BUTTON_DOWN | TFTWING_BUTTON_LEFT | - TFTWING_BUTTON_RIGHT | TFTWING_BUTTON_SELECT | TFTWING_BUTTON_A | - TFTWING_BUTTON_B); - -/**************************************************************************/ -/*! - @brief set up the miniTFTWing - @param addr optional address the seesaw chip can be found on - @param Wi optional alternative I2C port to use, e.g. &Wire1 etc. Defaults - to &Wire - @returns true on success, false on error -*/ -/**************************************************************************/ -bool Adafruit_miniTFTWing::begin(uint8_t addr, TwoWire *Wi) { - if (Wi != NULL) { - Adafruit_seesaw::_i2cbus = Wi; - } - - if (!Adafruit_seesaw::begin(addr, -1)) { - return false; - } - - if ((getVersion() >> 16) == 3322) { - // check if we have a product ID burned in, if so its the ATtiny816 version! - TFTWING_BUTTON_UP_PIN = 16; - TFTWING_BUTTON_UP = (1UL << TFTWING_BUTTON_UP_PIN); - - TFTWING_BUTTON_DOWN_PIN = 13; - TFTWING_BUTTON_DOWN = (1UL << TFTWING_BUTTON_DOWN_PIN); - - TFTWING_BUTTON_LEFT_PIN = 12; - TFTWING_BUTTON_LEFT = (1UL << TFTWING_BUTTON_LEFT_PIN); - - TFTWING_BUTTON_RIGHT_PIN = 14; - TFTWING_BUTTON_RIGHT = (1UL << TFTWING_BUTTON_RIGHT_PIN); - - TFTWING_BUTTON_SELECT_PIN = 15; - TFTWING_BUTTON_SELECT = (1UL << TFTWING_BUTTON_SELECT_PIN); - - TFTWING_BUTTON_A_PIN = 11; - TFTWING_BUTTON_A = (1UL << TFTWING_BUTTON_A_PIN); - - TFTWING_BUTTON_B_PIN = 10; - TFTWING_BUTTON_B = (1UL << TFTWING_BUTTON_B_PIN); - - TFTWING_BUTTON_ALL = - (TFTWING_BUTTON_UP | TFTWING_BUTTON_DOWN | TFTWING_BUTTON_LEFT | - TFTWING_BUTTON_RIGHT | TFTWING_BUTTON_SELECT | TFTWING_BUTTON_A | - TFTWING_BUTTON_B); - - TFTWING_RESET_PIN = 6; - } - this->pinMode(TFTWING_RESET_PIN, OUTPUT); - this->pinModeBulk(TFTWING_BUTTON_ALL, INPUT_PULLUP); - return true; -} - -/**************************************************************************/ -/*! - @brief set the value of the backlight - @param value the backlight value to set NOTE: 0xFFFF is all the way on - 0x0000 is off. -*/ -/**************************************************************************/ -void Adafruit_miniTFTWing::setBacklight(uint16_t value) { - - if ((getVersion() >> 16) == 3322) { - // this->analogWrite(7, value); - this->pinMode(7, OUTPUT); - if (value == TFTWING_BACKLIGHT_ON) { - this->digitalWrite(7, LOW); - } else { - this->digitalWrite(7, HIGH); - } - } else { - uint8_t cmd[] = {0x00, (uint8_t)(value >> 8), (uint8_t)value}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3); - } -} - -/**************************************************************************/ -/*! - @brief set the PWM frequency for the backlight - @param freq the frequency to set the backlight to -*/ -/**************************************************************************/ -void Adafruit_miniTFTWing::setBacklightFreq(uint16_t freq) { - if ((getVersion() >> 16) == 3322) { - } else { - uint8_t cmd[] = {0x0, (uint8_t)(freq >> 8), (uint8_t)freq}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3); - } -} - -/**************************************************************************/ -/*! - @brief reset the TFT screen by setting the value of the reset pin - @param rst the value to set the reset pin to -*/ -/**************************************************************************/ -void Adafruit_miniTFTWing::tftReset(bool rst) { - this->digitalWrite(TFTWING_RESET_PIN, rst); -} - -/**************************************************************************/ -/*! - @brief read all buttons on the wing and return as a 32 bit integer - @returns the value of the buttons -*/ -/**************************************************************************/ -uint32_t Adafruit_miniTFTWing::readButtons() { - return this->digitalReadBulk(TFTWING_BUTTON_ALL); -} diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.h deleted file mode 100644 index 1723236..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#ifndef _MINI_TFT_WING_H -#define _MINI_TFT_WING_H - -#include "Adafruit_seesaw.h" - -#define TFTWING_ADDR 0x5E - -#define TFTWING_BACKLIGHT_ON 0 // inverted output! -#define TFTWING_BACKLIGHT_OFF 0xFFFF // inverted output! - -extern uint32_t TFTWING_BUTTON_UP, TFTWING_BUTTON_DOWN, TFTWING_BUTTON_LEFT, - TFTWING_BUTTON_RIGHT, TFTWING_BUTTON_A, TFTWING_BUTTON_B, - TFTWING_BUTTON_SELECT; - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with mini tft - wing variant of seesaw helper IC -*/ -/**************************************************************************/ -class Adafruit_miniTFTWing : public Adafruit_seesaw { -public: - Adafruit_miniTFTWing(){}; - ~Adafruit_miniTFTWing(){}; - - bool begin(uint8_t addr = TFTWING_ADDR, TwoWire *Wi = NULL); - - void setBacklight(uint16_t value); - void setBacklightFreq(uint16_t freq); - void tftReset(bool rst = true); - uint32_t readButtons(); -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.cpp b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.cpp deleted file mode 100644 index 54405d7..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.cpp +++ /dev/null @@ -1,1034 +0,0 @@ -/*! - * @file Adafruit_seesaw.cpp - * - * @mainpage Adafruit seesaw arduino driver - * - * @section intro_sec Introduction - * - * This is part of Adafruit's seesaw driver for the Arduino platform. It is - * designed specifically to work with the Adafruit products that use seesaw - * technology. - * - * These chips use I2C to communicate, 2 pins (SCL+SDA) are required - * to interface with the board. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * @section author Author - * - * Written by Dean Miller for Adafruit Industries. - * - * @section license License - * - * BSD license, all text here must be included in any redistribution. - * - */ - -#include "Adafruit_seesaw.h" -#include - -//#define SEESAW_I2C_DEBUG - -/*! - ***************************************************************************************** - * @brief Create a seesaw object on a given I2C bus - * - * @param i2c_bus the I2C bus connected to the seesaw, defaults to "Wire" - ****************************************************************************************/ -Adafruit_seesaw::Adafruit_seesaw(TwoWire *i2c_bus) { - if (i2c_bus == NULL) { - _i2cbus = &Wire; - } else { - _i2cbus = i2c_bus; - } -} - -/*! - ***************************************************************************************** - * @brief Start the seesaw - * - * This should be called when your sketch is - *connecting to the seesaw - * - * @param addr the I2C address of the seesaw - * @param flow the flow control pin to use - * @param reset pass true to reset the seesaw on startup. Defaults - *to true. - * - * @return true if we could connect to the seesaw, false otherwise - ****************************************************************************************/ -bool Adafruit_seesaw::begin(uint8_t addr, int8_t flow, bool reset) { - _flow = flow; - - if (_flow != -1) - ::pinMode(_flow, INPUT); - - if (_i2c_dev) { - delete _i2c_dev; - } - - _i2c_dev = new Adafruit_I2CDevice(addr, _i2cbus); - - bool found = false; - for (int retries = 0; retries < 10; retries++) { - if (_i2c_dev->begin()) { - found = true; - break; - } - delay(10); - } - - if (!found) { - return false; - } - -#ifdef SEESAW_I2C_DEBUG - Serial.println("Begun"); -#endif - - if (reset) { - found = false; - SWReset(); - for (int retries = 0; retries < 10; retries++) { - if (_i2c_dev->detected()) { - found = true; - break; - } - delay(10); - } - } - - if (!found) { - return false; - } - -#ifdef SEESAW_I2C_DEBUG - Serial.println("Reset"); -#endif - - found = false; - for (int retries = 0; !found && retries < 10; retries++) { - uint8_t c = 0; - - this->read(SEESAW_STATUS_BASE, SEESAW_STATUS_HW_ID, &c, 1); - if ((c == SEESAW_HW_ID_CODE_SAMD09) || (c == SEESAW_HW_ID_CODE_TINY817) || - (c == SEESAW_HW_ID_CODE_TINY807) || (c == SEESAW_HW_ID_CODE_TINY816) || - (c == SEESAW_HW_ID_CODE_TINY806) || (c == SEESAW_HW_ID_CODE_TINY1616) || - (c == SEESAW_HW_ID_CODE_TINY1617)) { - found = true; - _hardwaretype = c; - } - - delay(10); - } - -#ifdef SEESAW_I2C_DEBUG - Serial.println("Done!"); -#endif - - return found; -} - -/*! - ******************************************************************* - * @brief perform a software reset. This resets all seesaw registers to - *their default values. - * This is called automatically from - *Adafruit_seesaw.begin() - * @returns True on I2C write success, false otherwise - - ********************************************************************/ -bool Adafruit_seesaw::SWReset() { - return this->write8(SEESAW_STATUS_BASE, SEESAW_STATUS_SWRST, 0xFF); -} - -/*! - ************************************************************************** - * @brief Returns the available options compiled into the seesaw firmware. - * @return the available options compiled into the seesaw firmware. If the - *option is included, the corresponding bit is set. For example, if the ADC - *module is compiled in then (ss.getOptions() & (1UL << SEESAW_ADC_BASE)) > 0 - ***********************************************************************/ -uint32_t Adafruit_seesaw::getOptions() { - uint8_t buf[4]; - this->read(SEESAW_STATUS_BASE, SEESAW_STATUS_OPTIONS, buf, 4); - uint32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - return ret; -} - -/*! - ********************************************************************* - * @brief Returns the version of the seesaw - * @return The version code. Bits [31:16] will be a date code, [15:0] will - *be the product id. - ********************************************************************/ -uint32_t Adafruit_seesaw::getVersion() { - uint8_t buf[4]; - this->read(SEESAW_STATUS_BASE, SEESAW_STATUS_VERSION, buf, 4); - uint32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - return ret; -} - -/*! - ********************************************************************* - * @brief Returns the version of the seesaw - * @param pid Pointer to uint16_t for product code result. - * @param year Pointer to uint8_t for date code year result. - * @param mon Pointer to uint8_t for date code month result. - * @param day Pointer to uint8_t for date code day result. - * @return Always returns true. - ********************************************************************/ -bool Adafruit_seesaw::getProdDatecode(uint16_t *pid, uint8_t *year, - uint8_t *mon, uint8_t *day) { - uint32_t vers = getVersion(); - *pid = vers >> 16; - - *year = vers & 0x3F; - *mon = (vers >> 7) & 0xF; - *day = (vers >> 11) & 0x1F; - return true; -} - -/*! - ************************************************************************** - * @brief Set the mode of a GPIO pin. - * - * @param pin the pin number. On the SAMD09 breakout, this corresponds to - *the number on the silkscreen. - * @param mode the mode to set the pin. One of INPUT, OUTPUT, or - *INPUT_PULLUP. - - ************************************************************************/ -void Adafruit_seesaw::pinMode(uint8_t pin, uint8_t mode) { - if (pin >= 32) - pinModeBulk(0, 1ul << (pin - 32), mode); - else - pinModeBulk(1ul << pin, mode); -} - -/*! - *************************************************************************** - * @brief Set the output of a GPIO pin - * - * @param pin the pin number. On the SAMD09 breakout, this corresponds to - *the number on the silkscreen. - * @param value the value to write to the GPIO pin. This should be - *HIGH or LOW. - ***************************************************************************/ -void Adafruit_seesaw::digitalWrite(uint8_t pin, uint8_t value) { - if (pin >= 32) - digitalWriteBulk(0, 1ul << (pin - 32), value); - else - digitalWriteBulk(1ul << pin, value); -} - -/*! - **************************************************************************** - * @brief Read the current status of a GPIO pin - * - * @param pin the pin number. On the SAMD09 breakout, this corresponds to - *the number on the silkscreen. - * - * @return the status of the pin. HIGH or LOW (1 or 0). - ***********************************************************************/ -bool Adafruit_seesaw::digitalRead(uint8_t pin) { - if (pin >= 32) - return digitalReadBulkB((1ul << (pin - 32))) != 0; - else - return digitalReadBulk((1ul << pin)) != 0; -} - -/*! - **************************************************************************** - * @brief read the status of multiple pins on port A. - * - * @param pins a bitmask of the pins to write. On the SAMD09 breakout, - *this corresponds to the number on the silkscreen. For example, passing 0b0110 - *will return the values of pins 2 and 3. - * - * @return the status of the passed pins. If 0b0110 was passed and pin 2 is - *high and pin 3 is low, 0b0010 (decimal number 2) will be returned. - *******************************************************************/ -uint32_t Adafruit_seesaw::digitalReadBulk(uint32_t pins) { - uint8_t buf[4]; - this->read(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK, buf, 4); - uint32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - return ret & pins; -} - -/*! - ************************************************************************** - * @brief read the status of multiple pins on port B. - * - * @param pins a bitmask of the pins to write. - * - * @return the status of the passed pins. If 0b0110 was passed and pin 2 is - *high and pin 3 is low, 0b0010 (decimal number 2) will be returned. - ************************************************************************/ -uint32_t Adafruit_seesaw::digitalReadBulkB(uint32_t pins) { - uint8_t buf[8]; - this->read(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK, buf, 8); - uint32_t ret = ((uint32_t)buf[4] << 24) | ((uint32_t)buf[5] << 16) | - ((uint32_t)buf[6] << 8) | (uint32_t)buf[7]; - return ret & pins; -} - -/*! - ********************************************************************** - * @brief Enable or disable GPIO interrupts on the passed pins - * - * @param pins a bitmask of the pins to write. On the SAMD09 breakout, - *this corresponds to the number on the silkscreen. For example, passing 0b0110 - *will enable or disable interrups on pins 2 and 3. - * @param enabled pass true to enable the interrupts on the passed - *pins, false to disable the interrupts on the passed pins. - ***********************************************************************/ -void Adafruit_seesaw::setGPIOInterrupts(uint32_t pins, bool enabled) { - uint8_t cmd[] = {(uint8_t)(pins >> 24), (uint8_t)(pins >> 16), - (uint8_t)(pins >> 8), (uint8_t)pins}; - if (enabled) - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_INTENSET, cmd, 4); - else - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_INTENCLR, cmd, 4); -} - -/*! - **************************************************************** - * @brief read the analog value on an ADC-enabled pin. - * - * @param pin the number of the pin to read. On the SAMD09 breakout, this - *corresponds to the number on the silkscreen. On the default seesaw firmware on - *the SAMD09 breakout, pins 2, 3, and 4 are ADC-enabled. - * - * @return the analog value. This is an integer between 0 and 1023 - ***********************************************************************/ -uint16_t Adafruit_seesaw::analogRead(uint8_t pin) { - uint8_t buf[2]; - uint8_t p = 0; - - if (_hardwaretype == SEESAW_HW_ID_CODE_SAMD09) { - switch (pin) { - case ADC_INPUT_0_PIN: - p = 0; - break; - case ADC_INPUT_1_PIN: - p = 1; - break; - case ADC_INPUT_2_PIN: - p = 2; - break; - case ADC_INPUT_3_PIN: - p = 3; - break; - default: - return 0; - } - } else if ((_hardwaretype == SEESAW_HW_ID_CODE_TINY807) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY817) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY816) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY806) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY1616) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY1617)) { - p = pin; - } else { - return 0; - } - - this->read(SEESAW_ADC_BASE, SEESAW_ADC_CHANNEL_OFFSET + p, buf, 2, 500); - uint16_t ret = ((uint16_t)buf[0] << 8) | buf[1]; - delay(1); - return ret; -} - -/*! - ****************************************************************************** - * @brief read the analog value on an capacitive touch-enabled pin. - * - * @param pin the number of the pin to read. - * - * @return the analog value. This is an integer between 0 and 1023 - ****************************************************************************/ -uint16_t Adafruit_seesaw::touchRead(uint8_t pin) { - uint8_t buf[2]; - uint8_t p = pin; - uint16_t ret = 65535; - - for (uint8_t retry = 0; retry < 5; retry++) { - if (this->read(SEESAW_TOUCH_BASE, SEESAW_TOUCH_CHANNEL_OFFSET + p, buf, 2, - 3000 + retry * 1000)) { - ret = ((uint16_t)buf[0] << 8) | buf[1]; - break; - } - } - return ret; -} - -/*! - *************************************************************************** - * @brief set the mode of multiple GPIO pins at once. - * - * @param pins a bitmask of the pins to write. On the SAMD09 breakout, - *this corresponds to the number on the silkscreen. For example, passing 0b0110 - *will set the mode of pins 2 and 3. - * @param mode the mode to set the pins to. One of INPUT, OUTPUT, - *or INPUT_PULLUP. - ************************************************************************/ -void Adafruit_seesaw::pinModeBulk(uint32_t pins, uint8_t mode) { - uint8_t cmd[] = {(uint8_t)(pins >> 24), (uint8_t)(pins >> 16), - (uint8_t)(pins >> 8), (uint8_t)pins}; - switch (mode) { - case OUTPUT: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRSET_BULK, cmd, 4); - break; - case INPUT: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 4); - break; - case INPUT_PULLUP: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 4); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_PULLENSET, cmd, 4); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_SET, cmd, 4); - break; - case INPUT_PULLDOWN: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 4); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_PULLENSET, cmd, 4); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_CLR, cmd, 4); - break; - } -} - -/*! - ***************************************************************************************** - * @brief set the mode of multiple GPIO pins at once. This supports both - *ports A and B. - * - * @param pinsa a bitmask of the pins to write on port A. On the SAMD09 - *breakout, this corresponds to the number on the silkscreen. For example, - *passing 0b0110 will set the mode of pins 2 and 3. - * @param pinsb a bitmask of the pins to write on port B. - * @param mode the mode to set the pins to. One of INPUT, OUTPUT, - *or INPUT_PULLUP. - ****************************************************************************************/ -void Adafruit_seesaw::pinModeBulk(uint32_t pinsa, uint32_t pinsb, - uint8_t mode) { - uint8_t cmd[] = {(uint8_t)(pinsa >> 24), (uint8_t)(pinsa >> 16), - (uint8_t)(pinsa >> 8), (uint8_t)pinsa, - (uint8_t)(pinsb >> 24), (uint8_t)(pinsb >> 16), - (uint8_t)(pinsb >> 8), (uint8_t)pinsb}; - switch (mode) { - case OUTPUT: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRSET_BULK, cmd, 8); - break; - case INPUT: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 8); - break; - case INPUT_PULLUP: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 8); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_PULLENSET, cmd, 8); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_SET, cmd, 8); - break; - case INPUT_PULLDOWN: - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_DIRCLR_BULK, cmd, 8); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_PULLENSET, cmd, 8); - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_CLR, cmd, 8); - break; - } -} - -/*! - ***************************************************************************************** - * @brief write a value to multiple GPIO pins at once. - * - * @param pins a bitmask of the pins to write. On the SAMD09 breakout, - *this corresponds to the number on the silkscreen. For example, passing 0b0110 - *will write the passed value to pins 2 and 3. - * @param value pass HIGH to set the output on the passed pins to - *HIGH, low to set the output on the passed pins to LOW. - ****************************************************************************************/ -void Adafruit_seesaw::digitalWriteBulk(uint32_t pins, uint8_t value) { - uint8_t cmd[] = {(uint8_t)(pins >> 24), (uint8_t)(pins >> 16), - (uint8_t)(pins >> 8), (uint8_t)pins}; - if (value) - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_SET, cmd, 4); - else - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_CLR, cmd, 4); -} - -/*! - ***************************************************************************************** - * @brief write a value to multiple GPIO pins at once. This supports both - *ports A and B - * - * @param pinsa a bitmask of the pins to write on port A. On the SAMD09 - *breakout, this corresponds to the number on the silkscreen. For example, - *passing 0b0110 will write the passed value to pins 2 and 3. - * @param pinsb a bitmask of the pins to write on port B. - * @param value pass HIGH to set the output on the passed pins to - *HIGH, low to set the output on the passed pins to LOW. - ****************************************************************************************/ -void Adafruit_seesaw::digitalWriteBulk(uint32_t pinsa, uint32_t pinsb, - uint8_t value) { - uint8_t cmd[] = {(uint8_t)(pinsa >> 24), (uint8_t)(pinsa >> 16), - (uint8_t)(pinsa >> 8), (uint8_t)pinsa, - (uint8_t)(pinsb >> 24), (uint8_t)(pinsb >> 16), - (uint8_t)(pinsb >> 8), (uint8_t)pinsb}; - if (value) - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_SET, cmd, 8); - else - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK_CLR, cmd, 8); -} - -/*! - ***************************************************************************************** - * @brief write the entire GPIO port at once. - * - * @param port_values The up-to-32 values to write to the pins, doesn't - *set direction used for bulk writing quickly all valid pins - ****************************************************************************************/ -void Adafruit_seesaw::digitalWriteBulk(uint32_t port_values) { - uint8_t cmd[] = {(uint8_t)(port_values >> 24), (uint8_t)(port_values >> 16), - (uint8_t)(port_values >> 8), (uint8_t)port_values}; - this->write(SEESAW_GPIO_BASE, SEESAW_GPIO_BULK, cmd, 4); -} - -/*! - ***************************************************************************************** - * @brief write a PWM value to a PWM-enabled pin - * - * @param pin the number of the pin to write. On the SAMD09 breakout, this - *corresponds to the number on the silkscreen. on the default seesaw firmware on - *the SAMD09 breakout, pins 5, 6, and 7 are PWM enabled. - * @param value the value to write to the pin - * @param width the width of the value to write. Defaults to 8. If - *16 is passed a 16 bit value will be written. - ****************************************************************************************/ -void Adafruit_seesaw::analogWrite(uint8_t pin, uint16_t value, uint8_t width) { - int8_t p = -1; - - if (_hardwaretype == SEESAW_HW_ID_CODE_SAMD09) { - switch (pin) { - case PWM_0_PIN: - p = 0; - break; - case PWM_1_PIN: - p = 1; - break; - case PWM_2_PIN: - p = 2; - break; - case PWM_3_PIN: - p = 3; - break; - default: - return; - } - } else if ((_hardwaretype == SEESAW_HW_ID_CODE_SAMD09) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY817) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY807) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY816) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY806) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY1616) || - (_hardwaretype == SEESAW_HW_ID_CODE_TINY1617)) { - p = pin; - } else { - return; - } - - if (width == 16) { - uint8_t cmd[] = {(uint8_t)p, (uint8_t)(value >> 8), (uint8_t)value}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3); - } else { - uint16_t mappedVal = map(value, 0, 255, 0, 65535); - uint8_t cmd[] = {(uint8_t)p, (uint8_t)(mappedVal >> 8), (uint8_t)mappedVal}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3); - } -} - -/*! - * @brief set the PWM frequency of a PWM-enabled pin. Note that on SAMD09, - * SAMD11 boards the frequency will be mapped to closest match - * fixed frequencies. Also note that PWM pins 4 and 5 share a - *timer, and PWM pins 6 and 7 share a timer. Changing the frequency for one pin - *will change the frequency for the other pin that is on the timer. - * - * @param pin the number of the pin to change frequency of. On the SAMD09 - * breakout, this corresponds to the number on the silkscreen. - * on the default seesaw firmware on the SAMD09 breakout, pins 5, - *6, and 7 are PWM enabled. - * @param freq the frequency to set. - ******************************************************************************/ -void Adafruit_seesaw::setPWMFreq(uint8_t pin, uint16_t freq) { - int8_t p = -1; - switch (pin) { - case PWM_0_PIN: - p = 0; - break; - case PWM_1_PIN: - p = 1; - break; - case PWM_2_PIN: - p = 2; - break; - case PWM_3_PIN: - p = 3; - break; - default: - break; - } - if (p > -1) { - uint8_t cmd[] = {(uint8_t)p, (uint8_t)(freq >> 8), (uint8_t)freq}; - this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3); - } -} - -/*! - * @brief Enable the data ready interrupt on the passed sercom. Note that - *both the interrupt module and the passed sercom must be compiled into the - *seesaw firmware for this to function. If both of these things are true, the - *interrupt pin on the seesaw will fire when there is data to be read from the - *passed sercom. On the default seesaw firmeare on the SAMD09 breakout, no - *sercoms are enabled. - * - * @param sercom the sercom to enable the interrupt on. - ****************************************************************************************/ -void Adafruit_seesaw::enableSercomDataRdyInterrupt(uint8_t sercom) { - _sercom_inten.bit.DATA_RDY = 1; - this->write8(SEESAW_SERCOM0_BASE + sercom, SEESAW_SERCOM_INTEN, - _sercom_inten.reg); -} - -/*! - *************************************************************************************** - * @brief Disable the data ready interrupt on the passed sercom. - * - * @param sercom the sercom to disable the interrupt on. - ****************************************************************************************/ -void Adafruit_seesaw::disableSercomDataRdyInterrupt(uint8_t sercom) { - _sercom_inten.bit.DATA_RDY = 0; - this->write8(SEESAW_SERCOM0_BASE + sercom, SEESAW_SERCOM_INTEN, - _sercom_inten.reg); -} - -/*! - ***************************************************************************************** - * @brief Reads a character from the passed sercom if one is available. - *Note that on the default seesaw firmware on the SAMD09 breakout no sercoms are - *enabled. - * - * @param sercom the sercom to read data from. - * @returns One byte of data - ****************************************************************************************/ -char Adafruit_seesaw::readSercomData(uint8_t sercom) { - return this->read8(SEESAW_SERCOM0_BASE + sercom, SEESAW_SERCOM_DATA); -} - -/*! - ***************************************************************************************** - * @brief Return the EEPROM address used to store I2C address - * - * @return the EEPROM address location - ****************************************************************************************/ -uint8_t Adafruit_seesaw::getI2CaddrEEPROMloc() { - // All SAMDs use fixed location -> 0x3F - // ATtinys place at end of EEPROM, so can vary: - // 8xx have 128B of EEPROM -> 0x7F - // 16xx have 256B of EERPOM -> 0xFF - switch (_hardwaretype) { - case SEESAW_HW_ID_CODE_SAMD09: - return 0x3F; - case SEESAW_HW_ID_CODE_TINY817: - case SEESAW_HW_ID_CODE_TINY807: - case SEESAW_HW_ID_CODE_TINY816: - case SEESAW_HW_ID_CODE_TINY806: - return 0x7F; - case SEESAW_HW_ID_CODE_TINY1616: - case SEESAW_HW_ID_CODE_TINY1617: - return 0xFF; - default: - return 0x00; - } -} - -/*! - ***************************************************************************************** - * @brief Set the seesaw I2C address. This will automatically call - *Adafruit_seesaw.begin() with the new address. - * - * @param addr the new address for the seesaw. This must be a valid 7 bit - *I2C address. - ****************************************************************************************/ -void Adafruit_seesaw::setI2CAddr(uint8_t addr) { - this->EEPROMWrite8(getI2CaddrEEPROMloc(), addr); - delay(250); - this->begin(addr); // restart w/ the new addr -} - -/*! - ***************************************************************************************** - * @brief Read the I2C address of the seesaw - * - * @return the 7 bit I2C address of the seesaw... which you probably - *already know because you just read data from it. - ****************************************************************************************/ -uint8_t Adafruit_seesaw::getI2CAddr() { - return this->EEPROMRead8(getI2CaddrEEPROMloc()); -} - -/*! - ***************************************************************************************** - * @brief Write a 1 byte to an EEPROM address - * - * @param addr the address to write to. On the default seesaw firmware on - *the SAMD09 breakout this is between 0 and 63. - * @param val to write between 0 and 255 - ****************************************************************************************/ -void Adafruit_seesaw::EEPROMWrite8(uint8_t addr, uint8_t val) { - this->EEPROMWrite(addr, &val, 1); -} - -/*! - ***************************************************************************************** - * @brief write a string of bytes to EEPROM starting at the passed address - * - * @param addr the starting address to write the first byte. This will be - *automatically incremented with each byte written. - * @param buf the buffer of bytes to be written. - * @param size the number of bytes to write. Writing past the end - *of available EEPROM may result in undefined behavior. - ****************************************************************************************/ -void Adafruit_seesaw::EEPROMWrite(uint8_t addr, uint8_t *buf, uint8_t size) { - this->write(SEESAW_EEPROM_BASE, addr, buf, size); -} - -/*! - ***************************************************************************************** - * @brief Read 1 byte from the specified EEPROM address. - * - * @param addr the address to read from. One the default seesaw firmware - *on the SAMD09 breakout this is between 0 and 63. - * - * @return the value between 0 and 255 that was read from the passed - *address. - ****************************************************************************************/ -uint8_t Adafruit_seesaw::EEPROMRead8(uint8_t addr) { - return this->read8(SEESAW_EEPROM_BASE, addr); -} - -/*! - ***************************************************************************************** - * @brief Set the baud rate on SERCOM0. - * - * @param baud the baud rate to set. This is an integer value. Baud rates - *up to 115200 are supported. - ****************************************************************************************/ -void Adafruit_seesaw::UARTSetBaud(uint32_t baud) { - uint8_t cmd[] = {(uint8_t)(baud >> 24), (uint8_t)(baud >> 16), - (uint8_t)(baud >> 8), (uint8_t)baud}; - this->write(SEESAW_SERCOM0_BASE, SEESAW_SERCOM_BAUD, cmd, 4); -} - -/*! - ***************************************************************************************** - * @brief activate or deactivate a key and edge on the keypad module - * - * @param key the key number to activate - * @param edge the edge to trigger on - * @param enable passing true will enable the passed event, - *passing false will disable it. - ****************************************************************************************/ -void Adafruit_seesaw::setKeypadEvent(uint8_t key, uint8_t edge, bool enable) { - keyState ks; - ks.bit.STATE = enable; - ks.bit.ACTIVE = (1 << edge); - uint8_t cmd[] = {key, ks.reg}; - this->write(SEESAW_KEYPAD_BASE, SEESAW_KEYPAD_EVENT, cmd, 2); -} - -/** - ***************************************************************************************** - * @brief enable the keypad interrupt that fires when events are in the - *fifo. - ****************************************************************************************/ -void Adafruit_seesaw::enableKeypadInterrupt() { - this->write8(SEESAW_KEYPAD_BASE, SEESAW_KEYPAD_INTENSET, 0x01); -} - -/** - ***************************************************************************************** - * @brief disable the keypad interrupt that fires when events are in the - *fifo. - ****************************************************************************************/ -void Adafruit_seesaw::disableKeypadInterrupt() { - this->write8(SEESAW_KEYPAD_BASE, SEESAW_KEYPAD_INTENCLR, 0x01); -} - -/** - ***************************************************************************************** - * @brief Get the number of events currently in the fifo - * @return the number of events in the fifo - ****************************************************************************************/ -uint8_t Adafruit_seesaw::getKeypadCount() { - return this->read8(SEESAW_KEYPAD_BASE, SEESAW_KEYPAD_COUNT, 500); -} - -/** - ***************************************************************************************** - * @brief Read all keyEvents into the passed buffer - * - * @param buf pointer to where the keyEvents should be stored - * @param count the number of events to read - * @returns True on I2C read success - ****************************************************************************************/ -bool Adafruit_seesaw::readKeypad(keyEventRaw *buf, uint8_t count) { - return this->read(SEESAW_KEYPAD_BASE, SEESAW_KEYPAD_FIFO, (uint8_t *)buf, - count, 1000); -} - -/** - ***************************************************************************************** - * @brief Read the temperature of the seesaw board in degrees Celsius. - *NOTE: not all seesaw firmwares have the temperature sensor enabled. - * @return Temperature in degrees Celsius as a floating point value. - ****************************************************************************************/ -float Adafruit_seesaw::getTemp() { - uint8_t buf[4]; - this->read(SEESAW_STATUS_BASE, SEESAW_STATUS_TEMP, buf, 4, 1000); - int32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - return (1.0 / (1UL << 16)) * ret; -} - -/** - ***************************************************************************************** - * @brief Read the current position of the encoder - * @param encoder Which encoder to use, defaults to 0 - * @return The encoder position as a 32 bit signed integer. - ****************************************************************************************/ -int32_t Adafruit_seesaw::getEncoderPosition(uint8_t encoder) { - uint8_t buf[4]; - this->read(SEESAW_ENCODER_BASE, SEESAW_ENCODER_POSITION + encoder, buf, 4); - int32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - - return ret; -} - -/** - ***************************************************************************************** - * @brief Set the current position of the encoder - * @param encoder Which encoder to use, defaults to 0 - * @param pos the position to set the encoder to. - ****************************************************************************************/ -void Adafruit_seesaw::setEncoderPosition(int32_t pos, uint8_t encoder) { - uint8_t buf[] = {(uint8_t)(pos >> 24), (uint8_t)(pos >> 16), - (uint8_t)(pos >> 8), (uint8_t)(pos & 0xFF)}; - this->write(SEESAW_ENCODER_BASE, SEESAW_ENCODER_POSITION + encoder, buf, 4); -} - -/** - ***************************************************************************************** - * @brief Read the change in encoder position since it was last read. - * @param encoder Which encoder to use, defaults to 0 - * @return The encoder change as a 32 bit signed integer. - ****************************************************************************************/ -int32_t Adafruit_seesaw::getEncoderDelta(uint8_t encoder) { - uint8_t buf[4]; - this->read(SEESAW_ENCODER_BASE, SEESAW_ENCODER_DELTA + encoder, buf, 4); - int32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | - ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; - - return ret; -} - -/** - ***************************************************************************************** - * @brief Enable the interrupt to fire when the encoder changes position. - * @param encoder Which encoder to use, defaults to 0 - * @returns True on I2C write success - ****************************************************************************************/ -bool Adafruit_seesaw::enableEncoderInterrupt(uint8_t encoder) { - return this->write8(SEESAW_ENCODER_BASE, SEESAW_ENCODER_INTENSET + encoder, - 0x01); -} - -/** - ***************************************************************************************** - * @brief Disable the interrupt from firing when the encoder changes - *position. - * @param encoder Which encoder to use, defaults to 0 - * @returns True on I2C write success - ****************************************************************************************/ -bool Adafruit_seesaw::disableEncoderInterrupt(uint8_t encoder) { - return this->write8(SEESAW_ENCODER_BASE, SEESAW_ENCODER_INTENCLR + encoder, - 0x01); -} - -/** - ***************************************************************************************** - * @brief Write 1 byte to the specified seesaw register. - * - * @param regHigh the module address register (ex. SEESAW_NEOPIXEL_BASE) - * @param regLow the function address register (ex. - *SEESAW_NEOPIXEL_PIN) - * @param value the value between 0 and 255 to write - * @returns True on I2C write success - ****************************************************************************************/ -bool Adafruit_seesaw::write8(byte regHigh, byte regLow, byte value) { - return this->write(regHigh, regLow, &value, 1); -} - -/** - ***************************************************************************************** - * @brief read 1 byte from the specified seesaw register. - * - * @param regHigh the module address register (ex. SEESAW_STATUS_BASE) - * @param regLow the function address register (ex. - *SEESAW_STATUS_VERSION) - * @param delay a number of microseconds to delay before reading - *out the data. Different delay values may be necessary to ensure the seesaw - *chip has time to process the requested data. Defaults to 125. - * - * @return the value between 0 and 255 read from the passed register - ****************************************************************************************/ -uint8_t Adafruit_seesaw::read8(byte regHigh, byte regLow, uint16_t delay) { - uint8_t ret; - this->read(regHigh, regLow, &ret, 1, delay); - - return ret; -} - -/** - ***************************************************************************************** - * @brief Read a specified number of bytes into a buffer from the seesaw. - * - * @param regHigh the module address register (ex. SEESAW_STATUS_BASE) - * @param regLow the function address register (ex. - *SEESAW_STATUS_VERSION) - * @param buf the buffer to read the bytes into - * @param num the number of bytes to read. - * @param delay an optional delay in between setting the read - *register and reading out the data. This is required for some seesaw functions - *(ex. reading ADC data) - * @returns True on I2C read success - ****************************************************************************************/ -bool Adafruit_seesaw::read(uint8_t regHigh, uint8_t regLow, uint8_t *buf, - uint8_t num, uint16_t delay) { - uint8_t pos = 0; - uint8_t prefix[2]; - prefix[0] = (uint8_t)regHigh; - prefix[1] = (uint8_t)regLow; - - // on arduino we need to read in 32 byte chunks - while (pos < num) { - uint8_t read_now = min(32, num - pos); - - if (_flow != -1) { - while (!::digitalRead(_flow)) - yield(); - } - - if (!_i2c_dev->write(prefix, 2)) { - return false; - } - - // TODO: tune this - delayMicroseconds(delay); - - if (_flow != -1) { - while (!::digitalRead(_flow)) - yield(); - } - -#ifdef SEESAW_I2C_DEBUG - Serial.print("Reading "); - Serial.print(read_now); - Serial.println(" bytes"); -#endif - - if (!_i2c_dev->read(buf + pos, read_now)) { - return false; - } - pos += read_now; -#ifdef SEESAW_I2C_DEBUG - Serial.print("pos: "); - Serial.print(pos); - Serial.print(" num:"); - Serial.println(num); -#endif - } - return true; -} - -/*! - ***************************************************************************************** - * @brief Write a specified number of bytes to the seesaw from the passed - *buffer. - * - * @param regHigh the module address register (ex. SEESAW_GPIO_BASE) - * @param regLow the function address register (ex. SEESAW_GPIO_BULK_SET) - * @param buf the buffer the the bytes from - * @param num the number of bytes to write. - * @returns True on I2C write success - ****************************************************************************************/ -bool Adafruit_seesaw::write(uint8_t regHigh, uint8_t regLow, - uint8_t *buf = NULL, uint8_t num = 0) { - uint8_t prefix[2]; - prefix[0] = (uint8_t)regHigh; - prefix[1] = (uint8_t)regLow; - - if (_flow != -1) - while (!::digitalRead(_flow)) - yield(); - - if (!_i2c_dev->write(buf, num, true, prefix, 2)) { - return false; - } - - return true; -} - -/*! - ***************************************************************************************** - * @brief The print wrapper for the seesaw class. Calling this allows you - *to use ss.print() or ss.println() and write to the UART on SERCOM0 of the - *seesaw. Note that this functionality is only available when the UART (sercom) - *module is compiled into the seesaw firmware. On the default seesaw firmware on - *the SAMD09 breakout this functionality is not available. - * - * @param character the character to write. - * @returns The number of bytes written (1) - ****************************************************************************************/ -size_t Adafruit_seesaw::write(uint8_t character) { - // TODO: add support for multiple sercoms - this->write8(SEESAW_SERCOM0_BASE, SEESAW_SERCOM_DATA, character); - delay(1); // TODO: this can be optimized... it's only needed for longer writes - return 1; -} - -/*! - ************************************************************************ - * @brief The print wrapper for the seesaw class allowing the user to - *print a string. Calling this allows you to use ss.print() or ss.println() and - *write to the UART on SERCOM0 of the seesaw. Note that this functionality is - *only available when the UART (sercom) module is compiled into the seesaw - *firmware. On the default seesaw firmware on the SAMD09 breakout this - *functionality is not available. - * - * @param str the string to write - * @return number of bytes written (not including trailing 0) - *********************************************************************/ -size_t Adafruit_seesaw::write(const char *str) { - uint8_t buf[32]; - uint8_t len = 0; - while (*str) { - buf[len] = *str; - str++; - len++; - } - this->write(SEESAW_SERCOM0_BASE, SEESAW_SERCOM_DATA, buf, len); - return len; -} diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.h b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.h deleted file mode 100644 index a18fee8..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Adafruit_seesaw.h +++ /dev/null @@ -1,335 +0,0 @@ -/*! - * @file Adafruit_seesaw.h - * - * This is part of Adafruit's seesaw driver for the Arduino platform. It is - * designed specifically to work with the Adafruit products that use seesaw - * technology. - * - * These chips use I2C to communicate, 2 pins (SCL+SDA) are required - * to interface with the board. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Dean Miller for Adafruit Industries. - * - * BSD license, all text here must be included in any redistribution. - * - */ - -#ifndef LIB_SEESAW_H -#define LIB_SEESAW_H - -#include "Adafruit_I2CDevice.h" -#include -#include - -/*========================================================================= - I2C ADDRESS/BITS - -----------------------------------------------------------------------*/ -#define SEESAW_ADDRESS (0x49) ///< Default Seesaw I2C address -/*=========================================================================*/ - -/*========================================================================= - REGISTERS - -----------------------------------------------------------------------*/ - -/** Module Base Addreses - * The module base addresses for different seesaw modules. - */ -enum { - SEESAW_STATUS_BASE = 0x00, - SEESAW_GPIO_BASE = 0x01, - SEESAW_SERCOM0_BASE = 0x02, - - SEESAW_TIMER_BASE = 0x08, - SEESAW_ADC_BASE = 0x09, - SEESAW_DAC_BASE = 0x0A, - SEESAW_INTERRUPT_BASE = 0x0B, - SEESAW_DAP_BASE = 0x0C, - SEESAW_EEPROM_BASE = 0x0D, - SEESAW_NEOPIXEL_BASE = 0x0E, - SEESAW_TOUCH_BASE = 0x0F, - SEESAW_KEYPAD_BASE = 0x10, - SEESAW_ENCODER_BASE = 0x11, - SEESAW_SPECTRUM_BASE = 0x12, -}; - -/** GPIO module function address registers - */ -enum { - SEESAW_GPIO_DIRSET_BULK = 0x02, - SEESAW_GPIO_DIRCLR_BULK = 0x03, - SEESAW_GPIO_BULK = 0x04, - SEESAW_GPIO_BULK_SET = 0x05, - SEESAW_GPIO_BULK_CLR = 0x06, - SEESAW_GPIO_BULK_TOGGLE = 0x07, - SEESAW_GPIO_INTENSET = 0x08, - SEESAW_GPIO_INTENCLR = 0x09, - SEESAW_GPIO_INTFLAG = 0x0A, - SEESAW_GPIO_PULLENSET = 0x0B, - SEESAW_GPIO_PULLENCLR = 0x0C, -}; - -/** status module function address registers - */ -enum { - SEESAW_STATUS_HW_ID = 0x01, - SEESAW_STATUS_VERSION = 0x02, - SEESAW_STATUS_OPTIONS = 0x03, - SEESAW_STATUS_TEMP = 0x04, - SEESAW_STATUS_SWRST = 0x7F, -}; - -/** timer module function address registers - */ -enum { - SEESAW_TIMER_STATUS = 0x00, - SEESAW_TIMER_PWM = 0x01, - SEESAW_TIMER_FREQ = 0x02, -}; - -/** ADC module function address registers - */ -enum { - SEESAW_ADC_STATUS = 0x00, - SEESAW_ADC_INTEN = 0x02, - SEESAW_ADC_INTENCLR = 0x03, - SEESAW_ADC_WINMODE = 0x04, - SEESAW_ADC_WINTHRESH = 0x05, - SEESAW_ADC_CHANNEL_OFFSET = 0x07, -}; - -/** Sercom module function address registers - */ -enum { - SEESAW_SERCOM_STATUS = 0x00, - SEESAW_SERCOM_INTEN = 0x02, - SEESAW_SERCOM_INTENCLR = 0x03, - SEESAW_SERCOM_BAUD = 0x04, - SEESAW_SERCOM_DATA = 0x05, -}; - -/** neopixel module function address registers - */ -enum { - SEESAW_NEOPIXEL_STATUS = 0x00, - SEESAW_NEOPIXEL_PIN = 0x01, - SEESAW_NEOPIXEL_SPEED = 0x02, - SEESAW_NEOPIXEL_BUF_LENGTH = 0x03, - SEESAW_NEOPIXEL_BUF = 0x04, - SEESAW_NEOPIXEL_SHOW = 0x05, -}; - -/** touch module function address registers - */ -enum { - SEESAW_TOUCH_CHANNEL_OFFSET = 0x10, -}; - -/** keypad module function address registers - */ -enum { - SEESAW_KEYPAD_STATUS = 0x00, - SEESAW_KEYPAD_EVENT = 0x01, - SEESAW_KEYPAD_INTENSET = 0x02, - SEESAW_KEYPAD_INTENCLR = 0x03, - SEESAW_KEYPAD_COUNT = 0x04, - SEESAW_KEYPAD_FIFO = 0x10, -}; - -/** keypad module edge definitions - */ -enum { - SEESAW_KEYPAD_EDGE_HIGH = 0, - SEESAW_KEYPAD_EDGE_LOW, - SEESAW_KEYPAD_EDGE_FALLING, - SEESAW_KEYPAD_EDGE_RISING, -}; - -/** encoder module edge definitions - */ -enum { - SEESAW_ENCODER_STATUS = 0x00, - SEESAW_ENCODER_INTENSET = 0x10, - SEESAW_ENCODER_INTENCLR = 0x20, - SEESAW_ENCODER_POSITION = 0x30, - SEESAW_ENCODER_DELTA = 0x40, -}; - -/** Audio spectrum module function address registers - */ -enum { - SEESAW_SPECTRUM_RESULTS_LOWER = 0x00, // Audio spectrum bins 0-31 - SEESAW_SPECTRUM_RESULTS_UPPER = 0x01, // Audio spectrum bins 32-63 - // If some future device supports a larger spectrum, can add additional - // "bins" working upward from here. Configurable setting registers then - // work downward from the top to avoid collision between spectrum bins - // and configurables. - SEESAW_SPECTRUM_CHANNEL = 0xFD, - SEESAW_SPECTRUM_RATE = 0xFE, - SEESAW_SPECTRUM_STATUS = 0xFF, -}; - -#define ADC_INPUT_0_PIN 2 ///< default ADC input pin -#define ADC_INPUT_1_PIN 3 ///< default ADC input pin -#define ADC_INPUT_2_PIN 4 ///< default ADC input pin -#define ADC_INPUT_3_PIN 5 ///< default ADC input pin - -#define PWM_0_PIN 4 ///< default PWM output pin -#define PWM_1_PIN 5 ///< default PWM output pin -#define PWM_2_PIN 6 ///< default PWM output pin -#define PWM_3_PIN 7 ///< default PWM output pin - -#ifndef INPUT_PULLDOWN -#define INPUT_PULLDOWN \ - 0x03 ///< for compatibility with platforms that do not already define - ///< INPUT_PULLDOWN -#endif - -/*=========================================================================*/ -// clang-format off -#define SEESAW_HW_ID_CODE_SAMD09 0x55 ///< seesaw HW ID code for SAMD09 -#define SEESAW_HW_ID_CODE_TINY806 0x84 ///< seesaw HW ID code for ATtiny806 -#define SEESAW_HW_ID_CODE_TINY807 0x85 ///< seesaw HW ID code for ATtiny807 -#define SEESAW_HW_ID_CODE_TINY816 0x86 ///< seesaw HW ID code for ATtiny816 -#define SEESAW_HW_ID_CODE_TINY817 0x87 ///< seesaw HW ID code for ATtiny817 -#define SEESAW_HW_ID_CODE_TINY1616 0x88 ///< seesaw HW ID code for ATtiny1616 -#define SEESAW_HW_ID_CODE_TINY1617 0x89 ///< seesaw HW ID code for ATtiny1617 -// clang-format on - -/** raw key event stucture for keypad module */ -union keyEventRaw { - struct { - uint8_t EDGE : 2; ///< the edge that was triggered - uint8_t NUM : 6; ///< the event number - } bit; ///< bitfield format - uint8_t reg; ///< register format -}; - -/** extended key event stucture for keypad module */ -union keyEvent { - struct { - uint8_t EDGE : 2; ///< the edge that was triggered - uint16_t NUM : 14; ///< the event number - } bit; ///< bitfield format - uint16_t reg; ///< register format -}; - -/** key state struct that will be written to seesaw chip keypad module */ -union keyState { - struct { - uint8_t STATE : 1; ///< the current state of the key - uint8_t ACTIVE : 4; ///< the registered events for that key - } bit; ///< bitfield format - uint8_t reg; ///< register format -}; - -/**************************************************************************/ -/*! - @brief Class that stores state and functions for interacting with seesaw - helper IC -*/ -/**************************************************************************/ -class Adafruit_seesaw : public Print { -public: - // constructors - Adafruit_seesaw(TwoWire *Wi = NULL); - ~Adafruit_seesaw(void){}; - - bool begin(uint8_t addr = SEESAW_ADDRESS, int8_t flow = -1, - bool reset = true); - uint32_t getOptions(); - uint32_t getVersion(); - bool getProdDatecode(uint16_t *pid, uint8_t *year, uint8_t *mon, - uint8_t *day); - - bool SWReset(); - - void pinMode(uint8_t pin, uint8_t mode); - void pinModeBulk(uint32_t pins, uint8_t mode); - void pinModeBulk(uint32_t pinsa, uint32_t pinsb, uint8_t mode); - virtual void analogWrite(uint8_t pin, uint16_t value, uint8_t width = 8); - void digitalWrite(uint8_t pin, uint8_t value); - void digitalWriteBulk(uint32_t port_values); - void digitalWriteBulk(uint32_t pins, uint8_t value); - void digitalWriteBulk(uint32_t pinsa, uint32_t pinsb, uint8_t value); - - bool digitalRead(uint8_t pin); - uint32_t digitalReadBulk(uint32_t pins); - uint32_t digitalReadBulkB(uint32_t pins); - - void setGPIOInterrupts(uint32_t pins, bool enabled); - - virtual uint16_t analogRead(uint8_t pin); - - uint16_t touchRead(uint8_t pin); - - virtual void setPWMFreq(uint8_t pin, uint16_t freq); - - void enableSercomDataRdyInterrupt(uint8_t sercom = 0); - void disableSercomDataRdyInterrupt(uint8_t sercom = 0); - - char readSercomData(uint8_t sercom = 0); - - void EEPROMWrite8(uint8_t addr, uint8_t val); - void EEPROMWrite(uint8_t addr, uint8_t *buf, uint8_t size); - uint8_t EEPROMRead8(uint8_t addr); - - void setI2CAddr(uint8_t addr); - uint8_t getI2CAddr(); - - void UARTSetBaud(uint32_t baud); - - void setKeypadEvent(uint8_t key, uint8_t edge, bool enable = true); - void enableKeypadInterrupt(); - void disableKeypadInterrupt(); - uint8_t getKeypadCount(); - bool readKeypad(keyEventRaw *buf, uint8_t count); - - float getTemp(); - - int32_t getEncoderPosition(uint8_t encoder = 0); - int32_t getEncoderDelta(uint8_t encoder = 0); - bool enableEncoderInterrupt(uint8_t encoder = 0); - bool disableEncoderInterrupt(uint8_t encoder = 0); - void setEncoderPosition(int32_t pos, uint8_t encoder = 0); - - virtual size_t write(uint8_t); - virtual size_t write(const char *str); - -protected: - TwoWire *_i2cbus; /*!< The I2C Bus used to communicate with the seesaw */ - Adafruit_I2CDevice *_i2c_dev = NULL; ///< The BusIO device for I2C control - - int8_t _flow; /*!< The flow control pin to use */ - - uint8_t _hardwaretype = 0; /*!< what hardware type is attached! */ - uint8_t getI2CaddrEEPROMloc(); - - bool write8(byte regHigh, byte regLow, byte value); - uint8_t read8(byte regHigh, byte regLow, uint16_t delay = 250); - - bool read(uint8_t regHigh, uint8_t regLow, uint8_t *buf, uint8_t num, - uint16_t delay = 250); - bool write(uint8_t regHigh, uint8_t regLow, uint8_t *buf, uint8_t num); - - /*========================================================================= - REGISTER BITFIELDS - -----------------------------------------------------------------------*/ - - /** Sercom interrupt enable register - */ - union sercom_inten { - struct { - uint8_t DATA_RDY : 1; ///< this bit is set when data becomes available - } bit; ///< bitfields - uint8_t reg; ///< full register - }; - sercom_inten _sercom_inten; ///< sercom interrupt enable register instance - - /*=========================================================================*/ -}; - -#endif diff --git a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Doxyfile b/studies/console/arduino/libraries/Adafruit_seesaw_Library/Doxyfile deleted file mode 100644 index 9179c72..0000000 --- a/studies/console/arduino/libraries/Adafruit_seesaw_Library/Doxyfile +++ /dev/null @@ -1,2492 +0,0 @@ -# Doxyfile 1.8.13 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "Adafruit Library" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = YES - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.idl \ - *.ddl \ - *.odl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.cs \ - *.d \ - *.php \ - *.php4 \ - *.php5 \ - *.phtml \ - *.inc \ - *.m \ - *.markdown \ - *.md \ - *.mm \ - *.dox \ - *.py \ - *.pyw \ - *.f90 \ - *.f95 \ - *.f03 \ - *.f08 \ - *.f \ - *.for \ - *.tcl \ - *.vhd \ - *.vhdl \ - *.ucf \ - *.qsf - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = */seesaw_neopixel.* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /