Go to the documentation of this file.
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_spi_master.h"
60 #define DTMF_CMD_GENERAL_RESET 0x01
61 #define DTMF_CMD_GENERAL_CONTROL 0xE0
62 #define DTMF_CMD_TRANSMIT_MODE 0xE1
63 #define DTMF_CMD_RECEIVE_MODE 0xE2
64 #define DTMF_CMD_TRANSMIT_DATA 0xE3
65 #define DTMF_CMD_RECEIVE_DATA 0xE5
66 #define DTMF_CMD_STATUS 0xE6
67 #define DTMF_CMD_PROGRAMMING 0xE8
85 #define DTMF_CONTROL_TXAN_OFF 0x8000u
86 #define DTMF_CONTROL_TXA_OFF 0x4000u
87 #define DTMF_CONTROL_LB 0x0800u
88 #define DTMF_CONTROL_EQU 0x0400u
89 #define DTMF_CONTROL_PWR 0x0100u
90 #define DTMF_CONTROL_RST 0x0080u
91 #define DTMF_CONTROL_IRQN_EN 0x0040u
92 #define DTMF_CONTROL_IRQ_PROG_FLAG 0x0010u
93 #define DTMF_CONTROL_IRQ_TX_RDY_UNF 0x0008u
94 #define DTMF_CONTROL_IRQ_ENERGY_RX_CP 0x0004u
95 #define DTMF_CONTROL_IRQ_CONT_10 0x0002u
96 #define DTMF_CONTROL_IRQ_RX_RDY_OVF 0x0001u
97 #define DTMF_CONTROL_IRQ_MASK 0x001Fu
103 #define DTMF_TX_MODE_V21_FSK_HIGH 0x9000u
104 #define DTMF_TX_MODE_V21_FSK_LOW 0x8000u
105 #define DTMF_TX_MODE_BELL_103_FSK_HIGH 0x7000u
106 #define DTMF_TX_MODE_BELL_103_FSK_LOW 0x6000u
107 #define DTMF_TX_MODE_V23_FSK_1200 0x5000u
108 #define DTMF_TX_MODE_V23_FSK_75 0x4000u
109 #define DTMF_TX_MODE_BELL_202_FSK_1200 0x3000u
110 #define DTMF_TX_MODE_BELL_202_FSK_150 0x2000u
111 #define DTMF_TX_MODE_DTMF_TONES 0x1000u
112 #define DTMF_TX_MODE_DISABLED 0x0000u
113 #define DTMF_TX_MODE_MASK 0xF000u
114 #define DTMF_TX_LEVEL_0_DB 0x0E00u
115 #define DTMF_TX_LEVEL_MIN_1_5_DB 0x0C00u
116 #define DTMF_TX_LEVEL_MIN_3_DB 0x0A00u
117 #define DTMF_TX_LEVEL_MIN_4_5_DB 0x0800u
118 #define DTMF_TX_LEVEL_MIN_6_DB 0x0600u
119 #define DTMF_TX_LEVEL_MIN_7_5_DB 0x0400u
120 #define DTMF_TX_LEVEL_MIN_9_DB 0x0200u
121 #define DTMF_TX_LEVEL_MIN_10_5_DB 0x0000u
122 #define DTMF_TX_LEVEL_MASK 0x0E00u
123 #define DTMF_TX_DTMF_TWIST_2_DB 0x00E0u
124 #define DTMF_TX_DTMF_TWIST_1_DB 0x00C0u
125 #define DTMF_TX_DTMF_TWIST_1_5_DB 0x00A0u
126 #define DTMF_TX_DTMF_TWIST_2_5_DB 0x0080u
127 #define DTMF_TX_DTMF_TWIST_3_DB 0x0060u
128 #define DTMF_TX_DTMF_TWIST_3_5_DB 0x0040u
129 #define DTMF_TX_DTMF_TWIST_4_DB 0x0020u
130 #define DTMF_TX_DTMF_TWIST_4_5_DB 0x0000u
131 #define DTMF_TX_DTMF_TWIST_MASK 0x00E0u
132 #define DTMF_TX_DATA_FORMAT_SYNC 0x0018u
133 #define DTMF_TX_DATA_FORMAT_SS_NO_PAR 0x0010u
134 #define DTMF_TX_DATA_FORMAT_SS_EVEN_PAR 0x0008u
135 #define DTMF_TX_DATA_FORMAT_SS_ODD_PAR 0x0000u
136 #define DTMF_TX_DATA_FORMAT_MASK 0x0018u
137 #define DTMF_TX_DATA_STOP_8_2 0x0007u
138 #define DTMF_TX_DATA_STOP_8_1 0x0006u
139 #define DTMF_TX_DATA_STOP_7_2 0x0005u
140 #define DTMF_TX_DATA_STOP_7_1 0x0004u
141 #define DTMF_TX_DATA_STOP_6_2 0x0003u
142 #define DTMF_TX_DATA_STOP_6_1 0x0002u
143 #define DTMF_TX_DATA_STOP_5_2 0x0001u
144 #define DTMF_TX_DATA_STOP_5_1 0x0000u
145 #define DTMF_TX_DATA_STOP_MASK 0x0007u
146 #define DTMF_TX_DATA_SOURCE_TX_BUF 0x0004u
147 #define DTMF_TX_DATA_SOURCE_CONT_1S 0x0003u
148 #define DTMF_TX_DATA_SOURCE_CONT_0S 0x0002u
149 #define DTMF_TX_DATA_SOURCE_CONT_ALT 0x0000u
150 #define DTMF_TX_DATA_SOURCE_MASK 0x0007u
151 #define DTMF_TX_TONE_FIXED_NO_TONE 0x0000u
152 #define DTMF_TX_TONE_FIXED_PAIR_697 0x0001u
153 #define DTMF_TX_TONE_FIXED_PAIR_770 0x0002u
154 #define DTMF_TX_TONE_FIXED_PAIR_852 0x0003u
155 #define DTMF_TX_TONE_FIXED_PAIR_941 0x0004u
156 #define DTMF_TX_TONE_FIXED_PAIR_1209 0x0005u
157 #define DTMF_TX_TONE_FIXED_PAIR_1336 0x0006u
158 #define DTMF_TX_TONE_FIXED_PAIR_1477 0x0007u
159 #define DTMF_TX_TONE_FIXED_PAIR_1633 0x0008u
160 #define DTMF_TX_TONE_FIXED_PAIR_1300 0x0009u
161 #define DTMF_TX_TONE_FIXED_PAIR_2100 0x000Au
162 #define DTMF_TX_TONE_FIXED_PAIR_2225 0x000Bu
163 #define DTMF_TX_TONE_FIXED_PAIR_TA 0x000Cu
164 #define DTMF_TX_TONE_FIXED_PAIR_TB 0x000Du
165 #define DTMF_TX_TONE_FIXED_PAIR_TC 0x000Eu
166 #define DTMF_TX_TONE_FIXED_PAIR_TD 0x000Fu
167 #define DTMF_TX_TONE_D 0x0010u
168 #define DTMF_TX_TONE_1 0x0011u
169 #define DTMF_TX_TONE_2 0x0012u
170 #define DTMF_TX_TONE_3 0x0013u
171 #define DTMF_TX_TONE_4 0x0014u
172 #define DTMF_TX_TONE_5 0x0015u
173 #define DTMF_TX_TONE_6 0x0016u
174 #define DTMF_TX_TONE_7 0x0017u
175 #define DTMF_TX_TONE_8 0x0018u
176 #define DTMF_TX_TONE_9 0x0019u
177 #define DTMF_TX_TONE_0 0x001Au
178 #define DTMF_TX_TONE_STAR 0x001Bu
179 #define DTMF_TX_TONE_HASH 0x001Cu
180 #define DTMF_TX_TONE_A 0x001Du
181 #define DTMF_TX_TONE_B 0x001Eu
182 #define DTMF_TX_TONE_C 0x001Fu
183 #define DTMF_TX_TONE_MASK 0x001Fu
189 #define DTMF_RX_MODE_V21_FSK_HIGH 0x9000u
190 #define DTMF_RX_MODE_V21_FSK_LOW 0x8000u
191 #define DTMF_RX_MODE_BELL_103_FSK_HIGH 0x7000u
192 #define DTMF_RX_MODE_BELL_103_FSK_LOW 0x6000u
193 #define DTMF_RX_MODE_V23_FSK_1200 0x5000u
194 #define DTMF_RX_MODE_V23_FSK_75 0x4000u
195 #define DTMF_RX_MODE_BELL_202_FSK_1200 0x3000u
196 #define DTMF_RX_MODE_BELL_202_FSK_150 0x2000u
197 #define DTMF_RX_MODE_DTMF_TONES 0x1000u
198 #define DTMF_RX_MODE_DISABLED 0x0000u
199 #define DTMF_RX_MODE_MASK 0xF000u
200 #define DTMF_RX_LEVEL_0_DB 0x0E00u
201 #define DTMF_RX_LEVEL_MIN_1_5_DB 0x0C00u
202 #define DTMF_RX_LEVEL_MIN_3_DB 0x0A00u
203 #define DTMF_RX_LEVEL_MIN_4_5_DB 0x0800u
204 #define DTMF_RX_LEVEL_MIN_6_DB 0x0600u
205 #define DTMF_RX_LEVEL_MIN_7_5_DB 0x0400u
206 #define DTMF_RX_LEVEL_MIN_9_DB 0x0200u
207 #define DTMF_RX_LEVEL_MIN_10_5_DB 0x0000u
208 #define DTMF_RX_LEVEL_MASK 0x0E00u
209 #define DTMF_RX_USART_SYNC 0x0038u
210 #define DTMF_RX_USART_START_STOP 0x0030u
211 #define DTMF_RX_USART_DISABLED 0x0000u
212 #define DTMF_RX_USART_MASK 0x0038u
213 #define DTMF_RX_DATA_PARITY_8_PAR 0x0007u
214 #define DTMF_RX_DATA_PARITY_8_NO_PAR 0x0006u
215 #define DTMF_RX_DATA_PARITY_7_PAR 0x0005u
216 #define DTMF_RX_DATA_PARITY_7_NO_PAR 0x0004u
217 #define DTMF_RX_DATA_PARITY_6_PAR 0x0003u
218 #define DTMF_RX_DATA_PARITY_6_NO_PAR 0x0002u
219 #define DTMF_RX_DATA_PARITY_5_PAR 0x0001u
220 #define DTMF_RX_DATA_PARITY_5_NO_PAR 0x0000u
221 #define DTMF_RX_DATA_PARITY_MASK 0x0007u
222 #define DTMF_RX_TONE_DETECT_PROG_PAIR 0x0004u
223 #define DTMF_RX_TONE_DETECT_CALL_PROG 0x0003u
224 #define DTMF_RX_TONE_DETECT_ANSWER 0x0002u
225 #define DTMF_RX_TONE_DETECT_DTMF 0x0001u
226 #define DTMF_RX_TONE_DETECT_DISABLE 0x0007u
227 #define DTMF_RX_TONE_DETECT_MASK 0x0007u
233 #define DTMF_STATUS_IRQ 0x8000u
234 #define DTMF_STATUS_PROG_FLAG 0x2000u
235 #define DTMF_STATUS_TX_READY 0x1000u
236 #define DTMF_STATUS_TX_UNDERFLOW 0x0800u
237 #define DTMF_STATUS_ENERGY_RX_CP 0x0400u
238 #define DTMF_STATUS_1010_PATTERN 0x0200u
239 #define DTMF_STATUS_CONT_0S 0x0100u
240 #define DTMF_STATUS_CONT_1S 0x0080u
241 #define DTMF_STATUS_RX_READY 0x0040u
242 #define DTMF_STATUS_RX_OVERFLOW 0x0020u
243 #define DTMF_STATUS_RX_FRAMING_ERROR 0x0010u
244 #define DTMF_STATUS_RX_EVEN_PARITY 0x0008u
245 #define DTMF_STATUS_FSK_OUT 0x0001u
246 #define DTMF_STATUS_TONE_D 0x0000u
247 #define DTMF_STATUS_TONE_1 0x0001u
248 #define DTMF_STATUS_TONE_2 0x0002u
249 #define DTMF_STATUS_TONE_3 0x0003u
250 #define DTMF_STATUS_TONE_4 0x0004u
251 #define DTMF_STATUS_TONE_5 0x0005u
252 #define DTMF_STATUS_TONE_6 0x0006u
253 #define DTMF_STATUS_TONE_7 0x0007u
254 #define DTMF_STATUS_TONE_8 0x0008u
255 #define DTMF_STATUS_TONE_9 0x0009u
256 #define DTMF_STATUS_TONE_0 0x000Au
257 #define DTMF_STATUS_TONE_STAR 0x000Bu
258 #define DTMF_STATUS_TONE_HASH 0x000Cu
259 #define DTMF_STATUS_TONE_A 0x000Du
260 #define DTMF_STATUS_TONE_B 0x000Eu
261 #define DTMF_STATUS_TONE_C 0x000Fu
262 #define DTMF_STATUS_TONE_MASK 0x000Fu
268 #define DTMF_TIMEOUT_CLEAR_IRQ 2000u
269 #define DTMF_TIMEOUT_TX_READY 2000u
270 #define DTMF_TIMEOUT_CALL_PROGRESS 60000u
271 #define DTMF_TIMING_BUSY 50u
272 #define DTMF_TIMING_DISCONNECTED 250u
273 #define DTMF_TIMING_RINGING 2000u
274 #define DTMF_TIMING_CALL_PROGRESS 6000u
275 #define DTMF_TIMING_SEND_MESSAGE 2000u
276 #define DTMF_TIMING_RX_READY 10u
277 #define DTMF_TIMING_WAIT_FOR_MESSAGE 10000u
283 #define DTMF_STATE_IDLE 0
284 #define DTMF_STATE_IRQ_SET 1
285 #define DTMF_STATE_RINGING 2
286 #define DTMF_STATE_CALL_IN_PROGRESS 3
292 #define DTMF_DIAL_NUMBER_MAX_LEN 16
302 #define DTMF_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
303 #define DTMF_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
321 #define DTMF_MAP_MIKROBUS( cfg, mikrobus ) \
322 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
323 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
324 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
325 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
326 cfg.rdn = MIKROBUS( mikrobus, MIKROBUS_AN ); \
327 cfg.hsw = MIKROBUS( mikrobus, MIKROBUS_RST ); \
328 cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
@ DTMF_TIMEOUT
Definition: dtmf.h:390
err_t dtmf_get_status(dtmf_t *ctx, uint16_t *data_out)
DTMF get status function.
pin_name_t miso
Definition: dtmf.h:365
uint8_t dtmf_tx_ready(dtmf_t *ctx)
DTMF tx ready function.
This file contains SPI specific macros, functions, etc.
uint8_t dtmf_unscram_1s_det(dtmf_t *ctx)
DTMF unscram 1s det function.
pin_name_t mosi
Definition: dtmf.h:366
spi_master_chip_select_polarity_t cs_polarity
Definition: dtmf.h:378
void dtmf_set_hsw_pin(dtmf_t *ctx, uint8_t state)
DTMF set hsw pin function.
spi_master_t spi
Definition: dtmf.h:347
err_t dtmf_send_message(dtmf_t *ctx, uint8_t *data_in, uint8_t len)
DTMF send message function.
uint16_t status
Definition: dtmf.h:354
err_t dtmf_general_reset(dtmf_t *ctx)
DTMF general reset function.
err_t dtmf_init(dtmf_t *ctx, dtmf_cfg_t *cfg)
DTMF initialization function.
uint8_t dtmf_call_progress(dtmf_t *ctx)
DTMF call progress function.
void dtmf_hook_on(dtmf_t *ctx)
DTMF hook on function.
uint16_t tx_mode
Definition: dtmf.h:352
dtmf_return_value_t
DTMF Click return value data.
Definition: dtmf.h:387
pin_name_t chip_select
Definition: dtmf.h:349
DTMF Click context object.
Definition: dtmf.h:338
err_t dtmf_set_control(dtmf_t *ctx, uint16_t data_in)
DTMF set control function.
uint32_t spi_speed
Definition: dtmf.h:376
err_t dtmf_set_transmit_mode(dtmf_t *ctx, uint16_t data_in)
DTMF set transmit mode function.
digital_in_t rdn
Definition: dtmf.h:343
err_t dtmf_clear_interrupts(dtmf_t *ctx)
DTMF clear interrupts function.
pin_name_t irq
Definition: dtmf.h:373
uint8_t dtmf_get_rdn_pin(dtmf_t *ctx)
DTMF get rdn pin function.
void dtmf_hook_off(dtmf_t *ctx)
DTMF hook off function.
pin_name_t sck
Definition: dtmf.h:367
spi_master_mode_t spi_mode
Definition: dtmf.h:377
uint16_t rx_mode
Definition: dtmf.h:353
uint8_t dtmf_rx_ready(dtmf_t *ctx)
DTMF rx ready function.
pin_name_t cs
Definition: dtmf.h:368
@ DTMF_ERROR
Definition: dtmf.h:389
err_t dtmf_handshake_init(dtmf_t *ctx)
DTMF handshake init function.
digital_out_t hsw
Definition: dtmf.h:340
err_t dtmf_receive_data(dtmf_t *ctx, uint8_t *data_out)
DTMF receive data function.
err_t dtmf_set_receive_mode(dtmf_t *ctx, uint16_t data_in)
DTMF set receive mode function.
uint8_t dtmf_get_irq_pin(dtmf_t *ctx)
DTMF get irq pin function.
@ DTMF_OK
Definition: dtmf.h:388
err_t dtmf_set_programming(dtmf_t *ctx, uint16_t data_in)
DTMF set programming function.
void dtmf_cfg_setup(dtmf_cfg_t *cfg)
DTMF configuration object setup function.
pin_name_t rdn
Definition: dtmf.h:371
DTMF Click configuration object.
Definition: dtmf.h:363
pin_name_t hsw
Definition: dtmf.h:372
uint16_t control
Definition: dtmf.h:351
digital_in_t irq
Definition: dtmf.h:344
err_t dtmf_transmit_data(dtmf_t *ctx, uint8_t data_in)
DTMF transmit data function.
err_t dtmf_dial(dtmf_t *ctx, uint8_t *dial_num)
DTMF dial function.