/** * Simple API for scrolling lines. Keeps things simple by not even assuming * which screen is being drawn on. */ #ifndef DEVICE_SCREEN_H #define DEVICE_SCREEN_H #include #include #include #define SCREEN_WIDTH (128) #define SCREEN_HEIGHT (32) #define FONT_WIDTH (8) #define FONT_HEIGHT (16) #define SCREEN_LINE_COUNT (SCREEN_HEIGHT / FONT_HEIGHT) #define SCREEN_LINE_CHARS (SCREEN_WIDTH / FONT_WIDTH) #define SCREEN_TOTAL_CHARS (SCREEN_LINE_COUNT * SCREEN_LINE_CHARS) #define MESSAGE_MAX (1023) /** * Struct that keeps track of the lines on the screen. */ struct display_status { OLEDDisplay *screen; unsigned long period; /* milliseconds/Line */ unsigned long last_scroll_time; char message[MESSAGE_MAX + 1]; /* Entire message to be shown */ char lines[SCREEN_LINE_COUNT][SCREEN_LINE_CHARS + 1]; char *cursor; /* the begining of the *next* location in the message to be shown*/ size_t msg_len; size_t remaining; /* offset of the next part of text to be shown */ }; /** * Displays scrolling text on the screen. */ int display_update_scroll(struct display_status *status); #define END_OF_MESSAGE (1 << 0) /** * Initialises display_status structure so it can be used for * display_update_scroll. * * screen - screen to draw on * * status - structure to Initialise * * msg - message to scroll on the screen * * size - length of the message * * period - time between [elder] scrolls */ void display_status_init(OLEDDisplay *screen, struct display_status *status, char *msg, size_t size, unsigned long int period); #endif /* DEVICE_SCREEN_H */