PokittoLib is the library needed for programming the Pokitto DIY game console (www.pokitto.com)

Dependents:   YATTT sd_map_test cPong SnowDemo ... more

PokittoLib

Library for programming Pokitto hardware

How to Use

  1. Import this library to online compiler (see button "import" on the right hand side
  2. DO NOT import mbed-src anymore, a better version is now included inside PokittoLib
  3. Change My_settings.h according to your project
  4. Start coding!
Committer:
Pokitto
Date:
Sat Oct 21 17:22:47 2017 +0000
Revision:
18:831e2801d466
New bootloader system

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pokitto 18:831e2801d466 1 /**************************************************************************/
Pokitto 18:831e2801d466 2 /*!
Pokitto 18:831e2801d466 3 @file PokittoCore.h
Pokitto 18:831e2801d466 4 @author Jonne Valola
Pokitto 18:831e2801d466 5
Pokitto 18:831e2801d466 6 @section LICENSE
Pokitto 18:831e2801d466 7
Pokitto 18:831e2801d466 8 Software License Agreement (BSD License)
Pokitto 18:831e2801d466 9
Pokitto 18:831e2801d466 10 Copyright (c) 2016, Jonne Valola
Pokitto 18:831e2801d466 11 All rights reserved.
Pokitto 18:831e2801d466 12
Pokitto 18:831e2801d466 13 Redistribution and use in source and binary forms, with or without
Pokitto 18:831e2801d466 14 modification, are permitted provided that the following conditions are met:
Pokitto 18:831e2801d466 15 1. Redistributions of source code must retain the above copyright
Pokitto 18:831e2801d466 16 notice, this list of conditions and the following disclaimer.
Pokitto 18:831e2801d466 17 2. Redistributions in binary form must reproduce the above copyright
Pokitto 18:831e2801d466 18 notice, this list of conditions and the following disclaimer in the
Pokitto 18:831e2801d466 19 documentation and/or other materials provided with the distribution.
Pokitto 18:831e2801d466 20 3. Neither the name of the copyright holders nor the
Pokitto 18:831e2801d466 21 names of its contributors may be used to endorse or promote products
Pokitto 18:831e2801d466 22 derived from this software without specific prior written permission.
Pokitto 18:831e2801d466 23
Pokitto 18:831e2801d466 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
Pokitto 18:831e2801d466 25 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Pokitto 18:831e2801d466 26 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Pokitto 18:831e2801d466 27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
Pokitto 18:831e2801d466 28 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Pokitto 18:831e2801d466 29 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Pokitto 18:831e2801d466 30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
Pokitto 18:831e2801d466 31 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Pokitto 18:831e2801d466 32 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Pokitto 18:831e2801d466 33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Pokitto 18:831e2801d466 34 */
Pokitto 18:831e2801d466 35 /**************************************************************************/
Pokitto 18:831e2801d466 36
Pokitto 18:831e2801d466 37 #ifndef POKITTOCORE_H
Pokitto 18:831e2801d466 38 #define POKITTOCORE_H
Pokitto 18:831e2801d466 39
Pokitto 18:831e2801d466 40 #include <stdint.h>
Pokitto 18:831e2801d466 41 #include <math.h>
Pokitto 18:831e2801d466 42 #ifndef POK_SIM
Pokitto 18:831e2801d466 43 #include "pwmout_api.h"
Pokitto 18:831e2801d466 44 #include "HWButtons.h"
Pokitto 18:831e2801d466 45 #else
Pokitto 18:831e2801d466 46 #include "PokittoSimulator.h"
Pokitto 18:831e2801d466 47 #endif
Pokitto 18:831e2801d466 48 #if POK_USE_CONSOLE > 0
Pokitto 18:831e2801d466 49 #include "PokittoConsole.h"
Pokitto 18:831e2801d466 50 #endif // POK_USE_CONSOLE
Pokitto 18:831e2801d466 51 #if POK_ENABLE_SD > 0
Pokitto 18:831e2801d466 52 #include "PokittoDisk.h"
Pokitto 18:831e2801d466 53 #endif
Pokitto 18:831e2801d466 54
Pokitto 18:831e2801d466 55 #include "PokittoFonts.h"
Pokitto 18:831e2801d466 56 #include "PokittoPalettes.h"
Pokitto 18:831e2801d466 57 #include "PokittoDisplay.h"
Pokitto 18:831e2801d466 58 #include "PokittoButtons.h"
Pokitto 18:831e2801d466 59 #include "PokittoBattery.h"
Pokitto 18:831e2801d466 60 #include "PokittoBacklight.h"
Pokitto 18:831e2801d466 61 #include "PokittoSound.h"
Pokitto 18:831e2801d466 62 #include "PokittoFakeavr.h"
Pokitto 18:831e2801d466 63
Pokitto 18:831e2801d466 64 #define PALETTE_SIZE 16
Pokitto 18:831e2801d466 65 #define PI 3.141592741f
Pokitto 18:831e2801d466 66
Pokitto 18:831e2801d466 67 // For GB compatibility
Pokitto 18:831e2801d466 68 #if PROJ_GAMEBUINO > 0
Pokitto 18:831e2801d466 69 extern void setup();
Pokitto 18:831e2801d466 70 extern void loop();
Pokitto 18:831e2801d466 71 #endif // PROJ_GAMEBUINO
Pokitto 18:831e2801d466 72
Pokitto 18:831e2801d466 73 extern uint32_t* ptimer; // re-directed tick counter
Pokitto 18:831e2801d466 74
Pokitto 18:831e2801d466 75 namespace Pokitto {
Pokitto 18:831e2801d466 76
Pokitto 18:831e2801d466 77 /** Core class.
Pokitto 18:831e2801d466 78 * The Core class is a class consisting of static data and methods.
Pokitto 18:831e2801d466 79 * It handles the lowlevel hardware functions of the Pokitto.
Pokitto 18:831e2801d466 80 * It is declared as static to prevent several instances running at same time.
Pokitto 18:831e2801d466 81 * Example:
Pokitto 18:831e2801d466 82 * @code
Pokitto 18:831e2801d466 83 * // A simple "Hello World!" program with Pokitto
Pokitto 18:831e2801d466 84 *
Pokitto 18:831e2801d466 85 * #include "Pokitto.h"
Pokitto 18:831e2801d466 86 *
Pokitto 18:831e2801d466 87 * Pokitto::Core myApp;
Pokitto 18:831e2801d466 88 *
Pokitto 18:831e2801d466 89 * int main() {
Pokitto 18:831e2801d466 90 * myApp.begin(); // This starts up the console (the display, buttons etc.)
Pokitto 18:831e2801d466 91 * while(myApp.isRunning()) {
Pokitto 18:831e2801d466 92 * if(myApp.Update()) {
Pokitto 18:831e2801d466 93 * myApp.display.print("Hello World!");
Pokitto 18:831e2801d466 94 * }
Pokitto 18:831e2801d466 95 * }
Pokitto 18:831e2801d466 96 * }
Pokitto 18:831e2801d466 97 * @endcode
Pokitto 18:831e2801d466 98 */
Pokitto 18:831e2801d466 99
Pokitto 18:831e2801d466 100 class Core
Pokitto 18:831e2801d466 101 {
Pokitto 18:831e2801d466 102 public:
Pokitto 18:831e2801d466 103 /** Create a Core runtime instance
Pokitto 18:831e2801d466 104 */
Pokitto 18:831e2801d466 105 Core();
Pokitto 18:831e2801d466 106
Pokitto 18:831e2801d466 107 /** Backlight component of the Core runtime */
Pokitto 18:831e2801d466 108 static Backlight backlight;
Pokitto 18:831e2801d466 109 /** Buttons component of the Core runtime */
Pokitto 18:831e2801d466 110 static Buttons buttons;
Pokitto 18:831e2801d466 111 /** Battery component of the Core runtime */
Pokitto 18:831e2801d466 112 static Battery battery;
Pokitto 18:831e2801d466 113 /** Sound component of the Core runtime */
Pokitto 18:831e2801d466 114 static Sound sound;
Pokitto 18:831e2801d466 115 /** Display component of the Core runtime */
Pokitto 18:831e2801d466 116 static Display display;
Pokitto 18:831e2801d466 117
Pokitto 18:831e2801d466 118 // EXCECUTION CONTROL
Pokitto 18:831e2801d466 119 public:
Pokitto 18:831e2801d466 120 /** Initialize runtime (use this one) */
Pokitto 18:831e2801d466 121 static void begin();
Pokitto 18:831e2801d466 122 /** Initialize runtime (deprecated, avoid) */
Pokitto 18:831e2801d466 123 static void init();
Pokitto 18:831e2801d466 124 /** Initialize runtime with options (deprecated, avoid) */
Pokitto 18:831e2801d466 125 static void init(uint8_t);
Pokitto 18:831e2801d466 126 /** Return run state (1 = running, 0 = shutting down) */
Pokitto 18:831e2801d466 127 static bool isRunning();
Pokitto 18:831e2801d466 128 /** Stop running */
Pokitto 18:831e2801d466 129 static void quit();
Pokitto 18:831e2801d466 130 private:
Pokitto 18:831e2801d466 131 /** run_state is true as long as program is running */
Pokitto 18:831e2801d466 132 static bool run_state;
Pokitto 18:831e2801d466 133
Pokitto 18:831e2801d466 134 public:
Pokitto 18:831e2801d466 135 // INITIALIZATION
Pokitto 18:831e2801d466 136 /** Initialize display */
Pokitto 18:831e2801d466 137 static void initDisplay();
Pokitto 18:831e2801d466 138 /** Initialize random generator */
Pokitto 18:831e2801d466 139 static void initRandom();
Pokitto 18:831e2801d466 140 /** Initialize GPIO */
Pokitto 18:831e2801d466 141 static void initGPIO();
Pokitto 18:831e2801d466 142 /** Initialize LCD */
Pokitto 18:831e2801d466 143 static void initLCD();
Pokitto 18:831e2801d466 144 /** Initialize Audio */
Pokitto 18:831e2801d466 145 static void initAudio();
Pokitto 18:831e2801d466 146
Pokitto 18:831e2801d466 147
Pokitto 18:831e2801d466 148 // DISPLAY
Pokitto 18:831e2801d466 149 public:
Pokitto 18:831e2801d466 150 /** Initialize backlight */
Pokitto 18:831e2801d466 151 static void initBacklight();
Pokitto 18:831e2801d466 152
Pokitto 18:831e2801d466 153 private:
Pokitto 18:831e2801d466 154 /** Backlight PWM pointer */
Pokitto 18:831e2801d466 155 #ifndef POK_SIM
Pokitto 18:831e2801d466 156 static pwmout_t backlightpwm;
Pokitto 18:831e2801d466 157 #endif
Pokitto 18:831e2801d466 158
Pokitto 18:831e2801d466 159 // TIMEKEEPING
Pokitto 18:831e2801d466 160 public:
Pokitto 18:831e2801d466 161 /** Initialize runtime clock */
Pokitto 18:831e2801d466 162 static void initClock();
Pokitto 18:831e2801d466 163 /** Get value of time elapsed during program in milliseconds */
Pokitto 18:831e2801d466 164 static uint32_t getTime();
Pokitto 18:831e2801d466 165 /** Wait for n milliseconds */
Pokitto 18:831e2801d466 166 static void wait(uint16_t);
Pokitto 18:831e2801d466 167 private:
Pokitto 18:831e2801d466 168 /** Time of next refresh */
Pokitto 18:831e2801d466 169 static uint32_t refreshtime;
Pokitto 18:831e2801d466 170
Pokitto 18:831e2801d466 171 // DIRECT TO SCREEN
Pokitto 18:831e2801d466 172 public:
Pokitto 18:831e2801d466 173 /** Display Pokitto logo */
Pokitto 18:831e2801d466 174 static void showLogo();
Pokitto 18:831e2801d466 175 static void showWarning();
Pokitto 18:831e2801d466 176 static void setVolLimit();
Pokitto 18:831e2801d466 177
Pokitto 18:831e2801d466 178 // BUTTON INPUT HANDLING
Pokitto 18:831e2801d466 179 private:
Pokitto 18:831e2801d466 180 static uint8_t heldStates[];
Pokitto 18:831e2801d466 181 public:
Pokitto 18:831e2801d466 182 static void initButtons();
Pokitto 18:831e2801d466 183 static void pollButtons();
Pokitto 18:831e2801d466 184 static uint8_t leftBtn();
Pokitto 18:831e2801d466 185 static uint8_t rightBtn();
Pokitto 18:831e2801d466 186 static uint8_t upBtn();
Pokitto 18:831e2801d466 187 static uint8_t downBtn();
Pokitto 18:831e2801d466 188 static uint8_t aBtn();
Pokitto 18:831e2801d466 189 static uint8_t bBtn();
Pokitto 18:831e2801d466 190 static uint8_t cBtn();
Pokitto 18:831e2801d466 191 static uint8_t leftHeld();
Pokitto 18:831e2801d466 192 static uint8_t rightHeld();
Pokitto 18:831e2801d466 193 static uint8_t upHeld();
Pokitto 18:831e2801d466 194 static uint8_t downHeld();
Pokitto 18:831e2801d466 195 static uint8_t aHeld();
Pokitto 18:831e2801d466 196 static uint8_t bHeld();
Pokitto 18:831e2801d466 197 static uint8_t cHeld();
Pokitto 18:831e2801d466 198
Pokitto 18:831e2801d466 199 static uint8_t leftReleased();
Pokitto 18:831e2801d466 200 static uint8_t rightReleased();
Pokitto 18:831e2801d466 201 static uint8_t upReleased();
Pokitto 18:831e2801d466 202 static uint8_t downReleased();
Pokitto 18:831e2801d466 203 static uint8_t aReleased();
Pokitto 18:831e2801d466 204 static uint8_t bReleased();
Pokitto 18:831e2801d466 205 static uint8_t cReleased();
Pokitto 18:831e2801d466 206
Pokitto 18:831e2801d466 207 // AUDIO RELATED
Pokitto 18:831e2801d466 208 static uint8_t ampIsOn();
Pokitto 18:831e2801d466 209 static void ampEnable(uint8_t);
Pokitto 18:831e2801d466 210 static uint8_t soundbyte;
Pokitto 18:831e2801d466 211
Pokitto 18:831e2801d466 212 // GB RELATED
Pokitto 18:831e2801d466 213 public:
Pokitto 18:831e2801d466 214 static void readSettings();
Pokitto 18:831e2801d466 215 static void titleScreen(const char* name, const uint8_t *logo);
Pokitto 18:831e2801d466 216 static void titleScreen(const char* name);
Pokitto 18:831e2801d466 217 static void titleScreen(const uint8_t* logo);
Pokitto 18:831e2801d466 218 static void titleScreen();
Pokitto 18:831e2801d466 219 static bool update(bool useDirectMode=false);
Pokitto 18:831e2801d466 220 static uint32_t frameCount;
Pokitto 18:831e2801d466 221 static int8_t menu(const char* const* items, uint8_t length);
Pokitto 18:831e2801d466 222 static char* filemenu(char*);
Pokitto 18:831e2801d466 223 static char* filemenu();
Pokitto 18:831e2801d466 224 static void keyboard(char* text, uint8_t length);
Pokitto 18:831e2801d466 225 static void popup(const char* text, uint8_t duration);
Pokitto 18:831e2801d466 226 static void setFrameRate(uint8_t fps);
Pokitto 18:831e2801d466 227 static void pickRandomSeed();
Pokitto 18:831e2801d466 228
Pokitto 18:831e2801d466 229 static uint8_t getCpuLoad();
Pokitto 18:831e2801d466 230 static uint16_t getFreeRam();
Pokitto 18:831e2801d466 231
Pokitto 18:831e2801d466 232 static bool collidePointRect(int16_t x1, int16_t y1 ,int16_t x2 ,int16_t y2, int16_t w, int16_t h);
Pokitto 18:831e2801d466 233 static bool collideRectRect(int16_t x1, int16_t y1, int16_t w1, int16_t h1 ,int16_t x2 ,int16_t y2, int16_t w2, int16_t h2);
Pokitto 18:831e2801d466 234 static bool collideBitmapBitmap(int16_t x1, int16_t y1, const uint8_t* b1, int16_t x2, int16_t y2, const uint8_t* b2);
Pokitto 18:831e2801d466 235
Pokitto 18:831e2801d466 236 private:
Pokitto 18:831e2801d466 237 static uint8_t timePerFrame;
Pokitto 18:831e2801d466 238 static uint32_t nextFrameMillis;
Pokitto 18:831e2801d466 239 static void updatePopup();
Pokitto 18:831e2801d466 240 static const char* popupText;
Pokitto 18:831e2801d466 241 static uint8_t popupTimeLeft;
Pokitto 18:831e2801d466 242 static void displayBattery();
Pokitto 18:831e2801d466 243 static uint16_t frameDurationMicros;
Pokitto 18:831e2801d466 244 static uint32_t frameStartMicros, frameEndMicros;
Pokitto 18:831e2801d466 245 static uint8_t startMenuTimer;
Pokitto 18:831e2801d466 246 static int updateLoader(uint32_t,uint32_t);
Pokitto 18:831e2801d466 247 public:
Pokitto 18:831e2801d466 248 static uint8_t volbar_visible;
Pokitto 18:831e2801d466 249 static void drawvolbar(int,int,int, bool);
Pokitto 18:831e2801d466 250 static void askLoader();
Pokitto 18:831e2801d466 251 static void jumpToLoader();
Pokitto 18:831e2801d466 252 };
Pokitto 18:831e2801d466 253
Pokitto 18:831e2801d466 254 // this is the instance used by the system
Pokitto 18:831e2801d466 255 extern Core core;
Pokitto 18:831e2801d466 256
Pokitto 18:831e2801d466 257
Pokitto 18:831e2801d466 258 }
Pokitto 18:831e2801d466 259
Pokitto 18:831e2801d466 260 #endif // POKITTOCORE_H
Pokitto 18:831e2801d466 261
Pokitto 18:831e2801d466 262
Pokitto 18:831e2801d466 263