Download NHK English news podcast automatically. This application requires mpod mother board. See also http://mbed.org/users/geodenx/notebook/mpod/

Dependencies:   BlinkLed HTTPClient EthernetInterface FatFileSystemCpp MSCFileSystem mbed-rtos mbed

Download NHK English news podcast automatically. This application requires mpod mother board. See also http://mbed.org/users/geodenx/notebook/mpod/

Revision:
3:07562878d3c3
Parent:
2:0da3a4508b46
Child:
4:ab3092d15121
--- a/main.cpp	Sat Aug 18 16:46:40 2012 +0000
+++ b/main.cpp	Sun Aug 19 15:57:55 2012 +0000
@@ -5,12 +5,7 @@
 #include "HTTPFile.h"
 #include "BlinkLed.h"
 #include "tinyxml2.h"
-#include <string>
-#include <iostream>
 
-using std::string;
-using std::cout;
-using std::endl;
 using namespace tinyxml2;
 
 int GetFile(const char *path, const char *url);
@@ -18,8 +13,10 @@
 EthernetInterface eth;
 HTTPClient http;
 MSCFileSystem usb("usb");
-BlinkLed led1(LED1, 6);
-BlinkLed led2(LED2, 1);
+BlinkLed led1(LED1, 0.02);
+BlinkLed led2(LED2, 0.2);
+BlinkLed ethGreen(p26, 0.02);
+BlinkLed ethYellow(p25, 0.2);
 DigitalOut fsusb30s(p9);
 Timer timer;
 
@@ -43,35 +40,35 @@
     eth.connect();
     
     // Obtain original lastBuildDate
-    string lastBuildDateOriginal;
+    char lastBuildDateOriginal[128] = {0};
     {
         XMLDocument docOriginal;
         if(XML_SUCCESS != docOriginal.LoadFile(rssPath))
         {
-            lastBuildDateOriginal = "No original english.xml in USB memory";
+            strcpy(lastBuildDateOriginal, "No original english.xml in USB memory");
         }
         else
         {
             XMLElement* lastBuildDateOriginalElement = docOriginal.FirstChildElement("rss")->FirstChildElement("channel")->FirstChildElement("lastBuildDate");
             if(NULL == lastBuildDateOriginalElement)
             {
-                lastBuildDateOriginal = "No \"lastBuildDate\" element in original RSS";
+                strcpy(lastBuildDateOriginal, "No \"lastBuildDate\" element in original RSS");
             }
             else
             {
-                lastBuildDateOriginal = lastBuildDateOriginalElement->GetText();
+                strcpy(lastBuildDateOriginal, lastBuildDateOriginalElement->GetText());
             }
         }
     }
-    cout << endl << "lastBuildDate (original): " << lastBuildDateOriginal << endl;
+    printf("\nlastBuildDate (original): %s\n", lastBuildDateOriginal);
     
     // Download RSS
     GetFile(rssPath, rssUrl);
     
     // Obtain current lastBuildDate 
-    string lastBuildDateCurrent;
-    string mp3Url;
-    string mp3Length;
+    char lastBuildDateCurrent[128] = {0};
+    char mp3Url[256] = {0};
+    char mp3Length[32] = {0};
     {
         XMLDocument docCurrent;
         if(XML_SUCCESS != docCurrent.LoadFile(rssPath))
@@ -86,7 +83,7 @@
             fsusb30s = 1; // HSD2
             error("No \"lastBuildDate\" element in current RSS.\n");
         }
-        lastBuildDateCurrent = lastBuildDateCurrentElement->GetText();
+        strcpy(lastBuildDateCurrent, lastBuildDateCurrentElement->GetText());
         
         XMLElement* enclosureElement = docCurrent.FirstChildElement("rss")->FirstChildElement("channel")->FirstChildElement("item")->FirstChildElement("enclosure");
         if(NULL == enclosureElement)
@@ -94,54 +91,55 @@
             fsusb30s = 1; // HSD2
             error("No \"enclosure\" element in current RSS.\n");
         }
-        mp3Url = enclosureElement->Attribute( "url" );
-        mp3Length = enclosureElement->Attribute( "length" );
+        strcpy(mp3Url, enclosureElement->Attribute("url"));
+        strcpy(mp3Length, enclosureElement->Attribute("length"));
     }
-    cout << endl << "lastBuildDate (current) : " << lastBuildDateCurrent << endl;
+    printf("\nlastBuildDate (current) : %s\n", lastBuildDateCurrent);
     
     // Determine the necessity of downloading new MP3.
     bool flgDownloadMp3 = false;
-    if (lastBuildDateOriginal == lastBuildDateCurrent)
+    if ( strcmp(lastBuildDateOriginal, lastBuildDateCurrent) == 0 )
     {
-        cout << "lastBuildDate (original) == lastBuildDate (current)" << endl;
+        printf("lastBuildDate (original) == lastBuildDate (current)\n");
         FILE* mp3fp = fopen(mp3Path, "r"); // check an existance of english.mp3
         if (mp3fp != NULL)
         {
             fseek(mp3fp, 0, SEEK_END); // seek to end of file
-            if (ftell(mp3fp) != atol(mp3Length.c_str()))
+            if (ftell(mp3fp) != atol(mp3Length))
             {
-                cout << "MP3 file size is invalid." << endl;
+                printf("MP3 file size is invalid.\n");
                 flgDownloadMp3 = true;
             }
             fclose(mp3fp);
         }
         else
         {
-            cout << "However, no enlish.mp3 in USB memory" << endl;
+            printf("However, no enlish.mp3 in USB memory\n");
             flgDownloadMp3 = true;
         }
     }
     else
     {
-        cout << "lastBuildDate (original) != lastBuildDate (current)" << endl;
+        printf("lastBuildDate (original) != lastBuildDate (current)\n");
         flgDownloadMp3 = true;
     }
     
     // Download new MP3
     if(flgDownloadMp3 == true)
     {
-        GetFile(mp3Path, mp3Url.c_str());
+        GetFile(mp3Path, mp3Url);
     }
     
     // Wait for the completion of writing to USB Mass Storage Device.
     wait(1);
     
     // FSUSB30 switches to HSD2 (External Device)
-    cout << endl << "USB host was switched to HSD2(External Device)." << endl;
+    printf("\nUSB host was switched to HSD2(External Device).\n");
     fsusb30s = 1; // HSD2
 
     // blink LED
     led1.startBlink();
+    ethGreen.startBlink();
     
     while(true){}
 }
@@ -149,7 +147,8 @@
 int GetFile(const char *path, const char *url)
 {
     led2.startBlink();
-    cout << endl << "Getting " << url << endl;
+    ethYellow.startBlink();
+    printf("\nGetting %s\n", url);
     
     timer.stop();
     timer.reset();
@@ -159,16 +158,15 @@
     HTTPResult retGet = http.get(url, &file);
     if (retGet != HTTP_OK)
     {
-        // FSUSB30 switches to HSD2 (External Device)
-        cout << "USB host was switched to HSD2(External Device)." << endl;
         fsusb30s = 1; // HSD2
         error("Error in http.get in GetFile(): %d\n", retGet);
     }
     file.clear();
     
     timer.stop();
-    cout << "timer.read_ms(): " << timer.read_ms() << endl;
+    printf("timer.read_ms(): %d\n", timer.read_ms());
     
     led2.finishBlink();
+    ethYellow.finishBlink();
     return (0);
 }