Running multiple threads on mbed using RTOS

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player_appbd

Revision:
2:f4ad69c44c7e
Parent:
1:2129bb91c172
Child:
3:7d53a2744a2b
--- a/main.cpp	Sun Feb 28 22:40:13 2016 +0000
+++ b/main.cpp	Sun Feb 28 23:25:52 2016 +0000
@@ -3,12 +3,20 @@
 #include "uLCD_4DGL.h"
 #include "SDFileSystem.h"
 #include "USBHostMSD.h"
+#include "wave_player.h"
 
 SDFileSystem sd(p5, p6, p7, p8, "sd"); 
 Serial pc(USBTX, USBRX);
 Mutex ulcd_mutex;
 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
 DigitalOut myled(LED1);
+//Analog Out Jack
+AnalogOut DACout(p18);
+//On Board Speaker
+PwmOut PWMout(p21);
+wave_player waver(&DACout,&PWMout);
+int playing = 1;
+
 
 void ulcd2_thread(void const *args) {
     int count = 0;
@@ -19,6 +27,10 @@
         uLCD.printf("\nECE 4180 L3: RTOS\n"); //Default Green on black text
         uLCD.printf("\nWes Schon Nick Liu");
         uLCD.printf("\n\nThread 2 count: %d", count);
+        if (playing == 1)
+            uLCD.printf("\n\nPlaying wav file...");
+        else
+            uLCD.printf("\n\nWav file finished.");    
         uLCD.text_width(4); //4X size text
         uLCD.text_height(4);
         Thread::wait(3000);
@@ -26,9 +38,32 @@
         count++;
         }
     }
+void wav_thread(void const *args) {
+    USBHostMSD msd("usb");
+    FILE *wave_file;
+    //setup PWM hardware for a Class D style audio output
+    PWMout.period(1.0/400000.0);
+    //printf("\n\n\nHello, wave world!\n");
+    // wait until connected to a USB device
+    while(!msd.connect()) {
+        Thread::wait(500);
+    }
+    //open wav file and play it
+    wave_file=fopen("/usb/sample.wav","r");
+    waver.play(wave_file);
+    fclose(wave_file);
+    //end of program
+    Thread::wait(500);
+    playing = 0;
+    }
+
+void led_thread(void const *args) {
+    
+    }
 
 int main() {
     Thread thread(ulcd2_thread);
+    Thread thread2(wav_thread);
     int count2 = 0;
     while(1) {
         myled = 1;
@@ -41,6 +76,10 @@
         uLCD.cls();
         uLCD.media_init();
         uLCD.printf("\n\nThread 1 count: %d", count2);
+        if (playing == 1)
+            uLCD.printf("\n\nPlaying wav file...");
+        else
+            uLCD.printf("\n\nWav file finished.");  
         Thread::wait(200);
         uLCD.set_sector_address(0x0000, 0x0000);
         uLCD.display_video(0,0);