Răsfoiți Sursa

Merge branch 'developer' into Twitch

Aareschluchtje 9 ani în urmă
părinte
comite
c7ea9f6d35
12 a modificat fișierele cu 171 adăugiri și 59 ștergeri
  1. 1 3
      .idea/InternetRadio.iml
  2. 16 0
      Twitter.h
  3. 57 14
      alarm.c
  4. 2 0
      alarm.h
  5. 46 8
      contentparser.c
  6. 0 1
      contentparser.h
  7. 4 0
      display.c
  8. 1 0
      display.h
  9. 33 26
      displayHandler.c
  10. 1 3
      displayHandler.h
  11. 1 1
      jsmn.c
  12. 9 3
      main.c

+ 1 - 3
.idea/InternetRadio.iml

@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module type="CPP_MODULE" version="4">
   <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/CMakeLists.txt" isTestSource="false" />
-    </content>
+    <content url="file://$MODULE_DIR$" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module-library">
       <library name="Header Search Paths">

+ 16 - 0
Twitter.h

@@ -0,0 +1,16 @@
+//
+// Created by malek on 30-3-2016.
+//
+
+#ifndef INTERNETRADIO_TWITTER_H
+#define INTERNETRADIO_TWITTER_H
+
+#endif //INTERNETRADIO_TWITTER_H
+
+struct TwitterFeed TweetFeed;
+int Scroller;
+
+struct TwitterFeed{
+
+    char tweet[140];
+};

+ 57 - 14
alarm.c

@@ -32,8 +32,9 @@ int checkAlarms(){
 			alarm[i].state = 0;
 		}else{
 			setState(i);
+			eenmaligAlarmCheck(i);
 		}
-		if (alarm[i].state == 1){
+		if (alarm[i].state == 1 || alarm[i].state == 4){
 			check = 1;
 		}
 	}
