Example #1
0
void showTimeAlarm( uint8_t *bUidPresent, uint8_t *nCardDetected, uint8_t *nCardPrevious)
{
	  char msg[100];

	  statoDisplay=6;
	  Chip_RTC_GetFullTime(&FullTime);
	  if (statoDisplayP!=6) {
		  GUI_Clear();
	  }

	  int ii=0;
		int k=0,c=0,rimanenti=0,soglia=0,dose=0;
		for (k=0; k<maxR; k++) {
			uint8_t tempTag[4];
			for (c=0;c<4;c++){
				tempTag[c] = l_tabellaMedicine[k][c];
			}
			if (confronta_tag(ptrMedic->tag,tempTag)==1) {
				rimanenti = l_tabellaMedicine[k][62];
				soglia = l_tabellaMedicine[k][64];
				dose = l_tabellaMedicine[k][55];
			}
		}
		    sprintf( msg, "Assumere: %s", ptrMedic->nome);
			    GUI_DispStringAt( msg, 0, 20);
			    sprintf( msg, "Dose: %d pastiglie", dose/4);
				GUI_DispStringAt( msg, 0, 40+20*ii);
				ii++;
			    if (ptrMedic->giorniAllaScadenza<30) {
			    	GUI_SetColor(GUI_YELLOW);
				    sprintf( msg, "Scade entro un mese!");
					GUI_DispStringAt( msg, 0, 40+20*ii);
			    	GUI_SetColor(GUI_GREEN);
			    	ii++;
			    }
			    if (ptrMedic->avvisare) {
			    	GUI_SetColor(GUI_ORANGE);
				    sprintf( msg, "Stai per esaurire il medicinale");
					GUI_DispStringAt( msg, 0, 40+20*ii);
			    	GUI_SetColor(GUI_GREEN);
			    	ii++;
			    }
		    	GUI_SetColor(GUI_GREEN);
			    sprintf( msg, "Rimangono %d pastiglie", rimanenti);
				GUI_DispStringAt( msg, 0, 40+20*ii);
				ii++;
			    sprintf( msg, "Soglia di avviso impostata: %d", soglia);
				GUI_DispStringAt( msg, 0, 40+20*ii);

			    showTime();

			    statoDisplayP=statoDisplay;
	  empty = 1;
}
Example #2
0
void Board_RTC_getTime(uint32_t* hr,uint32_t* min, uint32_t* sec, uint32_t* day, uint32_t* mon, uint32_t* yr,uint32_t* dayOfWeek)
{
	RTC_TIME_T rtc;
	Chip_RTC_GetFullTime(LPC_RTC, &rtc);

	*sec = rtc.time[RTC_TIMETYPE_SECOND];
	*min = rtc.time[RTC_TIMETYPE_MINUTE];
	*hr = rtc.time[RTC_TIMETYPE_HOUR];
	*day = rtc.time[RTC_TIMETYPE_DAYOFMONTH];
	*mon = rtc.time[RTC_TIMETYPE_MONTH];
	*yr = rtc.time[RTC_TIMETYPE_YEAR];
	*dayOfWeek = rtc.time[RTC_TIMETYPE_DAYOFWEEK];
}
Example #3
0
/*
 * @Brief: Get time from RTC peripheral.
 * @param  RTC_t rtc: RTC structure
 * @return bool_t true (1) if config it is ok
 */
bool_t rtcRead( RTC_t * rtc ){
   
   bool_t ret_val = 1;

   RTC_TIME_T rtcTime;

   Chip_RTC_GetFullTime(LPC_RTC, &rtcTime);

   rtc->sec = rtcTime.time[RTC_TIMETYPE_SECOND];
   rtc->min = rtcTime.time[RTC_TIMETYPE_MINUTE];
   rtc->hour = rtcTime.time[RTC_TIMETYPE_HOUR];
   rtc->wday = rtcTime.time[RTC_TIMETYPE_DAYOFWEEK];
   rtc->mday = rtcTime.time[RTC_TIMETYPE_DAYOFMONTH];
   rtc->month = rtcTime.time[RTC_TIMETYPE_MONTH];
   rtc->year = rtcTime.time[RTC_TIMETYPE_YEAR];

   return ret_val;
}
Example #4
0
void showTime( /*char *cardType,  uint8_t *bUidPresent, uint8_t *nCardDetected, uint8_t *nCardPrevious*/)
{
	  char msg[100];

	  Chip_RTC_GetFullTime(&FullTime);
	    sprintf( msg, "%.2d:%.2d:%.2d %.2d/%.2d/%.4d\r\n", FullTime.time[2],
	    		FullTime.time[1],
	    		FullTime.time[0],
	    		FullTime.time[3],
	    		FullTime.time[6],
	    		FullTime.time[7]);

	    GUI_SetColor(GUI_WHITE);
	    GUI_FillRect( 0, 214, 317, 214 );
	    GUI_SetFont(&GUI_Font24B_ASCII);
	    GUI_DispStringAt( msg, 60, 215);
	    GUI_SetColor(GUI_GREEN);

}
/**
 * @brief	main routine for example_lwip_tcpecho_freertos_18xx43xx
 * @return	Function should not exit
 */
