ebus: Add data structures for a node name
authorWerner Koch <wk@gnupg.org>
Mon, 9 Jan 2012 08:43:58 +0000 (09:43 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 9 Jan 2012 08:43:58 +0000 (09:43 +0100)
ebus/hardware.c
ebus/housectl.c
ebus/housed.c
ebus/proto-busctl.h
ebus/shutter.c

index daa64a1..99e37d1 100644 (file)
@@ -49,7 +49,9 @@ struct __attribute__ ((packed)) ee_config_s
   uint8_t   nodeid_lo;
   uint8_t   reserved1;
   uint8_t   debug_flags;
-  uint8_t   reservedx[10];
+  uint8_t   reserved2;
+  uint8_t   reserved3;
+  uint8_t   name[8];  /* The human readable name of the node.  */
 };
 
 struct ee_config_s ee_config EEMEM = {0};
@@ -66,7 +68,6 @@ static volatile uint16_t current_time;
 static volatile uint16_t current_clock;
 
 
-
 \f
 /* Read key S2.  Return true once at the first debounced leading edge
    of the depressed key.  For correct operation this function needs to
index 62e9206..a857614 100644 (file)
@@ -331,6 +331,31 @@ cmd_query_version (FILE *fp)
 }
 
 
+static void
+cmd_query_name (FILE *fp)
+{
+  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_QRY_NAME;
+  memset (msg+6, 0, 10);
+  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_set_debug_flags (FILE *fp, byte value)
@@ -836,6 +861,8 @@ main (int argc, char **argv )
     cmd_query_time (fp);
   else if (!strcmp (cmd, "query-version"))
     cmd_query_version (fp);
+  else if (!strcmp (cmd, "query-name"))
+    cmd_query_name (fp);
   else if (!strcmp (cmd, "set-debug"))
     cmd_set_debug_flags (fp, strtoul (cmdargs, NULL, 0));
   else if (!strcmp (cmd, "query-debug"))
index b733ea6..0983e73 100644 (file)
@@ -337,6 +337,12 @@ p_busctl_version (byte *msg, size_t msglen)
               (msg[7] || msg[15])? "[reserved octets are not 0]":"");
 }
 
+static void
+p_busctl_qry_name (byte *msg, size_t msglen)
+{
+  logmsg_fmt ("nodetype=%u name=\"%.8s\"", msg[6], msg+8);
+}
+
 
 static void
 p_busctl_set_debug (byte *msg, size_t msglen)
@@ -383,6 +389,12 @@ process_ebus_busctl (byte *msg, size_t msglen)
         p_busctl_version (msg, msglen);
       break;
 
+    case P_BUSCTL_QRY_NAME:
+      logmsg_fmt ("%s:QueryName", is_response?"Rsp":"Cmd");
+      if (is_response)
+        p_busctl_qry_name (msg, msglen);
+      break;
+
     case P_BUSCTL_SET_DEBUG:
       logmsg_fmt ("%s:SetDebug", is_response?"Rsp":"Cmd");
       if (!is_response)
index e6c983f..32d6240 100644 (file)
   byte 6     - Debug flags
   byte 7..15 - rfu
 
+* 0x06 := Query Name
+
+  byte 6..15 - rfu, must be 0.
+
+  Response format:
+
+  byte 6   - nodetype (NODETYPE_xxxx)
+  byte 7   - reserved
+  byte 8..15 - name of the node
+
 */
 
 #include "protocol.h"
 #define P_BUSCTL_QRY_VERSION 0x03 /* Query software version.  */
 #define P_BUSCTL_SET_DEBUG   0x04 /* Set debug flags.  */
 #define P_BUSCTL_QRY_DEBUG   0x05 /* Query debug flags.  */
+#define P_BUSCTL_QRY_NAME    0x06 /* Query Name.  */
 
 #endif /*PROTO_BUSCTL_H*/
index f4713c3..d09ddef 100644 (file)
@@ -711,6 +711,21 @@ process_ebus_busctl (byte *msg)
       csma_send_message (msg, MSGSIZE);
       break;
 
+      /* FIXME: Better move this into hardware.c */
+    /* case P_BUSCTL_QRY_NAME: */
+    /*   msg[1] = msg[3]; */
+    /*   msg[2] = msg[4]; */
+    /*   msg[3] = config.nodeid_hi; */
+    /*   msg[4] = config.nodeid_lo; */
+    /*   msg[5] |= P_BUSCTL_RESPMASK; */
+    /*   msg[6] = eeprom_read_byte (&ee_data.nodetype); */
+    /*   msg[7] = 0; */
+    /*   eeprom_read_block (msg+8, config */
+    /*   memcpy_P (msg+8, PSTR (GIT_REVISION), 7); */
+    /*   msg[15] = 0; */
+    /*   csma_send_message (msg, MSGSIZE); */
+    /*   break; */
+
     case P_BUSCTL_SET_DEBUG:
       set_debug_flags (msg[6]);
       break;