Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
const char *show_date_cb(guiObject_t *obj, const void *data)
{
    (void)obj;
    (void)data;
    RTC_GetDateStringLong(tempstring, RTC_GetValue());
    return tempstring;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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);
}
Exemplo n.º 7
0
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;
    }
}
Exemplo n.º 8
0
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('*');
}
Exemplo n.º 9
0
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");
}
Exemplo n.º 10
0
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));
}
Exemplo n.º 11
0
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;
}
Exemplo n.º 12
0
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;
}
Exemplo n.º 13
0
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();
}
Exemplo n.º 14
0
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;
}
Exemplo n.º 15
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;
}
Exemplo n.º 16
0
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;
}
Exemplo n.º 17
0
static const char *time_cb(guiObject_t *obj, const void *data) {
    (void)obj;
    (void)data;
    RTC_GetTimeStringShort(tempstring, RTC_GetValue());
    return tempstring;
}
Exemplo n.º 18
0
// 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));
}
Exemplo n.º 19
0
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
}
Exemplo n.º 20
0
// 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));
}
Exemplo n.º 21
0
// 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));
}
Exemplo n.º 22
0
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();
	}
}