PIC24 Support Libraries
esos_sensor.h
Go to the documentation of this file.
1 /*
2  * "Copyright (c) 2013 Robert B. Reese, Bryan A. Jones, J. W. Bruce ("AUTHORS")"
3  * All rights reserved.
4  * (R. Reese, reese_AT_ece.msstate.edu, Mississippi State University)
5  * (B. A. Jones, bjones_AT_ece.msstate.edu, Mississippi State University)
6  * (J. W. Bruce, jwbruce_AT_ece.msstate.edu, Mississippi State University)
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation for any purpose, without fee, and without written agreement is
10  * hereby granted, provided that the above copyright notice, the following
11  * two paragraphs and the authors appear in all copies of this software.
12  *
13  * IN NO EVENT SHALL THE "AUTHORS" BE LIABLE TO ANY PARTY FOR
14  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
15  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHORS"
16  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17  *
18  * THE "AUTHORS" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
19  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21  * ON AN "AS IS" BASIS, AND THE "AUTHORS" HAS NO OBLIGATION TO
22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
23  *
24  * Please maintain this header in its entirety when copying/modifying
25  * these files.
26  *
27  *
28  */
29 
30  /**
31  * \addtogroup ESOS_Task_Sensor_Service
32  * @{
33  */
34 
35  /** \file
36  * This file contains macros, prototypes, and definitions for
37  * sensor services for ESOS tasks.
38  *
39  */
40 
41 #ifndef ESOS_SENSOR_H
42 #define ESOS_SENSOR_H
43 
44 /* I N C L U D E S **********************************************************/
45 #include <esos.h>
46 
47 /* E N U M S ****************************************************************/
48 
49 /**
50 * enumeration to select sensor channel
51 **/
52 typedef enum {
53  ESOS_SENSOR_CH00 = 0x00,
54  ESOS_SENSOR_CH01,
55  ESOS_SENSOR_CH02,
56  ESOS_SENSOR_CH03,
57  ESOS_SENSOR_CH04,
58  ESOS_SENSOR_CH05,
59  ESOS_SENSOR_CH06,
60  ESOS_SENSOR_CH07,
61  ESOS_SENSOR_CH08,
62  ESOS_SENSOR_CH09,
63  ESOS_SENSOR_CH0A,
64  ESOS_SENSOR_CH0B,
65  ESOS_SENSOR_CH0C,
66  ESOS_SENSOR_CH0D,
67  ESOS_SENSOR_CH0E,
68  ESOS_SENSOR_CH0F,
70 
71 /**
72 * enumeration to select sensor voltage reference
73 **/
74 typedef enum {
75  ESOS_SENSOR_VREF_1V0 = 0x00,
76  ESOS_SENSOR_VREF_1V024,
77  ESOS_SENSOR_VREF_2V0,
78  ESOS_SENSOR_VREF_2V048,
79  ESOS_SENSOR_VREF_3V0,
80  ESOS_SENSOR_VREF_3V3,
81  ESOS_SENSOR_VREF_4V0,
82  ESOS_SENSOR_VREF_4V096,
83  ESOS_SENSOR_VREF_5V0,
85 
86 /**
87 * enumeration to select sensor processing
88 **/
89 typedef enum {
90  ESOS_SENSOR_ONE_SHOT = 0x00,
91  ESOS_SENSOR_AVG2 = 0x01, // arithmetic average
92  ESOS_SENSOR_AVG4 = 0x02,
93  ESOS_SENSOR_AVG8 = 0x03,
94  ESOS_SENSOR_AVG16 = 0x04,
95  ESOS_SENSOR_AVG32 = 0x05,
96  ESOS_SENSOR_AVG64 = 0x06,
97  ESOS_SENSOR_MIN2 = 0x21, // minimum
98  ESOS_SENSOR_MIN4 = 0x22,
99  ESOS_SENSOR_MIN8 = 0x23,
100  ESOS_SENSOR_MIN16 = 0x24,
101  ESOS_SENSOR_MIN32 = 0x25,
102  ESOS_SENSOR_MIN64 = 0x26,
103  ESOS_SENSOR_MAX2 = 0x41, // maximum
104  ESOS_SENSOR_MAX4 = 0x42,
105  ESOS_SENSOR_MAX8 = 0x43,
106  ESOS_SENSOR_MAX16 = 0x44,
107  ESOS_SENSOR_MAX32 = 0x45,
108  ESOS_SENSOR_MAX64 = 0x46,
109  ESOS_SENSOR_MEDIAN2 = 0x81, // median
110  ESOS_SENSOR_MEDIAN4 = 0x82,
111  ESOS_SENSOR_MEDIAN8 = 0x83,
112  ESOS_SENSOR_MEDIAN16 = 0x84,
113  ESOS_SENSOR_MEDIAN32 = 0x85,
114  ESOS_SENSOR_MEDIAN64 = 0x86,
116 
117 /**
118 * enumeration to select sensor return value format
119 **/
120 typedef enum {
121  ESOS_SENSOR_FORMAT_BITS = 0x00, // Return the ADC "raw" bitset
122  ESOS_SENSOR_FORMAT_VOLTAGE = 0x80, // Return the ADC value as an integer representating the number of 0.1mV
123  ESOS_SENSOR_FORMAT_PERCENT = 0x40, // Return the ADC value as an integer percentage 0-100% of full scale
125 
126 /* C H I L D T A S K S ****************************************************/
127 
128 ESOS_CHILD_TASK(_WAIT_ON_AVAILABLE_SENSOR, esos_sensor_ch_t, esos_sensor_vref_t);
129 ESOS_CHILD_TASK(_WAIT_SENSOR_QUICK_READ, uint16_t *u16_data);
130 ESOS_CHILD_TASK(_WAIT_SENSOR_READ, uint16_t *u16_data, uint8_t, esos_sensor_format_t);
131 BOOL ESOS_SENSOR_CLOSE(void);
132 
133 /* D E F I N E S ************************************************************/
134 
135 #define SIGNAL_ADC_BUSY esos_SetSystemFlag(__ESOS_SYS_ADC_IS_BUSY)
136 
137 #define ESOS_TASK_WAIT_WHILE_ADC_BUSY do { \
138  esos_ClearSystemFlag(__ESOS_SYS_ADC_IS_BUSY); \
139  ESOS_TASK_WAIT_UNTIL(esos_IsSystemFlagSet(__ESOS_SYS_ADC_IS_BUSY)); \
140 } while(0)
141 
142 static ESOS_TASK_HANDLE th_child;
143 
144 #define ESOS_TASK_WAIT_ON_AVAILABLE_SENSOR(CHCONST, VREFCONST) do { \
145  ESOS_ALLOCATE_CHILD_TASK(th_child); \
146  ESOS_TASK_SPAWN_AND_WAIT(th_child, _WAIT_ON_AVAILABLE_SENSOR, CHCONST, VREFCONST); \
147 } while(0)
148 
149 #define ESOS_TASK_WAIT_SENSOR_QUICK_READ(u16_data) do { \
150  ESOS_ALLOCATE_CHILD_TASK(th_child); \
151  ESOS_TASK_SPAWN_AND_WAIT(th_child, _WAIT_SENSOR_QUICK_READ, &u16_data); \
152 } while(0)
153 
154 #define ESOS_TASK_WAIT_SENSOR_READ(u16_data, PROCESSCONST, FMTCONST) do { \
155  ESOS_ALLOCATE_CHILD_TASK(th_child); \
156  ESOS_TASK_SPAWN_AND_WAIT(th_child, _WAIT_SENSOR_READ, &u16_data, PROCESSCONST, FMTCONST); \
157 } while(0)
158 
159 #endif
BOOL
Definition: all_generic.h:402
esos_sensor_process_t
Definition: esos_sensor.h:89
esos_sensor_vref_t
Definition: esos_sensor.h:74
esos_sensor_ch_t
Definition: esos_sensor.h:52
esos_sensor_format_t
Definition: esos_sensor.h:120
ESOS_CHILD_TASK(_WAIT_ON_AVAILABLE_SENSOR, esos_sensor_ch_t, esos_sensor_vref_t)
Definition: esos_sensor.c:42
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.
Definition: dataXferImpl.h:194
BOOL ESOS_SENSOR_CLOSE(void)
Definition: esos_sensor.c:387