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:
Tue May 20 10:30:34 2014 +0000
Revision:
0:3ecd25651727
Child:
1:76ec0e6dfe81
First version

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 "DmTftHX8353C.h"
displaymodule 0:3ecd25651727 20 #include "DmTftS6D0164.h"
displaymodule 0:3ecd25651727 21 #include "DmTftIli9325.h"
displaymodule 0:3ecd25651727 22 #include "DmTftIli9341.h"
displaymodule 0:3ecd25651727 23 #include "DmTftSsd2119.h"
displaymodule 0:3ecd25651727 24 #include "DmTouch.h"
displaymodule 0:3ecd25651727 25
displaymodule 0:3ecd25651727 26 #include "W25Q16BV.h"
displaymodule 0:3ecd25651727 27 #include "DmDrawBmpBase.h"
displaymodule 0:3ecd25651727 28 #include "SDFileSystem.h"
displaymodule 0:3ecd25651727 29
displaymodule 0:3ecd25651727 30 /******************************************************************************
displaymodule 0:3ecd25651727 31 * Typedefs and defines
displaymodule 0:3ecd25651727 32 *****************************************************************************/
displaymodule 0:3ecd25651727 33
displaymodule 0:3ecd25651727 34 #define log(...) printf(__VA_ARGS__)
displaymodule 0:3ecd25651727 35 //#define log(...)
displaymodule 0:3ecd25651727 36
displaymodule 0:3ecd25651727 37 #define DM_PIN_SPI_MOSI D11
displaymodule 0:3ecd25651727 38 #define DM_PIN_SPI_MISO D12
displaymodule 0:3ecd25651727 39 #define DM_PIN_SPI_SCLK D13
displaymodule 0:3ecd25651727 40
displaymodule 0:3ecd25651727 41 #define DM_PIN_CS_TOUCH D4
displaymodule 0:3ecd25651727 42 #define DM_PIN_CS_TFT D10
displaymodule 0:3ecd25651727 43 #define DM_PIN_CS_SDCARD D8
displaymodule 0:3ecd25651727 44 #define DM_PIN_CS_FLASH D6
displaymodule 0:3ecd25651727 45
displaymodule 0:3ecd25651727 46 /******************************************************************************
displaymodule 0:3ecd25651727 47 * Local variables
displaymodule 0:3ecd25651727 48 *****************************************************************************/
displaymodule 0:3ecd25651727 49
displaymodule 0:3ecd25651727 50 //DmTftHX8353C tft; /* DM_TFT18_101 */
displaymodule 0:3ecd25651727 51 //DmTftS6D0164 tft; /* DM_TFT22_102 */
displaymodule 0:3ecd25651727 52 //DmTftIli9325 tft; /* DM_TFT28_103 and DM_TFT24_104 */
displaymodule 0:3ecd25651727 53 DmTftIli9341 tft; /* DM_TFT28_105 */
displaymodule 0:3ecd25651727 54 //DmTftSsd2119 tft; /* DM_TFT35_107 */
displaymodule 0:3ecd25651727 55
displaymodule 0:3ecd25651727 56 //DmTouch touch(DmTouch::DM_TFT28_103, false); /* For LPC4088 QuickStart Board */
displaymodule 0:3ecd25651727 57 //DmTouch touch(DmTouch::DM_TFT28_103);
displaymodule 0:3ecd25651727 58 //DmTouch touch(DmTouch::DM_TFT24_104);
displaymodule 0:3ecd25651727 59 DmTouch touch(DmTouch::DM_TFT28_105);
displaymodule 0:3ecd25651727 60 //DmTouch touch(DmTouch::DM_TFT35_107);
displaymodule 0:3ecd25651727 61
displaymodule 0:3ecd25651727 62 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 63 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 64
displaymodule 0:3ecd25651727 65 DigitalInOut csTouch(DM_PIN_CS_TOUCH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 66 DigitalInOut csDisplay(DM_PIN_CS_TFT, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 67 DigitalInOut csSDCard(DM_PIN_CS_SDCARD, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 68 DigitalInOut csFlash(DM_PIN_CS_FLASH, PIN_OUTPUT, PullUp, 1);
displaymodule 0:3ecd25651727 69
displaymodule 0:3ecd25651727 70 /******************************************************************************
displaymodule 0:3ecd25651727 71 * Global variables
displaymodule 0:3ecd25651727 72 *****************************************************************************/
displaymodule 0:3ecd25651727 73
displaymodule 0:3ecd25651727 74 /******************************************************************************
displaymodule 0:3ecd25651727 75 * Local functions
displaymodule 0:3ecd25651727 76 *****************************************************************************/
displaymodule 0:3ecd25651727 77
displaymodule 0:3ecd25651727 78 static bool sdcardReader(uint32_t userData, uint8_t* data, int offset, int numBytes) {
displaymodule 0:3ecd25651727 79 FILE* fp = (FILE*)userData;
displaymodule 0:3ecd25651727 80 fseek(fp, offset, SEEK_SET);
displaymodule 0:3ecd25651727 81 fread(data, 1, numBytes, fp);
displaymodule 0:3ecd25651727 82 return true;
displaymodule 0:3ecd25651727 83 }
displaymodule 0:3ecd25651727 84
displaymodule 0:3ecd25651727 85 static bool spiFlashReader(uint32_t userData, uint8_t* data, int offset, int numBytes) {
displaymodule 0:3ecd25651727 86 W25Q16BV* spiFlash = (W25Q16BV*)userData;
displaymodule 0:3ecd25651727 87 spiFlash->readStream(offset, (char*)data, numBytes);
displaymodule 0:3ecd25651727 88 return true;
displaymodule 0:3ecd25651727 89 }
displaymodule 0:3ecd25651727 90
displaymodule 0:3ecd25651727 91 static void copyImageToSPIFlash(const char* fname) {
displaymodule 0:3ecd25651727 92 FILE* fp = fopen(fname, "r");
displaymodule 0:3ecd25651727 93 int num, offset;
displaymodule 0:3ecd25651727 94 uint8_t buff[128];
displaymodule 0:3ecd25651727 95
displaymodule 0:3ecd25651727 96 do {
displaymodule 0:3ecd25651727 97 if (fp == NULL) {
displaymodule 0:3ecd25651727 98 log("Failed to open %s, so assuming SPI flash is correct\n", fname);
displaymodule 0:3ecd25651727 99 break;
displaymodule 0:3ecd25651727 100 }
displaymodule 0:3ecd25651727 101
displaymodule 0:3ecd25651727 102 // simple comparison of first 64 bytes in file and SPI flash
displaymodule 0:3ecd25651727 103 // to avoid having to write to the flash on every boot
displaymodule 0:3ecd25651727 104 num = fread(buff, 1, 64, fp);
displaymodule 0:3ecd25651727 105 if (num == 64) {
displaymodule 0:3ecd25651727 106 flash.readStream(0, (char*)&buff[64], 64);
displaymodule 0:3ecd25651727 107 if (memcmp(buff, &buff[64], 64) == 0) {
displaymodule 0:3ecd25651727 108 log("SPI flash content propably correct, not replacing it\n");
displaymodule 0:3ecd25651727 109 break;
displaymodule 0:3ecd25651727 110 }
displaymodule 0:3ecd25651727 111 }
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 //DmTftBase* tft = factory.display();
displaymodule 0:3ecd25651727 137 DmDrawBmpBase bmp;
displaymodule 0:3ecd25651727 138 const char* fname = "/sd/logop565.bmp";
displaymodule 0:3ecd25651727 139
displaymodule 0:3ecd25651727 140 copyImageToSPIFlash(fname);
displaymodule 0:3ecd25651727 141
displaymodule 0:3ecd25651727 142 log("init tft \r\n");
displaymodule 0:3ecd25651727 143 tft.init();
displaymodule 0:3ecd25651727 144
displaymodule 0:3ecd25651727 145 while (true) {
displaymodule 0:3ecd25651727 146 log("Drawing from SD card (%s) ...\n", fname);
displaymodule 0:3ecd25651727 147 FILE *fp = fopen(fname, "r");
displaymodule 0:3ecd25651727 148 if (fp != NULL) {
displaymodule 0:3ecd25651727 149 bmp.drawBitmap(tft, 0, 0, sdcardReader, (uint32_t)fp);
displaymodule 0:3ecd25651727 150 fclose(fp);
displaymodule 0:3ecd25651727 151 } else {
displaymodule 0:3ecd25651727 152 log("failed to open file\n");
displaymodule 0:3ecd25651727 153 }
displaymodule 0:3ecd25651727 154
displaymodule 0:3ecd25651727 155 wait_ms(3000);
displaymodule 0:3ecd25651727 156 tft.clearScreen(RED);
displaymodule 0:3ecd25651727 157 wait_ms(1000);
displaymodule 0:3ecd25651727 158
displaymodule 0:3ecd25651727 159 log("Attempting to decode image from SPI flash...\n");
displaymodule 0:3ecd25651727 160 bmp.drawBitmap(tft, 0, 0, spiFlashReader, (uint32_t)&flash);
displaymodule 0:3ecd25651727 161
displaymodule 0:3ecd25651727 162 wait_ms(3000);
displaymodule 0:3ecd25651727 163 tft.clearScreen(GREEN);
displaymodule 0:3ecd25651727 164 wait_ms(1000);
displaymodule 0:3ecd25651727 165 }
displaymodule 0:3ecd25651727 166 }