LCOV - code coverage report
Current view: top level - zephyr/display - mb_display.h Coverage Total Hit
Test: new.info Lines: 50.0 % 16 8
Test Date: 2025-09-05 22:20:39

            Line data    Source code
       1            1 : /** @file
       2              :  *  @brief BBC micro:bit display APIs.
       3              :  */
       4              : 
       5              : /*
       6              :  * Copyright (c) 2017 Intel Corporation
       7              :  *
       8              :  * SPDX-License-Identifier: Apache-2.0
       9              :  */
      10              : 
      11              : #ifndef ZEPHYR_INCLUDE_DISPLAY_MB_DISPLAY_H_
      12              : #define ZEPHYR_INCLUDE_DISPLAY_MB_DISPLAY_H_
      13              : 
      14              : /**
      15              :  * @brief BBC micro:bit display APIs
      16              :  * @defgroup mb_display BBC micro:bit display APIs
      17              :  * @ingroup third_party
      18              :  * @{
      19              :  */
      20              : 
      21              : #include <stdio.h>
      22              : #include <zephyr/types.h>
      23              : #include <stdbool.h>
      24              : #include <zephyr/sys/util.h>
      25              : #include <zephyr/toolchain.h>
      26              : 
      27              : #ifdef __cplusplus
      28              : extern "C" {
      29              : #endif
      30              : 
      31              : /**
      32              :  * @brief Representation of a BBC micro:bit display image.
      33              :  *
      34              :  * This struct should normally not be used directly, rather created
      35              :  * using the MB_IMAGE() macro.
      36              :  */
      37            1 : struct mb_image {
      38              :         union {
      39              :                 struct {
      40            0 :                         uint8_t c1:1,
      41            0 :                                 c2:1,
      42            0 :                                 c3:1,
      43            0 :                                 c4:1,
      44            0 :                                 c5:1;
      45            0 :                 } r[5];
      46            0 :                 uint8_t row[5];
      47            0 :         };
      48              : };
      49              : 
      50              : /**
      51              :  * @brief Display mode.
      52              :  *
      53              :  * First 16 bits are reserved for modes, last 16 for flags.
      54              :  */
      55            1 : enum mb_display_mode {
      56              :         /** Default mode ("single" for images, "scroll" for text). */
      57              :         MB_DISPLAY_MODE_DEFAULT,
      58              : 
      59              :         /** Display images sequentially, one at a time. */
      60              :         MB_DISPLAY_MODE_SINGLE,
      61              : 
      62              :         /** Display images by scrolling. */
      63              :         MB_DISPLAY_MODE_SCROLL,
      64              : 
      65              :         /* Display flags, i.e. modifiers to the chosen mode */
      66              : 
      67              :         /** Loop back to the beginning when reaching the last image. */
      68              :         MB_DISPLAY_FLAG_LOOP        = BIT(16),
      69              : };
      70              : 
      71              : /**
      72              :  *
      73              :  * @brief Generate an image object from a given array rows/columns.
      74              :  *
      75              :  * This helper takes an array of 5 rows, each consisting of 5 0/1 values which
      76              :  * correspond to the columns of that row. The value 0 means the pixel is
      77              :  * disabled whereas a 1 means the pixel is enabled.
      78              :  *
      79              :  * The pixels go from left to right and top to bottom, i.e. top-left corner
      80              :  * is the first row's first value, top-right is the first rows last value,
      81              :  * and bottom-right corner is the last value of the last (5th) row. As an
      82              :  * example, the following would create a smiley face image:
      83              :  *
      84              :  * <pre>
      85              :  * static const struct mb_image smiley = MB_IMAGE({ 0, 1, 0, 1, 0 },
      86              :  *                                                { 0, 1, 0, 1, 0 },
      87              :  *                                                { 0, 0, 0, 0, 0 },
      88              :  *                                                { 1, 0, 0, 0, 1 },
      89              :  *                                                { 0, 1, 1, 1, 0 });
      90              :  * </pre>
      91              :  *
      92              :  * @param _rows Each of the 5 rows represented as a 5-value column array.
      93              :  *
      94              :  * @return Image bitmap that can be passed e.g. to mb_display_image().
      95              :  */
      96            1 : #define MB_IMAGE(_rows...) { .r = { _rows } }
      97              : 
      98              : /**
      99              :  * @brief Opaque struct representing the BBC micro:bit display.
     100              :  *
     101              :  * For more information see the following links:
     102              :  *
     103              :  * https://www.microbit.co.uk/device/screen
     104              :  *
     105              :  * https://lancaster-university.github.io/microbit-docs/ubit/display/
     106              :  */
     107              : struct mb_display;
     108              : 
     109              : /**
     110              :  * @brief Get a pointer to the BBC micro:bit display object.
     111              :  *
     112              :  * @return Pointer to display object.
     113              :  */
     114            1 : struct mb_display *mb_display_get(void);
     115              : 
     116              : /**
     117              :  * @brief Display one or more images on the BBC micro:bit LED display.
     118              :  *
     119              :  * This function takes an array of one or more images and renders them
     120              :  * sequentially on the micro:bit display. The call is asynchronous, i.e.
     121              :  * the processing of the display happens in the background. If there is
     122              :  * another image being displayed it will be canceled and the new one takes
     123              :  * over.
     124              :  *
     125              :  * @param disp      Display object.
     126              :  * @param mode      One of the MB_DISPLAY_MODE_* options.
     127              :  * @param duration  Duration how long to show each image (in milliseconds), or
     128              :  *                  @ref SYS_FOREVER_MS.
     129              :  * @param img       Array of image bitmaps (struct mb_image objects).
     130              :  * @param img_count Number of images in 'img' array.
     131              :  */
     132            1 : void mb_display_image(struct mb_display *disp, uint32_t mode, int32_t duration,
     133              :                       const struct mb_image *img, uint8_t img_count);
     134              : 
     135              : /**
     136              :  * @brief Print a string of characters on the BBC micro:bit LED display.
     137              :  *
     138              :  * This function takes a printf-style format string and outputs it in a
     139              :  * scrolling fashion to the display.
     140              :  *
     141              :  * The call is asynchronous, i.e. the processing of the display happens in
     142              :  * the background. If there is another image or string being displayed it
     143              :  * will be canceled and the new one takes over.
     144              :  *
     145              :  * @param disp     Display object.
     146              :  * @param mode     One of the MB_DISPLAY_MODE_* options.
     147              :  * @param duration Duration how long to show each character (in milliseconds),
     148              :  *                 or @ref SYS_FOREVER_MS.
     149              :  * @param fmt      printf-style format string
     150              :  * @param ...      Optional list of format arguments.
     151              :  */
     152            1 : __printf_like(4, 5) void mb_display_print(struct mb_display *disp,
     153              :                                           uint32_t mode, int32_t duration,
     154              :                                           const char *fmt, ...);
     155              : 
     156              : /**
     157              :  * @brief Stop the ongoing display of an image.
     158              :  *
     159              :  * @param disp    Display object.
     160              :  */
     161            1 : void mb_display_stop(struct mb_display *disp);
     162              : 
     163              : #ifdef __cplusplus
     164              : }
     165              : #endif
     166              : 
     167              : /**
     168              :  * @}
     169              :  */
     170              : 
     171              : #endif /* ZEPHYR_INCLUDE_DISPLAY_MB_DISPLAY_H_ */
        

Generated by: LCOV version 2.0-1