knob  2.0.0.0
knob.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef KNOB_H
36 #define KNOB_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 
52 
53 // -------------------------------------------------------------- PUBLIC MACROS
63 #define KNOB_MAP_MIKROBUS( cfg, mikrobus ) \
64  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
65  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
66  cfg.ena = MIKROBUS( mikrobus, MIKROBUS_AN ); \
67  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
68  cfg.enb = MIKROBUS( mikrobus, MIKROBUS_CS ); \
69  cfg.oe = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
70  cfg.sw = MIKROBUS( mikrobus, MIKROBUS_INT );
71 
77 #define KNOB_RETVAL uint8_t
78 
79 #define KNOB_OK 0x00
80 #define KNOB_INIT_ERROR 0xFF
81 
87 #define KNOB_REG_MODE_1 0x00
88 #define KNOB_REG_MODE_2 0x01
89 #define KNOB_REG_LED_OUTPUT_STATE_0 0x02
90 #define KNOB_REG_LED_OUTPUT_STATE_1 0x03
91 #define KNOB_REG_LED_OUTPUT_STATE_2 0x04
92 #define KNOB_REG_LED_OUTPUT_STATE_3 0x05
93 #define KNOB_REG_LED_OUTPUT_STATE_4 0x06
94 #define KNOB_REG_LED_OUTPUT_STATE_5 0x07
95 #define KNOB_REG_GROUP_DUTY_CYCLE_CONTROL 0x08
96 #define KNOB_REG_GROUP_FREQUENCY 0x09
97 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_0 0x0A
98 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_1 0x0B
99 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_2 0x0C
100 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_3 0x0D
101 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_4 0x0E
102 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_5 0x0F
103 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_6 0x10
104 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_7 0x11
105 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_8 0x12
106 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_9 0x13
107 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_10 0x14
108 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_11 0x15
109 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_12 0x16
110 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_13 0x17
111 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_14 0x18
112 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_15 0x19
113 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_16 0x1A
114 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_17 0x1B
115 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_18 0x1C
116 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_19 0x1D
117 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_20 0x1E
118 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_21 0x1F
119 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_22 0x20
120 #define KNOB_REG_BRIGHTNESS_CONTROL_LED_23 0x21
121 #define KNOB_REG_OUTPUT_GAIN_CONTROL_0 0x22
122 #define KNOB_REG_OUTPUT_GAIN_CONTROL_1 0x23
123 #define KNOB_REG_OUTPUT_GAIN_CONTROL_2 0x24
124 #define KNOB_REG_OUTPUT_GAIN_CONTROL_3 0x25
125 #define KNOB_REG_OUTPUT_GAIN_CONTROL_4 0x26
126 #define KNOB_REG_OUTPUT_GAIN_CONTROL_5 0x27
127 #define KNOB_REG_OUTPUT_GAIN_CONTROL_6 0x28
128 #define KNOB_REG_OUTPUT_GAIN_CONTROL_7 0x29
129 #define KNOB_REG_OUTPUT_GAIN_CONTROL_8 0x2A
130 #define KNOB_REG_OUTPUT_GAIN_CONTROL_9 0x2B
131 #define KNOB_REG_OUTPUT_GAIN_CONTROL_10 0x2C
132 #define KNOB_REG_OUTPUT_GAIN_CONTROL_11 0x2D
133 #define KNOB_REG_OUTPUT_GAIN_CONTROL_12 0x2E
134 #define KNOB_REG_OUTPUT_GAIN_CONTROL_13 0x2F
135 #define KNOB_REG_OUTPUT_GAIN_CONTROL_14 0x30
136 #define KNOB_REG_OUTPUT_GAIN_CONTROL_15 0x31
137 #define KNOB_REG_OUTPUT_GAIN_CONTROL_16 0x32
138 #define KNOB_REG_OUTPUT_GAIN_CONTROL_17 0x33
139 #define KNOB_REG_OUTPUT_GAIN_CONTROL_18 0x34
140 #define KNOB_REG_OUTPUT_GAIN_CONTROL_19 0x35
141 #define KNOB_REG_OUTPUT_GAIN_CONTROL_20 0x36
142 #define KNOB_REG_OUTPUT_GAIN_CONTROL_21 0x37
143 #define KNOB_REG_OUTPUT_GAIN_CONTROL_22 0x38
144 #define KNOB_REG_OUTPUT_GAIN_CONTROL_23 0x39
145 #define KNOB_REG_OFFSET 0x3A
146 #define KNOB_REG_I2C_BUS_SUBADDRESS_1 0x3B
147 #define KNOB_REG_I2C_BUS_SUBADDRESS_2 0x3C
148 #define KNOB_REG_I2C_BUS_SUBADDRESS_3 0x3D
149 #define KNOB_REG_ALL_CALL_I2C_BUS_ADDRESS 0x3E
150 #define KNOB_REG_BRIGHTNESS_CONTROL_FOR_ALL_LED 0x3F
151 #define KNOB_REG_GAIN_CONTROL_FOR_ALL_LED 0x40
152 #define KNOB_REG_OUTPUT_ERROR_FLAG_0 0x41
153 #define KNOB_REG_OUTPUT_ERROR_FLAG_1 0x42
154 #define KNOB_REG_OUTPUT_ERROR_FLAG_2 0x43
155 #define KNOB_REG_OUTPUT_ERROR_FLAG_3 0x44
156 #define KNOB_REG_OUTPUT_ERROR_FLAG_4 0x45
157 #define KNOB_REG_OUTPUT_ERROR_FLAG_5 0x46
158 
164 #define KNOB_M1_AUTO_INCREMENT_BIT_1_TO_0 0x00
165 #define KNOB_M1_AUTO_INCREMENT_BIT_1_TO_1 0x40
166 #define KNOB_M1_AUTO_INCREMENT_BIT_0_TO_0 0x00
167 #define KNOB_M1_AUTO_INCREMENT_BIT_0_TO_1 0x20
168 #define KNOB_M1_SET_NORMAL_MODE 0x00
169 #define KNOB_M1_SET_LOW_POWER_MODE 0x10
170 #define KNOB_M1_USES_I2C_BUS_SUBADDRESS_1 0x08
171 #define KNOB_M1_USES_I2C_BUS_SUBADDRESS_2 0x04
172 #define KNOB_M1_USES_I2C_BUS_SUBADDRESS_3 0x02
173 #define KNOB_M1_USES_ALL_CALL_I2C_BUS_ADDRESS 0x01
174 
180 #define KNOB_M2_GROUP_CONTROL_DIMMING 0x00
181 #define KNOB_M2_GROUP_CONTROL_BLINKING 0x20
182 #define KNOB_M2_CHANGE_ON_STOP_CMD 0x00
183 #define KNOB_M2_CHANGE_ON_ACK 0x10
184 
190 #define KNOB_BRIGHTNESS_ALL_LED 0x30
191 #define KNOB_OUTPUT_GAIN_ALL_LED 0x40
192 
198 #define KNOB_LED_ON 0xFF
199 #define KNOB_LED_OFF 0x00
200 
206 #define KNOB_DEF_SLAVE_ADDRESS 0x70
207 
213 #define KNOB_FULL_OUTPUT_CURRENT_GAIN 0xFF
214 
220 #define KNOB_ENABLE_LED_OUTPUTS 0x00
221 #define KNOB_DISABLE_LED_OUTPUTS 0x01
222  // End group macro
225 // --------------------------------------------------------------- PUBLIC TYPES
234 typedef struct
235 {
236  // Output pins
237 
238  digital_out_t rst;
239  digital_out_t oe;
240 
241  // Input pins
242 
243  digital_in_t ena;
244  digital_in_t enb;
245  digital_in_t sw;
246 
247  // Modules
248 
249  i2c_master_t i2c;
250 
251  // ctx variable
252 
253  uint8_t slave_address;
254 
258  uint8_t start_status;
259 
260 } knob_t;
261 
265 typedef struct
266 {
267  // Communication gpio pins
268 
269  pin_name_t scl;
270  pin_name_t sda;
271 
272  // Additional gpio pins
273 
274  pin_name_t ena;
275  pin_name_t rst;
276  pin_name_t enb;
277  pin_name_t oe;
278  pin_name_t sw;
279 
280  // static variable
281 
282  uint32_t i2c_speed;
283  uint8_t i2c_address;
284 
285 } knob_cfg_t;
286  // End types group
288 
289 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
290 
296 #ifdef __cplusplus
297 extern "C"{
298 #endif
299 
309 
318 
337 void knob_default_cfg ( knob_t *ctx );
338 
349 void knob_generic_write ( knob_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
350 
362 void knob_generic_read ( knob_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
363 
369 void knob_reset ( knob_t *ctx );
370 
377 void knob_led_output_enable ( knob_t *ctx, uint8_t state);
378 
385 uint8_t knob_get_ena_state( knob_t *ctx );
386 
393 uint8_t knob_get_enb_state ( knob_t *ctx );
394 
402 
409 void knob_set_encoder_start_position ( knob_t *ctx, int32_t position );
410 
418 void knob_set_led_state ( knob_t *ctx, uint8_t led, uint8_t state );
419 
430 void knob_set_brightness ( knob_t *ctx, uint8_t led, uint8_t value );
431 
442 void knob_set_output_gain ( knob_t *ctx, uint8_t led, uint8_t value );
443 
451 void knob_get_encoder_position ( knob_t *ctx, int32_t *position, uint8_t *dir );
452 
453 #ifdef __cplusplus
454 }
455 #endif
456 #endif // _KNOB_H_
457  // End public_function group
460 
461 // ------------------------------------------------------------------------- END
knob_get_encoder_position
void knob_get_encoder_position(knob_t *ctx, int32_t *position, uint8_t *dir)
Functions for get Encoder position.
knob_t::sw
digital_in_t sw
Definition: knob.h:245
knob_get_ena_state
uint8_t knob_get_ena_state(knob_t *ctx)
Functions for get ENA pin state.
knob_cfg_t
Click configuration structure definition.
Definition: knob.h:266
knob_led_output_enable
void knob_led_output_enable(knob_t *ctx, uint8_t state)
Functions for enable Led Output.
knob_t::ena
digital_in_t ena
Definition: knob.h:243
knob_t::encoder_position
int32_t encoder_position
Definition: knob.h:255
knob_cfg_setup
void knob_cfg_setup(knob_cfg_t *cfg)
Config Object Initialization function.
knob_cfg_t::sw
pin_name_t sw
Definition: knob.h:278
knob_set_led_state
void knob_set_led_state(knob_t *ctx, uint8_t led, uint8_t state)
Functions for set led state(PWM on the LED)
knob_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: knob.h:282
knob_set_output_gain
void knob_set_output_gain(knob_t *ctx, uint8_t led, uint8_t value)
Functions for set output GAIN.
knob_cfg_t::ena
pin_name_t ena
Definition: knob.h:274
knob_generic_read
void knob_generic_read(knob_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
knob_t::state_new_rotate
uint8_t state_new_rotate
Definition: knob.h:257
knob_set_encoder_start_position
void knob_set_encoder_start_position(knob_t *ctx, int32_t position)
Functions for set new start encoder position.
knob_get_sw_button_state
uint8_t knob_get_sw_button_state(knob_t *ctx)
Functions for get SW pin(switch button) state.
knob_t::start_status
uint8_t start_status
Definition: knob.h:258
knob_init
KNOB_RETVAL knob_init(knob_t *ctx, knob_cfg_t *cfg)
Initialization function.
knob_set_brightness
void knob_set_brightness(knob_t *ctx, uint8_t led, uint8_t value)
Functions for set Brightness.
knob_reset
void knob_reset(knob_t *ctx)
Functions for reset device.
knob_generic_write
void knob_generic_write(knob_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
knob_cfg_t::oe
pin_name_t oe
Definition: knob.h:277
knob_t::i2c
i2c_master_t i2c
Definition: knob.h:249
knob_t::rst
digital_out_t rst
Definition: knob.h:238
knob_cfg_t::sda
pin_name_t sda
Definition: knob.h:270
knob_cfg_t::enb
pin_name_t enb
Definition: knob.h:276
knob_get_enb_state
uint8_t knob_get_enb_state(knob_t *ctx)
Functions for get ENB pin state.
knob_t::oe
digital_out_t oe
Definition: knob.h:239
knob_cfg_t::i2c_address
uint8_t i2c_address
Definition: knob.h:283
knob_cfg_t::rst
pin_name_t rst
Definition: knob.h:275
knob_cfg_t::scl
pin_name_t scl
Definition: knob.h:269
knob_t::state_old_rotate
uint8_t state_old_rotate
Definition: knob.h:256
KNOB_RETVAL
#define KNOB_RETVAL
Definition: knob.h:77
knob_t
Click ctx object definition.
Definition: knob.h:235
knob_t::enb
digital_in_t enb
Definition: knob.h:244
knob_t::slave_address
uint8_t slave_address
Definition: knob.h:253
knob_default_cfg
void knob_default_cfg(knob_t *ctx)
Click Default Configuration function.