Bladeren bron

Cleaned main. Alarm set now works.

Janco Kock 9 jaren geleden
bovenliggende
commit
34bc043166
2 gewijzigde bestanden met toevoegingen van 77 en 126 verwijderingen
  1. 41 110
      main.c
  2. 36 16
      network.c

+ 41 - 110
main.c

@@ -9,8 +9,8 @@
  */
 
 /*! \file
- *  COPYRIGHT (C) STREAMIT BV 2010
- *  \date 19 december 2003
+ *  COPYRIGHT (C) SaltyRadio 2016
+ *  \date 20-02-2016
  */
 
 #define LOG_MODULE  LOG_MAIN_MODULE
@@ -41,22 +41,11 @@
 #include "spidrv.h"
 #include "network.h"
 
-
 #include <time.h>
 #include "rtc.h"
 #include "alarm.h"
 #include "ntp.h"
 
-
-/*-------------------------------------------------------------------------*/
-/* global variable definitions                                             */
-/*-------------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------------*/
-/* local variable definitions                                              */
-/*-------------------------------------------------------------------------*/
-
-
 /*-------------------------------------------------------------------------*/
 /* local routines (prototyping)                                            */
 /*-------------------------------------------------------------------------*/
@@ -79,7 +68,6 @@ static void SysControlMainBeat(u_char);
 /*-------------------------------------------------------------------------*/
 
 
-/* ����������������������������������������������������������������������� */
 /*!
  * \brief ISR MainBeat Timer Interrupt (Timer 2 for Mega128, Timer 0 for Mega256).
  *
@@ -90,7 +78,6 @@ static void SysControlMainBeat(u_char);
  *
  * \param *p not used (might be used to pass parms from the ISR)
  */
-/* ����������������������������������������������������������������������� */
 static void SysMainBeatInterrupt(void *p)
 {
 
@@ -101,8 +88,6 @@ static void SysMainBeatInterrupt(void *p)
     CardCheckCard();
 }
 
-
-/* ����������������������������������������������������������������������� */
 /*!
  * \brief Initialise Digital IO
  *  init inputs to '0', outputs to '1' (DDRxn='0' or '1')
@@ -110,7 +95,6 @@ static void SysMainBeatInterrupt(void *p)
  *  Pull-ups are enabled when the pin is set to input (DDRxn='0') and then a '1'
  *  is written to the pin (PORTxn='1')
  */
-/* ����������������������������������������������������������������������� */
 void SysInitIO(void)
 {
     /*
@@ -166,12 +150,11 @@ void SysInitIO(void)
      */
     outp(0x18, DDRG);
 }
-/* ����������������������������������������������������������������������� */
+
 /*!
  * \brief Starts or stops the 4.44 msec mainbeat of the system
  * \param OnOff indicates if the mainbeat needs to start or to stop
  */
-/* ����������������������������������������������������������������������� */
 static void SysControlMainBeat(u_char OnOff)
 {
     int nError = 0;
@@ -191,89 +174,56 @@ static void SysControlMainBeat(u_char OnOff)
     }
 }
 
-/*void handleAlarm(){
-	struct _tm alarmtime;
-    alarmtime = GetRTCTime();
-    long flags;
-	
-    X12RtcGetAlarm(0,&alarmtime,0b11111111);
-	alarmtime.tm_min = (alarmtime.tm_min-79);
-	
-	LogMsg_P(LOG_INFO, PSTR("Alarm : day = %02d,[%02d:%02d:%02d]"),alarmtime.tm_mday, alarmtime.tm_hour, alarmtime.tm_min, alarmtime.tm_sec);
-	
-	X12RtcSetAlarm(0,&alarmtime, 0b11111111);
-	NutDelay(100);
-}*/
-
-int timer(time_t start){
-	time_t diff = time(0) - start;
-	return diff;
-}
 
-int checkOffPressed(){
-	if (KbScan() < -1){
-		LcdBackLight(LCD_BACKLIGHT_ON);
-		return 1;
-	} else {
-		return 0;
-	}
-}
+/*-------------------------------------------------------------------------*/
+/* global variable definitions                                             */
+/*-------------------------------------------------------------------------*/
+int isAlarmSyncing;
 
