For MAX323630FTHR: Plays a WAV file in the SD card. Interfaced through serial port using puTTY or powershell.

Dependencies:   USBMSD_BD SDFileSystem max32630fthr USBDevice

Committer:
Lugs
Date:
Sat Nov 09 01:33:17 2019 +0000
Revision:
3:2ddba0146fd8
Removed demoboard library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Lugs 3:2ddba0146fd8 1 #include "generalinterface.h"
Lugs 3:2ddba0146fd8 2
Lugs 3:2ddba0146fd8 3 Serial daplink(P2_1,P2_0);
Lugs 3:2ddba0146fd8 4 USBSerial microUSB;
Lugs 3:2ddba0146fd8 5 SDBlockDevice bd(P0_5, P0_6, P0_4, P0_7);
Lugs 3:2ddba0146fd8 6 FATFileSystem fs("fs");
Lugs 3:2ddba0146fd8 7 USBMSD_BD msd(&bd);
Lugs 3:2ddba0146fd8 8
Lugs 3:2ddba0146fd8 9 void clearSerialStream()
Lugs 3:2ddba0146fd8 10 {
Lugs 3:2ddba0146fd8 11 char c;
Lugs 3:2ddba0146fd8 12 while(daplink.readable()) {
Lugs 3:2ddba0146fd8 13 c = daplink.getc();
Lugs 3:2ddba0146fd8 14 wait_ms(1);
Lugs 3:2ddba0146fd8 15 }
Lugs 3:2ddba0146fd8 16 }
Lugs 3:2ddba0146fd8 17
Lugs 3:2ddba0146fd8 18 bool getInput(int maxSize,char *inputArray)
Lugs 3:2ddba0146fd8 19 {
Lugs 3:2ddba0146fd8 20 int i;
Lugs 3:2ddba0146fd8 21 char c;
Lugs 3:2ddba0146fd8 22 clearSerialStream();
Lugs 3:2ddba0146fd8 23 for(i=0; i<maxSize && c!='\r'; i++) {
Lugs 3:2ddba0146fd8 24 c = daplink.getc();
Lugs 3:2ddba0146fd8 25 daplink.putc(c);
Lugs 3:2ddba0146fd8 26 inputArray[i] = c;
Lugs 3:2ddba0146fd8 27 }
Lugs 3:2ddba0146fd8 28 if(i == maxSize) {
Lugs 3:2ddba0146fd8 29 return 0;
Lugs 3:2ddba0146fd8 30 } else {
Lugs 3:2ddba0146fd8 31 return 1;
Lugs 3:2ddba0146fd8 32 }
Lugs 3:2ddba0146fd8 33 }
Lugs 3:2ddba0146fd8 34
Lugs 3:2ddba0146fd8 35 void startFileSystem()
Lugs 3:2ddba0146fd8 36 {
Lugs 3:2ddba0146fd8 37 printf("\f---STARTING FILESYSTEM...---\r\n");
Lugs 3:2ddba0146fd8 38
Lugs 3:2ddba0146fd8 39 Thread::wait(100);
Lugs 3:2ddba0146fd8 40
Lugs 3:2ddba0146fd8 41 // Try to mount the filesystem
Lugs 3:2ddba0146fd8 42 printf("Mounting the filesystem... ");
Lugs 3:2ddba0146fd8 43 fflush(stdout);
Lugs 3:2ddba0146fd8 44 int err = fs.mount(&bd);
Lugs 3:2ddba0146fd8 45 printf("%s\r\n", (err ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 46 if (err) {
Lugs 3:2ddba0146fd8 47 // Reformat if we can't mount the filesystem
Lugs 3:2ddba0146fd8 48 // this should only happen on the first boot
Lugs 3:2ddba0146fd8 49 printf("No filesystem found, formatting... ");
Lugs 3:2ddba0146fd8 50 fflush(stdout);
Lugs 3:2ddba0146fd8 51 err = fs.reformat(&bd);
Lugs 3:2ddba0146fd8 52 printf("%s\r\n", (err ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 53 }
Lugs 3:2ddba0146fd8 54
Lugs 3:2ddba0146fd8 55 // Open the numbers file
Lugs 3:2ddba0146fd8 56 printf("Opening \"/fs/numbers.txt\"... ");
Lugs 3:2ddba0146fd8 57 fflush(stdout);
Lugs 3:2ddba0146fd8 58 FILE *f = fopen("/fs/numbers.txt", "r+");
Lugs 3:2ddba0146fd8 59 printf("%s\r\n", (!f ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 60 if (!f) {
Lugs 3:2ddba0146fd8 61 // Create the numbers file if it doesn't exist
Lugs 3:2ddba0146fd8 62 printf("No file found, creating a new file... ");
Lugs 3:2ddba0146fd8 63 fflush(stdout);
Lugs 3:2ddba0146fd8 64 f = fopen("/fs/numbers.txt", "w+");
Lugs 3:2ddba0146fd8 65 printf("%s\r\n", (!f ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 66
Lugs 3:2ddba0146fd8 67 for (int i = 0; i < 10; i++) {
Lugs 3:2ddba0146fd8 68 printf("\rWriting numbers (%d/%d)... ", i, 10);
Lugs 3:2ddba0146fd8 69 fflush(stdout);
Lugs 3:2ddba0146fd8 70 err = fprintf(f, " %d\r\n", i);
Lugs 3:2ddba0146fd8 71 if (err < 0) {
Lugs 3:2ddba0146fd8 72 printf("Fail :(\r\n");
Lugs 3:2ddba0146fd8 73 }
Lugs 3:2ddba0146fd8 74 }
Lugs 3:2ddba0146fd8 75 printf("\rWriting numbers (%d/%d)... OK\r\n", 10, 10);
Lugs 3:2ddba0146fd8 76
Lugs 3:2ddba0146fd8 77 printf("Seeking file... ");
Lugs 3:2ddba0146fd8 78 fflush(stdout);
Lugs 3:2ddba0146fd8 79 err = fseek(f, 0, SEEK_SET);
Lugs 3:2ddba0146fd8 80 printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 81 }
Lugs 3:2ddba0146fd8 82
Lugs 3:2ddba0146fd8 83 // Go through and increment the numbers
Lugs 3:2ddba0146fd8 84 for (int i = 0; i < 10; i++) {
Lugs 3:2ddba0146fd8 85 printf("\rIncrementing numbers (%d/%d)... ", i, 10);
Lugs 3:2ddba0146fd8 86 fflush(stdout);
Lugs 3:2ddba0146fd8 87
Lugs 3:2ddba0146fd8 88 // Get current stream position
Lugs 3:2ddba0146fd8 89 long pos = ftell(f);
Lugs 3:2ddba0146fd8 90
Lugs 3:2ddba0146fd8 91 // Parse out the number and increment
Lugs 3:2ddba0146fd8 92 int32_t number;
Lugs 3:2ddba0146fd8 93 fscanf(f, "%d", &number);
Lugs 3:2ddba0146fd8 94 number += 1;
Lugs 3:2ddba0146fd8 95
Lugs 3:2ddba0146fd8 96 // Seek to beginning of number
Lugs 3:2ddba0146fd8 97 fseek(f, pos, SEEK_SET);
Lugs 3:2ddba0146fd8 98
Lugs 3:2ddba0146fd8 99 // Store number
Lugs 3:2ddba0146fd8 100 fprintf(f, " %d\r\n", number);
Lugs 3:2ddba0146fd8 101 }
Lugs 3:2ddba0146fd8 102 printf("\rIncrementing numbers (%d/%d)... OK\r\n", 10, 10);
Lugs 3:2ddba0146fd8 103
Lugs 3:2ddba0146fd8 104 // Close the file which also flushes any cached writes
Lugs 3:2ddba0146fd8 105 printf("Closing \"/fs/numbers.txt\"... ");
Lugs 3:2ddba0146fd8 106 fflush(stdout);
Lugs 3:2ddba0146fd8 107 err = fclose(f);
Lugs 3:2ddba0146fd8 108 printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 109
Lugs 3:2ddba0146fd8 110 // Display the root directory
Lugs 3:2ddba0146fd8 111 printf("Opening the root directory... ");
Lugs 3:2ddba0146fd8 112 fflush(stdout);
Lugs 3:2ddba0146fd8 113 DIR *d = opendir("/fs/");
Lugs 3:2ddba0146fd8 114 printf("%s\r\n", (!d ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 115
Lugs 3:2ddba0146fd8 116 printf("root directory:\r\n");
Lugs 3:2ddba0146fd8 117 while (true) {
Lugs 3:2ddba0146fd8 118 struct dirent *e = readdir(d);
Lugs 3:2ddba0146fd8 119 if (!e) {
Lugs 3:2ddba0146fd8 120 break;
Lugs 3:2ddba0146fd8 121 }
Lugs 3:2ddba0146fd8 122 printf(" %s\r\n", e->d_name);
Lugs 3:2ddba0146fd8 123 }
Lugs 3:2ddba0146fd8 124
Lugs 3:2ddba0146fd8 125 printf("Closing the root directory... ");
Lugs 3:2ddba0146fd8 126 fflush(stdout);
Lugs 3:2ddba0146fd8 127 err = closedir(d);
Lugs 3:2ddba0146fd8 128 printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 129
Lugs 3:2ddba0146fd8 130 // Display the numbers file
Lugs 3:2ddba0146fd8 131 printf("Opening \"/fs/numbers.txt\"... ");
Lugs 3:2ddba0146fd8 132 fflush(stdout);
Lugs 3:2ddba0146fd8 133 f = fopen("/fs/numbers.txt", "r");
Lugs 3:2ddba0146fd8 134 printf("%s\r\n", (!f ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 135
Lugs 3:2ddba0146fd8 136 printf("numbers:\r\n");
Lugs 3:2ddba0146fd8 137 while (!feof(f)) {
Lugs 3:2ddba0146fd8 138 int c = fgetc(f);
Lugs 3:2ddba0146fd8 139 printf("%c", c);
Lugs 3:2ddba0146fd8 140 }
Lugs 3:2ddba0146fd8 141
Lugs 3:2ddba0146fd8 142 printf("\rClosing \"/fs/numbers.txt\"... ");
Lugs 3:2ddba0146fd8 143 fflush(stdout);
Lugs 3:2ddba0146fd8 144 err = fclose(f);
Lugs 3:2ddba0146fd8 145 printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 146
Lugs 3:2ddba0146fd8 147
Lugs 3:2ddba0146fd8 148
Lugs 3:2ddba0146fd8 149
Lugs 3:2ddba0146fd8 150 // Switch to MSD
Lugs 3:2ddba0146fd8 151 // printf("Unmounting... ");
Lugs 3:2ddba0146fd8 152 // fflush(stdout);
Lugs 3:2ddba0146fd8 153 // err = fs.unmount();
Lugs 3:2ddba0146fd8 154 // printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 155
Lugs 3:2ddba0146fd8 156
Lugs 3:2ddba0146fd8 157 printf("Starting MSD... ");
Lugs 3:2ddba0146fd8 158 msd.disk_initialize();
Lugs 3:2ddba0146fd8 159 err = msd.connect();
Lugs 3:2ddba0146fd8 160 printf("%s\r\n", (err < 0 ? "Fail :(" : "OK"));
Lugs 3:2ddba0146fd8 161 }