MBED implementation of JAudioStream

Revision:
8:65d8e8882907
Parent:
7:9dfba830a0c8
--- a/JAudioStream.cpp	Wed Aug 19 15:38:05 2015 +0000
+++ b/JAudioStream.cpp	Thu Aug 20 07:17:51 2015 +0000
@@ -2,7 +2,10 @@
 #define LOG_LEVEL_INFO
 #include "logger.h"
 
-JAudioStream::JAudioStream() {
+JAudioStream::JAudioStream(OnStream streamCallback, int bufferSize) {
+    this->streamCallback = streamCallback;
+    this->bufferSize = bufferSize;
+    requestCount = bufferSize / MAX_PACKT;
     cont = "cont";
     cond = "cond";
     dcon = "dcon";
@@ -15,7 +18,7 @@
     inTransmission = false;
 }
 
-bool JAudioStream::connect(char* ip, short port, char* name) {
+bool JAudioStream::connect(char* ip, int port, char* name) {
     eth.init();
     eth.connect();
     socket.init();
@@ -97,24 +100,39 @@
     return nowPlaying;
 }
 
-void JAudioStream::receive() {
+int JAudioStream::loop() {
+    int result = 0;
     char resp[MAX_PACKT];
-    //if (!inTransmission) {
-        if (read(resp, MAX_PACKT)) {
-            if (memcmp(resp, cond, 4) == 0) {
-                connected = true;
-            } else if (memcmp(resp, dctd, 4) == 0) {
-                connected = false;
-            } else if (memcmp(resp, hrbt, 4) == 0) {
-                char message[MESSAGE_SIZE];
-                buildMeassge(hrbt, -1, message);
-                send(message, MESSAGE_SIZE);     
-            } else if (memcmp(resp, begn, 4) == 0) {
-                memmove(&nowPlaying[0], &resp[4], 20);
-                inTransmission = true;
-            } else if (memcmp(resp, comt, 4) == 0) {
-                inTransmission = false;
+    if (read(resp, MAX_PACKT)) {
+        if (memcmp(resp, cond, 4) == 0) {
+            connected = true;
+        } else if (memcmp(resp, dctd, 4) == 0) {
+            connected = false;
+            result = 1;
+        } else if (memcmp(resp, hrbt, 4) == 0) {
+            char message[MESSAGE_SIZE];
+            buildMeassge(hrbt, -1, message);
+            send(message, MESSAGE_SIZE);     
+        } else if (memcmp(resp, begn, 4) == 0) {
+            memmove(&nowPlaying[0], &resp[4], 20);
+            inTransmission = true;
+        } else if (memcmp(resp, comt, 4) == 0) {
+            inTransmission = false;
+        } else {
+            char buffer[bufferSize];
+            char i = 0;
+            while (i < requestCount) {
+                stream.request(MAX_PACKT);
+                char buff[MAX_PACKT];
+                if (stream.read(buff, MAX_PACKT)) {
+                    memmove(&buffer[i*MAX_PACKT], &buff[0], MAX_PACKT);
+                    i++;    
+                } else {
+                    WARN("Timed out waiting for response");    
+                }
             }
-        }    
-    //}
+            streamCallback(buffer);
+        }
+        return result;
+    }
 }