ebus: Various changes for easier debugging
authorWerner Koch <wk@gnupg.org>
Fri, 6 Jan 2012 09:08:32 +0000 (10:08 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 6 Jan 2012 09:08:32 +0000 (10:08 +0100)
ebus/ebus.h
ebus/hardware.c
ebus/housectl.c
ebus/housed.c
ebus/onewire.c
ebus/proto-busctl.h
ebus/shutter.c

index 49af5ce..54ac12b 100644 (file)
@@ -36,6 +36,7 @@ struct
 {
   byte nodeid_hi;
   byte nodeid_lo;
+  byte debug_flags;
 } config;
 
 
@@ -53,6 +54,7 @@ byte read_key_s3 (void);
 uint16_t get_current_time (void);
 uint16_t get_current_fulltime (byte *r_deci);
 void set_current_fulltime (uint16_t tim, byte deci);
+void set_debug_flags (uint8_t value);
 
 
 /*-- csma.c --*/
index 3214805..daa64a1 100644 (file)
 struct __attribute__ ((packed)) ee_config_s
 {
   uint16_t  reserved;
-  byte      nodeid_hi;
-  byte      nodeid_lo;
-  byte      reserved2[12];
+  uint8_t   nodeid_hi;
+  uint8_t   nodeid_lo;
+  uint8_t   reserved1;
+  uint8_t   debug_flags;
+  uint8_t   reservedx[10];
 };
 
 struct ee_config_s ee_config EEMEM = {0};
@@ -126,6 +128,15 @@ set_current_fulltime (uint16_t tim, byte deci)
 }
 
 
+void
+set_debug_flags (uint8_t value)
+{
+
+  eeprom_update_byte (&ee_config.debug_flags, value);
+  config.debug_flags = value;
+}
+
+
 \f
 /*
    Interrupt service routines
@@ -198,7 +209,7 @@ hardware_setup (byte nodetype)
   /* Copy some configuration data into the RAM.  */
   config.nodeid_hi = eeprom_read_byte (&ee_config.nodeid_hi);
   config.nodeid_lo = eeprom_read_byte (&ee_config.nodeid_lo);
