示例#1
0
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;
}