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:
Tue Oct 23 16:21:01 2018 +0000
Revision:
63:7d1c08cdde5c
Parent:
60:8b6a110feeea
Child:
66:6281a40d73e6
Graphics bug fixed

Who changed what in which revision?

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