From f474514ee5342d6827688a6760266af6f140f2af Mon Sep 17 00:00:00 2001
From: George Oikonomou <g.oikonomou@bristol.ac.uk>
Date: Wed, 11 Feb 2015 17:54:25 +0100
Subject: [PATCH] Add CC2538 tmp sensor driver

---
 cpu/cc2538/dev/temp-sensor.c | 78 ++++++++++++++++++++++++++++++++++++
 cpu/cc2538/dev/temp-sensor.h | 71 ++++++++++++++++++++++++++++++++
 2 files changed, 149 insertions(+)
 create mode 100644 cpu/cc2538/dev/temp-sensor.c
 create mode 100644 cpu/cc2538/dev/temp-sensor.h

diff --git a/cpu/cc2538/dev/temp-sensor.c b/cpu/cc2538/dev/temp-sensor.c
new file mode 100644
index 000000000..abc52e42b
--- /dev/null
+++ b/cpu/cc2538/dev/temp-sensor.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2015, Zolertia - http://www.zolertia.com
+ * Copyright (c) 2015, University of Bristol - http://www.bristol.ac.uk
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*---------------------------------------------------------------------------*/
+/**
+ * \addtogroup cc2538-temp-sensor
+ * @{
+ *
+ * \file
+ *  Driver for the CC2538 On-Chip temperature sensor
+ */
+/*---------------------------------------------------------------------------*/
+#include "contiki.h"
+#include "lib/sensors.h"
+#include "dev/temp-sensor.h"
+#include "dev/adc.h"
+#include "dev/cc2538-sensors.h"
+
+#include <stdint.h>
+/*---------------------------------------------------------------------------*/
+static int
+value(int type)
+{
+  int raw = adc_get(SOC_ADC_ADCCON_CH_TEMP, SOC_ADC_ADCCON_REF_INT,
+                    SOC_ADC_ADCCON_DIV_512);
+
+  if(type == CC2538_SENSORS_VALUE_TYPE_RAW) {
+    return raw;
+  } else if(type == CC2538_SENSORS_VALUE_TYPE_CONVERTED) {
+    return 25000 + ((raw >> 4) - 1422) * 10000 / 42;
+  }
+
+  return CC2538_SENSORS_ERROR;
+}
+/*---------------------------------------------------------------------------*/
+static int
+configure(int type, int value)
+{
+  return 0;
+}
+/*---------------------------------------------------------------------------*/
+static int
+status(int type)
+{
+  return 1;
+}
+/*---------------------------------------------------------------------------*/
+SENSORS_SENSOR(temp_sensor, TEMP_SENSOR, value, configure, status);
+/*---------------------------------------------------------------------------*/
+/** @} */
diff --git a/cpu/cc2538/dev/temp-sensor.h b/cpu/cc2538/dev/temp-sensor.h
new file mode 100644
index 000000000..7f20452db
--- /dev/null
+++ b/cpu/cc2538/dev/temp-sensor.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015, Zolertia - http://www.zolertia.com
+ * Copyright (c) 2015, University of Bristol - http://www.bristol.ac.uk
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*---------------------------------------------------------------------------*/
+/**
+ * \addtogroup cc2538-sensors
+ * @{
+ *
+ * \defgroup cc2538-temp-sensor CC2538 on-chip temperature Sensor
+ *
+ * Driver for the CC2538 on-chip temperature sensor
+ *
+ * This driver can return the raw as well as the converted value of the sensor
+ * reading. This is controlled by the type argument of the sensor driver's
+ * value() function. The choices for the type argument are:
+ * - CC2538_SENSORS_VALUE_TYPE_RAW (value() returns the raw reading)
+ * - CC2538_SENSORS_VALUE_TYPE_CONVERTED (value() returns degrees mC)
+ * @{
+ *
+ * \file
+ * Header file for the CC2538 on-chip temperature Sensor Driver
+ */
+/*---------------------------------------------------------------------------*/
+#ifndef TEMP_SENSOR_H_
+#define TEMP_SENSOR_H_
+/*---------------------------------------------------------------------------*/
+#include "lib/sensors.h"
+/*---------------------------------------------------------------------------*/
+/**
+ * \name temperature sensor
+ * @{
+ */
+#define TEMP_SENSOR "On-Chip Temperature"
+/** @} */
+/*---------------------------------------------------------------------------*/
+extern const struct sensors_sensor temp_sensor;
+/*---------------------------------------------------------------------------*/
+#endif /* TEMP_SENSOR_H_ */
+/*---------------------------------------------------------------------------*/
+/**
+ * @}
+ * @}
+ */