[Firebug-cvs] fireboard/tools/src/xlisten xpacket.c,1.1,1.2
Brought to you by:
doolin
From: David M. D. <do...@us...> - 2004-07-21 13:26:01
|
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... */ + } + } + |