from bbc microbit library
Dependencies: BLE_API mbed-dev-bin nRF51822
Fork of microbit-dal by
inc/drivers/MicroBitDisplay.h@22:23d7b9a4b082, 2016-07-13 (annotated)
- Committer:
- LancasterUniversity
- Date:
- Wed Jul 13 12:17:54 2016 +0100
- Revision:
- 22:23d7b9a4b082
- Parent:
- 21:cab56b701601
- Child:
- 23:6055f6c19fa6
Synchronized with git rev 7cf98c22
Author: James Devine
microbit-dal: patch for fiber_wake_on_event
fiber_wake_on_event used to crash after forking a FOB fiber.
It would attempt to obtain a new fiber context, and would place it on the wait queue.
Then when that fiber was paged in, the context of that fiber would not have been
initialised, as the function presumed schedule would be called immediately after
fiber initialisation.
This patch catches that edge case.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jonathan Austin |
1:8aa5cdb4ab67 | 1 | /* |
Jonathan Austin |
1:8aa5cdb4ab67 | 2 | The MIT License (MIT) |
Jonathan Austin |
1:8aa5cdb4ab67 | 3 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 4 | Copyright (c) 2016 British Broadcasting Corporation. |
Jonathan Austin |
1:8aa5cdb4ab67 | 5 | This software is provided by Lancaster University by arrangement with the BBC. |
Jonathan Austin |
1:8aa5cdb4ab67 | 6 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 7 | Permission is hereby granted, free of charge, to any person obtaining a |
Jonathan Austin |
1:8aa5cdb4ab67 | 8 | copy of this software and associated documentation files (the "Software"), |
Jonathan Austin |
1:8aa5cdb4ab67 | 9 | to deal in the Software without restriction, including without limitation |
Jonathan Austin |
1:8aa5cdb4ab67 | 10 | the rights to use, copy, modify, merge, publish, distribute, sublicense, |
Jonathan Austin |
1:8aa5cdb4ab67 | 11 | and/or sell copies of the Software, and to permit persons to whom the |
Jonathan Austin |
1:8aa5cdb4ab67 | 12 | Software is furnished to do so, subject to the following conditions: |
Jonathan Austin |
1:8aa5cdb4ab67 | 13 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 14 | The above copyright notice and this permission notice shall be included in |
Jonathan Austin |
1:8aa5cdb4ab67 | 15 | all copies or substantial portions of the Software. |
Jonathan Austin |
1:8aa5cdb4ab67 | 16 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
Jonathan Austin |
1:8aa5cdb4ab67 | 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
Jonathan Austin |
1:8aa5cdb4ab67 | 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
Jonathan Austin |
1:8aa5cdb4ab67 | 20 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
Jonathan Austin |
1:8aa5cdb4ab67 | 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
Jonathan Austin |
1:8aa5cdb4ab67 | 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
Jonathan Austin |
1:8aa5cdb4ab67 | 23 | DEALINGS IN THE SOFTWARE. |
Jonathan Austin |
1:8aa5cdb4ab67 | 24 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 25 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 26 | #ifndef MICROBIT_DISPLAY_H |
Jonathan Austin |
1:8aa5cdb4ab67 | 27 | #define MICROBIT_DISPLAY_H |
Jonathan Austin |
1:8aa5cdb4ab67 | 28 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 29 | #include "mbed.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 30 | #include "MicroBitConfig.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 31 | #include "ManagedString.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 32 | #include "MicroBitComponent.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 33 | #include "MicroBitImage.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 34 | #include "MicroBitFont.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 35 | #include "MicroBitMatrixMaps.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 36 | #include "MicroBitLightSensor.h" |
Jonathan Austin |
1:8aa5cdb4ab67 | 37 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 38 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 39 | * Event codes raised by MicroBitDisplay |
Jonathan Austin |
1:8aa5cdb4ab67 | 40 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 41 | #define MICROBIT_DISPLAY_EVT_ANIMATION_COMPLETE 1 |
Jonathan Austin |
1:8aa5cdb4ab67 | 42 | #define MICROBIT_DISPLAY_EVT_LIGHT_SENSE 2 |
Jonathan Austin |
1:8aa5cdb4ab67 | 43 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 44 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 45 | // Internal constants |
Jonathan Austin |
1:8aa5cdb4ab67 | 46 | // |
LancasterUniversity | 22:23d7b9a4b082 | 47 | #define MICROBIT_DISPLAY_DEFAULT_AUTOCLEAR 1 |
Jonathan Austin |
1:8aa5cdb4ab67 | 48 | #define MICROBIT_DISPLAY_SPACING 1 |
Jonathan Austin |
1:8aa5cdb4ab67 | 49 | #define MICROBIT_DISPLAY_GREYSCALE_BIT_DEPTH 8 |
Jonathan Austin |
1:8aa5cdb4ab67 | 50 | #define MICROBIT_DISPLAY_ANIMATE_DEFAULT_POS -255 |
Jonathan Austin |
1:8aa5cdb4ab67 | 51 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 52 | enum AnimationMode { |
Jonathan Austin |
1:8aa5cdb4ab67 | 53 | ANIMATION_MODE_NONE, |
Jonathan Austin |
1:8aa5cdb4ab67 | 54 | ANIMATION_MODE_STOPPED, |
Jonathan Austin |
1:8aa5cdb4ab67 | 55 | ANIMATION_MODE_SCROLL_TEXT, |
Jonathan Austin |
1:8aa5cdb4ab67 | 56 | ANIMATION_MODE_PRINT_TEXT, |
Jonathan Austin |
1:8aa5cdb4ab67 | 57 | ANIMATION_MODE_SCROLL_IMAGE, |
Jonathan Austin |
1:8aa5cdb4ab67 | 58 | ANIMATION_MODE_ANIMATE_IMAGE, |
LancasterUniversity | 22:23d7b9a4b082 | 59 | ANIMATION_MODE_ANIMATE_IMAGE_WITH_CLEAR, |
Jonathan Austin |
1:8aa5cdb4ab67 | 60 | ANIMATION_MODE_PRINT_CHARACTER |
Jonathan Austin |
1:8aa5cdb4ab67 | 61 | }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 62 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 63 | enum DisplayMode { |
Jonathan Austin |
1:8aa5cdb4ab67 | 64 | DISPLAY_MODE_BLACK_AND_WHITE, |
Jonathan Austin |
1:8aa5cdb4ab67 | 65 | DISPLAY_MODE_GREYSCALE, |
Jonathan Austin |
1:8aa5cdb4ab67 | 66 | DISPLAY_MODE_BLACK_AND_WHITE_LIGHT_SENSE |
Jonathan Austin |
1:8aa5cdb4ab67 | 67 | }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 68 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 69 | enum DisplayRotation { |
Jonathan Austin |
1:8aa5cdb4ab67 | 70 | MICROBIT_DISPLAY_ROTATION_0, |
Jonathan Austin |
1:8aa5cdb4ab67 | 71 | MICROBIT_DISPLAY_ROTATION_90, |
Jonathan Austin |
1:8aa5cdb4ab67 | 72 | MICROBIT_DISPLAY_ROTATION_180, |
Jonathan Austin |
1:8aa5cdb4ab67 | 73 | MICROBIT_DISPLAY_ROTATION_270 |
Jonathan Austin |
1:8aa5cdb4ab67 | 74 | }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 75 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 76 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 77 | * Class definition for MicroBitDisplay. |
Jonathan Austin |
1:8aa5cdb4ab67 | 78 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 79 | * A MicroBitDisplay represents the LED matrix array on the micro:bit. |
Jonathan Austin |
1:8aa5cdb4ab67 | 80 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 81 | class MicroBitDisplay : public MicroBitComponent |
Jonathan Austin |
1:8aa5cdb4ab67 | 82 | { |
Jonathan Austin |
1:8aa5cdb4ab67 | 83 | uint8_t width; |
Jonathan Austin |
1:8aa5cdb4ab67 | 84 | uint8_t height; |
Jonathan Austin |
1:8aa5cdb4ab67 | 85 | uint8_t brightness; |
Jonathan Austin |
1:8aa5cdb4ab67 | 86 | uint8_t strobeRow; |
Jonathan Austin |
1:8aa5cdb4ab67 | 87 | uint8_t rotation; |
Jonathan Austin |
1:8aa5cdb4ab67 | 88 | uint8_t mode; |
Jonathan Austin |
1:8aa5cdb4ab67 | 89 | uint8_t greyscaleBitMsk; |
Jonathan Austin |
1:8aa5cdb4ab67 | 90 | uint8_t timingCount; |
Jonathan Austin |
1:8aa5cdb4ab67 | 91 | uint32_t col_mask; |
Jonathan Austin |
1:8aa5cdb4ab67 | 92 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 93 | Timeout renderTimer; |
Jonathan Austin |
1:8aa5cdb4ab67 | 94 | PortOut *LEDMatrix; |
Jonathan Austin |
1:8aa5cdb4ab67 | 95 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 96 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 97 | // State used by all animation routines. |
Jonathan Austin |
1:8aa5cdb4ab67 | 98 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 99 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 100 | // The animation mode that's currently running (if any) |
Jonathan Austin |
1:8aa5cdb4ab67 | 101 | volatile AnimationMode animationMode; |
Jonathan Austin |
1:8aa5cdb4ab67 | 102 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 103 | // The time in milliseconds between each frame update. |
Jonathan Austin |
1:8aa5cdb4ab67 | 104 | uint16_t animationDelay; |
Jonathan Austin |
1:8aa5cdb4ab67 | 105 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 106 | // The time in milliseconds since the frame update. |
Jonathan Austin |
1:8aa5cdb4ab67 | 107 | uint16_t animationTick; |
Jonathan Austin |
1:8aa5cdb4ab67 | 108 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 109 | // Stop playback of any animations |
Jonathan Austin |
1:8aa5cdb4ab67 | 110 | void stopAnimation(int delay); |
Jonathan Austin |
1:8aa5cdb4ab67 | 111 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 112 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 113 | // State for scrollString() method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 114 | // This is a surprisingly intricate method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 115 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 116 | // The text being displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 117 | ManagedString scrollingText; |
Jonathan Austin |
1:8aa5cdb4ab67 | 118 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 119 | // The index of the character currently being displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 120 | uint16_t scrollingChar; |
Jonathan Austin |
1:8aa5cdb4ab67 | 121 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 122 | // The number of pixels the current character has been shifted on the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 123 | uint8_t scrollingPosition; |
Jonathan Austin |
1:8aa5cdb4ab67 | 124 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 125 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 126 | // State for printString() method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 127 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 128 | // The text being displayed. NULL if no message is scheduled for playback. |
Jonathan Austin |
1:8aa5cdb4ab67 | 129 | // We *could* get some reuse in here with the scroll* variables above, |
Jonathan Austin |
1:8aa5cdb4ab67 | 130 | // but best to keep it clean in case kids try concurrent operation (they will!), |
Jonathan Austin |
1:8aa5cdb4ab67 | 131 | // given the small RAM overhead needed to maintain orthogonality. |
Jonathan Austin |
1:8aa5cdb4ab67 | 132 | ManagedString printingText; |
Jonathan Austin |
1:8aa5cdb4ab67 | 133 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 134 | // The index of the character currently being displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 135 | uint16_t printingChar; |
Jonathan Austin |
1:8aa5cdb4ab67 | 136 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 137 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 138 | // State for scrollImage() method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 139 | // |
Jonathan Austin |
1:8aa5cdb4ab67 | 140 | // The image being displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 141 | MicroBitImage scrollingImage; |
Jonathan Austin |
1:8aa5cdb4ab67 | 142 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 143 | // The number of pixels the image has been shifted on the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 144 | int16_t scrollingImagePosition; |
Jonathan Austin |
1:8aa5cdb4ab67 | 145 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 146 | // The number of pixels the image is shifted on the display in each quantum. |
Jonathan Austin |
1:8aa5cdb4ab67 | 147 | int8_t scrollingImageStride; |
Jonathan Austin |
1:8aa5cdb4ab67 | 148 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 149 | // A pointer to an instance of light sensor, if in use |
Jonathan Austin |
1:8aa5cdb4ab67 | 150 | MicroBitLightSensor* lightSensor; |
Jonathan Austin |
1:8aa5cdb4ab67 | 151 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 152 | // Flag to indicate if image has been rendered to screen yet (or not) |
Jonathan Austin |
1:8aa5cdb4ab67 | 153 | bool scrollingImageRendered; |
Jonathan Austin |
1:8aa5cdb4ab67 | 154 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 155 | const MatrixMap &matrixMap; |
Jonathan Austin |
1:8aa5cdb4ab67 | 156 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 157 | // Internal methods to handle animation. |
Jonathan Austin |
1:8aa5cdb4ab67 | 158 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 159 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 160 | * Periodic callback, that we use to perform any animations we have running. |
Jonathan Austin |
1:8aa5cdb4ab67 | 161 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 162 | void animationUpdate(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 163 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 164 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 165 | * Called by the display in an interval determined by the brightness of the display, to give an impression |
Jonathan Austin |
1:8aa5cdb4ab67 | 166 | * of brightness. |
Jonathan Austin |
1:8aa5cdb4ab67 | 167 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 168 | void renderFinish(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 169 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 170 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 171 | * Translates a bit mask to a bit mask suitable for the nrf PORT0 and PORT1. |
Jonathan Austin |
1:8aa5cdb4ab67 | 172 | * Brightness has two levels on, or off. |
Jonathan Austin |
1:8aa5cdb4ab67 | 173 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 174 | void render(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 175 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 176 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 177 | * Renders the current image, and drops the fourth frame to allow for |
Jonathan Austin |
1:8aa5cdb4ab67 | 178 | * sensors that require the display to operate. |
Jonathan Austin |
1:8aa5cdb4ab67 | 179 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 180 | void renderWithLightSense(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 181 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 182 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 183 | * Translates a bit mask into a timer interrupt that gives the appearence of greyscale. |
Jonathan Austin |
1:8aa5cdb4ab67 | 184 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 185 | void renderGreyscale(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 186 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 187 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 188 | * Internal scrollText update method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 189 | * Shift the screen image by one pixel to the left. If necessary, paste in the next char. |
Jonathan Austin |
1:8aa5cdb4ab67 | 190 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 191 | void updateScrollText(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 192 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 193 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 194 | * Internal printText update method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 195 | * Paste the next character in the string. |
Jonathan Austin |
1:8aa5cdb4ab67 | 196 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 197 | void updatePrintText(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 198 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 199 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 200 | * Internal scrollImage update method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 201 | * Paste the stored bitmap at the appropriate point. |
Jonathan Austin |
1:8aa5cdb4ab67 | 202 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 203 | void updateScrollImage(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 204 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 205 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 206 | * Internal animateImage update method. |
Jonathan Austin |
1:8aa5cdb4ab67 | 207 | * Paste the stored bitmap at the appropriate point and stop on the last frame. |
Jonathan Austin |
1:8aa5cdb4ab67 | 208 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 209 | void updateAnimateImage(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 210 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 211 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 212 | * Broadcasts an event onto the defult EventModel indicating that the |
Jonathan Austin |
1:8aa5cdb4ab67 | 213 | * current animation has completed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 214 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 215 | void sendAnimationCompleteEvent(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 216 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 217 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 218 | * Blocks the current fiber until the display is available (i.e. does not effect is being displayed). |
Jonathan Austin |
1:8aa5cdb4ab67 | 219 | * Animations are queued until their time to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 220 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 221 | void waitForFreeDisplay(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 222 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 223 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 224 | * Blocks the current fiber until the current animation has finished. |
Jonathan Austin |
1:8aa5cdb4ab67 | 225 | * If the scheduler is not running, this call will essentially perform a spinning wait. |
Jonathan Austin |
1:8aa5cdb4ab67 | 226 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 227 | void fiberWait(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 228 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 229 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 230 | * Enables or disables the display entirely, and releases the pins for other uses. |
Jonathan Austin |
1:8aa5cdb4ab67 | 231 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 232 | * @param enableDisplay true to enabled the display, or false to disable it. |
Jonathan Austin |
1:8aa5cdb4ab67 | 233 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 234 | void setEnable(bool enableDisplay); |
Jonathan Austin |
1:8aa5cdb4ab67 | 235 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 236 | public: |
Jonathan Austin |
1:8aa5cdb4ab67 | 237 | // The mutable bitmap buffer being rendered to the LED matrix. |
Jonathan Austin |
1:8aa5cdb4ab67 | 238 | MicroBitImage image; |
Jonathan Austin |
1:8aa5cdb4ab67 | 239 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 240 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 241 | * Constructor. |
Jonathan Austin |
1:8aa5cdb4ab67 | 242 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 243 | * Create a software representation the micro:bit's 5x5 LED matrix. |
Jonathan Austin |
1:8aa5cdb4ab67 | 244 | * The display is initially blank. |
Jonathan Austin |
1:8aa5cdb4ab67 | 245 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 246 | * @param id The id the display should use when sending events on the MessageBus. Defaults to MICROBIT_ID_DISPLAY. |
Jonathan Austin |
1:8aa5cdb4ab67 | 247 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 248 | * @param map The mapping information that relates pin inputs/outputs to physical screen coordinates. |
Jonathan Austin |
1:8aa5cdb4ab67 | 249 | * Defaults to microbitMatrixMap, defined in MicroBitMatrixMaps.h. |
Jonathan Austin |
1:8aa5cdb4ab67 | 250 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 251 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 252 | * MicroBitDisplay display; |
Jonathan Austin |
1:8aa5cdb4ab67 | 253 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 254 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 255 | MicroBitDisplay(uint16_t id = MICROBIT_ID_DISPLAY, const MatrixMap &map = microbitMatrixMap); |
Jonathan Austin |
1:8aa5cdb4ab67 | 256 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 257 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 258 | * Stops any currently running animation, and any that are waiting to be displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 259 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 260 | void stopAnimation(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 261 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 262 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 263 | * Frame update method, invoked periodically to strobe the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 264 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 265 | virtual void systemTick(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 266 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 267 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 268 | * Prints the given character to the display, if it is not in use. |
Jonathan Austin |
1:8aa5cdb4ab67 | 269 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 270 | * @param c The character to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 271 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 272 | * @param delay Optional parameter - the time for which to show the character. Zero displays the character forever, |
Jonathan Austin |
1:8aa5cdb4ab67 | 273 | * or until the Displays next use. |
Jonathan Austin |
1:8aa5cdb4ab67 | 274 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 275 | * @return MICROBIT_OK, MICROBIT_BUSY is the screen is in use, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 276 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 277 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 278 | * display.printAsync('p'); |
Jonathan Austin |
1:8aa5cdb4ab67 | 279 | * display.printAsync('p',100); |
Jonathan Austin |
1:8aa5cdb4ab67 | 280 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 281 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 282 | int printCharAsync(char c, int delay = 0); |
Jonathan Austin |
1:8aa5cdb4ab67 | 283 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 284 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 285 | * Prints the given ManagedString to the display, one character at a time. |
Jonathan Austin |
1:8aa5cdb4ab67 | 286 | * Returns immediately, and executes the animation asynchronously. |
Jonathan Austin |
1:8aa5cdb4ab67 | 287 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 288 | * @param s The string to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 289 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 290 | * @param delay The time to delay between characters, in milliseconds. Must be > 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 291 | * Defaults to: MICROBIT_DEFAULT_PRINT_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 292 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 293 | * @return MICROBIT_OK, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 294 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 295 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 296 | * display.printAsync("abc123",400); |
Jonathan Austin |
1:8aa5cdb4ab67 | 297 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 298 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 299 | int printAsync(ManagedString s, int delay = MICROBIT_DEFAULT_PRINT_SPEED); |
Jonathan Austin |
1:8aa5cdb4ab67 | 300 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 301 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 302 | * Prints the given image to the display, if the display is not in use. |
Jonathan Austin |
1:8aa5cdb4ab67 | 303 | * Returns immediately, and executes the animation asynchronously. |
Jonathan Austin |
1:8aa5cdb4ab67 | 304 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 305 | * @param i The image to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 306 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 307 | * @param x The horizontal position on the screen to display the image. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 308 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 309 | * @param y The vertical position on the screen to display the image. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 310 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 311 | * @param alpha Treats the brightness level '0' as transparent. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 312 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 313 | * @param delay The time to delay between characters, in milliseconds. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 314 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 315 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 316 | * MicrobitImage i("1,1,1,1,1\n1,1,1,1,1\n"); |
Jonathan Austin |
1:8aa5cdb4ab67 | 317 | * display.print(i,400); |
Jonathan Austin |
1:8aa5cdb4ab67 | 318 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 319 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 320 | int printAsync(MicroBitImage i, int x = 0, int y = 0, int alpha = 0, int delay = 0); |
Jonathan Austin |
1:8aa5cdb4ab67 | 321 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 322 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 323 | * Prints the given character to the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 324 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 325 | * @param c The character to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 326 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 327 | * @param delay Optional parameter - the time for which to show the character. Zero displays the character forever, |
Jonathan Austin |
1:8aa5cdb4ab67 | 328 | * or until the Displays next use. |
Jonathan Austin |
1:8aa5cdb4ab67 | 329 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 330 | * @return MICROBIT_OK, MICROBIT_CANCELLED or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 331 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 332 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 333 | * display.printAsync('p'); |
Jonathan Austin |
1:8aa5cdb4ab67 | 334 | * display.printAsync('p',100); |
Jonathan Austin |
1:8aa5cdb4ab67 | 335 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 336 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 337 | int printChar(char c, int delay = 0); |
Jonathan Austin |
1:8aa5cdb4ab67 | 338 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 339 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 340 | * Prints the given string to the display, one character at a time. |
Jonathan Austin |
1:8aa5cdb4ab67 | 341 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 342 | * Blocks the calling thread until all the text has been displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 343 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 344 | * @param s The string to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 345 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 346 | * @param delay The time to delay between characters, in milliseconds. Defaults |
Jonathan Austin |
1:8aa5cdb4ab67 | 347 | * to: MICROBIT_DEFAULT_PRINT_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 348 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 349 | * @return MICROBIT_OK, MICROBIT_CANCELLED or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 350 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 351 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 352 | * display.print("abc123",400); |
Jonathan Austin |
1:8aa5cdb4ab67 | 353 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 354 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 355 | int print(ManagedString s, int delay = MICROBIT_DEFAULT_PRINT_SPEED); |
Jonathan Austin |
1:8aa5cdb4ab67 | 356 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 357 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 358 | * Prints the given image to the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 359 | * Blocks the calling thread until all the image has been displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 360 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 361 | * @param i The image to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 362 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 363 | * @param x The horizontal position on the screen to display the image. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 364 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 365 | * @param y The vertical position on the screen to display the image. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 366 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 367 | * @param alpha Treats the brightness level '0' as transparent. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 368 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 369 | * @param delay The time to display the image for, or zero to show the image forever. Defaults to 0. |
Jonathan Austin |
1:8aa5cdb4ab67 | 370 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 371 | * @return MICROBIT_OK, MICROBIT_BUSY if the display is already in use, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 372 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 373 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 374 | * MicrobitImage i("1,1,1,1,1\n1,1,1,1,1\n"); |
Jonathan Austin |
1:8aa5cdb4ab67 | 375 | * display.print(i,400); |
Jonathan Austin |
1:8aa5cdb4ab67 | 376 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 377 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 378 | int print(MicroBitImage i, int x = 0, int y = 0, int alpha = 0, int delay = 0); |
Jonathan Austin |
1:8aa5cdb4ab67 | 379 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 380 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 381 | * Scrolls the given string to the display, from right to left. |
Jonathan Austin |
1:8aa5cdb4ab67 | 382 | * Returns immediately, and executes the animation asynchronously. |
Jonathan Austin |
1:8aa5cdb4ab67 | 383 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 384 | * @param s The string to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 385 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 386 | * @param delay The time to delay between characters, in milliseconds. Defaults |
Jonathan Austin |
1:8aa5cdb4ab67 | 387 | * to: MICROBIT_DEFAULT_SCROLL_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 388 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 389 | * @return MICROBIT_OK, MICROBIT_BUSY if the display is already in use, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 390 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 391 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 392 | * display.scrollAsync("abc123",100); |
Jonathan Austin |
1:8aa5cdb4ab67 | 393 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 394 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 395 | int scrollAsync(ManagedString s, int delay = MICROBIT_DEFAULT_SCROLL_SPEED); |
Jonathan Austin |
1:8aa5cdb4ab67 | 396 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 397 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 398 | * Scrolls the given image across the display, from right to left. |
Jonathan Austin |
1:8aa5cdb4ab67 | 399 | * Returns immediately, and executes the animation asynchronously. |
Jonathan Austin |
1:8aa5cdb4ab67 | 400 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 401 | * @param image The image to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 402 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 403 | * @param delay The time between updates, in milliseconds. Defaults |
Jonathan Austin |
1:8aa5cdb4ab67 | 404 | * to: MICROBIT_DEFAULT_SCROLL_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 405 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 406 | * @param stride The number of pixels to shift by in each update. Defaults to MICROBIT_DEFAULT_SCROLL_STRIDE. |
Jonathan Austin |
1:8aa5cdb4ab67 | 407 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 408 | * @return MICROBIT_OK, MICROBIT_BUSY if the display is already in use, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 409 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 410 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 411 | * MicrobitImage i("1,1,1,1,1\n1,1,1,1,1\n"); |
Jonathan Austin |
1:8aa5cdb4ab67 | 412 | * display.scrollAsync(i,100,1); |
Jonathan Austin |
1:8aa5cdb4ab67 | 413 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 414 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 415 | int scrollAsync(MicroBitImage image, int delay = MICROBIT_DEFAULT_SCROLL_SPEED, int stride = MICROBIT_DEFAULT_SCROLL_STRIDE); |
Jonathan Austin |
1:8aa5cdb4ab67 | 416 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 417 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 418 | * Scrolls the given string across the display, from right to left. |
Jonathan Austin |
1:8aa5cdb4ab67 | 419 | * Blocks the calling thread until all text has been displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 420 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 421 | * @param s The string to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 422 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 423 | * @param delay The time to delay between characters, in milliseconds. Defaults |
Jonathan Austin |
1:8aa5cdb4ab67 | 424 | * to: MICROBIT_DEFAULT_SCROLL_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 425 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 426 | * @return MICROBIT_OK, MICROBIT_CANCELLED or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 427 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 428 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 429 | * display.scroll("abc123",100); |
Jonathan Austin |
1:8aa5cdb4ab67 | 430 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 431 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 432 | int scroll(ManagedString s, int delay = MICROBIT_DEFAULT_SCROLL_SPEED); |
Jonathan Austin |
1:8aa5cdb4ab67 | 433 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 434 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 435 | * Scrolls the given image across the display, from right to left. |
Jonathan Austin |
1:8aa5cdb4ab67 | 436 | * Blocks the calling thread until all the text has been displayed. |
Jonathan Austin |
1:8aa5cdb4ab67 | 437 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 438 | * @param image The image to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 439 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 440 | * @param delay The time between updates, in milliseconds. Defaults |
Jonathan Austin |
1:8aa5cdb4ab67 | 441 | * to: MICROBIT_DEFAULT_SCROLL_SPEED. |
Jonathan Austin |
1:8aa5cdb4ab67 | 442 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 443 | * @param stride The number of pixels to shift by in each update. Defaults to MICROBIT_DEFAULT_SCROLL_STRIDE. |
Jonathan Austin |
1:8aa5cdb4ab67 | 444 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 445 | * @return MICROBIT_OK, MICROBIT_CANCELLED or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 446 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 447 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 448 | * MicrobitImage i("1,1,1,1,1\n1,1,1,1,1\n"); |
Jonathan Austin |
1:8aa5cdb4ab67 | 449 | * display.scroll(i,100,1); |
Jonathan Austin |
1:8aa5cdb4ab67 | 450 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 451 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 452 | int scroll(MicroBitImage image, int delay = MICROBIT_DEFAULT_SCROLL_SPEED, int stride = MICROBIT_DEFAULT_SCROLL_STRIDE); |
Jonathan Austin |
1:8aa5cdb4ab67 | 453 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 454 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 455 | * "Animates" the current image across the display with a given stride, finishing on the last frame of the animation. |
Jonathan Austin |
1:8aa5cdb4ab67 | 456 | * Returns immediately. |
Jonathan Austin |
1:8aa5cdb4ab67 | 457 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 458 | * @param image The image to display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 459 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 460 | * @param delay The time to delay between each update of the display, in milliseconds. |
Jonathan Austin |
1:8aa5cdb4ab67 | 461 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 462 | * @param stride The number of pixels to shift by in each update. |
Jonathan Austin |
1:8aa5cdb4ab67 | 463 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 464 | * @param startingPosition the starting position on the display for the animation |
Jonathan Austin |
1:8aa5cdb4ab67 | 465 | * to begin at. Defaults to MICROBIT_DISPLAY_ANIMATE_DEFAULT_POS. |
Jonathan Austin |
1:8aa5cdb4ab67 | 466 | * |
LancasterUniversity | 22:23d7b9a4b082 | 467 | * @param autoClear defines whether or not the display is automatically cleared once the animation is complete. By default, the display is cleared. Set this parameter to zero to disable the autoClear operation. |
LancasterUniversity | 22:23d7b9a4b082 | 468 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 469 | * @return MICROBIT_OK, MICROBIT_BUSY if the screen is in use, or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 470 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 471 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 472 | * const int heart_w = 10; |
Jonathan Austin |
1:8aa5cdb4ab67 | 473 | * const int heart_h = 5; |
Jonathan Austin |
1:8aa5cdb4ab67 | 474 | * const uint8_t heart[] = { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 475 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 476 | * MicroBitImage i(heart_w,heart_h,heart); |
Jonathan Austin |
1:8aa5cdb4ab67 | 477 | * display.animateAsync(i,100,5); |
Jonathan Austin |
1:8aa5cdb4ab67 | 478 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 479 | */ |
LancasterUniversity | 22:23d7b9a4b082 | 480 | int animateAsync(MicroBitImage image, int delay, int stride, int startingPosition = MICROBIT_DISPLAY_ANIMATE_DEFAULT_POS, int autoClear = MICROBIT_DISPLAY_DEFAULT_AUTOCLEAR); |
Jonathan Austin |
1:8aa5cdb4ab67 | 481 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 482 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 483 | * "Animates" the current image across the display with a given stride, finishing on the last frame of the animation. |
Jonathan Austin |
1:8aa5cdb4ab67 | 484 | * Blocks the calling thread until the animation is complete. |
Jonathan Austin |
1:8aa5cdb4ab67 | 485 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 486 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 487 | * @param delay The time to delay between each update of the display, in milliseconds. |
Jonathan Austin |
1:8aa5cdb4ab67 | 488 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 489 | * @param stride The number of pixels to shift by in each update. |
Jonathan Austin |
1:8aa5cdb4ab67 | 490 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 491 | * @param startingPosition the starting position on the display for the animation |
Jonathan Austin |
1:8aa5cdb4ab67 | 492 | * to begin at. Defaults to MICROBIT_DISPLAY_ANIMATE_DEFAULT_POS. |
Jonathan Austin |
1:8aa5cdb4ab67 | 493 | * |
LancasterUniversity | 22:23d7b9a4b082 | 494 | * @param autoClear defines whether or not the display is automatically cleared once the animation is complete. By default, the display is cleared. Set this parameter to zero to disable the autoClear operation. |
LancasterUniversity | 22:23d7b9a4b082 | 495 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 496 | * @return MICROBIT_OK, MICROBIT_CANCELLED or MICROBIT_INVALID_PARAMETER. |
Jonathan Austin |
1:8aa5cdb4ab67 | 497 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 498 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 499 | * const int heart_w = 10; |
Jonathan Austin |
1:8aa5cdb4ab67 | 500 | * const int heart_h = 5; |
Jonathan Austin |
1:8aa5cdb4ab67 | 501 | * const uint8_t heart[] = { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 502 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 503 | * MicroBitImage i(heart_w,heart_h,heart); |
Jonathan Austin |
1:8aa5cdb4ab67 | 504 | * display.animate(i,100,5); |
Jonathan Austin |
1:8aa5cdb4ab67 | 505 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 506 | */ |
LancasterUniversity | 22:23d7b9a4b082 | 507 | int animate(MicroBitImage image, int delay, int stride, int startingPosition = MICROBIT_DISPLAY_ANIMATE_DEFAULT_POS, int autoClear = MICROBIT_DISPLAY_DEFAULT_AUTOCLEAR); |
Jonathan Austin |
1:8aa5cdb4ab67 | 508 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 509 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 510 | * Configures the brightness of the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 511 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 512 | * @param b The brightness to set the brightness to, in the range 0 - 255. |
Jonathan Austin |
1:8aa5cdb4ab67 | 513 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 514 | * @return MICROBIT_OK, or MICROBIT_INVALID_PARAMETER |
Jonathan Austin |
1:8aa5cdb4ab67 | 515 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 516 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 517 | * display.setBrightness(255); //max brightness |
Jonathan Austin |
1:8aa5cdb4ab67 | 518 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 519 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 520 | int setBrightness(int b); |
Jonathan Austin |
1:8aa5cdb4ab67 | 521 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 522 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 523 | * Configures the mode of the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 524 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 525 | * @param mode The mode to swap the display into. One of: DISPLAY_MODE_GREYSCALE, |
Jonathan Austin |
1:8aa5cdb4ab67 | 526 | * DISPLAY_MODE_BLACK_AND_WHITE, DISPLAY_MODE_BLACK_AND_WHITE_LIGHT_SENSE |
Jonathan Austin |
1:8aa5cdb4ab67 | 527 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 528 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 529 | * display.setDisplayMode(DISPLAY_MODE_GREYSCALE); //per pixel brightness |
Jonathan Austin |
1:8aa5cdb4ab67 | 530 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 531 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 532 | void setDisplayMode(DisplayMode mode); |
Jonathan Austin |
1:8aa5cdb4ab67 | 533 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 534 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 535 | * Retrieves the mode of the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 536 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 537 | * @return the current mode of the display |
Jonathan Austin |
1:8aa5cdb4ab67 | 538 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 539 | int getDisplayMode(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 540 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 541 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 542 | * Fetches the current brightness of this display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 543 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 544 | * @return the brightness of this display, in the range 0..255. |
Jonathan Austin |
1:8aa5cdb4ab67 | 545 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 546 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 547 | * display.getBrightness(); //the current brightness |
Jonathan Austin |
1:8aa5cdb4ab67 | 548 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 549 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 550 | int getBrightness(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 551 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 552 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 553 | * Rotates the display to the given position. |
Jonathan Austin |
1:8aa5cdb4ab67 | 554 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 555 | * Axis aligned values only. |
Jonathan Austin |
1:8aa5cdb4ab67 | 556 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 557 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 558 | * display.rotateTo(MICROBIT_DISPLAY_ROTATION_180); //rotates 180 degrees from original orientation |
Jonathan Austin |
1:8aa5cdb4ab67 | 559 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 560 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 561 | void rotateTo(DisplayRotation position); |
Jonathan Austin |
1:8aa5cdb4ab67 | 562 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 563 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 564 | * Enables the display, should only be called if the display is disabled. |
Jonathan Austin |
1:8aa5cdb4ab67 | 565 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 566 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 567 | * display.enable(); //Enables the display mechanics |
Jonathan Austin |
1:8aa5cdb4ab67 | 568 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 569 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 570 | * @note Only enables the display if the display is currently disabled. |
Jonathan Austin |
1:8aa5cdb4ab67 | 571 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 572 | void enable(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 573 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 574 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 575 | * Disables the display, which releases control of the GPIO pins used by the display, |
Jonathan Austin |
1:8aa5cdb4ab67 | 576 | * which are exposed on the edge connector. |
Jonathan Austin |
1:8aa5cdb4ab67 | 577 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 578 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 579 | * display.disable(); //disables the display |
Jonathan Austin |
1:8aa5cdb4ab67 | 580 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 581 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 582 | * @note Only disables the display if the display is currently enabled. |
Jonathan Austin |
1:8aa5cdb4ab67 | 583 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 584 | void disable(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 585 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 586 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 587 | * Clears the display of any remaining pixels. |
Jonathan Austin |
1:8aa5cdb4ab67 | 588 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 589 | * `display.image.clear()` can also be used! |
Jonathan Austin |
1:8aa5cdb4ab67 | 590 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 591 | * @code |
Jonathan Austin |
1:8aa5cdb4ab67 | 592 | * display.clear(); //clears the display |
Jonathan Austin |
1:8aa5cdb4ab67 | 593 | * @endcode |
Jonathan Austin |
1:8aa5cdb4ab67 | 594 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 595 | void clear(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 596 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 597 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 598 | * Updates the font that will be used for display operations. |
Jonathan Austin |
1:8aa5cdb4ab67 | 599 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 600 | * @param font the new font that will be used to render characters. |
Jonathan Austin |
1:8aa5cdb4ab67 | 601 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 602 | * @note DEPRECATED! Please use MicroBitFont::setSystemFont() instead. |
Jonathan Austin |
1:8aa5cdb4ab67 | 603 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 604 | void setFont(MicroBitFont font); |
Jonathan Austin |
1:8aa5cdb4ab67 | 605 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 606 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 607 | * Retrieves the font object used for rendering characters on the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 608 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 609 | * @note DEPRECATED! Please use MicroBitFont::getSystemFont() instead. |
Jonathan Austin |
1:8aa5cdb4ab67 | 610 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 611 | MicroBitFont getFont(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 612 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 613 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 614 | * Captures the bitmap currently being rendered on the display. |
Jonathan Austin |
1:8aa5cdb4ab67 | 615 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 616 | * @return a MicroBitImage containing the captured data. |
Jonathan Austin |
1:8aa5cdb4ab67 | 617 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 618 | MicroBitImage screenShot(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 619 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 620 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 621 | * Gives a representative figure of the light level in the current environment |
Jonathan Austin |
1:8aa5cdb4ab67 | 622 | * where are micro:bit is situated. |
Jonathan Austin |
1:8aa5cdb4ab67 | 623 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 624 | * Internally, it constructs an instance of a MicroBitLightSensor if not already configured |
Jonathan Austin |
1:8aa5cdb4ab67 | 625 | * and sets the display mode to DISPLAY_MODE_BLACK_AND_WHITE_LIGHT_SENSE. |
Jonathan Austin |
1:8aa5cdb4ab67 | 626 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 627 | * This also changes the tickPeriod to MICROBIT_LIGHT_SENSOR_TICK_SPEED so |
Jonathan Austin |
1:8aa5cdb4ab67 | 628 | * that the display does not suffer from artifacts. |
Jonathan Austin |
1:8aa5cdb4ab67 | 629 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 630 | * @return an indicative light level in the range 0 - 255. |
Jonathan Austin |
1:8aa5cdb4ab67 | 631 | * |
Jonathan Austin |
1:8aa5cdb4ab67 | 632 | * @note this will return 0 on the first call to this method, a light reading |
Jonathan Austin |
1:8aa5cdb4ab67 | 633 | * will be available after the display has activated the light sensor for the |
Jonathan Austin |
1:8aa5cdb4ab67 | 634 | * first time. |
Jonathan Austin |
1:8aa5cdb4ab67 | 635 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 636 | int readLightLevel(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 637 | |
Jonathan Austin |
1:8aa5cdb4ab67 | 638 | /** |
Jonathan Austin |
1:8aa5cdb4ab67 | 639 | * Destructor for MicroBitDisplay, where we deregister this instance from the array of system components. |
Jonathan Austin |
1:8aa5cdb4ab67 | 640 | */ |
Jonathan Austin |
1:8aa5cdb4ab67 | 641 | ~MicroBitDisplay(); |
Jonathan Austin |
1:8aa5cdb4ab67 | 642 | }; |
Jonathan Austin |
1:8aa5cdb4ab67 | 643 | |
LancasterUniversity | 20:ad2a5c7debf4 | 644 | #endif |