Frank Weissenborn / ShoutCastConnector
Committer:
FrankWeissenborn
Date:
Wed Jan 12 13:18:21 2011 +0000
Revision:
2:9abcdc65c5b5
Parent:
1:25ceaa587f6b
Child:
3:87023c28aff5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FrankWeissenborn 1:25ceaa587f6b 1 #include "ShoutcastConnector.h"
FrankWeissenborn 1:25ceaa587f6b 2
FrankWeissenborn 1:25ceaa587f6b 3
FrankWeissenborn 1:25ceaa587f6b 4 enum wSTATE {NOP,PUT_HEADER} WriteState;
FrankWeissenborn 1:25ceaa587f6b 5 enum rSTATE {GET_RESPONSE,GET_STREAM} ReadState;
FrankWeissenborn 1:25ceaa587f6b 6
FrankWeissenborn 1:25ceaa587f6b 7
FrankWeissenborn 1:25ceaa587f6b 8 char inbuf[BUFFER_Z]; // IP input buffer
FrankWeissenborn 1:25ceaa587f6b 9 char sResponse[800]; // keeps Stream Response
FrankWeissenborn 1:25ceaa587f6b 10 bool play;
FrankWeissenborn 1:25ceaa587f6b 11
FrankWeissenborn 1:25ceaa587f6b 12
FrankWeissenborn 1:25ceaa587f6b 13
FrankWeissenborn 1:25ceaa587f6b 14 void statisticsOutput();
FrankWeissenborn 1:25ceaa587f6b 15
FrankWeissenborn 1:25ceaa587f6b 16 int kb = 0;
FrankWeissenborn 1:25ceaa587f6b 17 int readed = 0;int size = 0;
FrankWeissenborn 1:25ceaa587f6b 18 int metaint=0; // metadate interval
FrankWeissenborn 1:25ceaa587f6b 19
FrankWeissenborn 1:25ceaa587f6b 20
FrankWeissenborn 1:25ceaa587f6b 21
FrankWeissenborn 1:25ceaa587f6b 22
FrankWeissenborn 1:25ceaa587f6b 23 ShoutcastConnector::ShoutcastConnector(VS1053* mp3, myCallBack_pfn callback)
FrankWeissenborn 1:25ceaa587f6b 24 {
FrankWeissenborn 1:25ceaa587f6b 25 _mp3 = mp3;
FrankWeissenborn 1:25ceaa587f6b 26 _callback = callback;
FrankWeissenborn 1:25ceaa587f6b 27
FrankWeissenborn 1:25ceaa587f6b 28 }
FrankWeissenborn 1:25ceaa587f6b 29
FrankWeissenborn 1:25ceaa587f6b 30 int ShoutcastConnector::Connect(IpAddr address, int port)
FrankWeissenborn 1:25ceaa587f6b 31 {
FrankWeissenborn 1:25ceaa587f6b 32 ReadState=GET_RESPONSE;
FrankWeissenborn 1:25ceaa587f6b 33 WriteState=PUT_HEADER;
FrankWeissenborn 1:25ceaa587f6b 34
FrankWeissenborn 1:25ceaa587f6b 35 kb = 0;
FrankWeissenborn 1:25ceaa587f6b 36 readed = 0;
FrankWeissenborn 1:25ceaa587f6b 37 size = 0;
FrankWeissenborn 1:25ceaa587f6b 38 metaint=0; // metadate interval
FrankWeissenborn 1:25ceaa587f6b 39 play=false;
FrankWeissenborn 1:25ceaa587f6b 40
FrankWeissenborn 1:25ceaa587f6b 41 Host server(address, port); // 128k mp3
FrankWeissenborn 1:25ceaa587f6b 42 IpAddr serverIp = server.getIp();
FrankWeissenborn 1:25ceaa587f6b 43
FrankWeissenborn 1:25ceaa587f6b 44 printf("Connecting... %d.%d.%d.%d:%d\r\n",
FrankWeissenborn 1:25ceaa587f6b 45 serverIp[0],serverIp[1],serverIp[2],serverIp[3],port);
FrankWeissenborn 1:25ceaa587f6b 46
FrankWeissenborn 1:25ceaa587f6b 47
FrankWeissenborn 1:25ceaa587f6b 48 sock.setOnEvent(this, &ShoutcastConnector::onTCPSocketEvent);
FrankWeissenborn 1:25ceaa587f6b 49 TCPSocketErr bindErr = sock.connect(server);
FrankWeissenborn 1:25ceaa587f6b 50
FrankWeissenborn 1:25ceaa587f6b 51 if (TCPSOCKET_OK != bindErr) {
FrankWeissenborn 1:25ceaa587f6b 52 printf("Error %d in sock.connect().\r\n", bindErr);
FrankWeissenborn 1:25ceaa587f6b 53 return -1;
FrankWeissenborn 1:25ceaa587f6b 54 }
FrankWeissenborn 1:25ceaa587f6b 55 return 0;
FrankWeissenborn 1:25ceaa587f6b 56 }
FrankWeissenborn 1:25ceaa587f6b 57
FrankWeissenborn 1:25ceaa587f6b 58 int ShoutcastConnector::Disconnect()
FrankWeissenborn 1:25ceaa587f6b 59 {
FrankWeissenborn 1:25ceaa587f6b 60 TCPSocketErr err = sock.close();
FrankWeissenborn 1:25ceaa587f6b 61
FrankWeissenborn 1:25ceaa587f6b 62 if (TCPSOCKET_OK != err) {
FrankWeissenborn 1:25ceaa587f6b 63 printf("Error %d in ShoutcastConnector: Disconnect().\r\n", err);
FrankWeissenborn 1:25ceaa587f6b 64 return -1;
FrankWeissenborn 1:25ceaa587f6b 65 }
FrankWeissenborn 1:25ceaa587f6b 66 else {
FrankWeissenborn 1:25ceaa587f6b 67 printf("ShoutcastConnector disconnected");
FrankWeissenborn 1:25ceaa587f6b 68 }
FrankWeissenborn 1:25ceaa587f6b 69 return 0;
FrankWeissenborn 1:25ceaa587f6b 70 }
FrankWeissenborn 1:25ceaa587f6b 71
FrankWeissenborn 1:25ceaa587f6b 72 void ShoutcastConnector::onTCPSocketEvent(TCPSocketEvent e) {
FrankWeissenborn 1:25ceaa587f6b 73 switch (e) {
FrankWeissenborn 1:25ceaa587f6b 74 case TCPSOCKET_CONNECTED:
FrankWeissenborn 1:25ceaa587f6b 75 // DEBUGOUT("TCP Socket Connected\r\n"); // this printf disturb socket work correctly
FrankWeissenborn 1:25ceaa587f6b 76 Writeable();
FrankWeissenborn 1:25ceaa587f6b 77 break; // we must comment out ?
FrankWeissenborn 1:25ceaa587f6b 78 case TCPSOCKET_WRITEABLE:
FrankWeissenborn 1:25ceaa587f6b 79 // DEBUGOUT("TCP Socket Writeable\r\n");
FrankWeissenborn 1:25ceaa587f6b 80 break;
FrankWeissenborn 1:25ceaa587f6b 81 case TCPSOCKET_READABLE:
FrankWeissenborn 1:25ceaa587f6b 82 //Can now read some data...
FrankWeissenborn 1:25ceaa587f6b 83 // DEBUGOUT("TCP Socket Readable\r\n");
FrankWeissenborn 1:25ceaa587f6b 84 Readable();
FrankWeissenborn 1:25ceaa587f6b 85 break;//
FrankWeissenborn 1:25ceaa587f6b 86 case TCPSOCKET_CONTIMEOUT:
FrankWeissenborn 1:25ceaa587f6b 87 DEBUGOUT("TCP Socket Timeout\r\n");
FrankWeissenborn 1:25ceaa587f6b 88 break;
FrankWeissenborn 1:25ceaa587f6b 89 case TCPSOCKET_CONRST:
FrankWeissenborn 1:25ceaa587f6b 90 DEBUGOUT("TCP Socket CONRST\r\n");
FrankWeissenborn 1:25ceaa587f6b 91 break;
FrankWeissenborn 1:25ceaa587f6b 92 case TCPSOCKET_CONABRT:
FrankWeissenborn 1:25ceaa587f6b 93 DEBUGOUT("TCP Socket CONABRT\r\n");
FrankWeissenborn 1:25ceaa587f6b 94 DEBUGOUT("Maybe Server Down...\r\n");
FrankWeissenborn 1:25ceaa587f6b 95 break;
FrankWeissenborn 1:25ceaa587f6b 96 case TCPSOCKET_ERROR:
FrankWeissenborn 1:25ceaa587f6b 97 DEBUGOUT("TCP Socket Error\r\n");
FrankWeissenborn 1:25ceaa587f6b 98 break;
FrankWeissenborn 1:25ceaa587f6b 99 case TCPSOCKET_DISCONNECTED:
FrankWeissenborn 1:25ceaa587f6b 100 //Close socket...
FrankWeissenborn 1:25ceaa587f6b 101 DEBUGOUT("ShoutcastConnector Disconnected\r\n");
FrankWeissenborn 1:25ceaa587f6b 102 sock.close();
FrankWeissenborn 1:25ceaa587f6b 103 break;
FrankWeissenborn 1:25ceaa587f6b 104 }// switch(e)
FrankWeissenborn 1:25ceaa587f6b 105 }
FrankWeissenborn 1:25ceaa587f6b 106
FrankWeissenborn 1:25ceaa587f6b 107 void ShoutcastConnector::Writeable() {
FrankWeissenborn 1:25ceaa587f6b 108 //Can now write some data...
FrankWeissenborn 1:25ceaa587f6b 109 // printf("TCP Socket Writable\r\n"); // debug
FrankWeissenborn 1:25ceaa587f6b 110 switch (WriteState) {
FrankWeissenborn 1:25ceaa587f6b 111 case PUT_HEADER:
FrankWeissenborn 1:25ceaa587f6b 112 const char* str =
FrankWeissenborn 1:25ceaa587f6b 113 // "GET /live HTTP/1.0\r\n" // use this if solopiano
FrankWeissenborn 1:25ceaa587f6b 114 "GET / HTTP/1.0\r\n"
FrankWeissenborn 1:25ceaa587f6b 115 "Host: gw\r\n"
FrankWeissenborn 1:25ceaa587f6b 116 "Accept: */*\r\n"
FrankWeissenborn 1:25ceaa587f6b 117 "User-Agent: mbed\r\n"
FrankWeissenborn 1:25ceaa587f6b 118 //#ifdef METADATA
FrankWeissenborn 1:25ceaa587f6b 119 "Icy-MetaData: 1\r\n" // send this if you want Metadata
FrankWeissenborn 1:25ceaa587f6b 120 //#endif
FrankWeissenborn 1:25ceaa587f6b 121 // "Connection: close\r\n"
FrankWeissenborn 1:25ceaa587f6b 122 "\r\n"
FrankWeissenborn 1:25ceaa587f6b 123 ;
FrankWeissenborn 1:25ceaa587f6b 124 sock.send(str, strlen(str));
FrankWeissenborn 1:25ceaa587f6b 125 DEBUGOUT("\r\nHEADER:\r\n%s\r\n", str); // display PUT_HEADER
FrankWeissenborn 1:25ceaa587f6b 126 WriteState=NOP;
FrankWeissenborn 1:25ceaa587f6b 127 ReadState=GET_RESPONSE;
FrankWeissenborn 1:25ceaa587f6b 128 break;
FrankWeissenborn 1:25ceaa587f6b 129 case NOP:
FrankWeissenborn 1:25ceaa587f6b 130 break;
FrankWeissenborn 1:25ceaa587f6b 131 } // switch(WriteState)
FrankWeissenborn 1:25ceaa587f6b 132 }
FrankWeissenborn 1:25ceaa587f6b 133
FrankWeissenborn 1:25ceaa587f6b 134
FrankWeissenborn 1:25ceaa587f6b 135 void ShoutcastConnector::Readable() {
FrankWeissenborn 1:25ceaa587f6b 136 int len = 0, i=0;
FrankWeissenborn 1:25ceaa587f6b 137 char* cp;
FrankWeissenborn 1:25ceaa587f6b 138
FrankWeissenborn 1:25ceaa587f6b 139 switch (ReadState) {
FrankWeissenborn 1:25ceaa587f6b 140 case GET_RESPONSE:
FrankWeissenborn 1:25ceaa587f6b 141 len=sock.recv(inbuf, sizeof inbuf);
FrankWeissenborn 1:25ceaa587f6b 142 cp=strstr(inbuf,"\r\n\r\n");
FrankWeissenborn 1:25ceaa587f6b 143 if (cp==NULL) {
FrankWeissenborn 1:25ceaa587f6b 144 inbuf[len]=0;
FrankWeissenborn 1:25ceaa587f6b 145 DEBUGOUT("%s",inbuf); // debug
FrankWeissenborn 1:25ceaa587f6b 146 //sprintf(sResponse,"%s",inbuf);
FrankWeissenborn 1:25ceaa587f6b 147 return; // still read response again
FrankWeissenborn 1:25ceaa587f6b 148 }
FrankWeissenborn 1:25ceaa587f6b 149 //
FrankWeissenborn 1:25ceaa587f6b 150 *cp=0;
FrankWeissenborn 1:25ceaa587f6b 151 sprintf(sResponse+strlen(sResponse),"%s\r\n\r\n",inbuf);
FrankWeissenborn 1:25ceaa587f6b 152 DEBUGOUT("RESPONSE:\r\n%s",sResponse);
FrankWeissenborn 1:25ceaa587f6b 153 // get metaint value
FrankWeissenborn 1:25ceaa587f6b 154 cp=strstr(sResponse,"icy-metaint:");
FrankWeissenborn 1:25ceaa587f6b 155 if (cp==NULL) metaint=0;
FrankWeissenborn 1:25ceaa587f6b 156 else sscanf(cp+strlen("icy-metaint:"),"%d",&metaint);
FrankWeissenborn 1:25ceaa587f6b 157 DEBUGOUT("\r\nmetaint: %d\r\n\r\n",metaint); //debug
FrankWeissenborn 1:25ceaa587f6b 158 //
FrankWeissenborn 1:25ceaa587f6b 159
FrankWeissenborn 1:25ceaa587f6b 160 DEBUGOUT("HeaderLen:%d",len);
FrankWeissenborn 1:25ceaa587f6b 161
FrankWeissenborn 1:25ceaa587f6b 162 i=strlen(inbuf)+4; // bump bitstream right after response
FrankWeissenborn 1:25ceaa587f6b 163 ReadState=GET_STREAM;
FrankWeissenborn 1:25ceaa587f6b 164 //initDec();
FrankWeissenborn 1:25ceaa587f6b 165 //
FrankWeissenborn 1:25ceaa587f6b 166 while (i<len) {
FrankWeissenborn 1:25ceaa587f6b 167 // write one bye
FrankWeissenborn 1:25ceaa587f6b 168 // sbuf.PutByte(inbuf[i]);
FrankWeissenborn 1:25ceaa587f6b 169 i++;
FrankWeissenborn 1:25ceaa587f6b 170 readed++;
FrankWeissenborn 1:25ceaa587f6b 171 };
FrankWeissenborn 1:25ceaa587f6b 172 return;
FrankWeissenborn 1:25ceaa587f6b 173 //
FrankWeissenborn 1:25ceaa587f6b 174 case GET_STREAM:
FrankWeissenborn 1:25ceaa587f6b 175 // receive data ****repeatedly****
FrankWeissenborn 1:25ceaa587f6b 176 while (len=sock.recv(inbuf, sizeof inbuf)) {
FrankWeissenborn 1:25ceaa587f6b 177 //DEBUGOUT("in")
FrankWeissenborn 1:25ceaa587f6b 178 //DEBUGOUT("%d\r\n",len)
FrankWeissenborn 1:25ceaa587f6b 179
FrankWeissenborn 1:25ceaa587f6b 180 kb += len;
FrankWeissenborn 1:25ceaa587f6b 181
FrankWeissenborn 1:25ceaa587f6b 182
FrankWeissenborn 1:25ceaa587f6b 183 if(metaint > 0)
FrankWeissenborn 1:25ceaa587f6b 184 {
FrankWeissenborn 1:25ceaa587f6b 185 if(readed + len > metaint)
FrankWeissenborn 1:25ceaa587f6b 186 {
FrankWeissenborn 1:25ceaa587f6b 187 //XXX
FrankWeissenborn 1:25ceaa587f6b 188 int startindex = metaint-readed;
FrankWeissenborn 1:25ceaa587f6b 189 size = inbuf[startindex];
FrankWeissenborn 1:25ceaa587f6b 190 //DEBUGOUT("MetaData: %d,%d,%d\r\n",metaint,readed,len);
FrankWeissenborn 1:25ceaa587f6b 191 //DEBUGOUT("MetaData: %d\r\n",size);
FrankWeissenborn 1:25ceaa587f6b 192 //Send first part of data
FrankWeissenborn 1:25ceaa587f6b 193 while(_mp3->bufferFree() < startindex)
FrankWeissenborn 1:25ceaa587f6b 194 ; // wait
FrankWeissenborn 1:25ceaa587f6b 195 _mp3->bufferPutStream(inbuf, startindex);
FrankWeissenborn 1:25ceaa587f6b 196
FrankWeissenborn 1:25ceaa587f6b 197 if(size>0)
FrankWeissenborn 1:25ceaa587f6b 198 {
FrankWeissenborn 1:25ceaa587f6b 199 //1.Fall : (metaint-readed)+size <= len
FrankWeissenborn 1:25ceaa587f6b 200 //Text ausgeben
FrankWeissenborn 1:25ceaa587f6b 201 //rest an mp3 codec
FrankWeissenborn 1:25ceaa587f6b 202 if((metaint-readed)+size <= len)
FrankWeissenborn 1:25ceaa587f6b 203 {
FrankWeissenborn 2:9abcdc65c5b5 204 // for(i=0; i<size*16; i++)
FrankWeissenborn 2:9abcdc65c5b5 205 // DEBUGOUT("%c",inbuf[startindex + 1 + i]);
FrankWeissenborn 2:9abcdc65c5b5 206 _callback(&inbuf[startindex + 1], size*16);
FrankWeissenborn 1:25ceaa587f6b 207 //Send last part of data
FrankWeissenborn 1:25ceaa587f6b 208 while(_mp3->bufferFree() < len-(startindex+1+size*16))
FrankWeissenborn 1:25ceaa587f6b 209 ; // wait
FrankWeissenborn 1:25ceaa587f6b 210 readed = len-(startindex+1+size*16);
FrankWeissenborn 1:25ceaa587f6b 211 _mp3->bufferPutStream(&inbuf[startindex+1+size*16], readed);
FrankWeissenborn 1:25ceaa587f6b 212 }
FrankWeissenborn 1:25ceaa587f6b 213 else
FrankWeissenborn 1:25ceaa587f6b 214 {
FrankWeissenborn 1:25ceaa587f6b 215 DEBUGOUT("Muh")
FrankWeissenborn 1:25ceaa587f6b 216 }
FrankWeissenborn 1:25ceaa587f6b 217 }
FrankWeissenborn 1:25ceaa587f6b 218 else
FrankWeissenborn 1:25ceaa587f6b 219 {
FrankWeissenborn 1:25ceaa587f6b 220 // DEBUGOUT("Title hasn't changed since the last metadata message\r\n");
FrankWeissenborn 1:25ceaa587f6b 221 //Send second part of data
FrankWeissenborn 1:25ceaa587f6b 222 //XXX
FrankWeissenborn 1:25ceaa587f6b 223 while(_mp3->bufferFree() < len-(startindex+1))
FrankWeissenborn 1:25ceaa587f6b 224 ; // wait
FrankWeissenborn 1:25ceaa587f6b 225 //XXX
FrankWeissenborn 1:25ceaa587f6b 226 readed = len-(startindex+1);
FrankWeissenborn 1:25ceaa587f6b 227 _mp3->bufferPutStream(&inbuf[startindex+1], len-(startindex+1));
FrankWeissenborn 1:25ceaa587f6b 228
FrankWeissenborn 1:25ceaa587f6b 229 }
FrankWeissenborn 1:25ceaa587f6b 230 }
FrankWeissenborn 1:25ceaa587f6b 231 else
FrankWeissenborn 1:25ceaa587f6b 232 {
FrankWeissenborn 1:25ceaa587f6b 233 readed += len;
FrankWeissenborn 1:25ceaa587f6b 234 while(_mp3->bufferFree() < len)
FrankWeissenborn 1:25ceaa587f6b 235 ; // wait
FrankWeissenborn 1:25ceaa587f6b 236 _mp3->bufferPutStream(inbuf, len);
FrankWeissenborn 1:25ceaa587f6b 237 }
FrankWeissenborn 1:25ceaa587f6b 238 }
FrankWeissenborn 1:25ceaa587f6b 239 else
FrankWeissenborn 1:25ceaa587f6b 240 {
FrankWeissenborn 1:25ceaa587f6b 241 while(_mp3->bufferFree() < len)
FrankWeissenborn 1:25ceaa587f6b 242 ; // wait
FrankWeissenborn 1:25ceaa587f6b 243 _mp3->bufferPutStream(inbuf, len);
FrankWeissenborn 1:25ceaa587f6b 244 }
FrankWeissenborn 1:25ceaa587f6b 245 // save len bytes
FrankWeissenborn 1:25ceaa587f6b 246
FrankWeissenborn 1:25ceaa587f6b 247
FrankWeissenborn 1:25ceaa587f6b 248
FrankWeissenborn 1:25ceaa587f6b 249 if(!play && _mp3->bufferCount() > 0.8 * BUFFER_SIZE){
FrankWeissenborn 1:25ceaa587f6b 250 _mp3->play();
FrankWeissenborn 1:25ceaa587f6b 251 play = true;
FrankWeissenborn 1:25ceaa587f6b 252 statisticsOutput();
FrankWeissenborn 1:25ceaa587f6b 253 }
FrankWeissenborn 1:25ceaa587f6b 254
FrankWeissenborn 1:25ceaa587f6b 255 if(play && _mp3->bufferCount() < 0.1 * BUFFER_SIZE)
FrankWeissenborn 1:25ceaa587f6b 256 {
FrankWeissenborn 1:25ceaa587f6b 257 _mp3->pause();
FrankWeissenborn 1:25ceaa587f6b 258 play = false;
FrankWeissenborn 1:25ceaa587f6b 259 statisticsOutput();
FrankWeissenborn 1:25ceaa587f6b 260 }
FrankWeissenborn 1:25ceaa587f6b 261
FrankWeissenborn 1:25ceaa587f6b 262
FrankWeissenborn 1:25ceaa587f6b 263 } // while (len=sock...)
FrankWeissenborn 1:25ceaa587f6b 264
FrankWeissenborn 1:25ceaa587f6b 265 /*len=sock.recv(inbuf, sizeof inbuf);
FrankWeissenborn 1:25ceaa587f6b 266 while (i<len) {
FrankWeissenborn 1:25ceaa587f6b 267 //sbuf.PutByte(inbuf[i]);i++;
FrankWeissenborn 1:25ceaa587f6b 268 mp3.bufferSetByte(inbuf[i]);
FrankWeissenborn 1:25ceaa587f6b 269 i++;
FrankWeissenborn 1:25ceaa587f6b 270 }
FrankWeissenborn 1:25ceaa587f6b 271 */
FrankWeissenborn 1:25ceaa587f6b 272 //DEBUGOUT("out\r\n");
FrankWeissenborn 1:25ceaa587f6b 273 /* i=0;
FrankWeissenborn 1:25ceaa587f6b 274 while (i<BUFFER_Z) {
FrankWeissenborn 1:25ceaa587f6b 275 // sbuf.PutByte(inbuf[i]);i++;
FrankWeissenborn 1:25ceaa587f6b 276 //DEBUGOUT("%d",inbuf[i]); //debug
FrankWeissenborn 1:25ceaa587f6b 277 while( == false) {
FrankWeissenborn 1:25ceaa587f6b 278 DEBUGOUT("false %d", i);
FrankWeissenborn 1:25ceaa587f6b 279 }
FrankWeissenborn 1:25ceaa587f6b 280 i++;
FrankWeissenborn 1:25ceaa587f6b 281 }//while
FrankWeissenborn 1:25ceaa587f6b 282 */
FrankWeissenborn 1:25ceaa587f6b 283 // if(mp3.bufferPutStream(&inbuf[0], BUFFER_Z) == false) {
FrankWeissenborn 1:25ceaa587f6b 284 // DEBUGOUT("false")
FrankWeissenborn 1:25ceaa587f6b 285 // }
FrankWeissenborn 1:25ceaa587f6b 286
FrankWeissenborn 1:25ceaa587f6b 287
FrankWeissenborn 1:25ceaa587f6b 288
FrankWeissenborn 1:25ceaa587f6b 289 return; // get more strea
FrankWeissenborn 1:25ceaa587f6b 290 //
FrankWeissenborn 1:25ceaa587f6b 291 } // switch (ReadState)
FrankWeissenborn 1:25ceaa587f6b 292 }
FrankWeissenborn 1:25ceaa587f6b 293
FrankWeissenborn 1:25ceaa587f6b 294 void statisticsOutput()
FrankWeissenborn 1:25ceaa587f6b 295 {
FrankWeissenborn 1:25ceaa587f6b 296 printf("Statistics\r\n");
FrankWeissenborn 1:25ceaa587f6b 297 // printf("Buffer - Size: %i, Free: %i, Loaded: %i\r\n", BUFFER_SIZE, _mp3.bufferFree(), mp3.bufferCount());
FrankWeissenborn 1:25ceaa587f6b 298
FrankWeissenborn 1:25ceaa587f6b 299 //mp3.getAudioInfo();
FrankWeissenborn 1:25ceaa587f6b 300 }