LibDriver ENS160
Loading...
Searching...
No Matches
driver_ens160_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static ens160_handle_t gs_handle;
40static volatile uint8_t gs_flag;
41
48static void a_callback(uint8_t type, uint16_t *dat)
49{
50 switch (type)
51 {
53 {
54 ens160_interface_debug_print("ens160: irq newdat.\n");
55 ens160_interface_debug_print("ens160: aqi is %d.\n", dat[0]);
56 ens160_interface_debug_print("ens160: tvoc is %d ppb.\n", dat[1]);
57 ens160_interface_debug_print("ens160: eco2 is %d ppm.\n", dat[2]);
58 ens160_interface_debug_print("ens160: etoh is %d ppb.\n", dat[3]);
59 gs_flag = 1;
60
61 break;
62 }
64 {
65 ens160_interface_debug_print("ens160: irq newgpr.\n");
66 ens160_interface_debug_print("ens160: resistance0 is 0x%04X\n", dat[0]);
67 ens160_interface_debug_print("ens160: resistance1 is 0x%04X.\n", dat[1]);
68 ens160_interface_debug_print("ens160: resistance2 is 0x%04X.\n", dat[2]);
69 ens160_interface_debug_print("ens160: resistance3 is 0x%04X.\n", dat[3]);
70
71 break;
72 }
73 default :
74 {
75 ens160_interface_debug_print("ens160: unknown code.\n");
76
77 break;
78 }
79 }
80}
81
90{
91 if (ens160_irq_handler(&gs_handle) != 0)
92 {
93 return 1;
94 }
95
96 return 0;
97}
98
109uint8_t ens160_interrupt_test(ens160_interface_t interface, ens160_address_t addr_pin, uint32_t times)
110{
111 uint8_t res;
112 uint32_t i;
113 ens160_info_t info;
114
115 /* link interface function */
127 DRIVER_ENS160_LINK_RECEIVE_CALLBACK(&gs_handle, a_callback);
128
129 /* get information */
130 res = ens160_info(&info);
131 if (res != 0)
132 {
133 ens160_interface_debug_print("ens160: get info failed.\n");
134
135 return 1;
136 }
137 else
138 {
139 /* print chip info */
140 ens160_interface_debug_print("ens160: chip is %s.\n", info.chip_name);
141 ens160_interface_debug_print("ens160: manufacturer is %s.\n", info.manufacturer_name);
142 ens160_interface_debug_print("ens160: interface is %s.\n", info.interface);
143 ens160_interface_debug_print("ens160: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
144 ens160_interface_debug_print("ens160: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
145 ens160_interface_debug_print("ens160: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
146 ens160_interface_debug_print("ens160: max current is %0.2fmA.\n", info.max_current_ma);
147 ens160_interface_debug_print("ens160: max temperature is %0.1fC.\n", info.temperature_max);
148 ens160_interface_debug_print("ens160: min temperature is %0.1fC.\n", info.temperature_min);
149 }
150
151 /* start interrupt test */
152 ens160_interface_debug_print("ens160: start interrupt test.\n");
153
154 /* set the interface */
155 res = ens160_set_interface(&gs_handle, interface);
156 if (res != 0)
157 {
158 ens160_interface_debug_print("ens160: set interface failed.\n");
159
160 return 1;
161 }
162
163 /* set the address pin */
164 res = ens160_set_addr_pin(&gs_handle, addr_pin);
165 if (res != 0)
166 {
167 ens160_interface_debug_print("ens160: set addr pin failed.\n");
168
169 return 1;
170 }
171
172 /* init ens160 */
173 res = ens160_init(&gs_handle);
174 if (res != 0)
175 {
176 ens160_interface_debug_print("ens160: init failed.\n");
177
178 return 1;
179 }
180
181 /* soft reset */
182 res = ens160_soft_reset(&gs_handle);
183 if (res != 0)
184 {
185 ens160_interface_debug_print("ens160: soft reset failed.\n");
186 (void)ens160_deinit(&gs_handle);
187
188 return 1;
189 }
190
191 /* set interrupt pin polarity low */
193 if (res != 0)
194 {
195 ens160_interface_debug_print("ens160: set interrupt pin polarity failed.\n");
196 (void)ens160_deinit(&gs_handle);
197
198 return 1;
199 }
200
201 /* set interrupt pin drive push-pull */
203 if (res != 0)
204 {
205 ens160_interface_debug_print("ens160: set interrupt pin drive failed.\n");
206 (void)ens160_deinit(&gs_handle);
207
208 return 1;
209 }
210
211 /* disable general purpose read interrupt pin asserted */
213 if (res != 0)
214 {
215 ens160_interface_debug_print("ens160: set general purpose read interrupt pin asserted failed.\n");
216 (void)ens160_deinit(&gs_handle);
217
218 return 1;
219 }
220
221 /* enable data interrupt pin asserted */
223 if (res != 0)
224 {
225 ens160_interface_debug_print("ens160: set data interrupt pin asserted failed.\n");
226 (void)ens160_deinit(&gs_handle);
227
228 return 1;
229 }
230
231 /* enable interrupt */
232 res = ens160_set_interrupt(&gs_handle, ENS160_BOOL_TRUE);
233 if (res != 0)
234 {
235 ens160_interface_debug_print("ens160: set interrupt failed.\n");
236 (void)ens160_deinit(&gs_handle);
237
238 return 1;
239 }
240
241 /* set standard mode */
242 res = ens160_set_mode(&gs_handle, ENS160_MODE_STANDARD);
243 if (res != 0)
244 {
245 ens160_interface_debug_print("ens160: set mode failed.\n");
246 (void)ens160_deinit(&gs_handle);
247
248 return 1;
249 }
250
251 for (i = 0; i < times; i++)
252 {
253 /* wait for one group output */
254 gs_flag = 0;
255 while (gs_flag == 0)
256 {
257 }
258 gs_flag = 0;
259
260 ens160_interface_debug_print("ens160: find interrupt.\n");
261 }
262
263 /* finish interrupt test */
264 ens160_interface_debug_print("ens160: finish interrupt test.\n");
265 (void)ens160_deinit(&gs_handle);
266
267 return 0;
268}
driver ens160 interrupt test header file
ens160_address_t
ens160 address enumeration definition
uint8_t ens160_deinit(ens160_handle_t *handle)
close the chip
uint8_t ens160_set_addr_pin(ens160_handle_t *handle, ens160_address_t addr_pin)
set the iic address pin
uint8_t ens160_set_interrupt_pin_drive(ens160_handle_t *handle, ens160_pin_drive_t drive)
set interrupt pin drive
struct ens160_info_s ens160_info_t
ens160 information structure definition
uint8_t ens160_info(ens160_info_t *info)
get chip's information
uint8_t ens160_set_interface(ens160_handle_t *handle, ens160_interface_t interface)
set the chip interface
uint8_t ens160_soft_reset(ens160_handle_t *handle)
soft reset
uint8_t ens160_set_interrupt_pin_polarity(ens160_handle_t *handle, ens160_pin_polarity_t polarity)
set interrupt pin polarity
uint8_t ens160_set_mode(ens160_handle_t *handle, ens160_mode_t mode)
set mode
ens160_interface_t
ens160 interface enumeration definition
uint8_t ens160_set_interrupt(ens160_handle_t *handle, ens160_bool_t enable)
enable or disable interrupt
uint8_t ens160_set_general_purpose_read_interrupt_pin_asserted(ens160_handle_t *handle, ens160_bool_t enable)
set general purpose read interrupt pin asserted
uint8_t ens160_irq_handler(ens160_handle_t *handle)
irq handler
struct ens160_handle_s ens160_handle_t
ens160 handle structure definition
uint8_t ens160_init(ens160_handle_t *handle)
initialize the chip
uint8_t ens160_set_data_interrupt_pin_asserted(ens160_handle_t *handle, ens160_bool_t enable)
set data interrupt pin asserted
@ ENS160_MODE_STANDARD
@ ENS160_PIN_POLARITY_LOW
@ ENS160_STATUS_NEWDAT
@ ENS160_STATUS_NEWGPR
@ ENS160_BOOL_TRUE
@ ENS160_BOOL_FALSE
@ ENS160_PIN_DRIVE_PUSH_PULL
uint8_t ens160_interface_iic_init(void)
interface iic bus init
uint8_t ens160_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t ens160_interface_iic_deinit(void)
interface iic bus deinit
void ens160_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ens160_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void ens160_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ens160_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t ens160_interface_spi_deinit(void)
interface spi bus deinit
uint8_t ens160_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t ens160_interface_spi_init(void)
interface spi bus init
uint8_t ens160_interrupt_test_irq_handler(void)
interrupt test irq
uint8_t ens160_interrupt_test(ens160_interface_t interface, ens160_address_t addr_pin, uint32_t times)
interrupt test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]