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

Committer:
spinal
Date:
Sun Nov 18 15:47:54 2018 +0000
Revision:
64:6e6c6c2b664e
Parent:
60:8b6a110feeea
added fix for directrectangle()

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