int main(void)
{
	prvSetupHardware();

	Chip_RTC_Init();

	/*Set current time for RTC 8:59:20PM, 2016-04-11 MONDAY 102*/
	FullTime.time[RTC_TIMETYPE_SECOND]  	= 40;
	FullTime.time[RTC_TIMETYPE_MINUTE]  	= 59;
	FullTime.time[RTC_TIMETYPE_HOUR]    	= 8;
	FullTime.time[RTC_TIMETYPE_DAYOFMONTH] 	= 11;
	FullTime.time[RTC_TIMETYPE_DAYOFWEEK]	= 1;
	FullTime.time[RTC_TIMETYPE_DAYOFYEAR]	= 102;
	FullTime.time[RTC_TIMETYPE_MONTH]   	= 04;
	FullTime.time[RTC_TIMETYPE_YEAR]    	= 2016;

	Chip_RTC_SetFullTime(&FullTime);

	/* Set the RTC to generate an interrupt on each second */
	Chip_RTC_CntIncrIntConfig(RTC_AMR_CIIR_IMSEC, ENABLE);

	/* Enable matching for alarm for second, minute, hour fields only */
	Chip_RTC_AlarmIntConfig(RTC_AMR_CIIR_IMSEC | RTC_AMR_CIIR_IMMIN | RTC_AMR_CIIR_IMHOUR, ENABLE);

	/* Enable RTC interrupt in NVIC */
	NVIC_EnableIRQ((IRQn_Type) RTC_IRQn);

	/* Enable RTC (starts increase the tick counter and second counter register) */
	Chip_RTC_Enable(ENABLE);


	//DIFFERENZA TRA GIORNI
	IP_RTC_TIME_T data1 = FullTime, data2, diffDate;
	uint32_t nGiorniDifferenza;
	data2.time[RTC_TIMETYPE_SECOND]  	= 40;
	data2.time[RTC_TIMETYPE_MINUTE]  	= 59;
	data2.time[RTC_TIMETYPE_HOUR]    	= 7;//23;//8;
	data2.time[RTC_TIMETYPE_DAYOFMONTH] = 12;
	data2.time[RTC_TIMETYPE_DAYOFWEEK]	= 2;
	data2.time[RTC_TIMETYPE_DAYOFYEAR]	= 103;
	data2.time[RTC_TIMETYPE_MONTH]   	= 04;
	data2.time[RTC_TIMETYPE_YEAR]    	= 2016;//2017;

	diffDate = differenzaDate(data2, data1);

	nGiorniDifferenza = differenzaGiorni(data2, data1);

	uint8_t counter = 0;
	ptrMedic = inizializzaListaMed();
	for(counter = 0; counter < maxR; counter++){
		if (l_tabellaMedicine[counter][65]==0) { //se più volte al giorno == 0
			if (l_tabellaMedicine[counter][59]==0) {

				ptrMedic = inserisciInTestaListaMed(ptrMedic, l_tabellaMedicine[counter]);

			} else {
				if (l_tabellaMedicine[counter][58] == 0) { //DA ASSUMERE

					ptrMedic = inserisciInTestaListaMed(ptrMedic, l_tabellaMedicine[counter]);

					l_tabellaMedicine[counter][58] ++;
				} else {
					l_tabellaMedicine[counter][58] ++;
					if (l_tabellaMedicine[counter][58] = l_tabellaMedicine[counter][59]) {
						l_tabellaMedicine[counter][58] = 0;
					}

				}
			}
		} else {
			//conta quante volte prendere la medicina
			if (l_tabellaMedicine[counter][65]==1) {
				//controlla la ripetizione
				Chip_RTC_GetFullTime(&FullTime);
				IP_RTC_TIME_T dataIn;
				dataIn.time[RTC_TIMETYPE_DAYOFMONTH] = l_tabellaMedicine[counter][43];
				dataIn.time[RTC_TIMETYPE_MONTH] = l_tabellaMedicine[counter][44];
				dataIn.time[RTC_TIMETYPE_YEAR] = (l_tabellaMedicine[counter][45]<<8) | l_tabellaMedicine[counter][46];

				int oraInizio = l_tabellaMedicine[counter][51];
				int intervalloOre = l_tabellaMedicine[counter][57];
				if (FullTime.time[RTC_TIMETYPE_DAYOFMONTH]==dataIn.time[RTC_TIMETYPE_DAYOFMONTH] && FullTime.time[RTC_TIMETYPE_MONTH]==dataIn.time[RTC_TIMETYPE_MONTH] && FullTime.time[RTC_TIMETYPE_YEAR]==dataIn.time[RTC_TIMETYPE_YEAR]) {
					//E' il giorno di inizio e lascio l'ora iniziale invariata
					oraInizio = oraInizio;
				} else {
					int go = 1;
					while (go){
						if ((oraInizio-intervalloOre)>=0) {
							oraInizio = oraInizio-intervalloOre;
						} else {
							go = 0;
						}
					}
				}
				int temp = oraInizio;
				int contatore = 1;
				while ((temp+intervalloOre) < 24) {
					temp = temp+intervalloOre;
					contatore++;
				}
				int c = 0;
				IP_RTC_TIME_T oraMed;
				oraMed.time[RTC_TIMETYPE_HOUR] = oraInizio;
				oraMed.time[RTC_TIMETYPE_MINUTE] = l_tabellaMedicine[counter][52];
				oraMed.time[RTC_TIMETYPE_SECOND] = l_tabellaMedicine[counter][53];
				for (c=0; c<contatore; c++) {

					ptrMedic = inserisciInTestaListaMedOra(ptrMedic, l_tabellaMedicine[counter], oraMed);

					oraMed.time[RTC_TIMETYPE_HOUR] += intervalloOre;
				}

			} else {
				//orari custom
				int n = l_tabellaMedicine[counter][65];
				int c = 0;
				IP_RTC_TIME_T oraMed;
				oraMed.time[RTC_TIMETYPE_HOUR] = l_tabellaMedicine[counter][51];
				oraMed.time[RTC_TIMETYPE_MINUTE] = l_tabellaMedicine[counter][52];
				oraMed.time[RTC_TIMETYPE_SECOND] = l_tabellaMedicine[counter][53];

				ptrMedic = inserisciInTestaListaMedOra(ptrMedic, l_tabellaMedicine[counter], oraMed);

				for (c=0; c<n-1; c++) {
					oraMed.time[RTC_TIMETYPE_HOUR] = l_tabellaMedicine[counter][66+3*c];
					oraMed.time[RTC_TIMETYPE_MINUTE] = l_tabellaMedicine[counter][67+3*c];
					oraMed.time[RTC_TIMETYPE_SECOND] = l_tabellaMedicine[counter][68+3*c];

					ptrMedic = inserisciInTestaListaMedOra(ptrMedic, l_tabellaMedicine[counter], oraMed);

				}

			}
		}
	}
	ptrMedic = ordinamento_lista_med(ptrMedic);

	//Inizio dall'orario attuale e non considero tutti i medicinali precedenti in giornata
	IP_RTC_TIME_T oraAllarme;
	oraAllarme.time[RTC_TIMETYPE_HOUR]  = ptrMedic->oraA;
	oraAllarme.time[RTC_TIMETYPE_MINUTE]  = ptrMedic->minA;
	oraAllarme.time[RTC_TIMETYPE_SECOND]  = ptrMedic->secA;
	while (orarioDopoOrario(FullTime, oraAllarme)) {
		ptrMedic = ptrMedic->next;
		oraAllarme.time[RTC_TIMETYPE_HOUR]  = ptrMedic->oraA;
		oraAllarme.time[RTC_TIMETYPE_MINUTE]  = ptrMedic->minA;
		oraAllarme.time[RTC_TIMETYPE_SECOND]  = ptrMedic->secA;
	}

	FullTime.time[RTC_TIMETYPE_HOUR]  = oraAllarme.time[RTC_TIMETYPE_HOUR];//ptrMedic->oraA;
	FullTime.time[RTC_TIMETYPE_MINUTE]  = oraAllarme.time[RTC_TIMETYPE_MINUTE];//ptrMedic->minA;
	FullTime.time[RTC_TIMETYPE_SECOND]  = oraAllarme.time[RTC_TIMETYPE_SECOND];//ptrMedic->secA;
	Chip_RTC_SetFullAlarmTime(&FullTime);


//	CICLO FOR PER LEGGERE TUTTI I BIT DI UN BYTE
//	unsigned bit=0, n_bits = 4u, *bits = (unsigned*)malloc(sizeof(unsigned) * n_bits);
//	for (bit = 0; bit < n_bits; ++bit, input >>1)
//		bits[bit] = input & 1;


	uint8_t i;
	for (i=0;i<35;i++){
		//char t = (char)m1[4+i];
		//nomeMed[i]=t;
		arrNomiMed[i]=l_tabellaMedicine[0][4+i];
	}
	nomeMed=&arrNomiMed;



	vSemaphoreCreateBinary( xSemaDataAvail );
	vSemaphoreCreateBinary( xSemaGUIend );

/*	xTaskCreate(vTSCTask, (signed char *) "vTSCTask",
				configMINIMAL_STACK_SIZE, NULL, TASK_PRIO_TOUCHSCREEN,
				(xTaskHandle *) NULL); */

/* BASIC ONE
	xTaskCreate(vLcdTask, (signed char *) "vLCDTask",
				configMINIMAL_STACK_SIZE * 4, NULL, TASK_PRIO_LCD,
				(xTaskHandle *) NULL); */

	xTaskCreate(vLcdTaskNew, (signed char *) "vLCDTaskNew",
				configMINIMAL_STACK_SIZE * 4, NULL, TASK_PRIO_LCD,
				(xTaskHandle *) NULL);

	/* Add another thread for initializing physical interface. This
	   is delayed from the main LWIP initialization. */
/*	xTaskCreate(vSetupIFTask, (signed char *) "SetupIFx",
				configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL),
				(xTaskHandle *) NULL); */

	xTaskCreate(vSetupPollTask, (signed char *) "SetupPoll",
				configMINIMAL_STACK_SIZE*4, NULL, (tskIDLE_PRIORITY + 1UL),
				(xTaskHandle *) NULL);

/*
	xTaskCreate(vRTCTask, (signed char *) "RTCTask",
				configMINIMAL_STACK_SIZE*4, NULL, (tskIDLE_PRIORITY + 2UL),
				(xTaskHandle *) NULL);
*/

	/* Start the scheduler */
	vTaskStartScheduler();

	/* Should never arrive here */
	return 1;
}
Example #6
0
/**
 * @brief	Main entry point
 * @return	Nothing
 */
