c1wireswitch  2.1.0.0
c1wireswitch.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef C1WIRESWITCH_H
29 #define C1WIRESWITCH_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_one_wire.h"
48 
69 #define C1WIRESWITCH_CMD_WRITE_SCRATCHPAD 0x5A
70 #define C1WIRESWITCH_CMD_READ_SCRATCHPAD 0xF5
71 
72 #define C1WIRESWITCH_CMD_WRITE_PIO 0x5A
73 #define C1WIRESWITCH_CMD_READ_PIO 0xF5
74 
79 #define C1WIRESWITCH_PIOB_STATE_MASK 0x04
80 #define C1WIRESWITCH_PIOA_STATE_MASK 0x01
81 #define C1WIRESWITCH_PIOB_LATCH_STATE_MASK 0x08
82 #define C1WIRESWITCH_PIOA_LATCH_STATE_MASK 0x02
83 
88 #define C1WIRESWITCH_PIOA_HIGH 0x01
89 #define C1WIRESWITCH_PIOA_LOW 0x00
90 #define C1WIRESWITCH_PIOB_HIGH 0x04
91 #define C1WIRESWITCH_PIOB_LOW 0x00
92 
93 #define C1WIRESWITCH_PIOB_ON 0x02
94 #define C1WIRESWITCH_PIOB_OFF 0x00
95 #define C1WIRESWITCH_PIOA_ON 0x00
96 #define C1WIRESWITCH_PIOA_OFF 0x01
97 
98 #define C1WIRESWITCH_PIOB_LATCH_LOW 0x00
99 #define C1WIRESWITCH_PIOB_LATCH_HIGH 0x08
100 #define C1WIRESWITCH_PIOA_LATCH_LOW 0x00
101 #define C1WIRESWITCH_PIOA_LATCH_HIGH 0x02
102  // c1wireswitch_cmd
104 
119 #define C1WIRESWITCH_FAMILY_CODE 0x3A
120 
125 #define C1WIRESWITCH_ADDRESS 0x33
126 #define C1WIRESWITCH_ADDRESS_ALL 0xFF
127  // c1wireswitch_set
129 
144 #define C1WIRESWITCH_MAP_MIKROBUS( cfg, mikrobus ) \
145  cfg.gp0 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
146  cfg.gp1 = MIKROBUS( mikrobus, MIKROBUS_AN );
147  // c1wireswitch_map // c1wireswitch
150 
155 typedef enum
156 {
161 
166 typedef struct
167 {
168  // Modules
169  one_wire_t ow;
171  one_wire_rom_address_t rom_addr;
172  uint8_t address;
175 
180 typedef struct
181 {
182  // Communication gpio pins
183  pin_name_t gp0;
184  pin_name_t gp1;
189 
194 typedef enum
195 {
197  C1WIRESWITCH_ERROR = -1
198 
200 
217 
233 
248 
262 
275 
288 
301 err_t c1wireswitch_read_scratchpad ( c1wireswitch_t *ctx, uint8_t *scratchpad, uint8_t scratchpad_len );
302 
315 err_t c1wireswitch_write_scratchpad ( c1wireswitch_t *ctx, uint8_t *scratchpad, uint8_t scratchpad_len );
316 
328 err_t c1wireswitch_write_pio ( c1wireswitch_t *ctx, uint8_t state );
329 
341 err_t c1wireswitch_read_pio ( c1wireswitch_t *ctx, uint8_t *state );
342 
355 err_t c1wireswitch_set_pio_state ( c1wireswitch_t *ctx, uint8_t pio_a, uint8_t pio_b );
356 
369 err_t c1wireswitch_get_pio_state ( c1wireswitch_t *ctx, uint8_t *pio_a, uint8_t *pio_b );
370 
383 err_t c1wireswitch_get_pio_latch_state ( c1wireswitch_t *ctx, uint8_t *pio_a_latch, uint8_t *pio_b_latch );
384 
385 #ifdef __cplusplus
386 }
387 #endif
388 #endif // C1WIRESWITCH_H
389  // c1wireswitch
391 
392 // ------------------------------------------------------------------------ END
c1wireswitch_init
err_t c1wireswitch_init(c1wireswitch_t *ctx, c1wireswitch_cfg_t *cfg)
1-Wire Switch initialization function.
c1wireswitch_check_communication
err_t c1wireswitch_check_communication(c1wireswitch_t *ctx)
1-Wire Switch check communication function.
c1wireswitch_get_pio_state
err_t c1wireswitch_get_pio_state(c1wireswitch_t *ctx, uint8_t *pio_a, uint8_t *pio_b)
1-Wire Switch read specific programmable I/O state function.
c1wireswitch_read_pio
err_t c1wireswitch_read_pio(c1wireswitch_t *ctx, uint8_t *state)
1-Wire Switch read programmable I/O state function.
c1wireswitch_t::ow
one_wire_t ow
Definition: c1wireswitch.h:169
c1wireswitch_cfg_t::gp1
pin_name_t gp1
Definition: c1wireswitch.h:184
c1wireswitch_cfg_t::gp0
pin_name_t gp0
Definition: c1wireswitch.h:183
c1wireswitch_read_scratchpad
err_t c1wireswitch_read_scratchpad(c1wireswitch_t *ctx, uint8_t *scratchpad, uint8_t scratchpad_len)
1-Wire Switch read scratchpad function.
c1wireswitch_cfg_setup
void c1wireswitch_cfg_setup(c1wireswitch_cfg_t *cfg)
1-Wire Switch configuration object setup function.
c1wireswitch_t::rom_addr
one_wire_rom_address_t rom_addr
Definition: c1wireswitch.h:171
c1wireswitch_set_pio_state
err_t c1wireswitch_set_pio_state(c1wireswitch_t *ctx, uint8_t pio_a, uint8_t pio_b)
1-Wire Switch write specific programmable I/O state function.
c1wireswitch_gpio_selection
void c1wireswitch_gpio_selection(c1wireswitch_cfg_t *cfg, c1wireswitch_gpio_sel_t gpio_sel)
1-Wire Switch driver interface setup function.
C1WIRESWITCH_GPIO_0
@ C1WIRESWITCH_GPIO_0
Definition: c1wireswitch.h:157
C1WIRESWITCH_GPIO_1
@ C1WIRESWITCH_GPIO_1
Definition: c1wireswitch.h:158
c1wireswitch_select_device
err_t c1wireswitch_select_device(c1wireswitch_t *ctx)
1-Wire Switch select device function.
c1wireswitch_get_pio_latch_state
err_t c1wireswitch_get_pio_latch_state(c1wireswitch_t *ctx, uint8_t *pio_a_latch, uint8_t *pio_b_latch)
1-Wire Switch read programmable I/O latch state function.
c1wireswitch_t
1-Wire Switch Click context object.
Definition: c1wireswitch.h:167
c1wireswitch_return_value_t
c1wireswitch_return_value_t
1-Wire Switch Click return value data.
Definition: c1wireswitch.h:195
c1wireswitch_gpio_sel_t
c1wireswitch_gpio_sel_t
1-Wire Switch Click gpio selector.
Definition: c1wireswitch.h:156
c1wireswitch_write_scratchpad
err_t c1wireswitch_write_scratchpad(c1wireswitch_t *ctx, uint8_t *scratchpad, uint8_t scratchpad_len)
1-Wire Switch write scratchpad function.
C1WIRESWITCH_ERROR
@ C1WIRESWITCH_ERROR
Definition: c1wireswitch.h:197
C1WIRESWITCH_OK
@ C1WIRESWITCH_OK
Definition: c1wireswitch.h:196
c1wireswitch_write_pio
err_t c1wireswitch_write_pio(c1wireswitch_t *ctx, uint8_t state)
1-Wire Switch write programmable I/O state function.
c1wireswitch_t::address
uint8_t address
Definition: c1wireswitch.h:172
c1wireswitch_cfg_t::gpio_sel
c1wireswitch_gpio_sel_t gpio_sel
Definition: c1wireswitch.h:186
c1wireswitch_cfg_t
1-Wire Switch Click configuration object.
Definition: c1wireswitch.h:181
c1wireswitch_default_cfg
err_t c1wireswitch_default_cfg(c1wireswitch_t *ctx)
1-Wire Switch default configuration function.