EmbeddedArtists AB
/
app_lcdboard_demo_picture
Example for the LPC4088 QSB Base Board
PictureDemo.cpp@3:33a36d79ab7d, 2014-04-09 (annotated)
- Committer:
- embeddedartists
- Date:
- Wed Apr 09 10:26:13 2014 +0000
- Revision:
- 3:33a36d79ab7d
- Parent:
- 0:83b8ee8e8d4b
Updated to latest version of EALib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
embeddedartists | 0:83b8ee8e8d4b | 1 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 2 | * Includes |
embeddedartists | 0:83b8ee8e8d4b | 3 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 4 | |
embeddedartists | 0:83b8ee8e8d4b | 5 | #include "mbed.h" |
embeddedartists | 0:83b8ee8e8d4b | 6 | |
embeddedartists | 0:83b8ee8e8d4b | 7 | #include "LcdController.h" |
embeddedartists | 0:83b8ee8e8d4b | 8 | #include "EaLcdBoard.h" |
embeddedartists | 0:83b8ee8e8d4b | 9 | #include "PictureDemo.h" |
embeddedartists | 0:83b8ee8e8d4b | 10 | |
embeddedartists | 0:83b8ee8e8d4b | 11 | #include "Image.h" |
embeddedartists | 0:83b8ee8e8d4b | 12 | |
embeddedartists | 0:83b8ee8e8d4b | 13 | extern const unsigned char eaLogo_image[]; |
embeddedartists | 0:83b8ee8e8d4b | 14 | extern int eaLogo_image_sz; |
embeddedartists | 0:83b8ee8e8d4b | 15 | |
embeddedartists | 0:83b8ee8e8d4b | 16 | extern const unsigned char splash_image[]; |
embeddedartists | 0:83b8ee8e8d4b | 17 | extern int splash_image_sz; |
embeddedartists | 0:83b8ee8e8d4b | 18 | |
embeddedartists | 0:83b8ee8e8d4b | 19 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 20 | * Typedefs and defines |
embeddedartists | 0:83b8ee8e8d4b | 21 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 22 | |
embeddedartists | 0:83b8ee8e8d4b | 23 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 24 | * Local variables |
embeddedartists | 0:83b8ee8e8d4b | 25 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 26 | |
embeddedartists | 0:83b8ee8e8d4b | 27 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 28 | * External variables |
embeddedartists | 0:83b8ee8e8d4b | 29 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 30 | extern EaLcdBoard lcdBoard; |
embeddedartists | 0:83b8ee8e8d4b | 31 | extern bool abortTest; |
embeddedartists | 0:83b8ee8e8d4b | 32 | |
embeddedartists | 0:83b8ee8e8d4b | 33 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 34 | * Local functions |
embeddedartists | 0:83b8ee8e8d4b | 35 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 36 | |
embeddedartists | 0:83b8ee8e8d4b | 37 | void PictureDemo::drawCentered(const unsigned char* pData, int size, uint32_t delayMs) |
embeddedartists | 0:83b8ee8e8d4b | 38 | { |
embeddedartists | 0:83b8ee8e8d4b | 39 | Image::ImageData_t data; |
embeddedartists | 0:83b8ee8e8d4b | 40 | int result = Image::decode(pData, size, &data); |
embeddedartists | 0:83b8ee8e8d4b | 41 | if (result == 0) |
embeddedartists | 0:83b8ee8e8d4b | 42 | { |
embeddedartists | 0:83b8ee8e8d4b | 43 | // Draw the image centered on the screen |
embeddedartists | 0:83b8ee8e8d4b | 44 | unsigned int xoff = (windowX - data.width)/2; |
embeddedartists | 0:83b8ee8e8d4b | 45 | unsigned int yoff = (windowY - data.height)/2; |
embeddedartists | 0:83b8ee8e8d4b | 46 | for (int y = 0; y < data.height; y++) |
embeddedartists | 0:83b8ee8e8d4b | 47 | { |
embeddedartists | 0:83b8ee8e8d4b | 48 | memcpy(this->pFrmBuf1 + (y+yoff)*windowX + xoff, |
embeddedartists | 0:83b8ee8e8d4b | 49 | data.pixels + y*data.width, |
embeddedartists | 0:83b8ee8e8d4b | 50 | data.width*2); |
embeddedartists | 0:83b8ee8e8d4b | 51 | } |
embeddedartists | 0:83b8ee8e8d4b | 52 | |
embeddedartists | 0:83b8ee8e8d4b | 53 | free(data.pixels); |
embeddedartists | 0:83b8ee8e8d4b | 54 | } |
embeddedartists | 0:83b8ee8e8d4b | 55 | else |
embeddedartists | 0:83b8ee8e8d4b | 56 | { |
embeddedartists | 0:83b8ee8e8d4b | 57 | printf("Failed to decode image\n"); |
embeddedartists | 0:83b8ee8e8d4b | 58 | } |
embeddedartists | 0:83b8ee8e8d4b | 59 | } |
embeddedartists | 0:83b8ee8e8d4b | 60 | |
embeddedartists | 0:83b8ee8e8d4b | 61 | /****************************************************************************** |
embeddedartists | 0:83b8ee8e8d4b | 62 | * Public functions |
embeddedartists | 0:83b8ee8e8d4b | 63 | *****************************************************************************/ |
embeddedartists | 0:83b8ee8e8d4b | 64 | PictureDemo::PictureDemo(uint8_t *pFrameBuf, uint16_t dispWidth, uint16_t dispHeight) |
embeddedartists | 0:83b8ee8e8d4b | 65 | { |
embeddedartists | 0:83b8ee8e8d4b | 66 | this->windowX = dispWidth; |
embeddedartists | 0:83b8ee8e8d4b | 67 | this->windowY = dispHeight; |
embeddedartists | 0:83b8ee8e8d4b | 68 | this->pFrmBuf = (uint16_t *)pFrameBuf; |
embeddedartists | 0:83b8ee8e8d4b | 69 | this->pFrmBuf1 = (uint16_t *)pFrameBuf; |
embeddedartists | 0:83b8ee8e8d4b | 70 | this->pFrmBuf2 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*2); |
embeddedartists | 0:83b8ee8e8d4b | 71 | this->pFrmBuf3 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*4); |
embeddedartists | 0:83b8ee8e8d4b | 72 | } |
embeddedartists | 0:83b8ee8e8d4b | 73 | |
embeddedartists | 0:83b8ee8e8d4b | 74 | void PictureDemo::run(int image, uint32_t delayMs) |
embeddedartists | 0:83b8ee8e8d4b | 75 | { |
embeddedartists | 0:83b8ee8e8d4b | 76 | printf("PictureDemo, image %d, %dms delay\n", image, delayMs); |
embeddedartists | 0:83b8ee8e8d4b | 77 | |
embeddedartists | 0:83b8ee8e8d4b | 78 | memset(this->pFrmBuf1, 0xff, windowX*windowY*2); |
embeddedartists | 0:83b8ee8e8d4b | 79 | switch (image) |
embeddedartists | 0:83b8ee8e8d4b | 80 | { |
embeddedartists | 0:83b8ee8e8d4b | 81 | case 1: |
embeddedartists | 0:83b8ee8e8d4b | 82 | drawCentered(eaLogo_image, eaLogo_image_sz, delayMs); |
embeddedartists | 0:83b8ee8e8d4b | 83 | break; |
embeddedartists | 0:83b8ee8e8d4b | 84 | |
embeddedartists | 0:83b8ee8e8d4b | 85 | default: |
embeddedartists | 0:83b8ee8e8d4b | 86 | drawCentered(splash_image, splash_image_sz, delayMs); |
embeddedartists | 0:83b8ee8e8d4b | 87 | break; |
embeddedartists | 0:83b8ee8e8d4b | 88 | } |
embeddedartists | 0:83b8ee8e8d4b | 89 | |
embeddedartists | 0:83b8ee8e8d4b | 90 | //update framebuffer |
embeddedartists | 0:83b8ee8e8d4b | 91 | lcdBoard.setFrameBuffer((uint32_t)this->pFrmBuf1); |
embeddedartists | 0:83b8ee8e8d4b | 92 | |
embeddedartists | 0:83b8ee8e8d4b | 93 | for (int i = 0; i < delayMs; i+=10) { |
embeddedartists | 0:83b8ee8e8d4b | 94 | if (abortTest) { |
embeddedartists | 0:83b8ee8e8d4b | 95 | break; |
embeddedartists | 0:83b8ee8e8d4b | 96 | } |
embeddedartists | 0:83b8ee8e8d4b | 97 | wait(0.01); |
embeddedartists | 0:83b8ee8e8d4b | 98 | } |
embeddedartists | 0:83b8ee8e8d4b | 99 | } |
embeddedartists | 0:83b8ee8e8d4b | 100 |