const char *rtc_show_val_cb(guiObject_t *obj, const void *data) { (void)obj; u32 time = RTC_GetValue(); switch ((long)data) { case 0: // second sprintf(rp->tmpstr, "%02d", RTC_GetTimeValue(time) % 60); break; case 1: // minute sprintf(rp->tmpstr, "%02d", (RTC_GetTimeValue(time) / 60) % 60); break; case 2: // hour sprintf(rp->tmpstr, "%02d", (RTC_GetTimeValue(time) / 3600) % 24); break; case 3: // day RTC_GetDateStringLong(rp->tmpstr,time); rp->tmpstr[rp->tmpstr[1] == '.' ? 1 : 2] = 0; break; case 4: // month RTC_GetDateStringLong(rp->tmpstr,RTC_GetValue()); int idx = (rp->tmpstr[1] == '.' ? 1 : 2); rp->tmpstr[idx+3] = 0; return rp->tmpstr + idx + 1; case 5: // year RTC_GetDateStringLong(rp->tmpstr,RTC_GetValue()); return rp->tmpstr + (rp->tmpstr[1] == '.' ? 1 : 2) + 4; } return rp->tmpstr; }
void PAGE_RTCInit(int page) { (void)page; PAGE_SetModal(1); PAGE_RemoveAllObjects(); PAGE_ShowHeader_ExitOnly(PAGE_GetName(PAGEID_RTC), okcancel_cb); u32 time = RTC_GetValue(); u32 timevalue = RTC_GetTimeValue(time); Rtc.value[HOUR] = (u16)(timevalue / 3600); Rtc.value[MINUTE] = (u16)(timevalue % 3600) / 60; Rtc.value[SECOND] = (u16)(timevalue % 60); RTC_GetDateStringLong(tempstring,time); int idx = (tempstring[1] == '.' ? 1 : 2); tempstring[idx] = 0; tempstring[idx+3] = 0; Rtc.value[DAY] = atoi(tempstring); Rtc.value[MONTH] = atoi(tempstring + idx + 1); Rtc.value[YEAR] = atoi(tempstring + idx + 4); min[SECOND] = 0; max[SECOND] = 59; min[MINUTE] = 0; max[MINUTE] = 59; min[HOUR] = 0; max[HOUR] = 23; min[DAY] = 1; max[DAY] = daysInMonth[Rtc.value[MONTH] - 1] + (((Rtc.value[YEAR] % 4) == 0) && (Rtc.value[MONTH] == 2) ? 1 : 0); min[MONTH] = 1; max[MONTH] = 12; min[YEAR] = RTC_STARTYEAR; max[YEAR] = RTC_STARTYEAR + 67; _show_page(); }
const char *show_box_cb(guiObject_t *obj, const void *data) { (void)obj; u8 idx = (long)data; #if HAS_RTC if (idx <= NUM_RTC) { u32 time = RTC_GetValue(); idx == 1 ? RTC_GetTimeFormatted(tempstring, time) : RTC_GetDateFormatted(tempstring, time); return tempstring; } #endif if (idx - NUM_RTC <= NUM_TIMERS) { TIMER_SetString(tempstring, TIMER_GetValue(idx - NUM_RTC - 1)); } else if(idx - NUM_RTC - NUM_TIMERS <= NUM_TELEM) { TELEMETRY_GetValueStr(tempstring, idx - NUM_RTC - NUM_TIMERS); } else { unsigned channel = idx - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1); s16 val_raw = MIXER_GetChannel(channel, APPLY_SAFETY | APPLY_SCALAR); s16 val_scale = MIXER_GetChannelDisplayScale(channel); const char* val_format = MIXER_GetChannelDisplayFormat(channel); sprintf(tempstring, val_format, val_raw/val_scale); } return tempstring; }
const char *show_date_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; RTC_GetDateStringLong(tempstring, RTC_GetValue()); return tempstring; }
void RTC_GetTimeGTM(struct gtm *t) { uint32_t value = RTC_GetValue(); t->tm_sec = _RTC_GetSecond(value); t->tm_min = _RTC_GetMinute(value); t->tm_hour = _RTC_GetHour(value); t->tm_mday = _RTC_GetDay(value); t->tm_year = _RTC_GetYear(value) - 1900; }
const char *show_bigbox_cb(guiObject_t *obj, const void *data) { u8 idx = (long)data; if (idx <= NUM_RTC) { u32 time = RTC_GetValue(); idx == 1 ? RTC_GetTimeFormattedBigbox(tempstring, time) : RTC_GetDateFormattedBigbox(tempstring, time); return tempstring; } return show_box_cb(obj, data); }
void PAGE_RTCEvent() { static u32 lastrtcvalue = 0; u32 actualrtcvalue = RTC_GetValue(); if (lastrtcvalue != actualrtcvalue) { GUI_Redraw(&gui->secondvalue); GUI_Redraw(&gui->minutevalue); GUI_Redraw(&gui->hourvalue); lastrtcvalue = actualrtcvalue; } }
void turnOnLcdAndWriteTime(){//done LCD_TurnOnDisplay(); LCD_BL_State(1); RTC_GetValue(&dateTime); char time[time_len], date[date_len]; itot(time, dateTime.tm_hour, dateTime.tm_min); itod(date, dateTime.tm_mday, dateTime.tm_mon, dateTime.tm_year); LCD_Goto(3,1); LCD_WriteString(date); LCD_Goto(5,2); LCD_WriteString(time); LCD_Goto(5,3); //if(count>=0)LCD_WriteChar('*'); }
static const char *rtc_text_cb(guiObject_t *obj, const void *data) { (void)obj; unsigned int idx = (long)data; if (idx <= (sizeof(Rtc.value) / sizeof(Rtc.value[0]))) { GUI_DrawBackground(X(idx/3, 32) + ((idx%3 == 2) ? 67 : 0) - ((idx%3 == 0) ? 67 : 0), 84, 64, 16); idx = order[idx]; } switch (idx) { case SECOND: return _tr("Second"); case MINUTE: return _tr("Minute"); case HOUR: return _tr("Hour"); case DAY: return _tr("Day"); case MONTH: return _tr("Month"); case YEAR: return _tr("Year"); case ACTTIME: { RTC_GetTimeFormatted(tempstring, RTC_GetValue()); return tempstring; } case ACTDATE: { RTC_GetDateFormatted(tempstring, RTC_GetValue()); return tempstring; } case NEWTIME: { RTC_GetTimeFormatted(tempstring, RTC_GetSerial(Rtc.value[YEAR], Rtc.value[MONTH], Rtc.value[DAY], Rtc.value[HOUR], Rtc.value[MINUTE], Rtc.value[SECOND])); return tempstring; } case NEWDATE: { RTC_GetDateFormatted(tempstring, RTC_GetSerial(Rtc.value[YEAR], Rtc.value[MONTH], Rtc.value[DAY], Rtc.value[HOUR], Rtc.value[MINUTE], Rtc.value[SECOND])); return tempstring; } case TIMEBUTTON: return _tr("Set time"); case DATEBUTTON: return _tr("Set date"); case TIMELABEL: return _tr("Time format"); case DATELABEL: return _tr("Date format"); case SETLABEL: return _tr("value to set"); case RESULTLABEL: return _tr("resulting value"); } return _tr("Unknown"); }
s32 get_boxval(u8 idx) { #if HAS_RTC if (idx <= NUM_RTC) { u32 time = RTC_GetValue(); return idx == 1 ? RTC_GetTimeValue(time) : RTC_GetDateValue(time); } #endif if (idx - NUM_RTC <= NUM_TIMERS) return TIMER_GetValue(idx - NUM_RTC - 1); if(idx - NUM_RTC - NUM_TIMERS <= NUM_TELEM) return TELEMETRY_GetValue(idx - NUM_RTC - NUM_TIMERS); return RANGE_TO_PCT(MIXER_GetChannel(idx - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1), APPLY_SAFETY | APPLY_SCALAR)); }
double dtime() { RTC_Counter48 vr48; double q; RTC_GetValue(RTC, &vr48); // Get the timer value q = vr48.h * 0x10000; q += vr48.l; // Frequency is 32ms so change to seconds. q /= 32000; return q; }
const char *show_box_cb(guiObject_t *obj, const void *data) { (void)obj; u8 idx = (long)data; #if HAS_RTC if (idx <= NUM_RTC) { u32 time = RTC_GetValue(); idx == 1 ? RTC_GetTimeFormatted(tempstring, time) : RTC_GetDateFormatted(tempstring, time); return tempstring; } #endif if (idx - NUM_RTC <= NUM_TIMERS) { TIMER_SetString(tempstring, TIMER_GetValue(idx - NUM_RTC - 1)); } else if(idx - NUM_RTC - NUM_TIMERS <= NUM_TELEM) { TELEMETRY_GetValueStr(tempstring, idx - NUM_RTC - NUM_TIMERS); } else { sprintf(tempstring, "%3d%%", RANGE_TO_PCT(MIXER_GetChannel(idx - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1), APPLY_SAFETY | APPLY_SCALAR))); } return tempstring; }
void PAGE_RTCInit(int page) { (void)page; PAGE_SetModal(1); PAGE_RemoveAllObjects(); PAGE_ShowHeader_ExitOnly(PAGE_GetName(PAGEID_RTC), okcancel_cb); u32 time = RTC_GetValue(); u32 timevalue = RTC_GetTimeValue(time); Rtc.value[2] = (u16)(timevalue / 3600); Rtc.value[1] = (u16)(timevalue % 3600) / 60; Rtc.value[0] = (u16)(timevalue % 60); RTC_GetDateStringLong(rp->tmpstr,time); int idx = (rp->tmpstr[1] == '.' ? 1 : 2); rp->tmpstr[idx] = 0; rp->tmpstr[idx+3] = 0; Rtc.value[3] = atoi(rp->tmpstr); Rtc.value[4] = atoi(rp->tmpstr + idx + 1); Rtc.value[5] = atoi(rp->tmpstr + idx + 4); _show_page(); }
int main() { //time init structure struct tm ti; struct tm ret; //RTC_SetTime(14,20,00); ti.tm_hour = 14; ti.tm_min = 20; ti.tm_sec = 00; //RTC_SetDate(8,11,2013); ti.tm_mday = 8; ti.tm_mon = 11; ti.tm_year = 2013; //RTC_SetDays(5 ,365); ti.tm_wday = 5; ti.tm_yday = 365; SYSCLK_Init(1000); /* Acertar o clock do TIMER*/ RTC_Init(&ti); LCD_Init(); char buffer [16]; while(1) { RTC_GetValue(&ret); LCD_Goto(0,0); strftime(buffer,16,"%T",&ret); LCD_WriteString(buffer); } return 0; }
const char *rtc_show_val_cb(guiObject_t *obj, const void *data) { (void)obj; u32 time = RTC_GetValue(); switch ((long)data) { case SECOND: sprintf(tempstring, "%2d", RTC_GetTimeValue(time) % 60); break; case MINUTE: sprintf(tempstring, "%2d", (RTC_GetTimeValue(time) / 60) % 60); break; case HOUR: { u32 value = RTC_GetTimeValue(time) / 3600; if (Transmitter.rtcflags & CLOCK12HR) { u8 hour = value % 12; if (hour == 0) hour = 12; sprintf(tempstring, "%2d %s", hour, value > 12? "PM" : "AM"); } else { sprintf(tempstring, "%2d", value % 24); } break; } case DAY: RTC_GetDateStringLong(tempstring, time); tempstring[tempstring[1] == '.' ? 1 : 2] = 0; break; case MONTH: RTC_GetDateStringLong(tempstring, time); int idx = (tempstring[1] == '.' ? 1 : 2); tempstring[idx+3] = 0; if (tempstring[idx + 1] == '0') idx++; return tempstring + idx + 1; case YEAR: RTC_GetDateStringLong(tempstring, time); return tempstring + (tempstring[1] == '.' ? 1 : 2) + 4; } return tempstring; }
int main() { unsigned int nextState; unsigned int actualStateButton = 0; //Define a a data e hora que o sistema vai ter inicialmente //RTC_SetTime(00,00,00); ti.tm_hour = 00; ti.tm_min = 00; ti.tm_sec = 00; //RTC_SetDate(8,11,2013); ti.tm_mday = 8; ti.tm_mon = 11; ti.tm_year = 2013; //RTC_SetDays(5 ,365); ti.tm_wday = 5; ti.tm_yday = 365; //System init SYSCLK_Init(1000); /* Acertar o clock do TIMER*/ RTC_Init(&ti); /* Iniciar o RTC com a data e hora definida inifialmente*/ LCD_Init(); LCD_Clear(); I2C_Init(); RADIO_Init(); RADIO_SetFreq(89.9); WriteData(); while(1) { actualStateButton = Button_Read(); nextState = decodeButtons(actualStateButton); switch(nextState) { case CHANGE_HOURS: changeHours(&ti); break; case CHANGE_RADIO: changeRadio(&tea); LCD_Clear(); break; //Tambem devia de escrever a freq do radio case SHOW: RTC_GetValue(&ti); LCD_Goto(4,0); strftime(buffer,16,"%T",&ti); LCD_WriteString(buffer); ReadData(&tea); float fm = RADIO_GetFreq(&tea); int level = RADIO_Station_Level(&tea); int parteDecimal = (int)(fm*10)%10; sprintf(buffer, "%d.%dMHz L:%d",(int)fm,parteDecimal, level); LCD_Goto(0,1); LCD_WriteString(buffer); break; default: break; } } return 0; }
static const char *time_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; RTC_GetTimeStringShort(tempstring, RTC_GetValue()); return tempstring; }
// set time (don't change date) void RTC_SetTime(u16 hour, u16 minute, u16 second) { RTC_SetValue(RTC_GetDateValue(RTC_GetValue()) * DAYSEC + _RTC_GetSerialTime((int)hour, (int)minute, (int)second)); }
void PAGE_MainEvent() { int i; if (PAGE_GetModal()) { #if HAS_TELEMETRY if(pagemem.modal_page == 2) { PAGE_TelemtestEvent(); } #endif return; } volatile s32 *raw = MIXER_GetInputs(); for(i = 0; i < NUM_ELEMS; i++) { if (! ELEM_USED(pc->elem[i])) break; if (! OBJ_IS_USED(&gui->elem[i])) continue; int src = pc->elem[i].src; int type = ELEM_TYPE(pc->elem[i]); switch(type) { case ELEM_VTRIM: case ELEM_HTRIM: { int value = *(MIXER_GetTrim(src-1)); if (mp->elem[i] != value) { mp->elem[i] = value; GUI_Redraw(&gui->elem[i].bar); } break; } case ELEM_SMALLBOX: case ELEM_BIGBOX: { s32 val = get_boxval(src); #if HAS_RTC if (src <= NUM_RTC) { if (mp->elem[i] != val) { mp->elem[i] = val; GUI_Redraw(&gui->elem[i].box); } } else #endif if (src - NUM_RTC <= NUM_TIMERS) { //Timer if ((val >= 0 && mp->elem[i] < 0) || (val < 0 && mp->elem[i] >= 0)) { GUI_SetLabelDesc(&gui->elem[i].box, get_box_font(type == ELEM_BIGBOX ? 0 : 2, val < 0)); mp->elem[i] = val; GUI_Redraw(&gui->elem[i].box); } else if (mp->elem[i] / 1000 != val /1000) { mp->elem[i] = val; GUI_Redraw(&gui->elem[i].box); } } else if (src - NUM_RTC - NUM_TIMERS <= NUM_TELEM) { //Telem int alarm = TELEMETRY_HasAlarm(src - NUM_RTC - NUM_TIMERS); if (alarm || ! TELEMETRY_IsUpdated(0xff)) { GUI_SetLabelDesc(&gui->elem[i].box, get_box_font(type == ELEM_BIGBOX ? 0 : 2, 1)); } else if(mp->elem[i] != val) { GUI_SetLabelDesc(&gui->elem[i].box, get_box_font(type == ELEM_BIGBOX ? 0 : 2, 0)); mp->elem[i] = val; GUI_Redraw(&gui->elem[i].box); } } else if (mp->elem[i] != val) { //Source mp->elem[i] = val; GUI_Redraw(&gui->elem[i].box); } break; } case ELEM_BAR: { s32 chan = MIXER_GetChannel(src-1, APPLY_SAFETY); if (mp->elem[i] != chan) { mp->elem[i] = chan; GUI_Redraw(&gui->elem[i].bar); } break; } case ELEM_TOGGLE: { src = MIXER_SRC(src); int idx = -1; if(src) { if (src > INP_HAS_CALIBRATION && src < INP_LAST) { //switch for (int j = 0; j < 3; j++) { // Assume switch 0/1/2 are in order if(ELEM_ICO(pc->elem[i], j) && raw[src+j] > 0) { idx = ELEM_ICO(pc->elem[i], j); break; } } } else { //Non switch int sw = raw[src] > 0 ? 1 : 0; if (ELEM_ICO(pc->elem[i], sw)) { idx = ELEM_ICO(pc->elem[i], sw); } } } if (idx != -1) { #ifdef HAS_CHAR_ICONS gui->elem[i].box.cb_data = (void *)(long)idx; #else struct ImageMap img; img = TGLICO_GetImage(idx); GUI_ChangeImage(&gui->elem[i].img, img.file, img.x_off, img.y_off); #endif GUI_SetHidden((guiObject_t *)&gui->elem[i], 0); } else { GUI_SetHidden((guiObject_t *)&gui->elem[i], 1); } } break; case ELEM_BATTERY: _check_voltage(&gui->elem[i].box); break; } } if(HAS_TOUCH) //FIXME: Hack to let 320x240 GUI continue to work _check_voltage(NULL); #if HAS_RTC if(Display.flags & SHOW_TIME) { u32 time = RTC_GetValue() / 60; if(mp->time != time) { mp->time = time; GUI_Redraw(&gui->time); } } #endif }
// set date (don't change time) void RTC_SetDate(uint16_t year, uint16_t month, uint16_t day) { RTC_SetValue(RTC_GetTimeValue(RTC_GetValue()) + _RTC_GetSerialDate((int)year, (int)month, (int)day)); }
// set date (don't change time) void RTC_SetDate(u16 year, u16 month, u16 day) { RTC_SetValue(RTC_GetTimeValue(RTC_GetValue()) + _RTC_GetSerialDate((int)year, (int)month, (int)day)); }
int main(){ Init(); int i=0; RTC_GetValue(pDateTime); /*while(i<5){ t = getActualTemperature(); LOG_RegistDataTemp(pLog+i,pDateTime,t); pDateTime->tm_hour +=1; i++; } i=0; while(i<5){ LOG_ShowRegist(pLog+i); TMR0_Delay(3000); i++; } //FIM LOg*/ unsigned t, now; tmax= THERM_Temp2short(35); tmin =THERM_Temp2short(30); RTC_GetValue(pDateTime); int buttons; while(1){ buttons = BUTTONCTRL_GetButtonsEvolution(); //MODO MANUTENCAO if(mod == APP && (buttons == UPDOWNPRESSED)){ LCD_Clear(); LCD_WriteString("MANUTENCAO"); while(!BUTTONCTRL_RELEASE()); mod = MANAGER; } //MOSTRAR TEMP ACT if(mod == APP && (buttons == UPPRESSED || buttons == DOWNPRESSED)){ LCD_Clear(); LCD_WriteString("SHOW"); while(!BUTTONCTRL_RELEASE()); } //t = THERM_getActualTemperature(); //if(THERM_compareTemperature((short)t,tmax) > 0 ){ //Cooling_ON(&c); //now = TMR0_GetValue(); //while(THERM_compareTemperature((short)t,tmax) > 0 ){ //if(TicksToMS(TMR0_Elapsed(now)) >= 60000){ //Alarm_ON(&a); //while(1){ //Button_getState(pButs, 1); //if(pButs->currentState == just_pressed){ //while(1){ //Button_getState(pButs,1); //if((pButs)->currentState == just_released) //break; //} //break; //} //} //Alarm_OFF(&a); //break; //} //t = THERM_getActualTemperature(); //} //Cooling_OFF(&c); //} //if(THERM_compareTemperature((short)t,tmin) <0){ //Heating_ON(&h); //now = TMR0_GetValue(); //while(THERM_compareTemperature((short)t,tmin) <0){ //if(TicksToMS(TMR0_Elapsed(now)) >= 60000){ //Alarm_ON(&a); //while(1){ //Button_getState(pButs, 1); //if(pButs->currentState == just_pressed){ //while(1){ //Button_getState(pButs,1); //if((pButs)->currentState == just_released) //break; //} //break; //} //} //Alarm_OFF(&a); //break; //} //t = THERM_getActualTemperature(); //} //Heating_OFF(&h); //} /* if(mod == APP && Button_PressedMoreThan(bUpDown,2000,2) ==1){ mod = MANAGER; } Button_getState(pUD, 2); if(mod == APP && (pUD)->currentState == just_pressed){ while(1){ Button_getState(pUD,1); if((pUD)->currentState == just_released) break; } mod = SHOW; } if(mod == APP && (pUD+1)->currentState == just_pressed){ while(1){ Button_getState(pUD+1,1); if((pUD+1)->currentState == just_released) break; } mod = SHOW; } */ Execute(); } }