-
+  config.debug_flags = eeprom_read_byte (&ee_config.debug_flags);
 
   /* Lacking any better way to seed rand we use the node id.  A better
      way would be to use the low bit of an ADC to gather some entropy.
index 74ad4b5..9679f46 100644 (file)
@@ -333,6 +333,33 @@ cmd_query_version (FILE *fp)
 
 
 static void
+cmd_set_debug_flags (FILE *fp, byte value)
+{
+  byte msg[16];
+  unsigned int crc;
+  int idx;
+
+  msg[0] = PROTOCOL_EBUS_BUSCTL;
+  msg[1] = node_high;
+  msg[2] = node_low;
+  msg[3] = my_addr_high;
+  msg[4] = my_addr_low;
+  msg[5] = P_BUSCTL_SET_DEBUG;
+  msg[6] = value;
+  memset (msg+7, 0, 9);
+  crc = compute_crc (msg, 16);
+
+  send_byte_raw (fp, FRAMESYNCBYTE);
+  for (idx=0; idx < 16; idx++)
+    send_byte (fp, msg[idx]);
+  send_byte (fp, crc >> 8);
+  send_byte (fp, crc);
+  fflush (fp);
+}
+
+
+
+static void
 cmd_query_shutter_schedule (FILE *fp)
 {
   byte msg[16];
@@ -770,6 +797,7 @@ main (int argc, char **argv )
              "broadcast-time\n"
              "query-time\n"
              "query-version\n"
+             "set-debug VALUE\n"
              "query-shutter-state\n"
              "query-shutter-schedule\n"
              "set-shutter-schedule SLOTNO TIMESPEC up|down\n"
@@ -784,6 +812,8 @@ main (int argc, char **argv )
     cmd_query_time (fp);
   else if (!strcmp (cmd, "query-version"))
     cmd_query_version (fp);
+  else if (!strcmp (cmd, "set-debug"))
+    cmd_set_debug_flags (fp, strtoul (cmdargs, NULL, 0));
   else if (!strcmp (cmd, "query-shutter-state"))
     cmd_query_shutter_state (fp);
   else if (!strcmp (cmd, "query-shutter-schedule"))
index 31818dd..4842670 100644 (file)
@@ -220,7 +220,18 @@ compute_crc (const unsigned char *msg, size_t msglen)
 static void
 logmsg_start (const char *text)
 {
-  fprintf (stdout, "[%s]", text);
+  struct tm *tp;
+  time_t atime = time (NULL);
+
+  tp = localtime (&atime);
+  fprintf (stdout, "%s_%02d:%02d:%02d [%s]",
+           tp->tm_wday == 1? "Mon":
+           tp->tm_wday == 2? "Tue":
+           tp->tm_wday == 3? "Wed":
+           tp->tm_wday == 4? "Thu":
+           tp->tm_wday == 5? "Fri":
+           tp->tm_wday == 6? "Sat": "Sun",
+           tp->tm_hour, tp->tm_min, tp->tm_sec, text);
 }
 
 static void
@@ -233,7 +244,7 @@ logmsg_end ()
 static void
 logmsg_addr (byte *msg, size_t msglen)
 {
-  fprintf (stdout, " %02x.%02x->%02x.%02x",
+  fprintf (stdout, " %02x:%02x->%02x:%02x",
            msg[3], msg[4], msg[1], msg[2]);
 
   if (msg[3] == 0xff || msg[4] == 0xff)
@@ -296,8 +307,8 @@ process_ebus_test (byte *msg, size_t msglen)
 static void
 process_ebus_dbgmsg (byte *msg, size_t msglen)
 {
-  logmsg_start ("dbgmsg");
-  logmsg_fmt ("%02x.%02x => %.13s", msg[1], msg[2], msg+3);
+  logmsg_start ("dbg");
+  logmsg_fmt ("%02x:%02x->ff:ff \"%.13s\"", msg[1], msg[2], msg+3);
   logmsg_end ();
 }
 
@@ -327,13 +338,20 @@ p_busctl_version (byte *msg, size_t msglen)
 }
 
 
+static void
+p_busctl_set_debug (byte *msg, size_t msglen)
+{
+  logmsg_fmt ("flags=%02x", msg[6]);
+}
+
+
 /* Process busctl messages.  */
 static void
 process_ebus_busctl (byte *msg, size_t msglen)
 {
   char is_response = !!(msg[5] & P_BUSCTL_RESPMASK);
 
-  logmsg_start ("busctl");
+  logmsg_start ("bus");
   logmsg_addr (msg, msglen);
 
   switch ((msg[5] & ~P_BUSCTL_RESPMASK))
@@ -358,6 +376,12 @@ process_ebus_busctl (byte *msg, size_t msglen)
         p_busctl_version (msg, msglen);
       break;
 
+    case P_BUSCTL_SET_DEBUG:
+      logmsg_fmt ("%s:SetDebug", is_response?"Rsp":"Cmd");
+      if (!is_response)
+        p_busctl_set_debug (msg, msglen);
+      break;
+
     default:
       logmsg_fmt ("%s:%02x", is_response?"Rsp":"Cmd", msg[5]);
       break;
index 2b8308c..9967f91 100644 (file)
@@ -74,7 +74,7 @@ read_bit (void)
 {
   uint8_t c;
 
-  OW_Bus_PORT |= _BV(1);
+  /* OW_Bus_PORT |= _BV(1); */
 
   /* Drive low for at least 1us; we use 2us.  */
   OW_Bus_PORT &= ~_BV(OW_Bus_BIT);
@@ -131,13 +131,14 @@ onewire_read_byte (void)
   uint8_t c, i;
   uint8_t mask;
 
-  OW_Bus_PORT |= _BV(1);
+  /* OW_Bus_PORT |= _BV(1); */
 
   c = 0;
   for (mask=1, i=0; i < 8; mask <<= 1, i++)
     if (read_bit ())
       c |= mask;
-  OW_Bus_PORT &= ~_BV(1);
+
+  /* OW_Bus_PORT &= ~_BV(1); */
 
   return c;
 }
@@ -165,8 +166,6 @@ onewire_setup (void)
   OW_Bus_DDR  |= _BV(OW_Bus_BIT);
 
   /* For debugging.  */
-  OW_Bus_PORT &= ~_BV(1);
-  OW_Bus_DDR  |= _BV(1);
-
-
+  /* OW_Bus_PORT &= ~_BV(1); */
+  /* OW_Bus_DDR  |= _BV(1); */
 }