@@ -61,7 +62,7 @@ struct _alarm* getAlarm(int idx){
 char getRunningAlarmID(){
 	char idx;
 	for (idx = 0; idx < 5; idx++) {
-		if (getState(idx) == 1) {
+		if (getState(idx) == 1 || getState(idx) == 4) {
 			return idx;
 		}
 	}
@@ -80,9 +81,11 @@ void setSnooze(int idx){
 	struct _tm ct;
 	X12RtcGetClock(&ct);
 	
-	alarm[idx].state = 2;
-	snooze[idx].snoozeTime = ct;
-	snooze[idx].snoozeTime.tm_min += alarm[idx].snooze;
+	if (alarm[idx].state < 3){
+		alarm[idx].state = 2;
+		snooze[idx].snoozeTime = ct;
+		snooze[idx].snoozeTime.tm_min += alarm[idx].snooze;
+	}
 }
 
 int daysInMonth(int m, int y) {
@@ -129,12 +132,13 @@ void setState(int idx){
 	struct _tm ct;
 	X12RtcGetClock(&ct);
 	
-	if (alarm[idx].state == 0){
+	//Set snooze time for snooze alarm
+	if (alarm[idx].state == 0  && alarm[idx].state < 3){
 		snooze[idx].snoozeTime = alarm[idx].time;
 		AddSnoozeMinutes(idx,1);
 	}
 	
-	if (compareTime(ct, alarm[idx].time) >= 1 && alarm[idx].time.tm_year != 0 && alarm[idx].state != 2){
+	if (compareTime(ct, alarm[idx].time) >= 1 && alarm[idx].time.tm_year != 0 && alarm[idx].state != 2 && alarm[idx].state < 3){
 		if(alarm[idx].state != 1) {
 			alarm[idx].state = 1;
 			printf("\n\nAlarm gaat nu af!\n\n");
@@ -145,15 +149,17 @@ void setState(int idx){
 				printf("ConnectToStream failed. Aborting.\n\n");
 			}
 		}
-	} else if (alarm[idx].state != 2){
+	} else if (alarm[idx].state != 2 && alarm[idx].state < 3 ){
 		alarm[idx].state = 0;
 	}
 	
-	if (compareTime(alarm[idx].time,snooze[idx].snoozeTime) >= 1){
+	//Check if alarm has to snooze
+	if (compareTime(alarm[idx].time,snooze[idx].snoozeTime) >= 1 && alarm[idx].state < 3){
 		alarm[idx].state = 2;
 	}
 	
-	if (alarm[idx].state == 1 && compareTime(ct, snooze[idx].snoozeTime) >= 1){
+	//Check if alarm has to snooze
+	if (alarm[idx].state == 1 && compareTime(ct, snooze[idx].snoozeTime) >= 1 && alarm[idx].state < 3){
 		alarm[idx].state = 2;
 		snooze[idx].snoozeTime = ct;
 		AddSnoozeMinutes(idx, alarm[idx].snooze);
@@ -161,7 +167,7 @@ void setState(int idx){
 		killPlayerThread();
 	}
 	
-	if (alarm[idx].state == 2 && compareTime(ct, snooze[idx].snoozeTime) >= 1){
+	if (alarm[idx].state == 2 && compareTime(ct, snooze[idx].snoozeTime) >= 1 && alarm[idx].state < 3){
 		if(alarm[idx].state != 1){
 			printf("Alarm komt nu uit snooze!!");
 			bool success = connectToStream(alarm[idx].ip, alarm[idx].port, alarm[idx].url);
@@ -174,6 +180,7 @@ void setState(int idx){
 		}
 		AddSnoozeMinutes(idx, 1);
 	}
+	
 }
 
 
@@ -191,6 +198,39 @@ void setAlarm(struct _tm time, char* name, char* ip, u_short port, char* url, in
 	alarm[idx].state = 0;
 }
 
+void eenmaligAlarm(struct _tm time, char* name, char* ip, u_short port, char* url, int snooze, int id, int idx){
+	alarm[idx].time = time;
+	
+	strncpy(alarm[idx].name, name, sizeof(alarm[idx].name));
+	strncpy(alarm[idx].ip, ip, sizeof(alarm[idx].ip));
+	alarm[idx].port = port;
+	strncpy(alarm[idx].url, url, sizeof(alarm[idx].url));
+
+	alarm[idx].id = id;
+	alarm[idx].state = 3;
+}
+
+
+//Checks if there is an alarm that has to go off
+void eenmaligAlarmCheck(int idx){
+	struct _tm ct;
+	X12RtcGetClock(&ct);
+	
+	//Check if alarm goes off, compares the RTC time to the alarm time
+	if (compareTime(ct, alarm[idx].time) >= 1 && alarm[idx].time.tm_year != 0 && alarm[idx].state == 3){
+		alarm[idx].state = 4;
+		snooze[idx].snoozeTime = ct;
+		AddSnoozeMinutes(idx,2);
+	}
+	
+	//Delete alarm after 30 minutes, compares the RTC time to the snooze
+	if (compareTime(ct, snooze[idx].snoozeTime) >= 1 && alarm[idx].state == 4){
+		deleteAlarm(idx);
+		LcdBackLight(LCD_BACKLIGHT_OFF);
+		killPlayerThread();
+	}
+}
+
 
 void deleteAlarm(int idx){
 	struct _tm tm;
@@ -203,10 +243,13 @@ void deleteAlarm(int idx){
 }
 
 void handleAlarm(int idx){
-	alarm[idx].state = 0;
-	alarm[idx].time.tm_mday += 1;
+	if (alarm[idx].state < 3){
+		alarm[idx].state = 0;
+		alarm[idx].time.tm_mday += 1;
+	} else if (alarm[idx].state == 4){
+		deleteAlarm(idx);
+	}
 	killPlayerThread();
-	printf("state is %d \n",alarm[idx].state);
 }
 
 int compareTime(tm t1,tm t2){

+ 2 - 0
alarm.h

@@ -19,6 +19,8 @@ int checkAlarms(void);
 void setAlarm(struct _tm time, char* name, char* ip, u_short port, char* url, int snooze, int id, int idx);
 int alarmExist(int id);
 void deleteAlarm(int idx);
+void eenmaligAlarmCheck(int idx);
+void eenmaligAlarm(struct _tm time, char* name, char* ip, u_short port, char* url, int snooze, int id, int idx);
 int compareTime(tm t1, tm t2);
 void setState(int idx);
 int getState(int idx);

+ 46 - 8
contentparser.c

@@ -11,12 +11,19 @@
 #include "displayHandler.h"
 #include "vs10xx.h"
 #include "twitch.h"
+#include "Twitter.h"
+int streamid;
 
 void parseAlarmJson(char* content){
     int r;
-    int i;
+    int i = 2;
+	
+	int startidx = 0;
+	int charAmount = 0;
+
     int usedAlarms[maxAlarms()];
     int j;
+    
     jsmn_parser p;
     jsmntok_t token[160]; /* We expect no more than 128 tokens */
 
@@ -41,6 +48,7 @@ void parseAlarmJson(char* content){
         char url[24];
         char ip[24];
         char name[16];
+		char str2[16];
         char st = -1;
         char oo = -1;
         memset(url, 0, 24);
@@ -84,11 +92,39 @@ void parseAlarmJson(char* content){
             printf("Alarm date is: %02d.%02d.%02d\n", time.tm_mday, (time.tm_mon + 1), (time.tm_year + 1900));
             printf("Alarm stream data is: %s:%d%s\n", ip, port, url);
             printf("Alarm id and name and st is: %d %s %d\n\n", id, name, st);
+			
+			charAmount = 0;
+			for (i = 0; i < 16;i++){
+				if (name[i] != 0){
+					charAmount = charAmount + 1;
+				}
+			}
+			
+			startidx = (8-(charAmount/2));
+			
+			charAmount = 0;
+			for(i = 0; i < 16; i++){
+				if (i >= startidx){
+					if (name[charAmount] != 0){
+						str2[i] = name[charAmount];
+					} else {
+						str2[i] = ' ';
+					}	
+					charAmount++;
+				} else {
+					str2[i] = ' ';
+				}
+			}
+			
 
             //zoek naar een vrije plaats in de alarm array
             for(j = 0; j < maxAlarms(); j++){
                 if(usedAlarms[j] == 0){ //Dit is een lege plaats, hier kunnen we ons nieuwe alarm plaatsen
-                    setAlarm(time, name, ip, port, url, st, id, j);
+					if (oo == 1){
+						eenmaligAlarm(time,str2,ip,port,url,st,id,j);
+					} else {
+						setAlarm(time, str2, ip, port, url, st, id, j);
+					}
                     usedAlarms[j] = 1;
                     j = 10;             //Uit de for loop
                 }
@@ -211,9 +247,11 @@ void parseTwitch(char* content) {
         setCurrentDisplay(DISPLAY_Twitch, 100);
     }
 }
-//void TwitterParser(char* content)
-//{
-//    char tweet = atoi(content);
-//    printf("%d", tweet);
-//    displayTwitter(1,tweet);
-//}
+
+void TwitterParser(char* content)
+{
+    char tweet[140];
+    memset(tweet, 0, 140);
+    strcpy(TweetFeed.tweet,content);
+    printf("%s", TweetFeed.tweet);
+}

+ 0 - 1
contentparser.h

@@ -9,5 +9,4 @@ void parseCommandQue(char* content);
 void parsetimezone(char* content);
 void parseTwitch(char* content);
 void TwitterParser(char* content);
-
 #endif //CONTENTPARSER_H

+ 4 - 0
display.c

@@ -217,6 +217,10 @@ void LcdArrayLineTwo(char *data, int size){
 		LcdChar(data[i]);
 	}
 }
+char getLoop(char *text,int offset)
+{
+    return text[offset % strlen(text)];
+}
 
 void setXCursorPos(int leftRight,int count)
 {

+ 1 - 0
display.h

@@ -58,6 +58,7 @@ extern void ClearLcd(void);
 extern void LcdArrayLineOne(char*, int);
 extern void LcdArrayLineTwo(char*, int);
 extern void setXCursorPos(int,int);
+extern char getLoop(char*,int);
 #endif /* _Display_H */
 /*  ����  End Of File  �������� �������������������������������������������� */
 

+ 33 - 26
displayHandler.c

@@ -14,6 +14,7 @@
 #include "alarm.h"
 #include "network.h"
 #include "twitch.h"
+#include "Twitter.h"
 
 struct _tm lastDisplayTime;
 viewDisplays currentViewDisplay;
@@ -44,6 +45,8 @@ void refreshScreen(){
         displayAlarm(getRunningAlarmID());
     }else if(currentViewDisplay == DISPLAY_Twitch){
         displayTwitch(data.name, data.title, data.game);
+    }else if(currentViewDisplay == DISPLAY_Twitter){
+        displayTwitter(TweetFeed.tweet);
     }
 }
 
@@ -88,38 +91,19 @@ void displayAlarm(char idx)
         currentViewDisplay = DISPLAY_DateTime;
     }
 	int i;
-	int j;
-	int startidx;
+
     char str[16];
     struct _alarm *am = getAlarm(idx);
 
     sprintf(str, "    %02d:%02d:%02d    ", am->time.tm_hour, am->time.tm_min, am->time.tm_sec);
     (*write_display_ptr[0])(str, 16);
 
-	j = 0;
     char str2[16];
 	for (i = 0; i < 16;i++){
-		if (am->name[i] != 0){
-			j = j + 1;
-		}
+		str2[i] = am->name[i];
 	}
+		
 
-	if (j != 16){
-		startidx = (8-(j/2));
-	}
-	j = 0;
-	for(i = 0; i < 16; i++){
-		if (i >= startidx){
-			if (am->name[j] != 0){
-				str2[i] = am->name[j];
-			} else {
-				str2[i] = ' ';
-			}
-			j++;
-		} else {
-			str2[i] = ' ';
-		}
-	}
     (*write_display_ptr[1])(str2, 16);
 }
 
@@ -142,14 +126,37 @@ void displayVolume()
     LcdArrayLineTwo(characters,16);
 }
 
-void displayTwitter(int lineNumber,char text[])
+void displayTwitter(char* text)
 {
+    //int lineNumber,char text[]
     ClearLcd();
+    LcdBackLight(LCD_BACKLIGHT_ON);
+    LcdArrayLineOne("     Twitter    ", 16);
+    int j = 0;
     int i;
-
-    if (lineNumber > -1 && lineNumber < 2){
-        (*write_display_ptr[lineNumber])(text,strlen(text));
+    char text1[16];
+    //char text2[140] = text;
+   // int shift = 0;
+    //char *text = "Twitter";
+    for(i = 0; i<140;i++){
+        if (text[i] != 0){
+            j++;
+        }
     }
+
+        for(i = 0; i < 16; i++){
+            if (text[Scroller+i]!= 0) {
+                text1[i] = text[Scroller + i];
+            } else {
+                text1[i] = ' ';
+            }
+        }
+        LcdArrayLineTwo(text1,16);
+        Scroller++;
+        if (Scroller > j){
+            Scroller = 0;
+        }
+        NutDelay(500);
 }
 
 void displayTwitch(char name[], char title[], char game[]) {

+ 1 - 3
displayHandler.h

@@ -6,7 +6,6 @@
 #define MUTLI_OS_BUILD_DISPLAYHANDLER_H
 #include "ntp.h"
 
-
 #include <time.h>
 #include "alarm.h"
 #define MONTH_OFFSET 1
@@ -22,8 +21,7 @@ void refreshScreen(void);
 void displayDateTime(void);
 void displayAlarm(char idx);
 void displayVolume();
-void displayTwitter(int lineNumber,char text[]);
+void displayTwitter(char text[]);
 void displayTwitch(char name[], char title[], char game[]);
 
-
 #endif //MUTLI_OS_BUILD_DISPLAYHANDLER_H

+ 1 - 1
jsmn.c

@@ -3,7 +3,6 @@
 #include <string.h>
 #include <assert.h>
 
-
 /**
  * Allocates a fresh unused token from the token pull.
  */
@@ -343,4 +342,5 @@ void getStringToken(const char *json, jsmntok_t *tok, char *res, char maxlength)
 		printf("ERROR: String too large! output string length: %d - Input string length: %d - String: %.*s \n", maxlength - 1, (tok->end - tok->start), tok->end - tok->start, json + tok->start);
 		res[0] = '\0';
 	};
+
 }

+ 9 - 3
main.c

@@ -227,9 +227,14 @@ THREAD(AlarmSync, arg)
             char url[49];
             sprintf(url, "/getAlarmen.php?radiomac=%s&tz=%d", getMacAdress(), getTimeZone());
             httpGet(url, parseAlarmJson);
+
             char url2[43];
             sprintf(url2, "/getTwitch.php?radiomac=%s", getMacAdress());
             httpGet(url2, parseTwitch);
+            char url3[43];
+            sprintf(url3,"/getTwitter.php?radiomac=%s", getMacAdress());
+            httpGet(url3,TwitterParser);
+
             isAlarmSyncing = false;
             //Command que (Telegram) sync
             sprintf(url, "%s%s", "/getCommands.php?radiomac=", getMacAdress());
@@ -279,12 +284,11 @@ int main(void)
 
     VsPlayerInit();
 
-     NtpInit();
+    NtpInit();
 
     NutThreadCreate("BackgroundThread", StartupInit, NULL, 1024);
     NutThreadCreate("BackgroundThread", AlarmSync, NULL, 2500);
     NutThreadCreate("BackgroundThread", AlarmCheck, NULL, 256);
-    /** Quick fix for turning off the display after 10 seconds boot */
 
 	KbInit();
 
@@ -303,7 +307,7 @@ int main(void)
 
     X12RtcGetClock(&timeCheck);
 
-    for (;;)
+ 	for (;;)
     {
         //Key detecten
         if(KbGetKey() != KEY_UNDEFINED){
@@ -326,6 +330,8 @@ int main(void)
                 }else if(KbGetKey() == KEY_UP){
                     setCurrentDisplay(DISPLAY_Volume, 5);
                     volumeUp();
+                }else if(KbGetKey() == KEY_LEFT){
+                    setCurrentDisplay(DISPLAY_Twitter,20);
                 }else{
                     setCurrentDisplay(DISPLAY_DateTime, 5);
                 }