EmbeddedArtists AB
/
app_lcdboard_demo_picture
Example for the LPC4088 QSB Base Board
PictureDemo.cpp
- Committer:
- embeddedartists
- Date:
- 2014-04-09
- Revision:
- 3:33a36d79ab7d
- Parent:
- 0:83b8ee8e8d4b
File content as of revision 3:33a36d79ab7d:
/****************************************************************************** * Includes *****************************************************************************/ #include "mbed.h" #include "LcdController.h" #include "EaLcdBoard.h" #include "PictureDemo.h" #include "Image.h" extern const unsigned char eaLogo_image[]; extern int eaLogo_image_sz; extern const unsigned char splash_image[]; extern int splash_image_sz; /****************************************************************************** * Typedefs and defines *****************************************************************************/ /****************************************************************************** * Local variables *****************************************************************************/ /****************************************************************************** * External variables *****************************************************************************/ extern EaLcdBoard lcdBoard; extern bool abortTest; /****************************************************************************** * Local functions *****************************************************************************/ void PictureDemo::drawCentered(const unsigned char* pData, int size, uint32_t delayMs) { Image::ImageData_t data; int result = Image::decode(pData, size, &data); if (result == 0) { // Draw the image centered on the screen unsigned int xoff = (windowX - data.width)/2; unsigned int yoff = (windowY - data.height)/2; for (int y = 0; y < data.height; y++) { memcpy(this->pFrmBuf1 + (y+yoff)*windowX + xoff, data.pixels + y*data.width, data.width*2); } free(data.pixels); } else { printf("Failed to decode image\n"); } } /****************************************************************************** * Public functions *****************************************************************************/ PictureDemo::PictureDemo(uint8_t *pFrameBuf, uint16_t dispWidth, uint16_t dispHeight) { this->windowX = dispWidth; this->windowY = dispHeight; this->pFrmBuf = (uint16_t *)pFrameBuf; this->pFrmBuf1 = (uint16_t *)pFrameBuf; this->pFrmBuf2 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*2); this->pFrmBuf3 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*4); } void PictureDemo::run(int image, uint32_t delayMs) { printf("PictureDemo, image %d, %dms delay\n", image, delayMs); memset(this->pFrmBuf1, 0xff, windowX*windowY*2); switch (image) { case 1: drawCentered(eaLogo_image, eaLogo_image_sz, delayMs); break; default: drawCentered(splash_image, splash_image_sz, delayMs); break; } //update framebuffer lcdBoard.setFrameBuffer((uint32_t)this->pFrmBuf1); for (int i = 0; i < delayMs; i+=10) { if (abortTest) { break; } wait(0.01); } }