index bf222ea..e25fd10 100644 (file)
   byte 7   - reserved
   byte 8..14 - GIT revision string or "unknown".
   byte 15   - reserved
+
+* 0x04 := Set Debug Flags
+
+  byte 6     - Debug flags
+  byte 7..15 - rfu
+
+  No responses are defined.
 */
 
 #include "protocol.h"
 #define P_BUSCTL_TIME        0x01 /* Time Broadcast.  */
 #define P_BUSCTL_QRY_TIME    0x02 /* Query Time.  */
 #define P_BUSCTL_QRY_VERSION 0x03 /* Query software version.  */
-
+#define P_BUSCTL_SET_DEBUG   0x04 /* Set debug flags.  */
 
 #endif /*PROTO_BUSCTL_H*/
index 66438f1..d431ba1 100644 (file)
@@ -108,7 +108,7 @@ static volatile enum action_values next_action;
    QueryShutterState response message.  */
 static volatile byte shutter_state;
 
-/* Event flag, triggred (surprise) every 10 seconds.  */
+/* Event flag, triggerd (surprise) every 10 seconds.  */
 static volatile byte ten_seconds_event;
 
 
@@ -251,18 +251,22 @@ ticker_bottom (unsigned int clock)
 }
 
 
-/* static void */
-/* send_dbgmsg (const char *string) */
-/* { */
-/*   byte msg[16]; */
-
-/*   msg[0] = PROTOCOL_EBUS_DBGMSG; */
-/*   msg[1] = config.nodeid_hi; */
-/*   msg[2] = config.nodeid_lo; */
-/*   memset (msg+3, 0, 13); */
-/*   strncpy (msg+3, string, 13); */
-/*   csma_send_message (msg, 16); */
-/* } */
+static void
+send_dbgmsg (const char *string)
+{
+  byte msg[16];
+
+  if (config.debug_flags)
+    {
+      msg[0] = PROTOCOL_EBUS_DBGMSG;
+      msg[1] = config.nodeid_hi;
+      msg[2] = config.nodeid_lo;
+      memset (msg+3, 0, 13);
+      strncpy (msg+3, string, 13);
+      csma_send_message (msg, 16);
+    }
+}
+
 
 /* static void */
 /* send_dbgmsg_fmt (const char *format, ...) */
@@ -330,9 +334,15 @@ process_schedule (uint16_t time, uint16_t forced_tlow)
       tfound %= 6;
       /* send_dbgmsg_fmt ("act=%u", tfound); */
       if (tfound == SCHEDULE_ACTION_UP)
-        next_action = action_up;
+        {
+          next_action = action_up;
+          send_dbgmsg ("sch-act up");
+        }
       else if (tfound == SCHEDULE_ACTION_DOWN)
-        next_action = action_down;
+        {
+          next_action = action_down;
+          send_dbgmsg ("sch-act dn");
+        }
     }
 }
 
@@ -370,9 +380,15 @@ process_shutter_cmd (byte *msg)
             || (msg[8] & 0x20)    /* Not yet supported.  */ )
           err = 1;
         else if ((msg[8] & 0xc0) == 0xc0)
-          next_action = action_up;
+          {
+            next_action = action_up;
+            send_dbgmsg ("bus-act up");
+          }
         else if ((msg[8] & 0xc0) == 0x80)
-          next_action = action_down;
+          {
+            next_action = action_down;
+            send_dbgmsg ("bus-act dn");
+          }
         else
           err = 1;
 
@@ -467,8 +483,8 @@ process_shutter_cmd (byte *msg)
 static void
 process_sensor_cmd (byte *msg)
 {
-  uint16_t val16;
-  byte err = 0;
+  /* uint16_t val16; */
+  /* byte err = 0; */
 
   switch (msg[6])
     {
@@ -590,6 +606,10 @@ process_ebus_busctl (byte *msg)
       csma_send_message (msg, MSGSIZE);
       break;
 
+    case P_BUSCTL_SET_DEBUG:
+      set_debug_flags (msg[6]);
+      break;
+
     default:
       break;
     }