void main(void) { unsigned char counter; BYTE camera_on = FALSE; BYTE camera_rec = FALSE; BYTE sw_e_prev = FALSE; BYTE sw_w_prev = FALSE; TRISA = OUTPUT; initBoard(); initLCD(); clearLCD(); backlightOn(); setCursorLCD(0,0); appendStringToLCD("The Stalker"); setCursorLCD(1, 0); appendStringToLCD("..........."); while (TRUE) { if (SW_E == PRESSED) { sw_e_prev = TRUE; } else if (sw_e_prev == TRUE) { //SW_E key up sw_e_prev = FALSE; clearLCD(); setCursorLCD(0,0); if (camera_on == TRUE) { appendStringToLCD("Shut down cam"); camera_on = FALSE; } else { appendStringToLCD("Power up cam"); camera_on = TRUE; } switchPower(); } if (SW_W == PRESSED) { sw_w_prev = TRUE; } else if (sw_w_prev == TRUE) { //SW_E key up sw_w_prev = FALSE; clearLCD(); setCursorLCD(0,0); if (camera_rec == TRUE) { appendStringToLCD("Stop rec"); camera_rec = FALSE; } else { appendStringToLCD("Start rec"); camera_rec = TRUE; } switchRec(); } delay_ms(200); } }
keyType lcdscreentimer::keyEventHandler( keyType key ) { switch( key ) { case eKeyA: if( m_editMode ) { } else return eKeyCancel; break; case eKeyB: if( m_editMode ) { } else { /* if( m_timerActive && m_lastRecordState ) { lcdscreenmain *main = static_cast<lcdscreenmain*>(lcdscreen::getScreen(RECORD_PLAY_SCREEN)); main->stopRecording(); }*/ m_timerActive = !m_timerActive; if( m_timerActive ) m_timerSeconds = 0; // start timer for auto switching else switchPower(!m_timerActive, false); activatedHandler(); } repaint(); break; case eKeyC: if( m_timerActive ) { m_timerSeconds = -1; // reset timer for auto switching if( m_lastRecordState ) { lcdscreenQuestion::setMessage(" Recording!"); lcdscreenQuestion::setButtons(""); lcdscreen::activateScreen(MESSAGE_SCREEN); } else if( m_lastSwitcherManuState ) { switchPower(m_lastSwitcherAutoState, false); // strings[7].text = "On"; } else { switchPower(m_lastSwitcherAutoState, true); // strings[7].text = "Off"; } activatedHandler(); } else { m_editMode = !m_editMode; if( m_editMode ) { if( m_selectedTime>=0 ) { if( m_timerStart[m_selectedTime]==-1 ) { lcdscreenedit::setInputString(""); } else lcdscreenedit::setInputString(timerText[m_selectedTime]); } // else // lcdscreenedit::setInputString(""); lcdscreen::activateScreen(EDIT_SCREEN); } } repaint(); break; case eKeyCancel: if( strlen(lcdscreenedit::getInputString())>0 ) { if( !scantimerSetting(lcdscreenedit::getInputString(),m_selectedTime) ) // m_timercount = m_selectedTime+1; // else m_timerStart[m_selectedTime] = m_timerStop[m_selectedTime] = -1; FILE *fp = fopen("/home/pi/usbstick/timer.txt","w"); if( fp ) { for( int i=0; i<5; i++ ) { if( m_timerStart[i]>=0 && m_timerStop[i]>=0 ) { struct tm starting = *lcdscreen::fromTimeInSeconds(m_timerStart[i]); struct tm stopping = *lcdscreen::fromTimeInSeconds(m_timerStop[i]); fprintf(fp,"%02d.%02d.%04d %02d:%02d-%02d:%02d\n",starting.tm_mday,starting.tm_mon+1,starting.tm_year+1900, starting.tm_hour,starting.tm_min,stopping.tm_hour,stopping.tm_min); } } fclose(fp); } else myprintf("+++ could not write timer file!\n"); } m_editMode = false; activatedHandler(); break; case eKeyUp: if( m_selectedTime>=0 ) m_selectedTime--; repaint(); break; case eKeyDown: if( m_selectedTime<4 ) m_selectedTime++; repaint(); break; default: break; } return eKeyNone; }
keyType lcdscreentimer::secTimerHandler(struct tm *result) { int actualTimerSecs = lcdscreen::toTimeInSeconds(result); if( m_timerSeconds>=0 ) { m_timerSeconds++; if( m_timerSeconds>10 ) { switchPower(!m_timerActive, m_lastSwitcherManuState); m_timerSeconds = -1; activatedHandler(); } } if( m_timerActive ) { if( actualTimerSecs%2 ) strings[6].visible = true; else strings[6].visible = false; repaint(); } if( m_updateTimerSettings ) { m_timercount = 0; for( int i=0; i<5; i++ ) m_timerStart[i] = m_timerStop[i] = -1; FILE *fp = fopen("/home/pi/usbstick/timer.txt","r"); if( fp ) { char buffer[1024]; while( fgets(buffer,1023,fp) ) scantimerSetting(buffer); fclose(fp); } m_updateTimerSettings = false; } if( m_timerActive ) { bool switcherOn = false; bool recordOn = false; for( int i=0; i<5; i++ ) { if( m_timerStart[i]==-1 || m_timerStop[i]==-1 ) continue; if( actualTimerSecs>=(m_timerStart[i]-60) && actualTimerSecs<=(m_timerStop[i]+60) ) switcherOn = true; if( actualTimerSecs>=m_timerStart[i] && actualTimerSecs<=m_timerStop[i] ) recordOn = true; } if( m_timerSeconds==-1 ) switchPower(switcherOn, m_lastSwitcherManuState); if( recordOn!=m_lastRecordState ) { m_lastRecordState = recordOn; myprintf("record!\n"); lcdscreenmain *main = static_cast<lcdscreenmain*>(lcdscreen::getScreen(RECORD_PLAY_SCREEN)); if( recordOn ) main->startRecording(); else main->stopRecording(); activatedHandler(); } } return eKeyNone; }