LCOV - code coverage report
Current view: top level - zephyr/display - mb_display.h Hit Total Coverage
Test: new.info Lines: 8 16 50.0 %
Date: 2024-12-22 00:14:23

          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 1.14