-/*void displayAlarm()
-{
-    struct _tm alarmtime;
-    alarmtime = GetRTCTime();
-    long flags;
-    X12RtcGetAlarm(0,&alarmtime,0b11111111);
-    NutDelay(100);
-    char str[12];
-    sprintf(str, "    %02d:%02d:%02d", alarmtime.tm_hour, alarmtime.tm_min - 80, alarmtime.tm_sec);
-    LogMsg_P(LOG_INFO, PSTR("Alarm : [%02d:%02d:%02d]"), alarmtime.tm_hour, alarmtime.tm_min - 80, alarmtime.tm_sec );
-    LcdArrayLineOne(str,12);
-
-    char str2[6];
-    sprintf(str2,"Wekker");
-    LcdArrayLineTwo(str2,6);
-    LcdBacklightKnipperen(startLCD);
-}*/
-/* ����������������������������������������������������������������������� */
-/*!
- * \brief Main entry of the SIR firmware
- *
- * All the initialisations before entering the for(;;) loop are done BEFORE
- * the first key is ever pressed. So when entering the Setup (POWER + VOLMIN) some
- * initialisatons need to be done again when leaving the Setup because new values
- * might be current now
- *
- * \return \b never returns
- */
-/* ����������������������������������������������������������������������� */
+/*-------------------------------------------------------------------------*/
+/* local variable definitions                                              */
+/*-------------------------------------------------------------------------*/
 
+/*-------------------------------------------------------------------------*/
+/* Thread init                                                             */
+/*-------------------------------------------------------------------------*/
 THREAD(StartupInit, arg)
 {
+    isAlarmSyncing = 1;
     NetworkInit();
     NtpSync();
+
     char* content = httpGet("/getAlarmen.php?radioid=DE370");
     parseAlarmJson(content);
+    isAlarmSyncing = 0;
+
     free(content);
     NutThreadExit();
 }
 
