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
QSPIBitmap.cpp@0:6db0d96b351d, 2017-07-28 (annotated)
- 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?
User | Revision | Line number | New 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 |