Update of /cvsroot/firebug/fireboard/tools/src/xlisten
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22671
Modified Files:
xpacket.c
Log Message:
Added parse table to xpacket.c
Index: xpacket.c
===================================================================
RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/xpacket.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** xpacket.c 15 Jul 2004 17:03:39 -0000 1.1
--- xpacket.c 21 Jul 2004 13:25:52 -0000 1.2
***************
*** 60,64 ****
XbowSensorboardPacket *xpacket_get_sensor_data(unsigned char *tos_packet)
{
! return (XbowSensorboardPacket *)(tos_packet + XPACKET_DATASTART);
}
--- 60,64 ----
XbowSensorboardPacket *xpacket_get_sensor_data(unsigned char *tos_packet)
{
! return (XbowSensorboardPacket *)(tos_packet + g_datastart);
}
***************
*** 116,120 ****
case XPACKET_TEXT_MSG:
packet->reserved2 = '\0';
! printf("msg from id=%d: %s\n", packet->node_id, packet->data);
return;
}
--- 116,121 ----
case XPACKET_TEXT_MSG:
packet->reserved2 = '\0';
! printf("msg from id=%d: %s\n", packet->node_id,
! (char *)packet->data);
return;
}
***************
*** 169,172 ****
--- 170,227 ----
}
+
+ // This typedef eventually gets moved to a header file
+ typedef struct _packetprinter Packetprinter;
+
+ // Keep this as incomplete type to eliminate unnecessary
+ // meddling. The definition can probably be expanded to
+ // include more than cooked.
+ struct _packetprinter {
+ unsigned int type;
+ void (*print)(XbowSensorboardPacket *packet);
+ };
+
+
+ // Add XTYPE and function for cooking up output anywhere
+ // before the last (0,NULL) entry. You're done.
+ Packetprinter pp[] = {
+ {XTYPE_MDA500,mda500_print_cooked},
+ {XTYPE_MDA400,mda400_print_cooked},
+ {XTYPE_MDA300,mda300_print_cooked},
+ {XTYPE_MTS300,mts300_print_cooked},
+ {XTYPE_MTS310,mts310_print_cooked},
+ {XTYPE_MTS400,mts400_print_cooked},
+ {XTYPE_MTS420,mts420_print_cooked},
+ {XTYPE_MTS510,mts510_print_cooked},
+ {XTYPE_MTS101,mts101_print_cooked},
+ {XTYPE_MEP500,mep500_print_cooked},
+ {XTYPE_MEP401,mep401_print_cooked},
+ {0 ,NULL}
+ };
+
+
+ void xpacket_print_cooked(unsigned char *tos_packet)
+ {
+ XbowSensorboardPacket *packet = xpacket_get_sensor_data(tos_packet);
+ unsigned int sensorboard_id = packet->sensorboard_id;
+ int i = 0;
+
+ switch(packet->packet_id) {
+ case XPACKET_TEXT_MSG:
+ packet->reserved2 = '\0';
+ printf("MSG from id=%d: %s\n\n", packet->node_id, packet->data);
+ return;
+ }
+
+ while (pp[i].type != 0) {
+
+ if (pp[i].type == sensorboard_id) {
+ pp[i].print(packet);
+ break;
+ }
+ i++;
+ }
+ }
+
/**
* Display a packet as cooked values in engineering units.
***************
*** 177,181 ****
* @version 2004/3/11 mturon Intial version
*/
! void xpacket_print_cooked(unsigned char *tos_packet)
{
XbowSensorboardPacket *packet = xpacket_get_sensor_data(tos_packet);
--- 232,236 ----
* @version 2004/3/11 mturon Intial version
*/
! void xpacket_print_cooked_old(unsigned char *tos_packet)
{
XbowSensorboardPacket *packet = xpacket_get_sensor_data(tos_packet);
***************
*** 184,188 ****
case XPACKET_TEXT_MSG:
packet->reserved2 = '\0';
! printf("MSG from id=%d: %s\n\n", packet->node_id, packet->data);
return;
}
--- 239,244 ----
case XPACKET_TEXT_MSG:
packet->reserved2 = '\0';
! printf("MSG from id=%d: %s\n\n", packet->node_id,
! (char *)packet->data);
return;
}
***************
*** 229,233 ****
break;
! case XTYPE_MEP401:
mep401_print_cooked(packet);
break;
--- 285,289 ----
break;
! case XTYPE_MEP401:
mep401_print_cooked(packet);
break;
***************
*** 237,238 ****
--- 293,326 ----
}
+ /**
+ * Display a packet as cooked values in engineering units.
+ *
+ * @param packet The TOS packet as raw bytes from the serial port
+ *
+ * @author Martin Turon
+ * @version 2004/3/11 mturon Intial version
+ */
+ void xpacket_print_tabbed(unsigned char *tos_packet)
+ {
+ XbowSensorboardPacket *packet = xpacket_get_sensor_data(tos_packet);
+
+ /*
+ switch(packet->packet_id) {
+ case XPACKET_TEXT_MSG:
+ packet->reserved2 = '\0';
+ printf("MSG from id=%d: %s\n\n", packet->node_id,
+ (char *)packet->data);
+ return;
+ }
+ */
+
+ switch(packet->sensorboard_id) {
+
+ case XTYPE_MTS420:
+ mts420_print_tabbed(packet);
+ break;
+
+ /* More sensor boards go here... */
+ }
+ }
+
|