 void system_sleep() {                   // システム停止 
   cbi(ADCSRA,ADEN);                     // ADC 回路電源をOFF (ADC使って無くても120μA消費するため）
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // パワーダウンモード
+//  set_sleep_mode(SLEEP_MODE_PWR_SAVE);  // パワーダウンモード
   sleep_enable();
   sleep_mode();                         // ここでスリープに入る
   sleep_disable();                      // WDTがタイムアップしたらここから動作再開 
+  wdt_reset();
   sbi(ADCSRA,ADEN);                     // ADC ON
 }  //system_sleep
 

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

enum {
  STATE_STANDBY,    // Standby mode
  STATE_SLEEP,      // run state when wdt is on.
  STATE_RUN,        // Full run
};

enum {
  RPI_POWER_ON,
  RPI_POWER_OFF
};

typedef struct config_info {
  unsigned char mEEPROMVersion;
  unsigned char mAutoPowerOnMode;
  unsigned long mIntervalTime;
  int           m_GPIO1mode;
  int           m_GPIO2mode;
  int           m_GPIO3mode;
  int           m_GPIO4mode;

  int           m_bPowerStatus;   // RPIの電源ON/OFF状態
  unsigned long m_lRunTime;       // Arduino側の連続通電時間（秒）
  unsigned long m_TimerCounter;   // Interval Timer Counter
  unsigned long m_WdtCounter;     // Watch dog Timer Counter

  bool          m_bPowerOffEventSignaled;   // RPiからのイベント入ったかフラグ
  bool          m_RTCEventSignaled;         // RTCからのイベント入ったかフラグ
  bool          m_PowerKeyEventSignaled;
  
} CONFIG_TSUBUTA;



typedef struct _command_info_ {
  unsigned char m_ucCommand;
  unsigned char m_ucLength;
  bool          m_bReply;
} COMMAND_TABLE;


typedef struct _buffer_tag_ {
  unsigned char   len;


volatile RCVCMD g_RcvCmd;

const COMMAND_TABLE   g_cCommandInfo[] = {
  { 0x00 , 0x01 , true },     // Get Baord Information 
  { 0x01 , 0x05 , false },    // Set Interval Timer |
  { 0x02 , 0x01 , false },    // RPi Power Off |
  { 0x10 , 0x01 , true },    // RPi Power Off |
  { 0x11 , 0x01 , true },    // RPi Power Off |
  { 0x12 , 0x01 , true },    // RPi Power Off |
  { 0xFF , 0xFF, false },   
};


// ====================================================
