[Firebug-cvs] fireboard/tools/src/xlisten/boards mda300.c, 1.1, 1.2 mda500.c, 1.1, 1.2 mep401.c, 1.
Brought to you by:
doolin
From: David M. D. <do...@us...> - 2006-07-10 17:15:53
|
Update of /cvsroot/firebug/fireboard/tools/src/xlisten/boards In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv18914 Modified Files: mda300.c mda500.c mep401.c mep500.c mts101.c mts300.c mts400.c mts510.c Log Message: updating from beta. Index: mts510.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mts510.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mts510.c 15 Jul 2004 17:04:21 -0000 1.1 --- mts510.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 14,17 **** --- 14,18 ---- #define SOUNDSAMPLES 5 + #define ACCEL_SAMPLES 5 #include "../xsensors.h" *************** *** 24,114 **** } XSensorMTS510Data; ! float mts510_convert_accel_x(uint16_t data); ! float mts510_convert_accel_y(uint16_t data); ! /** ! * Computes the ADC count of a Accelerometer - for X axis reading into ! * Engineering Unit (g), per calibration ! * ! * Calibration done for one test sensor - should be repeated for each unit. ! * @author Jaidev Prabhu ! * ! * @version 2004/3/24 jdprabhu Initial revision ! * ! */ ! float mts510_convert_accel_x(uint16_t data) { ! uint16_t minus_one_calibration; ! uint16_t plus_one_calibration; ! float zero_value; ! float reading; ! minus_one_calibration = 490; ! plus_one_calibration = 615; ! zero_value = ( plus_one_calibration - minus_one_calibration ) / 2; ! reading = (zero_value - (plus_one_calibration - data) ) / zero_value; ! return reading; } /** ! * Computes the ADC count of a Accelerometer - for Y axis reading into ! * Engineering Unit (g), per calibration ! * Calibration done for one test sensor - should be repeated for each unit. ! * ! * @author Jaidev Prabhu * ! * @version 2004/3/24 jdprabhu Initial revision * */ ! float mts510_convert_accel_y(uint16_t data) { ! uint16_t minus_one_calibration; ! uint16_t plus_one_calibration; ! ! float zero_value; ! float reading; ! minus_one_calibration = 432; ! plus_one_calibration = 552; ! zero_value = ( plus_one_calibration - minus_one_calibration ) / 2; ! reading = ( zero_value - (plus_one_calibration - data) ) / zero_value; ! return reading; ! } ! /** MTS510 Specific outputs of raw readings within an XBowSensorboardPacket */ ! void mts510_print_raw(XbowSensorboardPacket *packet) ! { ! XSensorMTS510Data *data = (XSensorMTS510Data *)packet->data; ! printf("mts510 id=%02x light=%04x acc_x=%04x acc_y=%04x \n" ! " sound[0]=%02x sound[1]=%02x sound[2]=%02x sound[3]=%02x sound[4]=%02x \n", ! packet->node_id, data->light, data->accel_x, data->accel_y, ! data->sound[0], data->sound[1], data->sound[2], data->sound[3], data->sound[4] ); } ! /** MTS510 Specific display of converted readings within an XBowSensorboardPacket */ ! void mts510_print_cooked(XbowSensorboardPacket *packet) { ! XSensorMTS510Data *pd; ! pd = (XSensorMTS510Data *) packet->data; ! printf("MTS510 [sensor data converted to engineering units]:\n" ! " health: node id=%i\n" ! " light: =%i ADC counts\n" ! " X-axis Accel: =%f g \n" ! " Y-axis Accel: =%f g \n", ! packet->node_id, ! pd->light, ! mts510_convert_accel_x(pd->accel_x), ! mts510_convert_accel_y(pd->accel_y)); ! printf("\n"); ! } --- 25,204 ---- } XSensorMTS510Data; ! typedef struct { ! uint16_t seq_no; ! uint16_t accel[2][ACCEL_SAMPLES]; ! } XSensorMTS510Data2; + extern XPacketHandler mts510_packet_handler; ! /** MTS510 Specific outputs of raw readings within an XBowSensorboardPacket */ ! void mts510_print_raw(XbowSensorboardPacket *packet) { + switch (packet->packet_id) { + case 1: { + XSensorMTS510Data *data = (XSensorMTS510Data *)packet->data; + printf("mts510 id=%02x light=%04x acc_x=%04x acc_y=%04x \n" + " sound[0]=%02x sound[1]=%02x sound[2]=%02x " + "sound[3]=%02x sound[4]=%02x \n", + packet->node_id, data->light, data->accel_x, data->accel_y, + data->sound[0], data->sound[1], + data->sound[2], data->sound[3], data->sound[4] ); + break; + } ! case 2: { ! XSensorMTS510Data2 *data = (XSensorMTS510Data2 *)packet->data; ! printf("mts510 id=%02x seq_no=%04x acc_x[0]=%04x acc_y[0]=%04x \n" ! " acc_x[1]=%04x acc_y[1]=%04x acc_x[2]=%04x acc_y[2]=%04x\n" ! " acc_x[3]=%04x acc_y[3]=%04x acc_x[4]=%04x acc_y[4]=%04x\n", ! packet->node_id, data->seq_no, ! data->accel[0][0], data->accel[1][0], ! data->accel[0][1], data->accel[1][1], ! data->accel[0][2], data->accel[1][2], ! data->accel[0][3], data->accel[1][3], ! data->accel[0][4], data->accel[1][4] ! ); ! break; ! } ! } ! } ! /** MTS510 Specific display of converted readings within an XBowSensorboardPacket */ ! void mts510_print_cooked(XbowSensorboardPacket *packet) ! { ! switch (packet->packet_id) { ! case 1: { ! XSensorMTS510Data *pd; ! pd = (XSensorMTS510Data *) packet->data; ! printf("MTS510 [sensor data converted to engineering units]:\n" ! " health: node id=%i\n" ! " light: =%i ADC counts\n" ! " X-axis Accel: =%f g \n" ! " Y-axis Accel: =%f g \n" ! " mic = %i ADC counts\n", ! packet->node_id, ! pd->light, ! xconvert_accel(pd->accel_x), ! xconvert_accel(pd->accel_y), ! (pd->sound[0]+pd->sound[1]+pd->sound[2]+pd->sound[3]+pd->sound[4])/5 ); ! printf("\n"); ! break; ! } ! case 2: { ! XSensorMTS510Data2 *pd; ! pd = (XSensorMTS510Data2 *) packet->data; ! printf("MTS510 [sensor data converted to engineering units]:\n" ! " health: node id=%i seq_no=%i\n" ! " Accel_X: %1.4f g, %1.4f g, %1.4f g, %1.4f g, %1.4f g\n" ! " Accel_Y: %1.4f g, %1.4f g, %1.4f g, %1.4f g, %1.4f g\n", ! packet->node_id, pd->seq_no, ! xconvert_accel(pd->accel[0][0]), ! xconvert_accel(pd->accel[0][1]), ! xconvert_accel(pd->accel[0][2]), ! xconvert_accel(pd->accel[0][3]), ! xconvert_accel(pd->accel[0][4]), ! xconvert_accel(pd->accel[1][0]), ! xconvert_accel(pd->accel[1][1]), ! xconvert_accel(pd->accel[1][2]), ! xconvert_accel(pd->accel[1][3]), ! xconvert_accel(pd->accel[1][4]) ! ); ! printf("\n"); ! break; ! } ! } } + const char *mts510_db_create_table = + "CREATE TABLE %s%s ( result_time timestamp without time zone, " + "epoch integer, nodeid integer, parent integer, " + "voltage integer, temp integer, light integer, " + "accel_x integer, accel_y integer, " + "mag_x integer, mag_y integer, mic integer )"; + + const char *mts510_db_create_rule = + "CREATE RULE cache_%s AS ON INSERT TO %s DO ( " + "DELETE FROM %s_L WHERE nodeid = NEW.nodeid; " + "INSERT INTO %s_L VALUES (NEW.*); )"; + /** ! * Logs raw readings to a Postgres database. ! * ! * @author Martin Turon * ! * @version 2004/7/28 mturon Initial revision * */ ! void mts510_log_raw(XbowSensorboardPacket *packet) { + XSensorMTS510Data *data = (XSensorMTS510Data *)packet->data; + if (packet->packet_id != 1) return; ! char command[512]; ! char *table = xdb_get_table(); ! if (!*table) table = "mts510_results"; ! if (!mts510_packet_handler.flags.table_init) { ! int exists = xdb_table_exists(table); ! if (!exists) { ! // Create results table. ! sprintf(command, mts510_db_create_table, table, ""); ! xdb_execute(command); ! // Create last result cache ! sprintf(command, mts510_db_create_table, table, "_L"); ! xdb_execute(command); ! ! // Add rule to populate last result table ! sprintf(command, mts510_db_create_rule, table, table, table, table); ! xdb_execute(command); ! // Add results table to query log. ! int q_id = XTYPE_MTS510, sample_time = 99000; ! sprintf(command, "INSERT INTO task_query_log " ! "(query_id, tinydb_qid, query_text, query_type, " ! "table_name) VALUES (%i, %i, 'SELECT nodeid,parent," ! "voltage,temp,light,accel_x,accel_y,mic " ! "SAMPLE PERIOD %i', 'sensor', '%s')", q_id, q_id, ! sample_time, table); ! xdb_execute(command); ! // Log start time of query in time log. ! sprintf(command, "INSERT INTO task_query_time_log " ! "(query_id, start_time) VALUES (%i, now())", q_id); ! xdb_execute(command); ! } ! mts510_packet_handler.flags.table_init = 1; ! } ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,light," ! "accel_x,accel_y,mic)" ! " values (now(),%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! data->light, data->accel_x, data->accel_y, data->sound[0] ! ); ! xdb_execute(command); } ! XPacketHandler mts510_packet_handler = { ! XTYPE_MTS510, ! "$Id$", ! mts510_print_raw, ! mts510_print_cooked, ! mts510_print_raw, ! mts510_print_cooked, ! mts510_log_raw, ! // {0} ! }; ! void mts510_initialize() { ! xpacket_add_type(&mts510_packet_handler); } Index: mep500.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mep500.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mep500.c 15 Jul 2004 17:04:21 -0000 1.1 --- mep500.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 12,74 **** */ #include "../xsensors.h" typedef struct { ! uint16_t temp; ! uint16_t humidity; ! } XSensorMEP500Data; /** ! * Computes the temperature ADC count of Sensirion SHT15 humidity/temperature ! * sensor into Engineering Unit (degC) ! * ! * @author Hu Siquan * ! * @version 2004/6/14 husq Initial revision * */ ! float mep500_convert_temp(XSensorMEP500Data *data) { ! float TempData,fTemp; ! ! TempData = (float)data->temp; ! fTemp = -38.4 + 0.0098 * TempData; ! return fTemp; } /** ! * Computes the humidity ADC count of Sensirion SHT15 humidity/temperature ! * sensor into Engineering Unit (%) ! * ! * @author Hu Siquan * ! * @version 2004/6/14 husq Initial revision * */ ! float mep500_convert_humidity(XSensorMEP500Data *data) { ! float TempData,HumData; ! float fTemp,fHumidity; ! ! TempData = (float)data->temp; ! HumData = (float)data->humidity; ! ! fTemp = -38.4 + 0.0098 * (float)TempData; ! fHumidity = -4.0 + 0.0405 * HumData - 0.0000028 * HumData * HumData; ! fHumidity = (fTemp - 25.0)*(0.01 + 0.00008 * HumData) + fHumidity; ! return fHumidity; } /** mep500 Specific outputs of raw readings within an XBowSensorboardPacket */ void mep500_print_raw(XbowSensorboardPacket *packet) { ! XSensorMEP500Data *data = (XSensorMEP500Data *)packet->data; ! printf("mep500 id=%02x temperature=%04x humidity=%04x \n", ! packet->node_id, data->temp, data->humidity); } --- 12,170 ---- */ + #include <math.h> + #include "../xdb.h" #include "../xsensors.h" + typedef struct { + uint8_t vref; + uint16_t thermistor; + uint16_t humid; + uint16_t humtemp; // 13 + } __attribute__ ((packed)) XSensorMEP500Data1; typedef struct { ! uint16_t seqno; ! uint8_t vref; ! uint16_t thermistor; ! uint16_t humid; ! uint16_t humtemp; // 13 ! // XSensorSensirion sensirion; ! } __attribute__ ((packed)) XSensorMEP500Data2; + uint16_t mep500_convert_thermistor_resistance (uint16_t thermistor); + float mep500_convert_thermistor_temperature(uint16_t thermistor); + + extern XPacketHandler mep500_packet_handler; /** ! * Converts mica2 battery reading from raw vref ADC data to battery engineering units. * ! * @author Martin Turon ! * ! * To compute the battery voltage after measuring the voltage ref: ! * BV = RV*ADC_FS/data ! * where: ! * BV = Battery Voltage ! * ADC_FS = 1023 ! * RV = Voltage Reference for mica2 (1.223 volts) ! * data = data from the adc measurement of channel 1 ! * BV (volts) = 1252.352/data ! * BV (mv) = 1252352/data ! * ! * Note: ! * The thermistor resistance to temperature conversion is highly non-linear. ! * ! * @version 2004/3/29 mturon Initial revision * */ ! uint16_t mep500_convert_battery(uint16_t vref) { ! float x = (float)(vref << 1); ! uint16_t vdata = (uint16_t) (614400 / x); ! return vdata; ! } ! /** ! * Converts thermistor reading from raw ADC data to engineering units. ! * ! * @author Martin Turon, Alan Broad ! * ! * To compute the thermistor resistance after measuring the thermistor voltage: ! * - Thermistor is a temperature variable resistor ! * - There is a 10K resistor in series with the thermistor resistor. ! * - Compute expected adc output from voltage on thermistor as: ! * ADC= 1023*Rthr/(R1+Rthr) ! * where R1 = 10K ! * Rthr = unknown thermistor resistance ! * Rthr = R1*ADC/(ADC_FS-ADC) ! * where ADC_FS = 1023 ! * ! * Note: ! * The thermistor resistance to temperature conversion is highly non-linear. ! * ! * @return Thermistor resistance as a uint16 in unit (Ohms) ! * ! * @version 2004/3/11 mturon Initial revision ! * ! */ ! uint16_t mep500_convert_thermistor_resistance(uint16_t thermistor) ! { ! float x = (float)thermistor; ! uint16_t vdata = 10000*x / (1023-x); ! return vdata; } /** ! * Converts thermistor reading from raw ADC data to engineering units. * ! * @author Martin Turon ! * ! * @return Temperature reading from thermistor as a float in degrees Celcius ! * ! * @version 2004/3/22 mturon Initial revision * */ ! float mep500_convert_thermistor_temperature(uint16_t thermistor) { ! float temperature, a, b, c, Rt; ! a = 0.001307050; ! b = 0.000214381; ! c = 0.000000093; ! Rt = mep500_convert_thermistor_resistance(thermistor); ! temperature = 1 / (a + b * log(Rt) + c * pow(log(Rt),3)); ! temperature -= 273.15; // Convert from Kelvin to Celcius + //printf("debug: a=%f b=%f c=%f Rt=%f temp=%f\n",a,b,c,Rt,temperature); + + return temperature; } + /** mep500 Specific outputs of raw readings within an XBowSensorboardPacket */ void mep500_print_raw(XbowSensorboardPacket *packet) { ! switch(packet->packet_id) ! { ! case 1: ! { ! XSensorMEP500Data1 *data = (XSensorMEP500Data1 *)(packet->data); ! printf("mep500 id=%02x packet_id=%02x vref=%04x therm=%04x temperature=%04x humidity=%04x \n", ! packet->node_id, packet->packet_id, data->vref, ! data->thermistor, data->humtemp, ! data->humid); ! break; ! } ! case 2: ! { ! XSensorMEP500Data2 *data = (XSensorMEP500Data2 *)(packet->data); ! printf("mep500 id=%02x parent=%02x vref=%04x therm=%04x temperature=%04x humidity=%04x \n", ! packet->node_id, packet->parent, data->vref, ! data->thermistor, data->humtemp, ! data->humid); ! break; ! } ! case 11: ! { ! XSensorMEP500Data1 *data = (XSensorMEP500Data1 *)(packet->data); ! printf("mep510 id=%02x packet_id=%02x vref=%04x therm=%04x temperature=%04x humidity=%04x \n", ! packet->node_id, packet->packet_id, data->vref, ! data->thermistor, data->humtemp, ! data->humid); ! break; ! } ! case 12: ! { ! XSensorMEP500Data2 *data = (XSensorMEP500Data2 *)(packet->data); ! printf("MEP510 id=%02x parent=%02x vref=%04x therm=%04x temperature=%04x humidity=%04x \n", ! packet->node_id, packet->parent, data->vref, ! data->thermistor, data->humtemp, ! data->humid); ! break; ! } ! default: ! printf("MEP510 error: unknown packet_id (%i)\n", packet->packet_id); ! ! } } *************** *** 76,90 **** void mep500_print_cooked(XbowSensorboardPacket *packet) { ! XSensorMEP500Data *pd; ! pd = (XSensorMEP500Data *) packet->data; ! printf("mep500 [sensor data converted to engineering units]:\n" ! " health: node id=%i\n" ! " temperature: =%0.2f degC \n" ! " humidity: =%0.1f%% \n", ! packet->node_id, ! mep500_convert_temp(pd), ! mep500_convert_humidity(pd)); ! printf("\n"); } --- 172,427 ---- void mep500_print_cooked(XbowSensorboardPacket *packet) { ! XSensorSensirion xsensor; ! switch(packet->packet_id) ! { ! case 1: ! { ! XSensorMEP500Data1 *pd; ! pd = (XSensorMEP500Data1 *) (packet->data); ! xsensor.humidity=pd->humid, ! xsensor.thermistor=pd->humtemp, ! printf("mep500 [sensor data converted to engineering units]:\n" ! " health: node id=%u packet_id=%u \n" ! " battery: =%i mv \n" ! " thermistor: resistance=%i ohms, tempurature=%0.2f C\n" ! " temperature: =%0.2f degC \n" ! " humidity: =%0.1f%% \n", ! packet->node_id, ! packet->packet_id, ! xconvert_battery_dot(pd->vref <<1), ! mep500_convert_thermistor_resistance(pd->thermistor), ! mep500_convert_thermistor_temperature(pd->thermistor), ! xconvert_sensirion_temp(&xsensor), ! xconvert_sensirion_humidity(&xsensor)); ! printf("\n"); ! break; ! } ! case 2: ! { ! XSensorMEP500Data2 *pd; ! ! pd = (XSensorMEP500Data2 *) (packet->data); ! xsensor.humidity=pd->humid, ! xsensor.thermistor=pd->humtemp, ! printf("mep500 [sensor data converted to engineering units]:\n" ! " health: node id=%u parent=%u seq=%u\n" ! " battery: =%i mv \n" ! " thermistor: resistance=%i ohms, tempurature=%0.2f C\n" ! " temperature: =%0.2f degC \n" ! " humidity: =%0.1f%% \n", ! packet->node_id, ! packet->parent, ! pd->seqno, ! xconvert_battery_dot(pd->vref <<1), ! mep500_convert_thermistor_resistance(pd->thermistor), ! mep500_convert_thermistor_temperature(pd->thermistor), ! xconvert_sensirion_temp(&xsensor), ! xconvert_sensirion_humidity(&xsensor)); ! printf("\n"); ! break; ! } ! case 11: ! { ! XSensorMEP500Data1 *pd; ! pd = (XSensorMEP500Data1 *) (packet->data); ! xsensor.humidity=pd->humid, ! xsensor.thermistor=pd->humtemp, ! printf("mep510 [sensor data converted to engineering units]:\n" ! " health: node id=%u packet_id=%u \n" ! " battery: =%i mv \n" ! " thermistor: resistance=%i ohms, tempurature=%0.2f C\n" ! " temperature: =%0.2f degC \n" ! " humidity: =%0.1f%% \n", ! packet->node_id, ! packet->packet_id, ! xconvert_battery_dot(pd->vref <<1), ! mep500_convert_thermistor_resistance(pd->thermistor), ! mep500_convert_thermistor_temperature(pd->thermistor), ! xconvert_sensirion_temp(&xsensor), ! xconvert_sensirion_humidity(&xsensor)); ! printf("\n"); ! break; ! } ! case 12: ! { ! XSensorMEP500Data2 *pd; ! ! pd = (XSensorMEP500Data2 *) (packet->data); ! xsensor.humidity=pd->humid, ! xsensor.thermistor=pd->humtemp, ! printf("MEP510 [sensor data converted to engineering units]:\n" ! " health: node id=%u parent=%u seq=%u\n" ! " battery: =%i mv \n" ! " thermistor: resistance=%i ohms, tempurature=%0.2f C\n" ! " temperature: =%0.2f degC \n" ! " humidity: =%0.1f%% \n", ! packet->node_id, ! packet->parent, ! pd->seqno, ! xconvert_battery_dot(pd->vref <<1), ! mep500_convert_thermistor_resistance(pd->thermistor), ! mep500_convert_thermistor_temperature(pd->thermistor), ! xconvert_sensirion_temp(&xsensor), ! xconvert_sensirion_humidity(&xsensor)); ! printf("\n"); ! break; ! } ! default: ! printf("MEP510 error: unknown packet_id (%i)\n", packet->packet_id); ! } ! } ! const char *mep500_db_create_table = ! "CREATE TABLE %s%s ( result_time timestamp without time zone, " ! "epoch integer,nodeid integer,parent integer," ! "voltage integer,therm integer,humid integer,humtemp integer," ! "inthum integer,inttemp integer,photo1 integer,photo2 integer," ! "photo3 integer,photo4 integer,accel_x integer,accel_y integer," ! "prtemp integer,press integer)"; ! ! const char *mep500_db_create_rule = ! "CREATE RULE cache_%s AS ON INSERT TO %s DO ( " ! "DELETE FROM %s_L WHERE nodeid = NEW.nodeid; " ! "INSERT INTO %s_L VALUES (NEW.*); )"; ! ! ! /** ! * Logs raw readings to a Postgres database. ! * ! * @author Martin Turon ! * ! * @version 2004/7/28 mturon Initial revision ! * ! */ ! void mep500_log_raw(XbowSensorboardPacket *packet) ! { ! XSensorMEP500Data2 *data = (XSensorMEP500Data2 *)packet->data; ! ! char command[512]; ! char *table = xdb_get_table(); ! if (!*table) table = "enviro_results"; ! ! if (!mep500_packet_handler.flags.table_init) { ! int exists = xdb_table_exists(table); ! if (!exists) { ! // Create results table. ! sprintf(command, mep500_db_create_table, table, ""); ! xdb_execute(command); ! // Create last result cache ! sprintf(command, mep500_db_create_table, table, "_L"); ! xdb_execute(command); ! ! // Add rule to populate last result table ! sprintf(command, mep500_db_create_rule, table, table, table, table); ! xdb_execute(command); ! ! // Add results table to query log. ! int q_id = XTYPE_MEP500, sample_time = 3000; ! sprintf(command, "INSERT INTO task_query_log " ! "(query_id, tinydb_qid, query_text, query_type, " ! "table_name) VALUES (%i, %i, 'SELECT nodeid,parent," ! "voltage,therm,humid,humtemp,inthum,inttemp,photo1,photo2," ! "photo3,photo4,accel_x,accel_y,prtemp,press " ! "SAMPLE PERIOD %i', 'sensor', '%s')", q_id, q_id, ! sample_time, table); ! xdb_execute(command); ! ! // Log start time of query in time log. ! sprintf(command, "INSERT INTO task_query_time_log " ! "(query_id, start_time) VALUES (%i, now())", q_id); ! xdb_execute(command); ! } ! mep500_packet_handler.flags.table_init = 1; ! } ! ! switch(packet->packet_id) ! { ! case 1: ! { ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,voltage," ! "therm,humid,humtemp)" ! " values (now(),%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! /* Note saved as mica2 vref via 2x multiplier */ ! data->vref << 2, ! data->thermistor, ! data->humid, data->humtemp ! ); ! break; ! } ! case 2: ! { ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,epoch,voltage," ! "therm,humid,humtemp)" ! " values (now(),%u,%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! data->seqno, ! /* Note saved as mica2 vref via 2x multiplier */ ! data->vref << 2, ! data->thermistor, ! data->humid, data->humtemp ! ); ! break; ! } ! case 11: ! { ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,voltage," ! "therm,humid,humtemp)" ! " values (now(),%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! /* Note saved as mica2 vref via 2x multiplier */ ! data->vref << 2, ! data->thermistor, ! data->humid, data->humtemp ! ); ! break; ! } ! case 12: ! { ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,epoch,voltage," ! "therm,humid,humtemp)" ! " values (now(),%u,%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! data->seqno, ! /* Note saved as mica2 vref via 2x multiplier */ ! data->vref << 2, ! data->thermistor, ! data->humid, data->humtemp ! ); ! break; ! } ! } ! xdb_execute(command); } + + XPacketHandler mep500_packet_handler = + { + XTYPE_MEP500, + "$Id$", + mep500_print_raw, + mep500_print_cooked, + mep500_print_raw, + mep500_print_cooked, + mep500_log_raw + }; + + void mep500_initialize() { + xpacket_add_type(&mep500_packet_handler); + } Index: mts400.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mts400.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** mts400.c 4 Aug 2004 01:56:14 -0000 1.4 --- mts400.c 10 Jul 2006 17:15:46 -0000 1.5 *************** *** 7,10 **** --- 7,11 ---- * @version 2004/3/10 mturon Initial version * @n 2004/3/28 husiquan Added temp,pressure,accel,light,gps + * @n 2004/11/15 husiquan Added database logging * * Copyright (c) 2004 Crossbow Technology, Inc. All rights reserved. *************** *** 13,24 **** */ #include <math.h> [...1070 lines suppressed...] + }; + + void mts400_initialize() { + xpacket_add_type(&mts400_packet_handler); + } + + XPacketHandler mts420_packet_handler = + { + XTYPE_MTS420, + "$Id$", + mts420_print_raw, + mts420_print_cooked, + mts420_print_raw, + mts420_print_cooked, + mts420_log_raw + }; + + void mts420_initialize() { + xpacket_add_type(&mts420_packet_handler); + } Index: mda500.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mda500.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mda500.c 15 Jul 2004 17:04:20 -0000 1.1 --- mda500.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 16,20 **** */ - #include <math.h> #include "../xsensors.h" --- 16,19 ---- *************** *** 31,37 **** } XSensorMDA500Data; ! uint16_t mda500_convert_battery (XbowSensorboardPacket *packet); ! uint16_t mda500_convert_thermistor_resistance (XbowSensorboardPacket *packet); ! float mda500_convert_thermistor_temperature(XbowSensorboardPacket *packet); uint16_t mda500_convert_adc(XbowSensorboardPacket *packet, uint16_t index); --- 30,35 ---- } XSensorMDA500Data; ! extern XPacketHandler mda500_packet_handler; ! uint16_t mda500_convert_adc(XbowSensorboardPacket *packet, uint16_t index); *************** *** 50,53 **** --- 48,52 ---- void mda500_print_cooked(XbowSensorboardPacket *packet) { + XSensorMDA500Data *pd = (XSensorMDA500Data *)packet->data; printf("MDA500 [sensor data converted to engineering units]:\n" " health: node id=%i\n" *************** *** 61,67 **** " adc chan 7: voltage=%i mv\n", packet->node_id, ! mda500_convert_battery(packet), ! mda500_convert_thermistor_resistance(packet), ! mda500_convert_thermistor_temperature(packet), mda500_convert_adc(packet, 2), mda500_convert_adc(packet, 3), --- 60,66 ---- " adc chan 7: voltage=%i mv\n", packet->node_id, ! xconvert_battery_dot(pd->battery), ! xconvert_thermistor_resistance(pd->thermistor), ! xconvert_thermistor_temperature(pd->thermistor), mda500_convert_adc(packet, 2), mda500_convert_adc(packet, 3), *************** *** 73,184 **** } - /** - * Converts battery reading from raw ADC data to engineering units. - * - * @author Martin Turon, Alan Broad - * - * To compute the battery voltage after measuring the voltage ref: - * BV = RV*ADC_FS/data - * where: - * BV = Battery Voltage - * ADC_FS = 1023 - * RV = Voltage Reference (0.6 volts) - * data = data from the adc measurement of channel 1 - * BV (volts) = 614.4/data - * BV (mv) = 614400/data - * - * Note: - * The thermistor resistance to temperature conversion is highly non-linear. - * - * @return Battery voltage as uint16 in millivolts (mV) - * - * @version 2004/3/11 mturon Initial revision - * - */ - uint16_t mda500_convert_battery(XbowSensorboardPacket *packet) - { - XSensorMDA500Data *data = (XSensorMDA500Data *)packet->data; - float x = (float)data->battery; - uint16_t vdata = (uint16_t) (614400 / x); /*613800*/ - return vdata; - } /** ! * Converts thermistor reading from raw ADC data to engineering units. ! * ! * @author Martin Turon, Alan Broad ! * ! * To compute the thermistor resistance after measuring the thermistor voltage: ! * - Thermistor is a temperature variable resistor ! * - There is a 10K resistor in series with the thermistor resistor. ! * - Compute expected adc output from voltage on thermistor as: ! * ADC= 1023*Rthr/(R1+Rthr) ! * where R1 = 10K ! * Rthr = unknown thermistor resistance ! * Rthr = R1*ADC/(ADC_FS-ADC) ! * where ADC_FS = 1023 * ! * Note: ! * The thermistor resistance to temperature conversion is highly non-linear. * ! * @return Thermistor resistance as a uint16 in unit (Ohms) * ! * @version 2004/3/11 mturon Initial revision * */ ! uint16_t mda500_convert_thermistor_resistance(XbowSensorboardPacket *packet) { ! XSensorMDA500Data *data = (XSensorMDA500Data *)packet->data; ! float x = (float)data->thermistor; ! uint16_t vdata = 10000*x / (1023-x); ! return vdata; } /** ! * Converts thermistor reading from raw ADC data to engineering units. ! * * @author Martin Turon * ! * @return Temperature reading from thermistor as a float in degrees Celcius ! * ! * @version 2004/3/22 mturon Initial revision * */ ! float mda500_convert_thermistor_temperature(XbowSensorboardPacket *packet) { ! //XSensorMDA500Data *data = (XSensorMDA500Data *)packet->data; ! float temperature, a, b, c, Rt; ! a = 0.001307050; ! b = 0.000214381; ! c = 0.000000093; ! Rt = mda500_convert_thermistor_resistance(packet); ! temperature = 1 / (a + b * log(Rt) + c * pow(log(Rt),3)); ! temperature -= 273.15; // Convert from Kelvin to Celcius ! //printf("debug: a=%f b=%f c=%f Rt=%f temp=%f\n",a,b,c,Rt,temperature); ! return temperature; ! } ! /** ! * Computes the voltage of an adc channel using the reference voltage. ! * ! * @author Martin Turon ! * ! * @return Voltage of ADC channel as an unsigned integer in mV ! * ! * @version 2004/3/22 mturon Initial revision ! * ! */ ! uint16_t mda500_convert_adc(XbowSensorboardPacket *packet, uint16_t index) ! { ! //XSensorMDA500Data *data = (XSensorMDA500Data *)packet->data; ! float Vbat = mda500_convert_battery(packet); ! uint16_t Vadc = (uint16_t) (packet->data[index] * Vbat / 1023); ! return (uint16_t)Vadc; } /*==========================================================================*/ --- 72,168 ---- } /** ! * Computes the voltage of an adc channel using the reference voltage. * ! * @author Martin Turon * ! * @return Voltage of ADC channel as an unsigned integer in mV * ! * @version 2004/3/22 mturon Initial revision * */ ! uint16_t mda500_convert_adc(XbowSensorboardPacket *packet, uint16_t index) { ! XSensorMDA500Data *pd = (XSensorMDA500Data *)packet->data; ! float Vbat = xconvert_battery_dot(pd->battery); ! uint16_t Vadc = (uint16_t) (packet->data[index] * Vbat / 1023); ! return (uint16_t)Vadc; } + + const char *mda500_db_create_table = + "CREATE TABLE %s%s ( result_time timestamp without time zone, " + "epoch integer, nodeid integer, parent integer, " + "voltage integer, temp integer, adc2 integer," + "adc3 integer, adc4 integer, adc5 integer, adc6 integer, adc7 integer)"; + + const char *mda500_db_create_rule = + "CREATE RULE cache_%s AS ON INSERT TO %s DO ( " + "DELETE FROM %s_L WHERE nodeid = NEW.nodeid; " + "INSERT INTO %s_L VALUES (NEW.*); )"; + /** ! * Logs raw readings to a Postgres database. ! * * @author Martin Turon * ! * @version 2004/7/28 mturon Initial revision * */ ! void mda500_log_raw(XbowSensorboardPacket *packet) { ! XSensorMDA500Data *data = (XSensorMDA500Data *)packet->data; ! char command[512]; ! char *table = xdb_get_table(); ! if (!*table) table = "mda500_results"; ! if (!mda500_packet_handler.flags.table_init) { ! int exists = xdb_table_exists(table); ! if (!exists) { ! // Create results table. ! sprintf(command, mda500_db_create_table, table, ""); ! xdb_execute(command); ! // Create last result cache ! sprintf(command, mda500_db_create_table, table, "_L"); ! xdb_execute(command); ! ! // Add rule to populate last result table ! sprintf(command, mda500_db_create_rule, table, table, table, table); ! xdb_execute(command); ! // Add results table to query log. ! int q_id = XTYPE_MDA500, sample_time = 99000; ! sprintf(command, "INSERT INTO task_query_log " ! "(query_id, tinydb_qid, query_text, query_type, " ! "table_name) VALUES (%i, %i, 'SELECT nodeid,parent,voltage,temp,adc2,adc3, adc4, adc5, adc6, adc7 " ! "SAMPLE PERIOD %i', 'sensor', '%s')", q_id, q_id, ! sample_time, table); ! xdb_execute(command); ! // Log start time of query in time log. ! sprintf(command, "INSERT INTO task_query_time_log " ! "(query_id, start_time) VALUES (%i, now())", q_id); ! xdb_execute(command); ! } ! mda500_packet_handler.flags.table_init = 1; ! } ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,voltage,temp,adc2,adc3, adc4, adc5, adc6, adc7)" ! " values (now(),%u,%u,%u,%u,%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! data->battery, data->thermistor, data->adc2, data->adc3, data->adc4, ! data->adc5, data->adc6, data->adc7 ! ); ! ! xdb_execute(command); } + /*==========================================================================*/ *************** *** 198,209 **** void mda400_print_cooked(XbowSensorboardPacket *packet) { ! printf("MDA400 [sensor data converted to engineering units]:\n" ! " health: node id=%i\n" ! " battery: volts=%i mv\n" ! " thermistor: resistance=%i ohms\n", ! packet->node_id, ! mda500_convert_battery(packet), ! mda500_convert_thermistor_resistance(packet)); ! printf("\n"); } --- 182,223 ---- void mda400_print_cooked(XbowSensorboardPacket *packet) { ! XSensorMDA500Data *pd = (XSensorMDA500Data *)packet->data; ! printf("MDA400 [sensor data converted to engineering units]:\n" ! " health: node id=%i\n" ! " battery: volts=%i mv\n" ! " thermistor: resistance=%i ohms, tempurature=%0.2f C\n", ! packet->node_id, ! xconvert_battery_mica2(pd->battery), ! xconvert_thermistor_resistance(pd->thermistor), ! xconvert_thermistor_temperature(pd->thermistor)); ! printf("\n"); } + XPacketHandler mda500_packet_handler = + { + XTYPE_MDA500, + "$Id$", + mda500_print_raw, + mda500_print_cooked, + mda500_print_raw, + mda500_print_cooked, + mda500_log_raw + }; + + void mda500_initialize() { + xpacket_add_type(&mda500_packet_handler); + } + + XPacketHandler mda400_packet_handler = + { + XTYPE_MDA400, + "$Id$", + mda400_print_raw, + mda400_print_cooked, + mda400_print_raw, + mda400_print_cooked + }; + + void mda400_initialize() { + xpacket_add_type(&mda400_packet_handler); + } Index: mts300.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mts300.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mts300.c 15 Jul 2004 17:04:21 -0000 1.1 --- mts300.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 6,9 **** --- 6,10 ---- * @version 2004/3/10 mturon Initial version * @n 2004/4/15 husiquan Added temp,light,accel,mic,sounder,mag + * @n 2004/8/2 mturon Added database logging * * Copyright (c) 2004 Crossbow Technology, Inc. All rights reserved. *************** *** 11,19 **** * $Id$ */ ! #include <math.h> #include "../xsensors.h" typedef struct { ! uint16_t vref; uint16_t thermistor; uint16_t light; --- 12,21 ---- * $Id$ */ ! #include "../xdb.h" #include "../xsensors.h" + // packetid =1 ; sersor data typedef struct { ! uint16_t vref; uint16_t thermistor; uint16_t light; *************** *** 32,123 **** } XSensorMTS310Data; ! ! /** ! * Converts mica2 battery reading from raw ADC data to engineering units. ! * ! * @author Martin Turon ! * ! * To compute the battery voltage after measuring the voltage ref: ! * BV = RV*ADC_FS/data ! * where: ! * BV = Battery Voltage ! * ADC_FS = 1024 ! * RV = Voltage Reference for mica2 (1.223 volts) ! * data = data from the adc measurement of channel 7 ! * BV (volts) = 1252.352/data ! * BV (mv) = 1252352/data ! * ! * Note: ! * The thermistor resistance to temperature conversion is highly non-linear. ! * ! * @version 2004/3/29 mturon Initial revision ! * ! */ ! uint16_t mts300_convert_battery(uint16_t vref) ! { ! float x = (float)vref; ! uint16_t vdata = (uint16_t) (1252352 / x); ! return vdata; ! } ! ! ! /** ! * Converts thermistor reading from raw ADC data to engineering units. ! * ! * @author Martin Turon, Alan Broad ! * ! * To compute the thermistor resistance after measuring the thermistor voltage: ! * - Thermistor is a temperature variable resistor ! * - There is a 10K resistor in series with the thermistor resistor. ! * - Compute expected adc output from voltage on thermistor as: ! * ADC= 1023*Rthr/(R1+Rthr) ! * where R1 = 10K ! * Rthr = unknown thermistor resistance ! * Rthr = R1*(ADC_FS-ADC)/ADC ! * where ADC_FS = 1023 ! * ! * Note: ! * The thermistor resistance to temperature conversion is highly non-linear. ! * ! * @return Thermistor resistance as a uint16 in unit (Ohms) ! * ! * @version 2004/3/11 mturon Initial revision ! * ! */ ! uint16_t mts300_convert_thermistor_resistance(uint16_t thermistor) ! { ! float x = (float)thermistor; ! ! uint16_t vdata = 10000* (1023-x) /x; ! ! return vdata; ! } ! ! /** ! * Converts thermistor reading from raw ADC data to engineering units. ! * ! * @author Martin Turon ! * ! * @return Temperature reading from thermistor as a float in degrees Celcius ! * ! * @version 2004/3/22 mturon Initial revision ! * @version 2004/4/19 husq ! * ! */ ! float mts300_convert_thermistor_temperature(uint16_t thermistor) ! { ! float temperature, a, b, c, Rt; ! a = 0.001307050; ! b = 0.000214381; ! c = 0.000000093; ! Rt = mts300_convert_thermistor_resistance(thermistor); ! ! temperature = 1 / (a + b * log(Rt) + c * pow(log(Rt),3)); ! temperature -= 273.15; // Convert from Kelvin to Celcius ! ! //printf("debug: a=%f b=%f c=%f Rt=%f temp=%f\n",a,b,c,Rt,temperature); ! ! return temperature; ! } /** --- 34,39 ---- } XSensorMTS310Data; ! extern XPacketHandler mts300_packet_handler; ! extern XPacketHandler mts310_packet_handler; /** *************** *** 133,137 **** uint16_t mts300_convert_light(uint16_t light, uint16_t vref) { ! float Vbat = mts300_convert_battery(vref); uint16_t Vadc = (uint16_t) (light * Vbat / 1023); return Vadc; --- 49,53 ---- uint16_t mts300_convert_light(uint16_t light, uint16_t vref) { ! float Vbat = xconvert_battery_mica2(vref); uint16_t Vadc = (uint16_t) (light * Vbat / 1023); return Vadc; *************** *** 140,202 **** /** - * Computes the ADC count of a Accelerometer - for X axis reading into - * Engineering Unit (g), per calibration - * - * Calibration done for one test sensor - should be repeated for each unit. - * @author Jaidev Prabhu, Hu Siquan - * - * @version 2004/3/24 jdprabhu Initial revision - * @n 2004/4/19 husq adaption to mts310 - * - */ - float mts310_convert_accel_x(uint16_t data) - { - - uint16_t minus_one_calibration; - uint16_t plus_one_calibration; - - float zero_value; - float reading; - - minus_one_calibration = 0x18D; - plus_one_calibration = 0x1FC; - - zero_value = ( plus_one_calibration - minus_one_calibration ) / 2; - reading = (zero_value - (plus_one_calibration - data) ) / zero_value; - - return reading; - } - - /** - * Computes the ADC count of a Accelerometer - for Y axis reading into - * Engineering Unit (g), per calibration - * Calibration done for one test sensor - should be repeated for each unit. - * - * @author Jaidev Prabhu,Hu Siquan - * - * @version 2004/3/24 jdprabhu Initial revision - * @version 2004/4/19 husq adaption to mts310 - * - */ - float mts310_convert_accel_y(uint16_t data) - { - - uint16_t minus_one_calibration; - uint16_t plus_one_calibration; - - float zero_value; - float reading; - - minus_one_calibration = 0x1AE; - plus_one_calibration = 0x218; - - zero_value = ( plus_one_calibration - minus_one_calibration ) / 2; - reading = ( zero_value - (plus_one_calibration - data) ) / zero_value; - - return reading; - - } - - /** * Computes the ADC count of the Magnetometer - for X axis reading into * Engineering Unit (mgauss), no calibration --- 56,59 ---- *************** *** 256,262 **** void mts300_print_raw(XbowSensorboardPacket *packet) { ! XSensorMTS300Data *data = (XSensorMTS300Data *)packet->data; ! printf("mts300 id=%02x vref=%04x thrm=%04x light=%04x mic=%04x\n", ! packet->node_id, data->vref, data->thermistor, data->light, data->mic); } --- 113,126 ---- void mts300_print_raw(XbowSensorboardPacket *packet) { ! switch(packet->packet_id){ ! case 1:{ ! XSensorMTS300Data *data = (XSensorMTS300Data *)packet->data; ! printf("mts300 id=%02x vref=%04x thrm=%04x light=%04x mic=%04x\n", ! packet->node_id, data->vref, data->thermistor, data->light, data->mic); ! break;} ! default: ! break; ! } ! } *************** *** 264,282 **** void mts300_print_cooked(XbowSensorboardPacket *packet) { ! XSensorMTS300Data *data = (XSensorMTS300Data *)packet->data; ! printf("MTS300 [sensor data converted to engineering units]:\n" ! " health: id = %i\n" ! " battery: = %i mv \n" ! " temperature: = %0.2f degC\n" ! " light: = %i mv\n" ! " microphone: = %i ADC counts\n", ! packet->node_id, ! mts300_convert_battery(data->vref), ! mts300_convert_thermistor_temperature(data->thermistor), ! mts300_convert_light(data->light, data->vref), data->mic); ! printf("\n"); } --- 128,222 ---- void mts300_print_cooked(XbowSensorboardPacket *packet) { ! switch(packet->packet_id){ ! case 1:{ ! XSensorMTS300Data *data = (XSensorMTS300Data *)packet->data; ! printf("MTS300 [sensor data converted to engineering units]:\n" ! " health: node id=%i parent=%i\n" ! " battery: = %i mv \n" ! " temperature: =%0.2f degC\n" ! " light: = %i mv\n" ! " mic: = %i ADC counts\n", ! packet->node_id, packet->parent, ! xconvert_battery_mica2(data->vref), ! xconvert_thermistor_temperature(data->thermistor), ! mts300_convert_light(data->light, data->vref), data->mic); ! ! break;} ! } ! printf("\n"); } + const char *mts300_db_create_table = + "CREATE TABLE %s%s ( result_time timestamp without time zone, " + "epoch integer, nodeid integer, parent integer, " + "voltage integer, temp integer, light integer)"; + + const char *mts300_db_create_rule = + "CREATE RULE cache_%s AS ON INSERT TO %s DO ( " + "DELETE FROM %s_L WHERE nodeid = NEW.nodeid; " + "INSERT INTO %s_L VALUES (NEW.*); )"; + + /** + * Logs raw readings to a Postgres database. + * + * @author Martin Turon + * + * @version 2004/7/28 mturon Initial revision + * + */ + void mts300_log_raw(XbowSensorboardPacket *packet) + { + XSensorMTS300Data *data = (XSensorMTS300Data *)packet->data; + + char command[512]; + char *table = xdb_get_table(); + if (!*table) table = "mts300_results"; + + if (!mts300_packet_handler.flags.table_init) { + int exists = xdb_table_exists(table); + if (!exists) { + // Create results table. + sprintf(command, mts300_db_create_table, table, ""); + xdb_execute(command); + // Create last result cache + sprintf(command, mts300_db_create_table, table, "_L"); + xdb_execute(command); + + // Add rule to populate last result table + sprintf(command, mts300_db_create_rule, table, table, table, table); + xdb_execute(command); + + // Add results table to query log. + int q_id = XTYPE_MTS300, sample_time = 99000; + sprintf(command, "INSERT INTO task_query_log " + "(query_id, tinydb_qid, query_text, query_type, " + "table_name) VALUES (%i, %i, 'SELECT nodeid,parent,voltage,temp,light,mic," + "SAMPLE PERIOD %i', 'sensor', '%s')", q_id, q_id, + sample_time, table); + xdb_execute(command); + + // Log start time of query in time log. + sprintf(command, "INSERT INTO task_query_time_log " + "(query_id, start_time) VALUES (%i, now())", q_id); + xdb_execute(command); + } + mts300_packet_handler.flags.table_init = 1; + } + + sprintf(command, + "INSERT into %s " + "(result_time,nodeid,parent,voltage,temp,light)" + " values (now(),%u,%u,%u,%u,%u,%u)", + table, + //timestring, + packet->node_id, packet->parent, + data->vref, data->thermistor, data->light, data->mic + ); + + xdb_execute(command); + + } + *************** *** 284,317 **** void mts310_print_raw(XbowSensorboardPacket *packet) { ! XSensorMTS310Data *data = (XSensorMTS310Data *)packet->data; ! printf("mts310 id=%02x vref=%04x thrm=%04x light=%04x mic=%04x\n" ! " accelX=%04x accelY=%04x magX=%04x magY=%04x\n", ! packet->node_id, data->vref, data->thermistor, data->light, data->mic, ! data->accelX,data->accelY, data->magX, data->magY); } void mts310_print_cooked(XbowSensorboardPacket *packet) { ! XSensorMTS310Data *data = (XSensorMTS310Data *)packet->data; ! printf("MTS310 [sensor data converted to engineering units]:\n" ! " health: id = %i\n" ! " battery: = %i mv \n" ! " temperature: = %0.2f degC\n" ! " light: = %i ADC mv\n" ! " microphone: = %i ADC counts\n" ! " AccelX: = %f g, AccelY: = %f g\n" ! " MagX: = %0.2f mgauss, MagY: =%0.2f mgauss\n", ! packet->node_id, ! mts300_convert_battery(data->vref), ! mts300_convert_thermistor_temperature(data->thermistor), ! mts300_convert_light(data->light, data->vref), data->mic, ! mts310_convert_accel_x(data->accelX), ! mts310_convert_accel_y(data->accelY), ! mts310_convert_mag_x(data->magX,data->vref), mts310_convert_mag_y(data->magY,data->vref) ! ); ! printf("\n"); ! } --- 224,371 ---- void mts310_print_raw(XbowSensorboardPacket *packet) { ! switch(packet->packet_id){ ! case 1:{ ! XSensorMTS310Data *data = (XSensorMTS310Data *)packet->data; ! printf("mts310 id=%02x vref=%4x thrm=%04x light=%04x mic=%04x\n" ! " accelX=%04x accelY=%04x magX=%04x magY=%04x\n", ! packet->node_id, data->vref, data->thermistor, data->light, data->mic, ! data->accelX,data->accelY, data->magX, data->magY); ! break; } ! default: ! break; ! } } void mts310_print_cooked(XbowSensorboardPacket *packet) { ! switch(packet->packet_id){ ! case 1:{ ! XSensorMTS310Data *data = (XSensorMTS310Data *)packet->data; ! printf("MTS310 [sensor data converted to engineering units]:\n" ! " health: node id=%i parent=%i\n" ! " battery: = %i mv \n" ! " temperature=%0.2f degC\n" ! " light: = %i ADC mv\n" ! " mic: = %i ADC counts\n" ! " AccelX: = %f milliG, AccelY: = %f milliG\n" ! " MagX: = %0.2f mgauss, MagY: =%0.2f mgauss\n", ! packet->node_id, packet->parent, ! xconvert_battery_mica2(data->vref), ! xconvert_thermistor_temperature(data->thermistor), ! mts300_convert_light(data->light, data->vref), data->mic, ! xconvert_accel(data->accelX), xconvert_accel(data->accelY), ! mts310_convert_mag_x(data->magX,data->vref), ! mts310_convert_mag_y(data->magY,data->vref) ! ); ! break;} ! } ! printf("\n"); ! } ! ! const char *mts310_db_create_table = ! "CREATE TABLE %s%s ( result_time timestamp without time zone, " ! "epoch integer, nodeid integer, parent integer, " ! "voltage integer, temp integer, light integer, " ! "accel_x integer, accel_y integer, " ! "mag_x integer, mag_y integer, mic integer )"; ! ! const char *mts310_db_create_rule = ! "CREATE RULE cache_%s AS ON INSERT TO %s DO ( " ! "DELETE FROM %s_L WHERE nodeid = NEW.nodeid; " ! "INSERT INTO %s_L VALUES (NEW.*); )"; ! ! ! /** ! * Logs raw readings to a Postgres database. ! * ! * @author Martin Turon ! * ! * @version 2004/7/28 mturon Initial revision ! * ! */ ! void mts310_log_raw(XbowSensorboardPacket *packet) ! { XSensorMTS310Data *data = (XSensorMTS310Data *)packet->data; ! ! char command[512]; ! char *table = xdb_get_table(); ! if (!*table) table = "mts310_results"; ! ! if (!mts310_packet_handler.flags.table_init) { ! int exists = xdb_table_exists(table); ! if (!exists) { ! // Create results table. ! sprintf(command, mts310_db_create_table, table, ""); ! xdb_execute(command); ! // Create last result cache ! sprintf(command, mts310_db_create_table, table, "_L"); ! xdb_execute(command); ! ! // Add rule to populate last result table ! sprintf(command, mts310_db_create_rule, table, table, table, table); ! xdb_execute(command); ! ! // Add results table to query log. ! int q_id = XTYPE_MTS310, sample_time = 99000; ! sprintf(command, "INSERT INTO task_query_log " ! "(query_id, tinydb_qid, query_text, query_type, " ! "table_name) VALUES (%i, %i, 'SELECT nodeid,parent," ! "voltage,temp,light,accel_x,accel_y,mag_x,mag_y,mic," ! "SAMPLE PERIOD %i', 'sensor', '%s')", q_id, q_id, ! sample_time, table); ! xdb_execute(command); ! ! // Log start time of query in time log. ! sprintf(command, "INSERT INTO task_query_time_log " ! "(query_id, start_time) VALUES (%i, now())", q_id); ! xdb_execute(command); ! } ! mts310_packet_handler.flags.table_init = 1; ! } ! ! sprintf(command, ! "INSERT into %s " ! "(result_time,nodeid,parent,voltage,temp,light," ! "accel_x,accel_y,mag_x,mag_y,mic)" ! " values (now(),%u,%u,%u,%u,%u,%u,%u,%u,%u,%u)", ! table, ! //timestring, ! packet->node_id, packet->parent, ! data->vref, data->thermistor, data->light, ! data->accelX, data->accelY, data->magX, data->magY, data->mic ! ); ! ! xdb_execute(command); ! } ! ! ! XPacketHandler mts300_packet_handler = ! { ! XTYPE_MTS300, ! "$Id$", ! mts300_print_raw, ! mts300_print_cooked, ! mts300_print_raw, ! mts300_print_cooked, ! mts300_log_raw ! }; ! ! void mts300_initialize() { ! xpacket_add_type(&mts300_packet_handler); } + XPacketHandler mts310_packet_handler = + { + XTYPE_MTS310, + "$Id$", + mts310_print_raw, + mts310_print_cooked, + mts310_print_raw, + mts310_print_cooked, + mts310_log_raw, + {0} + }; + void mts310_initialize() { + xpacket_add_type(&mts310_packet_handler); + } Index: mep401.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mep401.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mep401.c 15 Jul 2004 17:04:20 -0000 1.1 --- mep401.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 11,43 **** * $Id$ */ #include <math.h> #include "../xsensors.h" ! /** MEP401 XSensor packet 1 -- contains Accel/Light/Humidity sensors readings */ ! typedef struct { ! uint16_t vref; uint16_t accel_x; uint16_t accel_y; [...1035 lines suppressed...] ! PQfinish(conn); } ! ! ! ! XPacketHandler mep401_packet_handler = { ! XTYPE_MEP401, ! "$Id$", ! mep401_print_raw, ! mep401_print_cooked, ! mep401_print_raw, ! mep401_print_cooked, ! mep401_log_raw ! }; + void mep401_initialize() { + xpacket_add_type(&mep401_packet_handler); + } Index: mda300.c =================================================================== RCS file: /cvsroot/firebug/fireboard/tools/src/xlisten/boards/mda300.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mda300.c 15 Jul 2004 17:04:20 -0000 1.1 --- mda300.c 10 Jul 2006 17:15:46 -0000 1.2 *************** *** 12,15 **** --- 12,20 ---- #include <math.h> + + #ifdef __arm__ + #include <sys/types.h> + #endif + #include "../xsensors.h" *************** *** 49,62 **** typedef struct { uint16_t battery; ! uint16_t humidity; ! uint16_t temperature; uint16_t counter; } XSensorMDA300Data4; ! uint32_t mda300_convert_adc_single (uint16_t adc_prec); ! int32_t mda300_convert_adc_precision (uint16_t adc_prec); ! float mda300_convert_temperature (XSensorMDA300Data4 *data); ! uint16_t mda300_convert_humidity (XSensorMDA300Data4 *data); ! uint16_t mda300_convert_battery (XSensorMDA300Data4 *data); /** --- 54,84 ---- typedef struct { uint16_t battery; ! XSensorSensirion sensirion; uint16_t counter; } XSensorMDA300Data4; ! /** MDA300 XSensor packet 5 -- contains MultiHop packets. */ ! typedef struct { ! uint16_t seq_no; ! uint16_t adc0; ! uint16_t adc1; ! uint16_t adc2; ! uint16_t battery; ! XSensorSensirion sensirion; ! } __attribute__ ((packed)) XSensorMDA300Data5; ! ! //pp:multihop need only the packet6 ! typedef struct XSensorMDA300Data6 { ! uint16_t vref; ! uint16_t humid; ! uint16_t humtemp; ! uint16_t adc0; ! uint16_t adc1; ! uint16_t adc2; ! uint16_t dig0; ! uint16_t dig1; ! uint16_t dig2; ! } __attribute__ ((packed)) XSensorMDA300Data6; ! extern XPacketHandler mda300_packet_handler; /** *************** *** 92,96 **** case 3: { XSensorMDA300Data3 *data = (XSensorMDA300Data3 *)packet->data; ! printf("mda300 id=%02x d1=%04x d2=%04x d3=%04x d4=%04x d5=%04x\n", packet->node_id, data->digi0, data->digi1, data->digi2, data->digi3, data->digi4, data->digi5); --- 114,118 ---- case 3: { XSensorMDA300Data3 *data = (XSensorMDA300Data3 *)packet->data; ! printf("mda300 id=%02x d1=%04x d2=%04x d3=%04x d4=%04x d5=%04x", packet->node_id, data->digi0, data->digi1, data->digi2, data->digi3, data->digi4, data->digi5); *************** *** 101,106 **** XSensorMDA300Data4 *data = (XSensorMDA300Data4 *)packet->data; printf("mda300 id=%02x bat=%04x hum=%04x temp=%04x cntr=%04x\n", ! packet->node_id, data->battery, data->humidity, ! data->temperature, data->counter); break; } --- 123,149 ---- XSensorMDA300Data4 *data = (XSensorMDA300Data4 *)packet->data; printf("mda300 id=%02x bat=%04x hum=%04x temp=%04x cntr=%04x\n", ! packet->node_id, data->battery, data->sensirion.humidity, ! data->sensirion.thermistor, data->counter); ! break; ! } ! ! case 5: { ! XSensorMDA300Data5 *data = (XSensorMDA300Data5 *)packet->data; ! printf("mda300 id=%02x bat=%04x hum=%04x temp=%04x " ! " echo10=%04x echo20=%04x soiltemp=%04x\n", ! packet->node_id, data->battery, ! data->sensirion.humidity, data->sensirion.thermistor, ! data->adc0, data->adc1, data->adc2); ! break; ! } ! case 6: { ! XSensorMDA300Data6 *data = (XSensorMDA300Data6 *)packet->data; ! printf("mda300 id=%02x bat=%04x hum=%04x temp=%04x " ! " adc0=%04x adc1=%04x adc2=%04x\n" ! " dig0=%04x dig1=%04x dig2=%04x\n", ! packet->node_id, data->vref, ! data->humid, data->humtemp, ! data->adc0, data->adc1, data->adc2, ! data->dig0, data->dig1, data->dig2); break; } *************** *** 124,134 **** " adc chan 6: voltage=%i mV\n\n", packet->node_id, packet->packet_id, ! mda300_convert_adc_single(packet->data[0]), ! mda300_convert_adc_single(packet->data[1]), ! mda300_convert_adc_single(packet->data[2]), ! mda300_convert_adc_single(packet->data[3]), ! mda300_convert_adc_single(packet->data[4]), ! mda300_convert_adc_single(packet->data[5]), ! mda300_convert_adc_single(packet->data[6])); } --- 167,177 ---- " adc chan 6: voltage=%i mV\n\n", packet->node_id, packet->packet_id, ! xconvert_adc_single(packet->data[0]), ! xconvert_adc_single(packet->da... [truncated message content] |