Bläddra i källkod

Added content parser for telegram bot. Improved speed of reading from http.

jancoow 9 år sedan
förälder
incheckning
e923ed1c35
4 ändrade filer med 55 tillägg och 4 borttagningar
  1. 43 0
      contentparser.c
  2. 1 0
      contentparser.h
  3. 10 2
      main.c
  4. 1 2
      network.c

+ 43 - 0
contentparser.c

@@ -7,6 +7,8 @@
 #include "jsmn.h"
 #include "rtc.h"
 #include "alarm.h"
+#include "vs10xx.h"
+#include "httpstream.h"
 
 void parseAlarmJson(char* content){
     int r;
@@ -110,6 +112,47 @@ void parseAlarmJson(char* content){
     }
 }
 
+void parseCommandQue(char* content){
+    int r;
+    int i;
+    jsmn_parser p;
+    jsmntok_t token[150]; /* We expect no more than 128 tokens */
+
+    jsmn_init(&p);
+    r = jsmn_parse(&p, content, strlen(content), token, sizeof(token)/sizeof(token[0]));
+    if (r <= 0) {
+        printf("Failed to parse JSON: %d \n", r);
+        return;
+    }else{
+        printf("Aantal tokens found: %d \n", r);
+    }
+
+    for(i = 0; i < r; i++)
+    {
+        if (jsoneq(content, &token[i], "command") == 0) {
+            if(jsoneq(content, &token[i + 1], "volume") == 0){
+                char vol = getIntegerToken(content, &token[i + 3]);
+                printf("%d", vol);
+                vol = 128 - ((vol * 128) / 100);
+                printf("%d", vol);
+                VsSetVolume(vol, vol);
+                i += 3;
+            }else if(jsoneq(content, &token[i + 1], "stopstream") == 0){
+                stopStream();
+                i += 3;
+            }else if(jsoneq(content, &token[i + 1], "startstream") == 0){
+                u_short port = getIntegerToken(content, &token[i + 9]);
+                char url[24];
+                char ip[24];
+                getStringToken(content, &token[i + 7], url);
+                getStringToken(content, &token[i + 5], ip);
+                playStream(ip, port, url);
+                i += 9;
+            }
+        }
+    }
+}
+
 void parsetimezone(char* content)
 {
     int timezone = atoi(content);

+ 1 - 0
contentparser.h

@@ -5,6 +5,7 @@
 #define CONTENTPARSER_H
 
 void parseAlarmJson(char* content);
+void parseCommandQue(char* content);
 void parsetimezone(char* content);
 
 #endif //CONTENTPARSER_H

+ 10 - 2
main.c

@@ -226,12 +226,18 @@ THREAD(AlarmSync, arg)
     {
         if(initialized && (hasNetworkConnection() == true))
         {
+            //Normal alarm sync
             isAlarmSyncing = 1;
             char url[43];
             sprintf(url, "%s%s", "/getAlarmen.php?radiomac=", getMacAdress());
             httpGet(url, parseAlarmJson);
             isAlarmSyncing = 0;
-        }
+
+            //Command que (Telegram) sync
+            sprintf(url, "%s%s", "/getCommands.php?radiomac=", getMacAdress());
+            httpGet(url, parseCommandQue);
+
+}
         NutSleep(3000);
     }
     NutThreadExit();
@@ -352,7 +358,9 @@ int main(void)
 				LcdBackLight(LCD_BACKLIGHT_OFF);
 			}
 		}
-
+        if(KbGetKey() == KEY_01){
+            playStream("62.195.226.247", 80, "/test.mp3");
+        }
         VOL = VOL2;
         if(KbGetKey() == KEY_DOWN)
         {

+ 1 - 2
network.c

@@ -58,7 +58,7 @@ void httpGet(char address[], void (*parser)(char*)){
     TCPSOCKET* sock = NutTcpCreateSocket();
 
     char buffer[2];
-    char* content = (char*) calloc(1 , 800);
+    char* content = (char*) malloc(800);
     char enters = 0;
     int t = 0;
 
@@ -77,7 +77,6 @@ void httpGet(char address[], void (*parser)(char*)){
         fflush(stream);
 
         printf("Headers writed. Now reading.");
-        NutDelay(500);
         //Removing header:
         while(fgets(buffer, sizeof(buffer), stream) != NULL) {
             if(enters == 4) {