Example for the LPC4088 QSB Base Board

Dependencies:   EALib mbed

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?

UserRevisionLine numberNew 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