+/*-------------------------------------------------------------------------*/
+/* Global functions                                                        */
+/*-------------------------------------------------------------------------*/
+
+int timer(time_t start){
+    time_t diff = time(0) - start;
+    return diff;
+}
+
+int checkOffPressed(){
+    if (KbScan() < -1){
+        LcdBackLight(LCD_BACKLIGHT_ON);
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
 int main(void)
 {
 	time_t start;
 	int running = 0;
-	/* 
-	 * Kroeske: time struct uit nut/os time.h (http://www.ethernut.de/api/time_8h-source.html)
-	 *
-	 */
-	struct _tm alarmtime;
-	/*
-	 * Kroeske: Ook kan 'struct _tm gmt' Zie bovenstaande link
-	 */
-    /*
-     *  First disable the watchdog
-     */
+
     WatchDogDisable();
 
     NutDelay(100);
@@ -303,22 +253,11 @@ int main(void)
     start = time(0);
     running = 1;
 
-	/*
-	 * Kroeske: sources in rtc.c en rtc.h
-	 */
-
-    if (At45dbInit()==AT45DB041B)
-    {
-        // ......
-    }
-
-
-
     RcInit();
     
 	KbInit();
 
-    SysControlMainBeat(ON);             // enable 4.4 msecs hartbeat interrupt
+    SysControlMainBeat(ON);             // enable 4.4 msecs heartbeat interrupt
 
     /*
      * Increase our priority so we can feed the watchdog.
@@ -327,14 +266,7 @@ int main(void)
 
 	/* Enable global interrupts */
 	sei();
-	
-    alarmtime = GetRTCTime();
-    alarmtime.tm_sec = alarmtime.tm_sec+10;
-    LogMsg_P(LOG_INFO, PSTR("alarmtime %02d-%02d-%04d || %02d-%02d-%02d"), alarmtime.tm_mday, alarmtime.tm_mon+1, alarmtime.tm_year+1900, alarmtime.tm_hour, alarmtime.tm_min, alarmtime.tm_sec);
-	
-    X12RtcSetAlarm(0,&alarmtime,0b11111111);
-    NutDelay(100);
-	
+
     for (;;)
     {		
 		//Check if a button is pressed
@@ -351,9 +283,8 @@ int main(void)
 				LcdBackLight(LCD_BACKLIGHT_OFF);
 			}
 		}
-        
-		
-        if(X12RtcGetStatus(5) > 0)
+
+        if(!isAlarmSyncing && X12RtcGetStatus(5) > 0)
         {
 			displayAlarm(0,1);
 			if (KbScan() < -1 || checkTime() == 1){
@@ -368,5 +299,5 @@ int main(void)
         WatchDogRestart();
     }
 
-    return(0);      // never reached, but 'main()' returns a non-void, so.....
+    return(0);
 }

+ 36 - 16
network.c

@@ -23,6 +23,7 @@
 #include "ntp.h"
 #include "jsmn.h"
 #include "rtc.h"
+#include "alarm.h"
 
 void NetworkInit() {
     /* Register de internet controller. */
@@ -32,37 +33,35 @@ void NetworkInit() {
     else if (NutDhcpIfConfig(DEV_ETHER_NAME, NULL, 0)) {
         /* Done. */
     }else {
-        printf("Ik heb een internet connectie. Ip is: %s", inet_ntoa(confnet.cdn_ip_addr));
+        printf("Ik heb een internet connectie. Ip is: %s \n\n", inet_ntoa(confnet.cdn_ip_addr));
     }
 }
 
 char* httpGet(char address[]){
-    printf("komt in httpget()");
     NutDelay(1000);
     TCPSOCKET* sock = NutTcpCreateSocket();
     char http[150];
     sprintf(http, "GET %s HTTP/1.1\r\nHost: saltyradio.jancokock.me \r\n\r\n", address);
-    printf("%s", http);
     NutDelay(100);
-    char buffer[250];
+    char buffer[300];
     int len = sizeof(http);
     if (NutTcpConnect(sock, inet_addr("62.195.226.247"), 80)) {
         printf("Can't connect to server\n");
     }else{
-        FILE *stream;
-        stream = _fdopen((int) sock, "r b");
+        //FILE *stream;
+        //stream = _fdopen((int) sock, "r b");
         if(NutTcpSend(sock, http, len) != len){
             printf("Writing headers failed.");
             NutDelay(1000);
         }else{
-            printf("Headers writed. Now reading.");
+            printf("Headers %s writed. Now reading.", http);
             NutDelay(1000);
             NutTcpReceive(sock, buffer, sizeof(buffer));
-                //fread(buffer, 1, sizeof(buffer), stream);
+            //fread(buffer, 1, sizeof(buffer), stream);
             NutDelay(1000);
             printf(buffer);
         };
-        fclose(stream);
+        //fclose(stream);
 
     }
     NutTcpCloseSocket(sock);
@@ -108,27 +107,41 @@ void parseAlarmJson(char* content){
         printf("Aantal tokens found: %d \n", r);
     }
 
-    struct _tm time;
-    X12RtcGetClock(&time);
-    NutDelay(100);
+    struct _tm time = GetRTCTime();
 
     for (i = 1; i < r; i++) {
-        if (jsoneq(content, &token[i], "hh") == 0) {
+        if (jsoneq(content, &token[i], "YYYY") == 0) {
             /* We may use strndup() to fetch string value */
+            char yyyy[4];
+            sprintf(yyyy, "%.*s", token[i+1].end-token[i+1].start, content + token[i+1].start);
+            printf("Tijd jaren: %s\n", yyyy);
+            time.tm_year = atoi(yyyy) - 1900;    //only use when 100% sure input is an integer
+            i++;
+        }else if (jsoneq(content, &token[i], "MM") == 0) {
+            char mm[2];
+            sprintf(mm, "%.*s", token[i+1].end-token[i+1].start, content + token[i+1].start);
+            printf("Tijd maand: %s\n", mm);
+            time.tm_mon= atoi(mm) - 1;    //only use when 100% sure input is an integer
+            i++;
+        }else if (jsoneq(content, &token[i], "DD") == 0) {
+            char dd[2];
+            sprintf(dd, "%.*s", token[i + 1].end - token[i + 1].start, content + token[i + 1].start);
+            printf("Tijd dagen: %s\n", dd);
+            time.tm_mday = atoi(dd);     //only use when 100% sure input is an integer
+            i++;
+        }else if (jsoneq(content, &token[i], "hh") == 0) {
             char hh[2];
             sprintf(hh, "%.*s", token[i+1].end-token[i+1].start, content + token[i+1].start);
             printf("Tijd uren: %s\n", hh);
             time.tm_hour = atoi(hh);    //only use when 100% sure input is an integer
             i++;
         }else if (jsoneq(content, &token[i], "mm") == 0) {
-            /* We may use strndup() to fetch string value */
             char mm[2];
             sprintf(mm, "%.*s", token[i+1].end-token[i+1].start, content + token[i+1].start);
             printf("Tijd minuten: %s\n", mm);
             time.tm_min = atoi(mm);    //only use when 100% sure input is an integer
             i++;
         }else if (jsoneq(content, &token[i], "ss") == 0) {
-            /* We may use strndup() to fetch string value */
             char ss[2];
             sprintf(ss, "%.*s", token[i + 1].end - token[i + 1].start, content + token[i + 1].start);
             printf("Tijd seconden: %s\n", ss);
@@ -136,4 +149,11 @@ void parseAlarmJson(char* content){
             i++;
         }
     }
-}
+   // printf("alarmtime %02d-%02d-%04d || %02d-%02d-%02d", time.tm_mday, time.tm_mon+1, time.tm_year+1900, time.tm_hour, time.tm_min, time.tm_sec);
+   // setAlarm(time, "none", 0);
+    struct _tm alarmtime = GetRTCTime();
+    alarmtime.tm_sec = alarmtime.tm_sec+10;
+
+    X12RtcSetAlarm(0,&time,0b11111111);
+    NutDelay(1000);
+}