Error as described in MBs email to MS

Dependencies:   SDFileSystem app epson mbed msp430 pl tests

Committer:
marcbax
Date:
Thu Jan 11 14:12:00 2018 +0000
Revision:
1:5874c1a074a7
Parent:
0:c643d398cdb6
Version 180111a with error as reported to Mark Symonds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcbax 0:c643d398cdb6 1 //
marcbax 0:c643d398cdb6 2 // Filename: main.cpp
marcbax 0:c643d398cdb6 3 //
marcbax 0:c643d398cdb6 4 // Flexbook startup.
marcbax 0:c643d398cdb6 5 //
marcbax 0:c643d398cdb6 6
marcbax 0:c643d398cdb6 7 #include "book.h"
marcbax 0:c643d398cdb6 8 #include "bookmonitor.h"
marcbax 0:c643d398cdb6 9 #include "eink.h"
marcbax 0:c643d398cdb6 10 #include "hal.h"
marcbax 0:c643d398cdb6 11 #include "log.h"
marcbax 0:c643d398cdb6 12 #include "pagefactory.h"
marcbax 0:c643d398cdb6 13 #include <string>
marcbax 0:c643d398cdb6 14
marcbax 0:c643d398cdb6 15 using namespace Flexbook;
marcbax 0:c643d398cdb6 16
marcbax 0:c643d398cdb6 17 #include "mbed.h"
marcbax 0:c643d398cdb6 18 #include "SDFileSystem.h"
marcbax 0:c643d398cdb6 19
marcbax 0:c643d398cdb6 20 DigitalOut led1(LED1);
marcbax 0:c643d398cdb6 21 DigitalOut led2(LED2);
marcbax 0:c643d398cdb6 22 DigitalOut led3(LED3);
marcbax 0:c643d398cdb6 23 DigitalOut led4(LED4);
marcbax 0:c643d398cdb6 24 DigitalOut buzz(p21, 0);
marcbax 0:c643d398cdb6 25 //define all pins connected to companion PCBs as DigitalIn (high impedence)
marcbax 0:c643d398cdb6 26 DigitalIn pin9(p9);
marcbax 0:c643d398cdb6 27 DigitalIn pin10(p10);
marcbax 0:c643d398cdb6 28 DigitalIn pin11(p11);
marcbax 0:c643d398cdb6 29 DigitalIn pin12(p12);
marcbax 0:c643d398cdb6 30 DigitalIn pin13(p13);
marcbax 0:c643d398cdb6 31 DigitalIn pin14(p14);
marcbax 0:c643d398cdb6 32 DigitalIn pin15(p15);
marcbax 0:c643d398cdb6 33 DigitalIn pin16(p16);
marcbax 0:c643d398cdb6 34 DigitalIn pin17(p17);
marcbax 0:c643d398cdb6 35 DigitalIn pin18(p18);
marcbax 0:c643d398cdb6 36 DigitalIn pin23(p23);
marcbax 0:c643d398cdb6 37 DigitalIn pin24(p24);
marcbax 0:c643d398cdb6 38 DigitalIn pin25(p25);
marcbax 0:c643d398cdb6 39 DigitalIn pin26(p26);
marcbax 0:c643d398cdb6 40 DigitalIn pin27(p27);
marcbax 0:c643d398cdb6 41 DigitalIn pin28(p28);
marcbax 0:c643d398cdb6 42 DigitalIn pin29(p29);
marcbax 0:c643d398cdb6 43 DigitalIn pin30(p30);
marcbax 0:c643d398cdb6 44
marcbax 0:c643d398cdb6 45 // MicroSD mbed
marcbax 0:c643d398cdb6 46 // CS o-------------o 8 (DigitalOut cs)
marcbax 0:c643d398cdb6 47 // DI o-------------o 5 (SPI mosi)
marcbax 0:c643d398cdb6 48 // VCC o-------------o VOUT
marcbax 0:c643d398cdb6 49 // SCK o-------------o 7 (SPI sclk)
marcbax 0:c643d398cdb6 50 // GND o-------------o GND
marcbax 0:c643d398cdb6 51 // DO o-------------o 6 (SPI miso)
marcbax 0:c643d398cdb6 52 // CD o
marcbax 0:c643d398cdb6 53
marcbax 0:c643d398cdb6 54
marcbax 0:c643d398cdb6 55
marcbax 0:c643d398cdb6 56 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the Flexboard board
marcbax 0:c643d398cdb6 57
marcbax 0:c643d398cdb6 58 void SDtest()
marcbax 0:c643d398cdb6 59 {
marcbax 0:c643d398cdb6 60 printf("\nSD card: ");
marcbax 0:c643d398cdb6 61
marcbax 0:c643d398cdb6 62 FILE *fp1 = fopen("/sd/sdtest.txt", "w");
marcbax 0:c643d398cdb6 63 if(fp1 == NULL) {
marcbax 0:c643d398cdb6 64 error("Could not open file for write\n");
marcbax 0:c643d398cdb6 65 }
marcbax 0:c643d398cdb6 66 if(fprintf(fp1, "Hello SD Card\n") != 14)
marcbax 0:c643d398cdb6 67 error("Could not write data\n");
marcbax 0:c643d398cdb6 68 fclose(fp1);
marcbax 0:c643d398cdb6 69
marcbax 0:c643d398cdb6 70 FILE *fp2 = fopen("/sd/sdtest.txt", "r");
marcbax 0:c643d398cdb6 71 if(fp2 == NULL) {
marcbax 0:c643d398cdb6 72 error("Could not open file for read\n");
marcbax 0:c643d398cdb6 73 }
marcbax 0:c643d398cdb6 74 char data[64];
marcbax 0:c643d398cdb6 75 data[0] = 0;
marcbax 0:c643d398cdb6 76 if(fgets(data, sizeof(data), fp2) == NULL)
marcbax 0:c643d398cdb6 77 error("Could not read data\n");
marcbax 0:c643d398cdb6 78 fclose(fp2);
marcbax 0:c643d398cdb6 79
marcbax 0:c643d398cdb6 80 printf("Ok\n");
marcbax 0:c643d398cdb6 81 }
marcbax 0:c643d398cdb6 82 /*
marcbax 0:c643d398cdb6 83 //function to count number of eligible words in the dictionary file
marcbax 0:c643d398cdb6 84 int NumDictWords()
marcbax 0:c643d398cdb6 85 {
marcbax 0:c643d398cdb6 86 FILE *fp1 = fopen("/sd/hangdict.txt", "r");
marcbax 0:c643d398cdb6 87 if (fp1 == NULL) {
marcbax 0:c643d398cdb6 88 printf("Could not open hangdict.txt\n");
marcbax 0:c643d398cdb6 89 }
marcbax 0:c643d398cdb6 90 else {
marcbax 0:c643d398cdb6 91 printf("hangdict.txt opened\n");
marcbax 0:c643d398cdb6 92 }
marcbax 0:c643d398cdb6 93 int wordcount = 0;
marcbax 0:c643d398cdb6 94 int wordlength = 0;
marcbax 0:c643d398cdb6 95 int ch;
marcbax 0:c643d398cdb6 96 while (EOF != (ch = getc(fp1))) {
marcbax 0:c643d398cdb6 97 // check if character is an LF. It the word on that line is the right length, increment word counter
marcbax 0:c643d398cdb6 98 if (ch == 10) {
marcbax 0:c643d398cdb6 99 if ((wordlength > 7) && (wordlength < 15)) {
marcbax 0:c643d398cdb6 100 wordcount = wordcount + 1;
marcbax 0:c643d398cdb6 101 }
marcbax 0:c643d398cdb6 102 wordlength = 0;
marcbax 0:c643d398cdb6 103 }
marcbax 0:c643d398cdb6 104 else {
marcbax 0:c643d398cdb6 105 // if the character is not an LF, increment character count
marcbax 0:c643d398cdb6 106 wordlength = wordlength + 1;
marcbax 0:c643d398cdb6 107 }
marcbax 0:c643d398cdb6 108 }
marcbax 0:c643d398cdb6 109 fclose(fp1);
marcbax 0:c643d398cdb6 110 printf("Word count: %u\n", wordcount);
marcbax 0:c643d398cdb6 111 return wordcount;
marcbax 0:c643d398cdb6 112 }
marcbax 0:c643d398cdb6 113
marcbax 0:c643d398cdb6 114 // ReturnWord is used to pick an indexed word from the hangdict.txt file
marcbax 0:c643d398cdb6 115 int ReturnWord(int wordindex, char* word2guess)
marcbax 0:c643d398cdb6 116 {
marcbax 0:c643d398cdb6 117 FILE *fp1 = fopen("/sd/hangdict.txt", "r");
marcbax 0:c643d398cdb6 118 printf("Returning word %u: ", wordindex);
marcbax 0:c643d398cdb6 119 for (int i = 0; i < wordindex; i++) {
marcbax 0:c643d398cdb6 120 fgets(word2guess, 24, fp1);
marcbax 0:c643d398cdb6 121 while ((strlen(word2guess) < 6) || (strlen(word2guess) > 12)) {
marcbax 0:c643d398cdb6 122 fgets(word2guess, 24, fp1);
marcbax 0:c643d398cdb6 123 }
marcbax 0:c643d398cdb6 124 }
marcbax 0:c643d398cdb6 125 printf("%s", word2guess);
marcbax 0:c643d398cdb6 126 fclose(fp1);
marcbax 0:c643d398cdb6 127 return (strlen(word2guess)-2);
marcbax 0:c643d398cdb6 128 }
marcbax 0:c643d398cdb6 129 */
marcbax 0:c643d398cdb6 130
marcbax 0:c643d398cdb6 131 int main()
marcbax 0:c643d398cdb6 132 {
marcbax 0:c643d398cdb6 133 HAL::Initialise();
marcbax 0:c643d398cdb6 134 srand(time(NULL));
marcbax 0:c643d398cdb6 135 Flexbook::PageFactory factory; // Page creator
marcbax 0:c643d398cdb6 136 Flexbook::Book book(factory); // Page container
marcbax 0:c643d398cdb6 137 Flexbook::BookMonitor monitor(book); // Page turn monitor
marcbax 0:c643d398cdb6 138
marcbax 0:c643d398cdb6 139 //This section to test individual pages:
marcbax 0:c643d398cdb6 140 //book.PageChange(Flexbook::PageType_PageFlexEnable);
marcbax 0:c643d398cdb6 141 //book.PageChange(Flexbook::PageType_PageSensor);
marcbax 0:c643d398cdb6 142 //book.PageChange(Flexbook::PageType_PageTouch);
marcbax 0:c643d398cdb6 143 //etc...
marcbax 0:c643d398cdb6 144
marcbax 0:c643d398cdb6 145 //DisplayHardwareSettings();
marcbax 0:c643d398cdb6 146
marcbax 0:c643d398cdb6 147 //Log("White screen in main");
marcbax 0:c643d398cdb6 148 //WriteColour(Get_epdc(), 0xff);//PL_WHITE);
marcbax 0:c643d398cdb6 149
marcbax 0:c643d398cdb6 150 /*
marcbax 0:c643d398cdb6 151 wait(4);
marcbax 0:c643d398cdb6 152 Log("Write partial image in main");
marcbax 0:c643d398cdb6 153 WritePartImage("/myfile.pgm", 60, 30, 60, 30, 100, 100);
marcbax 0:c643d398cdb6 154
marcbax 0:c643d398cdb6 155 wait(4);
marcbax 0:c643d398cdb6 156 Log("Update display in main");
marcbax 0:c643d398cdb6 157 UpdateDisplay();
marcbax 0:c643d398cdb6 158
marcbax 0:c643d398cdb6 159 Log("Write partial image 2");
marcbax 0:c643d398cdb6 160 WritePartImage("/myfile.pgm", 160, 100, 160, 100, 50, 200);
marcbax 0:c643d398cdb6 161
marcbax 0:c643d398cdb6 162 wait(4);
marcbax 0:c643d398cdb6 163 UpdateDisplay();
marcbax 0:c643d398cdb6 164 book.PageChange(Flexbook::PageType_PageTouch);
marcbax 0:c643d398cdb6 165 */
marcbax 0:c643d398cdb6 166
marcbax 0:c643d398cdb6 167 Log("starting main loop");
marcbax 0:c643d398cdb6 168 while(true) // Main loop
marcbax 0:c643d398cdb6 169 {
marcbax 0:c643d398cdb6 170 monitor.CheckForPageChange(); // Creates/destructs pages based on sensor touches
marcbax 0:c643d398cdb6 171 // In this version only PageSensor or PageTouch can be active
marcbax 0:c643d398cdb6 172 // Other pages are created as dependents
marcbax 0:c643d398cdb6 173 book.HandleActions(); // Performs actions for the currently active page
marcbax 0:c643d398cdb6 174 }
marcbax 0:c643d398cdb6 175 }