int main(void)
{
	RTC_TIME_T FullTime;

	SystemCoreClockUpdate();
	Board_Init();

	fIntervalReached  = 0;
	fAlarmTimeMatched = 0;
	On0 = On1 = false;
	Board_LED_Set(2, false);

	DEBUGSTR("The RTC operates on a 1 Hz clock.\r\n" \
			 "Register writes can take up to 2 cycles.\r\n"	\
			 "It will take a few seconds to fully\r\n" \
			 "initialize it and start it running.\r\n\r\n");

	DEBUGSTR("We'll print a timestamp every 5 seconds.\r\n"	\
			 "...and another when the alarm occurs.\r\n");

	Chip_RTC_Init(LPC_RTC);

	/* Set current time for RTC 2:00:00PM, 2012-10-05 */
	FullTime.time[RTC_TIMETYPE_SECOND]  = 0;
	FullTime.time[RTC_TIMETYPE_MINUTE]  = 0;
	FullTime.time[RTC_TIMETYPE_HOUR]    = 14;
	FullTime.time[RTC_TIMETYPE_DAYOFMONTH]  = 5;
	FullTime.time[RTC_TIMETYPE_DAYOFWEEK]   = 5;
	FullTime.time[RTC_TIMETYPE_DAYOFYEAR]   = 279;
	FullTime.time[RTC_TIMETYPE_MONTH]   = 10;
	FullTime.time[RTC_TIMETYPE_YEAR]    = 2012;

	Chip_RTC_SetFullTime(LPC_RTC, &FullTime);

	/* Set ALARM time for 17 seconds from time */
	FullTime.time[RTC_TIMETYPE_SECOND]  = 17;
	Chip_RTC_SetFullAlarmTime(LPC_RTC, &FullTime);

	/* Set the RTC to generate an interrupt on each second */
	Chip_RTC_CntIncrIntConfig(LPC_RTC, RTC_AMR_CIIR_IMSEC, ENABLE);

	/* Enable matching for alarm for second, minute, hour fields only */
	Chip_RTC_AlarmIntConfig(LPC_RTC, RTC_AMR_CIIR_IMSEC | RTC_AMR_CIIR_IMMIN | RTC_AMR_CIIR_IMHOUR, ENABLE);

	/* Clear interrupt pending */
	Chip_RTC_ClearIntPending(LPC_RTC, RTC_INT_COUNTER_INCREASE | RTC_INT_ALARM);

	/* Enable RTC interrupt in NVIC */
	NVIC_EnableIRQ((IRQn_Type) RTC_IRQn);

	/* Enable RTC (starts increase the tick counter and second counter register) */
	Chip_RTC_Enable(LPC_RTC, ENABLE);

	/* Loop forever */
	while (1) {
		if (fIntervalReached) {	/* Every 5s */
			fIntervalReached = 0;

			On1 = (bool) !On1;
			Board_LED_Set(1, On1);

			/* read and display time */
			Chip_RTC_GetFullTime(LPC_RTC, &FullTime);
			showTime(&FullTime);
		}

		if (fAlarmTimeMatched) {
			fAlarmTimeMatched = false;

			/* announce event */
			DEBUGSTR("ALARM triggered!\r\n");
			Board_LED_Set(2, true);

			/* read and display time */
			Chip_RTC_GetFullTime(LPC_RTC, &FullTime);
			showTime(&FullTime);
		}
	}
}
Example #7
0
void skynetbase_gps_received_data(char gpsout[], uint8_t gpsoutpos) {
	gpsout[gpsoutpos] = 0;
	//DBG("%s\n", gpsout);

	char delim[] = ",";

	// parse message ID
	char *str = strtok(gpsout, delim);
	if (str == NULL) return;			// answer was too short
	if (strcmp(str, "$PUBX")) return;	// wrong answer type

	// parse propietary message identifier
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	if (strcmp(str, "00")) return;		// wrong answer type

	// parse time
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	if (strlen(str) < 6) return;		// wrong time format
	memcpy(current_data.time, str, 6);
	current_data.time[6] = 0;

	// parse latitude
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.lat = atof(str);

	// parse latitude direction
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.lat_dir = str[0];

	// parse longitude
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.lon = atof(str);

	// parse longitude direction
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.lon_dir = str[0];

	// parse altitude direction
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.alt = atof(str);

	// parse navigation status
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.status = '0';
	if (!(strcmp(str, "G3"))) current_data.status = 'G';
	else if (!(strcmp(str, "NF"))) current_data.status = 'N';

	// parse horizontal accuracy
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.accuracy_horizontal = atof(str);

	// parse vertical accuracy
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.accuracy_vertical = atof(str);

	/*
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	// ignore some data
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short


	// parse number of gps satellites // just works if no empty fields
	str = strtok(NULL, delim);
	if (str == NULL) return;			// answer was too short
	current_data.satellites = atoi(str);
	 */

	current_data.satellites = 0;

	events_enqueue(EVENT_GPS_DATA_AVAILABLE, NULL);

	// update RTC
	Chip_RTC_GetFullTime(LPC_RTC, &FullTime);
	sscanf(current_data.time, "%02d%02d%02d", &(FullTime.time[RTC_TIMETYPE_HOUR]),
			&(FullTime.time[RTC_TIMETYPE_MINUTE]), &(FullTime.time[RTC_TIMETYPE_SECOND]));
	Chip_RTC_SetFullTime(LPC_RTC, &FullTime);

	//DBG("Lat: %f (%c)\n", current_data.lat, current_data.lat_dir);
	//DBG("Lon: %f (%c)\n", current_data.lon, current_data.lon_dir);
}