diff --git a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c index a363c31d5..02af7f946 100644 --- a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c +++ b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c @@ -55,9 +55,13 @@ #include #include #include + +#include "ti-lib.h" + /*---------------------------------------------------------------------------*/ PROCESS_NAME(cetic_6lbr_client_process); PROCESS(cc26xx_web_demo_process, "CC26XX Web Demo"); +PROCESS(adc_process, "ADC process"); /*---------------------------------------------------------------------------*/ /* * Update sensor readings in a staggered fashion every SENSOR_READING_PERIOD @@ -84,6 +88,9 @@ static struct uip_icmp6_echo_reply_notification echo_reply_notification; static struct etimer echo_request_timer; int def_rt_rssi = 0; #endif + +static uint16_t single_adc_sample; + /*---------------------------------------------------------------------------*/ process_event_t cc26xx_web_demo_publish_event; process_event_t cc26xx_web_demo_config_loaded_event; @@ -110,6 +117,9 @@ DEMO_SENSOR(batmon_temp, CC26XX_WEB_DEMO_SENSOR_BATMON_TEMP, DEMO_SENSOR(batmon_volt, CC26XX_WEB_DEMO_SENSOR_BATMON_VOLT, "Battery Volt", "battery-volt", "batmon_volt", CC26XX_WEB_DEMO_UNIT_VOLT); +DEMO_SENSOR(adc_dio23, CC26XX_WEB_DEMO_SENSOR_ADC_DIO23, + "ADC DIO23", "adc-dio23", "adc_dio23", + CC26XX_WEB_DEMO_UNIT_VOLT); /* Sensortag sensors */ #if BOARD_SENSORTAG @@ -467,6 +477,20 @@ get_batmon_reading(void *data) ctimer_set(&batmon_timer, next, get_batmon_reading, NULL); } /*---------------------------------------------------------------------------*/ +static void +get_adc_reading(void *data) +{ + int value; + char *buf; + + if(adc_dio23_reading.publish) { + value = single_adc_sample; + buf = adc_dio23_reading.converted; + memset(buf, 0, CC26XX_WEB_DEMO_CONVERTED_LEN); + snprintf(buf, CC26XX_WEB_DEMO_CONVERTED_LEN, "%d", (value * 4300) >> 12); + } +} +/*---------------------------------------------------------------------------*/ #if BOARD_SENSORTAG /*---------------------------------------------------------------------------*/ static void @@ -825,6 +849,7 @@ init_sensors(void) list_add(sensor_list, &batmon_temp_reading); list_add(sensor_list, &batmon_volt_reading); + list_add(sensor_list, &adc_dio23_reading); SENSORS_ACTIVATE(batmon_sensor); #if BOARD_SENSORTAG @@ -864,6 +889,7 @@ PROCESS_THREAD(cc26xx_web_demo_process, ev, data) /* Start all other (enabled) processes first */ process_start(&httpd_simple_process, NULL); + #if CC26XX_WEB_DEMO_COAP_SERVER process_start(&coap_server_process, NULL); #endif @@ -880,13 +906,17 @@ PROCESS_THREAD(cc26xx_web_demo_process, ev, data) process_start(&net_uart_process, NULL); #endif +#if CC26XX_WEB_DEMO_ADC_DEMO + process_start(&adc_process, NULL); +#endif + /* * Now that processes have set their own config default values, set our * own defaults and restore saved config from flash... */ cc26xx_web_demo_config.sensors_bitmap = 0xFFFFFFFF; /* all on by default */ cc26xx_web_demo_config.def_rt_ping_interval = - CC26XX_WEB_DEMO_DEFAULT_RSSI_MEAS_INTERVAL; + CC26XX_WEB_DEMO_DEFAULT_RSSI_MEAS_INTERVAL; load_config(); /* @@ -966,6 +996,47 @@ PROCESS_THREAD(cc26xx_web_demo_process, ev, data) PROCESS_END(); } + +PROCESS_THREAD(adc_process, ev, data) +{ + PROCESS_BEGIN(); + static struct etimer et_adc; + etimer_set(&et_adc, CLOCK_SECOND * 5); + while(1) { + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et_adc)); + /* intialisation of ADC */ + ti_lib_aon_wuc_aux_wakeup_event(AONWUC_AUX_WAKEUP); + while(!(ti_lib_aon_wuc_power_status_get() & AONWUC_AUX_POWER_ON)) { + } + + /* Enable clock for ADC digital and analog interface (not currently enabled in driver) */ + /* Enable clocks */ + ti_lib_aux_wuc_clock_enable(AUX_WUC_ADI_CLOCK | AUX_WUC_ANAIF_CLOCK | AUX_WUC_SMPH_CLOCK); + while(ti_lib_aux_wuc_clock_status(AUX_WUC_ADI_CLOCK | AUX_WUC_ANAIF_CLOCK | AUX_WUC_SMPH_CLOCK) != AUX_WUC_CLOCK_READY) { + } + + /* Connect AUX IO7 (DIO23, but also DP2 on XDS110) as analog input. */ + ti_lib_aux_adc_select_input(ADC_COMPB_IN_AUXIO7); + + /* Set up ADC range */ + /* AUXADC_REF_FIXED = nominally 4.3 V */ + ti_lib_aux_adc_enable_sync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL); + + /* Trigger ADC converting */ + ti_lib_aux_adc_gen_manual_trigger(); + + /* reading adc value */ + single_adc_sample = ti_lib_aux_adc_read_fifo(); + + /* shut the adc down */ + ti_lib_aux_adc_disable(); + + get_adc_reading(NULL); + + etimer_reset(&et_adc); + } + PROCESS_END(); +} /*---------------------------------------------------------------------------*/ /** * @} diff --git a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h index 14bf3150c..b740a5d4c 100644 --- a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h +++ b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h @@ -79,6 +79,13 @@ #else #define CC26XX_WEB_DEMO_NET_UART 1 #endif + +#ifdef CC26XX_WEB_DEMO_CONF_ADC_DEMO +#define CC26XX_WEB_DEMO_ADC_DEMO CC26XX_WEB_DEMO_CONF_ADC_DEMO +#else +#define CC26XX_WEB_DEMO_ADC_DEMO 0 +#endif + /*---------------------------------------------------------------------------*/ /* Active probing of RSSI from our preferred parent */ #if (CC26XX_WEB_DEMO_COAP_SERVER || CC26XX_WEB_DEMO_MQTT_CLIENT) @@ -146,6 +153,7 @@ #define CC26XX_WEB_DEMO_SENSOR_MPU_GYRO_X 12 #define CC26XX_WEB_DEMO_SENSOR_MPU_GYRO_Y 13 #define CC26XX_WEB_DEMO_SENSOR_MPU_GYRO_Z 14 +#define CC26XX_WEB_DEMO_SENSOR_ADC_DIO23 15 /*---------------------------------------------------------------------------*/ extern process_event_t cc26xx_web_demo_publish_event; extern process_event_t cc26xx_web_demo_config_loaded_event; diff --git a/examples/cc26xx/cc26xx-web-demo/coap-server.c b/examples/cc26xx/cc26xx-web-demo/coap-server.c index 518065f6e..957e8adae 100644 --- a/examples/cc26xx/cc26xx-web-demo/coap-server.c +++ b/examples/cc26xx/cc26xx-web-demo/coap-server.c @@ -50,6 +50,7 @@ extern resource_t res_leds; extern resource_t res_batmon_temp; extern resource_t res_batmon_volt; +extern resource_t res_adc_dio23; extern resource_t res_device_sw; extern resource_t res_device_hw; @@ -133,6 +134,7 @@ PROCESS_THREAD(coap_server_process, ev, data) rest_activate_resource(&res_batmon_temp, "sen/batmon/temp"); rest_activate_resource(&res_batmon_volt, "sen/batmon/voltage"); + rest_activate_resource(&res_adc_dio23, "sen/adc/dio23"); rest_activate_resource(&res_device_hw, "dev/mdl/hw"); rest_activate_resource(&res_device_sw, "dev/mdl/sw"); diff --git a/examples/cc26xx/cc26xx-web-demo/project-conf.h b/examples/cc26xx/cc26xx-web-demo/project-conf.h index adf2f1427..1d2355006 100644 --- a/examples/cc26xx/cc26xx-web-demo/project-conf.h +++ b/examples/cc26xx/cc26xx-web-demo/project-conf.h @@ -41,6 +41,13 @@ #define CC26XX_WEB_DEMO_CONF_6LBR_CLIENT 1 #define CC26XX_WEB_DEMO_CONF_COAP_SERVER 1 #define CC26XX_WEB_DEMO_CONF_NET_UART 1 +/* + * ADC sensor functionality. To test this, an external voltage source should be + * connected to DIO23 + * Enable/Disable DIO23 ADC reading by setting CC26XX_WEB_DEMO_CONF_ADC_DEMO + */ +#define CC26XX_WEB_DEMO_CONF_ADC_DEMO 0 + /*---------------------------------------------------------------------------*/ /* Enable the ROM bootloader */ #define ROM_BOOTLOADER_ENABLE 1 diff --git a/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c b/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c index 277c29c05..f5cfad79e 100644 --- a/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c +++ b/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c @@ -111,12 +111,24 @@ res_get_handler_batmon_volt(void *request, void *response, uint8_t *buffer, buffer, preferred_size, offset); } /*---------------------------------------------------------------------------*/ +static void +res_get_handler_adc_dio23(void *request, void *response, uint8_t *buffer, + uint16_t preferred_size, int32_t *offset) +{ + res_get_handler_all(CC26XX_WEB_DEMO_SENSOR_ADC_DIO23, request, response, + buffer, preferred_size, offset); +} +/*---------------------------------------------------------------------------*/ RESOURCE(res_batmon_temp, "title=\"Battery Temp\";rt=\"C\"", res_get_handler_batmon_temp, NULL, NULL, NULL); /*---------------------------------------------------------------------------*/ RESOURCE(res_batmon_volt, "title=\"Battery Voltage\";rt=\"mV\"", res_get_handler_batmon_volt, NULL, NULL, NULL); /*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +RESOURCE(res_adc_dio23, "title=\"ADC DIO23\";rt=\"mV\"", + res_get_handler_adc_dio23, NULL, NULL, NULL); +/*---------------------------------------------------------------------------*/ #if BOARD_SENSORTAG /*---------------------------------------------------------------------------*/ /* MPU resources and handler: Accelerometer and Gyro */