First draft of a simple application to read a bitmap from a file in QSPI memory, and display it on the LPC4088 using the easyGUI library.

Dependencies:   DMBasicGUI DMSupport

Committer:
jmitc91516
Date:
Fri Jul 28 14:40:43 2017 +0000
Revision:
0:6db0d96b351d
Loads a bitmap file from a file in QSPI memory, and displays it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmitc91516 0:6db0d96b351d 1 #include "QSPIBitmap.h"
jmitc91516 0:6db0d96b351d 2
jmitc91516 0:6db0d96b351d 3 #include <stdio.h>
jmitc91516 0:6db0d96b351d 4 #include <string.h>
jmitc91516 0:6db0d96b351d 5
jmitc91516 0:6db0d96b351d 6 #include <fstream>
jmitc91516 0:6db0d96b351d 7
jmitc91516 0:6db0d96b351d 8
jmitc91516 0:6db0d96b351d 9
jmitc91516 0:6db0d96b351d 10
jmitc91516 0:6db0d96b351d 11 // The default constructor exists purely to satisfy the compiler - it is not intended to be used
jmitc91516 0:6db0d96b351d 12 QSPIBitmap::QSPIBitmap()
jmitc91516 0:6db0d96b351d 13 {
jmitc91516 0:6db0d96b351d 14 name[0] = '\0';
jmitc91516 0:6db0d96b351d 15
jmitc91516 0:6db0d96b351d 16 size = 0;
jmitc91516 0:6db0d96b351d 17 debugVar1 = 0;
jmitc91516 0:6db0d96b351d 18
jmitc91516 0:6db0d96b351d 19 //data = NULL;
jmitc91516 0:6db0d96b351d 20
jmitc91516 0:6db0d96b351d 21 bitmapLoaded = false;
jmitc91516 0:6db0d96b351d 22 }
jmitc91516 0:6db0d96b351d 23
jmitc91516 0:6db0d96b351d 24 QSPIBitmap::QSPIBitmap(char* bitmapName)
jmitc91516 0:6db0d96b351d 25 {
jmitc91516 0:6db0d96b351d 26 strcpy(name, bitmapName);
jmitc91516 0:6db0d96b351d 27
jmitc91516 0:6db0d96b351d 28 // Set these when we read the bitmap from the QSPI drive
jmitc91516 0:6db0d96b351d 29 size = 0;
jmitc91516 0:6db0d96b351d 30 debugVar1 = 0;
jmitc91516 0:6db0d96b351d 31 data = NULL;
jmitc91516 0:6db0d96b351d 32
jmitc91516 0:6db0d96b351d 33 bitmapLoaded = GetBitmapFromQSPIDrive();
jmitc91516 0:6db0d96b351d 34 }
jmitc91516 0:6db0d96b351d 35
jmitc91516 0:6db0d96b351d 36 QSPIBitmap::~QSPIBitmap()
jmitc91516 0:6db0d96b351d 37 {
jmitc91516 0:6db0d96b351d 38 if(data) {
jmitc91516 0:6db0d96b351d 39 delete [] data;
jmitc91516 0:6db0d96b351d 40 }
jmitc91516 0:6db0d96b351d 41 }
jmitc91516 0:6db0d96b351d 42
jmitc91516 0:6db0d96b351d 43 bool QSPIBitmap::ReadBitmapSizeFile(void)
jmitc91516 0:6db0d96b351d 44 {
jmitc91516 0:6db0d96b351d 45 char bitmapSizeFilename[200];
jmitc91516 0:6db0d96b351d 46 sprintf(bitmapSizeFilename, "/qspi/%s_BMP.size", name);
jmitc91516 0:6db0d96b351d 47
jmitc91516 0:6db0d96b351d 48 char buff[50];
jmitc91516 0:6db0d96b351d 49
jmitc91516 0:6db0d96b351d 50 FILE *fpsize = fopen(bitmapSizeFilename, "r");
jmitc91516 0:6db0d96b351d 51 if (fpsize != NULL) {
jmitc91516 0:6db0d96b351d 52 // We expect the size value to be 6 digits
jmitc91516 0:6db0d96b351d 53 fread(buff, 6, 1, fpsize);
jmitc91516 0:6db0d96b351d 54 fclose(fpsize);
jmitc91516 0:6db0d96b351d 55
jmitc91516 0:6db0d96b351d 56 buff[6] = '\0';
jmitc91516 0:6db0d96b351d 57
jmitc91516 0:6db0d96b351d 58 sscanf(buff, "%d", &size);
jmitc91516 0:6db0d96b351d 59
jmitc91516 0:6db0d96b351d 60 return true;
jmitc91516 0:6db0d96b351d 61 }
jmitc91516 0:6db0d96b351d 62
jmitc91516 0:6db0d96b351d 63 // 'else'...
jmitc91516 0:6db0d96b351d 64
jmitc91516 0:6db0d96b351d 65 return false;
jmitc91516 0:6db0d96b351d 66 }
jmitc91516 0:6db0d96b351d 67
jmitc91516 0:6db0d96b351d 68 bool QSPIBitmap::ReadBitmapDataFile(void)
jmitc91516 0:6db0d96b351d 69 {
jmitc91516 0:6db0d96b351d 70 char bitmapDataFilename[200];
jmitc91516 0:6db0d96b351d 71 sprintf(bitmapDataFilename, "/qspi/%s_BMP.data", name);
jmitc91516 0:6db0d96b351d 72
jmitc91516 0:6db0d96b351d 73 FILE *fpdata = fopen(bitmapDataFilename, "rb");
jmitc91516 0:6db0d96b351d 74 if (fpdata != NULL) {
jmitc91516 0:6db0d96b351d 75 fread(data, size, 1, fpdata);
jmitc91516 0:6db0d96b351d 76 fclose(fpdata);
jmitc91516 0:6db0d96b351d 77
jmitc91516 0:6db0d96b351d 78 return true;
jmitc91516 0:6db0d96b351d 79 }
jmitc91516 0:6db0d96b351d 80
jmitc91516 0:6db0d96b351d 81 // 'else'...
jmitc91516 0:6db0d96b351d 82
jmitc91516 0:6db0d96b351d 83 return false;
jmitc91516 0:6db0d96b351d 84 }
jmitc91516 0:6db0d96b351d 85
jmitc91516 0:6db0d96b351d 86 bool QSPIBitmap::GetBitmapFromQSPIDrive(void)
jmitc91516 0:6db0d96b351d 87 {
jmitc91516 0:6db0d96b351d 88 //TODO: Raise exceptions(?) if any of the below fails
jmitc91516 0:6db0d96b351d 89
jmitc91516 0:6db0d96b351d 90 debugVar1 = 1;
jmitc91516 0:6db0d96b351d 91
jmitc91516 0:6db0d96b351d 92 if(ReadBitmapSizeFile()) {
jmitc91516 0:6db0d96b351d 93 debugVar1 = 3;
jmitc91516 0:6db0d96b351d 94 } else {
jmitc91516 0:6db0d96b351d 95 debugVar1 = 2;
jmitc91516 0:6db0d96b351d 96 return false;
jmitc91516 0:6db0d96b351d 97 }
jmitc91516 0:6db0d96b351d 98
jmitc91516 0:6db0d96b351d 99 debugVar1 = 4;
jmitc91516 0:6db0d96b351d 100
jmitc91516 0:6db0d96b351d 101 // Do not throw an exception if the allocation fails - just leave 'data' set to NULL
jmitc91516 0:6db0d96b351d 102 data = new (nothrow) GuiConst_INT8U[size + 10]; // Leave a small margin 'just in case'
jmitc91516 0:6db0d96b351d 103 // TEST - what if the 'new' fails??
jmitc91516 0:6db0d96b351d 104 // Answer - looks same as what Andrew saw at PittCon 2017
jmitc91516 0:6db0d96b351d 105
jmitc91516 0:6db0d96b351d 106 if(data == NULL) {
jmitc91516 0:6db0d96b351d 107 return false;
jmitc91516 0:6db0d96b351d 108 }
jmitc91516 0:6db0d96b351d 109
jmitc91516 0:6db0d96b351d 110 if(ReadBitmapDataFile()) {
jmitc91516 0:6db0d96b351d 111 debugVar1 = 5;
jmitc91516 0:6db0d96b351d 112 } else {
jmitc91516 0:6db0d96b351d 113 debugVar1 = 6;
jmitc91516 0:6db0d96b351d 114 return false;
jmitc91516 0:6db0d96b351d 115 }
jmitc91516 0:6db0d96b351d 116
jmitc91516 0:6db0d96b351d 117 debugVar1 = 7;
jmitc91516 0:6db0d96b351d 118
jmitc91516 0:6db0d96b351d 119 return true;
jmitc91516 0:6db0d96b351d 120 }
jmitc91516 0:6db0d96b351d 121
jmitc91516 0:6db0d96b351d 122 void QSPIBitmap::DisplayAt(GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT32S transparentColour)
jmitc91516 0:6db0d96b351d 123 {
jmitc91516 0:6db0d96b351d 124 if(bitmapLoaded) {
jmitc91516 0:6db0d96b351d 125 GuiLib_ShowBitmapAt(data, X, Y, transparentColour);
jmitc91516 0:6db0d96b351d 126 } else {
jmitc91516 0:6db0d96b351d 127 char buff[100];
jmitc91516 0:6db0d96b351d 128 sprintf(buff, "Bitmap not loaded - size %d, debugVar1: %d", size, debugVar1);
jmitc91516 0:6db0d96b351d 129
jmitc91516 0:6db0d96b351d 130 char bitmapSizeFilename[200];
jmitc91516 0:6db0d96b351d 131 sprintf(bitmapSizeFilename, "/qspi/%s_BMP.size", name);
jmitc91516 0:6db0d96b351d 132 }
jmitc91516 0:6db0d96b351d 133 }
jmitc91516 0:6db0d96b351d 134