Shows how to use a display, the onboard SD Card and the onboard SPI Flash. Requires a display module with direct Arduino pinning

Dependencies:   DmTftLibrary SDFileSystem mbed

Committer:
displaymodule
Date:
Thu Jan 22 05:54:22 2015 +0000
Revision:
6:0f69891b105e
Parent:
4:93ca338876e2
Add DM_TFT43_108, DM_TFT50_111 based on new lib drv: DmTftRa8875

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 0:3ecd25651727 1 /**********************************************************************************************
displaymodule 0:3ecd25651727 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 0:3ecd25651727 3
displaymodule 0:3ecd25651727 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 0:3ecd25651727 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 0:3ecd25651727 6 disclaimer is retained.
displaymodule 0:3ecd25651727 7
displaymodule 0:3ecd25651727 8 DISCLAIMER:
displaymodule 0:3ecd25651727 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 0:3ecd25651727 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 0:3ecd25651727 11 ********************************************************************************************/
displaymodule 0:3ecd25651727 12
displaymodule 0:3ecd25651727 13 /******************************************************************************
displaymodule 0:3ecd25651727 14 * Includes
displaymodule 0:3ecd25651727 15 *****************************************************************************/
displaymodule 0:3ecd25651727 16
displaymodule 0:3ecd25651727 17 #include "mbed.h"
displaymodule 0:3ecd25651727 18
displaymodule 0:3ecd25651727 19 #include "DmTftIli9341.h"
displaymodule 0:3ecd25651727 20 #include "DmTftSsd2119.h"
displaymodule 6:0f69891b105e 21 #include "DmTftRa8875.h"
displaymodule 0:3ecd25651727 22 #include "DmTouch.h"
displaymodule 0:3ecd25651727 23
displaymodule 0:3ecd25651727 24 #include "W25Q16BV.h"
displaymodule 0:3ecd25651727 25 #include "DmDrawBmpBase.h"
displaymodule 0:3ecd25651727 26 #include "SDFileSystem.h"
displaymodule 0:3ecd25651727 27
displaymodule 0:3ecd25651727 28 /******************************************************************************
displaymodule 0:3ecd25651727 29 * Typedefs and defines
displaymodule 0:3ecd25651727 30 *****************************************************************************/
displaymodule 0:3ecd25651727 31
displaymodule 2:a77053c4f5cc 32 /* Note that there are restrictions on which platforms that can use printf
displaymodule 2:a77053c4f5cc 33 in combinations with the DmTftLibrary. Some platforms (e.g. LPC1549 LPCXpresso)
displaymodule 2:a77053c4f5cc 34 use the same pins for USBRX/USBTX and display control. Printing will
displaymodule 2:a77053c4f5cc 35 cause the display to not work. Read more about this on the display's notebook
displaymodule 2:a77053c4f5cc 36 page. */
displaymodule 3:e1e1053e286f 37 #define log(...) printf(__VA_ARGS__)
displaymodule 3:e1e1053e286f 38 //#define log(...)
displaymodule 0:3ecd25651727 39
displaymodule 0:3ecd25651727 40 #define DM_PIN_SPI_MOSI D11
displaymodule 0:3ecd25651727 41 #define DM_PIN_SPI_MISO D12
displaymodule 0:3ecd25651727 42 #define DM_PIN_SPI_SCLK D13
displaymodule 0:3ecd25651727 43
displaymodule 0:3ecd25651727 44 #define DM_PIN_CS_TOUCH D4
displaymodule 0:3ecd25651727 45 #define DM_PIN_CS_TFT D10
displaymodule 0:3ecd25651727 46 #define DM_PIN_CS_SDCARD D8
displaymodule 0:3ecd25651727 47 #define DM_PIN_CS_FLASH D6
displaymodule 0:3ecd25651727 48
displaymodule 0:3ecd25651727 49 /******************************************************************************
displaymodule 0:3ecd25651727 50 * Local variables
displaymodule 0:3ecd25651727 51 *****************************************************************************/
displaymodule 0:3ecd25651727 52
displaymodule 2:a77053c4f5cc 53 //DmTftIli9341 tft; /* DM_TFT28_105 */
displaymodule 6:0f69891b105e 54 //DmTftSsd2119 tft; /* DM_TFT35_107 */
displaymodule 6:0f69891b105e 55 DmTftRa8875 tft; /* DM_TFT43_108 and DM_TFT50_111 For DmTftRa8875 driver, The panel resolution should be config in DmTftRa8875::init() function on the DmTftRa8875.cpp file. */
displaymodule 0:3ecd25651727 56
displaymodule 2:a77053c4f5cc 57 //DmTouch touch(DmTouch::DM_TFT28_105);
displaymodule 6:0f69891b105e 58 //DmTouch touch(DmTouch::DM_TFT35_107);
displaymodule 0:3ecd25651727 59
displaymodule 0:3ecd25651727 60 SDFileSystem sd(DM_PIN_SPI_MOSI, DM_PIN_SPI_MISO, DM_PIN_SPI_SCLK, DM_PIN_CS_SDCARD, "sd"); // mosi,miso,clk,cs
displaymodule 0:3ecd25651727 61 W25Q16BV flash(DM_PIN_SPI_MOSI, DM_PIN_SPI_MISO, DM_PIN_SPI_SCLK, DM_PIN_CS_FLASH); // mosi,miso,clk,cs
displaymodule 0:3ecd25651727 62
displaymodule 0:3ecd25651727 63 DigitalInOut csTouch(DM_PIN_CS_TOUCH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 64 DigitalInOut csDisplay(DM_PIN_CS_TFT, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 65 DigitalInOut csSDCard(DM_PIN_CS_SDCARD, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 66 DigitalInOut csFlash(DM_PIN_CS_FLASH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 67
displaymodule 1:76ec0e6dfe81 68
displaymodule 0:3ecd25651727 69 /******************************************************************************
displaymodule 0:3ecd25651727 70 * Global variables
displaymodule 0:3ecd25651727 71 *****************************************************************************/
displaymodule 0:3ecd25651727 72
displaymodule 0:3ecd25651727 73 /******************************************************************************
displaymodule 0:3ecd25651727 74 * Local functions
displaymodule 0:3ecd25651727 75 *****************************************************************************/
displaymodule 0:3ecd25651727 76
displaymodule 0:3ecd25651727 77 static bool sdcardReader(uint32_t userData, uint8_t* data, int offset, int numBytes) {
displaymodule 0:3ecd25651727 78 FILE* fp = (FILE*)userData;
displaymodule 0:3ecd25651727 79 fseek(fp, offset, SEEK_SET);
displaymodule 0:3ecd25651727 80 fread(data, 1, numBytes, fp);
displaymodule 0:3ecd25651727 81 return true;
displaymodule 0:3ecd25651727 82 }
displaymodule 0:3ecd25651727 83
displaymodule 0:3ecd25651727 84 static bool spiFlashReader(uint32_t userData, uint8_t* data, int offset, int numBytes) {
displaymodule 0:3ecd25651727 85 W25Q16BV* spiFlash = (W25Q16BV*)userData;
displaymodule 0:3ecd25651727 86 spiFlash->readStream(offset, (char*)data, numBytes);
displaymodule 0:3ecd25651727 87 return true;
displaymodule 0:3ecd25651727 88 }
displaymodule 0:3ecd25651727 89
displaymodule 0:3ecd25651727 90 static void copyImageToSPIFlash(const char* fname) {
displaymodule 0:3ecd25651727 91 FILE* fp = fopen(fname, "r");
displaymodule 0:3ecd25651727 92 int num, offset;
displaymodule 0:3ecd25651727 93 uint8_t buff[128];
displaymodule 0:3ecd25651727 94
displaymodule 0:3ecd25651727 95 do {
displaymodule 0:3ecd25651727 96 if (fp == NULL) {
displaymodule 0:3ecd25651727 97 log("Failed to open %s, so assuming SPI flash is correct\n", fname);
displaymodule 0:3ecd25651727 98 break;
displaymodule 0:3ecd25651727 99 }
displaymodule 0:3ecd25651727 100
displaymodule 0:3ecd25651727 101 // simple comparison of first 64 bytes in file and SPI flash
displaymodule 0:3ecd25651727 102 // to avoid having to write to the flash on every boot
displaymodule 0:3ecd25651727 103 num = fread(buff, 1, 64, fp);
displaymodule 0:3ecd25651727 104 if (num == 64) {
displaymodule 0:3ecd25651727 105 flash.readStream(0, (char*)&buff[64], 64);
displaymodule 0:3ecd25651727 106 if (memcmp(buff, &buff[64], 64) == 0) {
displaymodule 0:3ecd25651727 107 log("SPI flash content propably correct, not replacing it\n");
displaymodule 0:3ecd25651727 108 break;
displaymodule 0:3ecd25651727 109 }
displaymodule 0:3ecd25651727 110 }
displaymodule 4:93ca338876e2 111 fseek(fp, 0, SEEK_SET);
displaymodule 0:3ecd25651727 112
displaymodule 0:3ecd25651727 113 log("Found %s, erasing SPI flash\n", fname);
displaymodule 0:3ecd25651727 114 flash.chipErase();
displaymodule 0:3ecd25651727 115
displaymodule 0:3ecd25651727 116 log("Copying %s to SPI flash\n", fname);
displaymodule 0:3ecd25651727 117 offset = 0;
displaymodule 0:3ecd25651727 118 while ((num = fread(buff, 1, 128, fp)) > 0) {
displaymodule 0:3ecd25651727 119 flash.writeStream(offset, (char*)buff, num);
displaymodule 0:3ecd25651727 120 offset+=num;
displaymodule 0:3ecd25651727 121 }
displaymodule 0:3ecd25651727 122 log("Done. Wrote %d bytes to SPI flash\n", offset);
displaymodule 0:3ecd25651727 123
displaymodule 0:3ecd25651727 124 } while(false);
displaymodule 0:3ecd25651727 125
displaymodule 0:3ecd25651727 126 if (fp != NULL) {
displaymodule 0:3ecd25651727 127 fclose(fp);
displaymodule 0:3ecd25651727 128 }
displaymodule 0:3ecd25651727 129 }
displaymodule 0:3ecd25651727 130
displaymodule 0:3ecd25651727 131 /******************************************************************************
displaymodule 0:3ecd25651727 132 * Main
displaymodule 0:3ecd25651727 133 *****************************************************************************/
displaymodule 0:3ecd25651727 134
displaymodule 0:3ecd25651727 135 int main() {
displaymodule 0:3ecd25651727 136 DmDrawBmpBase bmp;
displaymodule 0:3ecd25651727 137 const char* fname = "/sd/logop565.bmp";
displaymodule 0:3ecd25651727 138
displaymodule 0:3ecd25651727 139 copyImageToSPIFlash(fname);
displaymodule 0:3ecd25651727 140
displaymodule 0:3ecd25651727 141 log("init tft \r\n");
displaymodule 0:3ecd25651727 142 tft.init();
displaymodule 0:3ecd25651727 143
displaymodule 0:3ecd25651727 144 while (true) {
displaymodule 0:3ecd25651727 145 log("Drawing from SD card (%s) ...\n", fname);
displaymodule 0:3ecd25651727 146 FILE *fp = fopen(fname, "r");
displaymodule 0:3ecd25651727 147 if (fp != NULL) {
displaymodule 0:3ecd25651727 148 bmp.drawBitmap(tft, 0, 0, sdcardReader, (uint32_t)fp);
displaymodule 0:3ecd25651727 149 fclose(fp);
displaymodule 0:3ecd25651727 150 } else {
displaymodule 0:3ecd25651727 151 log("failed to open file\n");
displaymodule 1:76ec0e6dfe81 152 log("Skipping SDCard reading as it is unsupported\n");
displaymodule 1:76ec0e6dfe81 153 tft.drawStringCentered(0, 0, tft.width(), tft.height(), "SD Card Unsupported!");
displaymodule 0:3ecd25651727 154 }
displaymodule 0:3ecd25651727 155
displaymodule 0:3ecd25651727 156 wait_ms(3000);
displaymodule 0:3ecd25651727 157 tft.clearScreen(RED);
displaymodule 0:3ecd25651727 158 wait_ms(1000);
displaymodule 0:3ecd25651727 159
displaymodule 0:3ecd25651727 160 log("Attempting to decode image from SPI flash...\n");
displaymodule 1:76ec0e6dfe81 161 if (!bmp.drawBitmap(tft, 0, 0, spiFlashReader, (uint32_t)&flash)) {
displaymodule 1:76ec0e6dfe81 162 log("Skipping SPI Flash reading as it is unsupported\n");
displaymodule 1:76ec0e6dfe81 163 tft.drawStringCentered(0, 0, tft.width(), tft.height(), "SPI Flash Unsupported!");
displaymodule 1:76ec0e6dfe81 164 }
displaymodule 0:3ecd25651727 165
displaymodule 0:3ecd25651727 166 wait_ms(3000);
displaymodule 0:3ecd25651727 167 tft.clearScreen(GREEN);
displaymodule 0:3ecd25651727 168 wait_ms(1000);
displaymodule 0:3ecd25651727 169 }
displaymodule 0:3ecd25651727 170 }