diff --git a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c index a363c31d5..e14991d04 100644 --- a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c +++ b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.c @@ -55,6 +55,8 @@ #include #include #include + +#include "ti-lib.h" /*---------------------------------------------------------------------------*/ PROCESS_NAME(cetic_6lbr_client_process); PROCESS(cc26xx_web_demo_process, "CC26XX Web Demo"); @@ -85,6 +87,13 @@ static struct etimer echo_request_timer; int def_rt_rssi = 0; #endif /*---------------------------------------------------------------------------*/ +#if CC26XX_WEB_DEMO_ADC_DEMO +PROCESS(adc_process, "ADC process"); + +static uint16_t single_adc_sample; +static struct etimer et_adc; +#endif +/*---------------------------------------------------------------------------*/ process_event_t cc26xx_web_demo_publish_event; process_event_t cc26xx_web_demo_config_loaded_event; process_event_t cc26xx_web_demo_load_config_defaults; @@ -111,6 +120,12 @@ DEMO_SENSOR(batmon_volt, CC26XX_WEB_DEMO_SENSOR_BATMON_VOLT, "Battery Volt", "battery-volt", "batmon_volt", CC26XX_WEB_DEMO_UNIT_VOLT); +#if CC26XX_WEB_DEMO_ADC_DEMO +DEMO_SENSOR(adc_dio23, CC26XX_WEB_DEMO_SENSOR_ADC_DIO23, + "ADC DIO23", "adc-dio23", "adc_dio23", + CC26XX_WEB_DEMO_UNIT_VOLT); +#endif + /* Sensortag sensors */ #if BOARD_SENSORTAG DEMO_SENSOR(bmp_pres, CC26XX_WEB_DEMO_SENSOR_BMP_PRES, @@ -467,6 +482,22 @@ get_batmon_reading(void *data) ctimer_set(&batmon_timer, next, get_batmon_reading, NULL); } /*---------------------------------------------------------------------------*/ +#if CC26XX_WEB_DEMO_ADC_DEMO +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); + } +} +#endif +/*---------------------------------------------------------------------------*/ #if BOARD_SENSORTAG /*---------------------------------------------------------------------------*/ static void @@ -825,6 +856,11 @@ init_sensors(void) list_add(sensor_list, &batmon_temp_reading); list_add(sensor_list, &batmon_volt_reading); + +#if CC26XX_WEB_DEMO_ADC_DEMO + list_add(sensor_list, &adc_dio23_reading); +#endif + SENSORS_ACTIVATE(batmon_sensor); #if BOARD_SENSORTAG @@ -864,6 +900,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 +917,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(); /* @@ -967,6 +1008,56 @@ PROCESS_THREAD(cc26xx_web_demo_process, ev, data) PROCESS_END(); } /*---------------------------------------------------------------------------*/ +#if CC26XX_WEB_DEMO_ADC_DEMO +PROCESS_THREAD(adc_process, ev, data) +{ + PROCESS_BEGIN(); + + 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) + */ + 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(); + + /* Read 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(); +} +#endif +/*---------------------------------------------------------------------------*/ /** * @} */ diff --git a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h index 14bf3150c..e40cd1864 100644 --- a/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h +++ b/examples/cc26xx/cc26xx-web-demo/cc26xx-web-demo.h @@ -79,6 +79,12 @@ #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 +152,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..8897eb23f 100644 --- a/examples/cc26xx/cc26xx-web-demo/coap-server.c +++ b/examples/cc26xx/cc26xx-web-demo/coap-server.c @@ -40,6 +40,7 @@ #include "rest-engine.h" #include "board-peripherals.h" #include "rf-core/rf-ble.h" +#include "cc26xx-web-demo.h" #include #include @@ -85,6 +86,10 @@ extern resource_t res_mpu_gyro_z; extern resource_t res_toggle_orange; extern resource_t res_toggle_yellow; #endif + +#if CC26XX_WEB_DEMO_ADC_DEMO +extern resource_t res_adc_dio23; +#endif /*---------------------------------------------------------------------------*/ const char *coap_server_not_found_msg = "Resource not found"; const char *coap_server_supported_msg = "Supported:" @@ -134,6 +139,10 @@ 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"); +#if CC26XX_WEB_DEMO_ADC_DEMO + rest_activate_resource(&res_adc_dio23, "sen/adc/dio23"); +#endif + rest_activate_resource(&res_device_hw, "dev/mdl/hw"); rest_activate_resource(&res_device_sw, "dev/mdl/sw"); rest_activate_resource(&res_device_uptime, "dev/uptime"); diff --git a/examples/cc26xx/cc26xx-web-demo/project-conf.h b/examples/cc26xx/cc26xx-web-demo/project-conf.h index adf2f1427..67b0971c7 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..f3fd7bd26 100644 --- a/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c +++ b/examples/cc26xx/cc26xx-web-demo/resources/res-sensors.c @@ -117,6 +117,21 @@ RESOURCE(res_batmon_temp, "title=\"Battery Temp\";rt=\"C\"", RESOURCE(res_batmon_volt, "title=\"Battery Voltage\";rt=\"mV\"", res_get_handler_batmon_volt, NULL, NULL, NULL); /*---------------------------------------------------------------------------*/ +#if CC26XX_WEB_DEMO_ADC_DEMO +/*---------------------------------------------------------------------------*/ +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_adc_dio23, "title=\"ADC DIO23\";rt=\"mV\"", + res_get_handler_adc_dio23, NULL, NULL, NULL); +/*---------------------------------------------------------------------------*/ +#endif +/*---------------------------------------------------------------------------*/ #if BOARD_SENSORTAG /*---------------------------------------------------------------------------*/ /* MPU resources and handler: Accelerometer and Gyro */