xref: /btstack/port/nrf5-cinnamon/port/radio.h (revision 0138fcae13848f7f874de85efb761a26b844e915)
1*0138fcaeSMatthias Ringwald /*
2*0138fcaeSMatthias Ringwald  * Copyright (C) 2020 BlueKitchen GmbH
3*0138fcaeSMatthias Ringwald  *
4*0138fcaeSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
5*0138fcaeSMatthias Ringwald  * modification, are permitted provided that the following conditions
6*0138fcaeSMatthias Ringwald  * are met:
7*0138fcaeSMatthias Ringwald  *
8*0138fcaeSMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
9*0138fcaeSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
10*0138fcaeSMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*0138fcaeSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*0138fcaeSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
13*0138fcaeSMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*0138fcaeSMatthias Ringwald  *    contributors may be used to endorse or promote products derived
15*0138fcaeSMatthias Ringwald  *    from this software without specific prior written permission.
16*0138fcaeSMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*0138fcaeSMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
18*0138fcaeSMatthias Ringwald  *    monetary gain.
19*0138fcaeSMatthias Ringwald  *
20*0138fcaeSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*0138fcaeSMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*0138fcaeSMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*0138fcaeSMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24*0138fcaeSMatthias Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*0138fcaeSMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*0138fcaeSMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*0138fcaeSMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*0138fcaeSMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*0138fcaeSMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*0138fcaeSMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*0138fcaeSMatthias Ringwald  * SUCH DAMAGE.
32*0138fcaeSMatthias Ringwald  *
33*0138fcaeSMatthias Ringwald  * Please inquire about commercial licensing options at
34*0138fcaeSMatthias Ringwald  * [email protected]
35*0138fcaeSMatthias Ringwald  *
36*0138fcaeSMatthias Ringwald  */
37*0138fcaeSMatthias Ringwald 
38*0138fcaeSMatthias Ringwald /*
39*0138fcaeSMatthias Ringwald  *  radio.h
40*0138fcaeSMatthias Ringwald  */
41*0138fcaeSMatthias Ringwald 
42*0138fcaeSMatthias Ringwald #ifndef RADIO_H
43*0138fcaeSMatthias Ringwald #define RADIO_H
44*0138fcaeSMatthias Ringwald 
45*0138fcaeSMatthias Ringwald #include "btstack_bool.h"
46*0138fcaeSMatthias Ringwald #include <stdint.h>
47*0138fcaeSMatthias Ringwald 
48*0138fcaeSMatthias Ringwald #if defined __cplusplus
49*0138fcaeSMatthias Ringwald extern "C" {
50*0138fcaeSMatthias Ringwald #endif
51*0138fcaeSMatthias Ringwald 
52*0138fcaeSMatthias Ringwald /* API_START */
53*0138fcaeSMatthias Ringwald 
54*0138fcaeSMatthias Ringwald typedef struct {
55*0138fcaeSMatthias Ringwald     void (*tx_done)(void);
56*0138fcaeSMatthias Ringwald     void (*rx_done)(void);
57*0138fcaeSMatthias Ringwald } radio_callbacks_t;
58*0138fcaeSMatthias Ringwald 
59*0138fcaeSMatthias Ringwald typedef enum {
60*0138fcaeSMatthias Ringwald     RADIO_TRANSITION_TX_ONLY,
61*0138fcaeSMatthias Ringwald     RADIO_TRANSITION_TX_TO_RX,
62*0138fcaeSMatthias Ringwald } radio_transition_t;
63*0138fcaeSMatthias Ringwald 
64*0138fcaeSMatthias Ringwald typedef enum {
65*0138fcaeSMatthias Ringwald     RADIO_RESULT_OK,
66*0138fcaeSMatthias Ringwald     RADIO_RESULT_CRC_ERROR,
67*0138fcaeSMatthias Ringwald     RADIO_RESULT_TIMEOUT,
68*0138fcaeSMatthias Ringwald } radio_result_t;
69*0138fcaeSMatthias Ringwald 
70*0138fcaeSMatthias Ringwald typedef void (*radio_callback_t)(radio_result_t result);
71*0138fcaeSMatthias Ringwald 
72*0138fcaeSMatthias Ringwald /**
73*0138fcaeSMatthias Ringwald  * Init radio
74*0138fcaeSMatthias Ringwald  */
75*0138fcaeSMatthias Ringwald void radio_init(void);
76*0138fcaeSMatthias Ringwald 
77*0138fcaeSMatthias Ringwald /**
78*0138fcaeSMatthias Ringwald  * Set Access Address
79*0138fcaeSMatthias Ringwald  * @param access_address
80*0138fcaeSMatthias Ringwald  */
81*0138fcaeSMatthias Ringwald void radio_set_access_address(uint32_t access_address);
82*0138fcaeSMatthias Ringwald 
83*0138fcaeSMatthias Ringwald /**
84*0138fcaeSMatthias Ringwald  * Enable RF CLock
85*0138fcaeSMatthias Ringwald  * @param wait_until_ready if true, waits until HF clock is ready
86*0138fcaeSMatthias Ringwald  */
87*0138fcaeSMatthias Ringwald void radio_hf_clock_enable(bool wait_until_ready);
88*0138fcaeSMatthias Ringwald 
89*0138fcaeSMatthias Ringwald /**
90*0138fcaeSMatthias Ringwald  * Disable RF CLock
91*0138fcaeSMatthias Ringwald  */
92*0138fcaeSMatthias Ringwald void radio_hf_clock_disable(void);
93*0138fcaeSMatthias Ringwald 
94*0138fcaeSMatthias Ringwald /**
95*0138fcaeSMatthias Ringwald  * Set CRC Init value
96*0138fcaeSMatthias Ringwald  * @param crc 24-bit init value
97*0138fcaeSMatthias Ringwald  */
98*0138fcaeSMatthias Ringwald void radio_set_crc_init(uint32_t crc);
99*0138fcaeSMatthias Ringwald 
100*0138fcaeSMatthias Ringwald /**
101*0138fcaeSMatthias Ringwald  * Set Channel: frequency and whitening
102*0138fcaeSMatthias Ringwald  * @param channel 0..39
103*0138fcaeSMatthias Ringwald  */
104*0138fcaeSMatthias Ringwald void radio_set_channel(uint8_t channel);
105*0138fcaeSMatthias Ringwald 
106*0138fcaeSMatthias Ringwald /**
107*0138fcaeSMatthias Ringwald  * Transmit packet.
108*0138fcaeSMatthias Ringwald  * @param callback
109*0138fcaeSMatthias Ringwald  * @param transition - on RADIO_TRANSITION_TX_TO_RX, radio transitions to RX
110*0138fcaeSMatthias Ringwald  * @param packet
111*0138fcaeSMatthias Ringwald  * @param len
112*0138fcaeSMatthias Ringwald  */
113*0138fcaeSMatthias Ringwald void radio_transmit(radio_callback_t callback, radio_transition_t transition, const uint8_t * packet, uint16_t len);
114*0138fcaeSMatthias Ringwald 
115*0138fcaeSMatthias Ringwald /**
116*0138fcaeSMatthias Ringwald  * Receive packet
117*0138fcaeSMatthias Ringwald  * @note automatic transition to TX
118*0138fcaeSMatthias Ringwald  * @param callback
119*0138fcaeSMatthias Ringwald  * @param timeout_us if radio was disabled before (i.e. not in tx -> rx transition)
120*0138fcaeSMatthias Ringwald  * @param buffer
121*0138fcaeSMatthias Ringwald  * @param len
122*0138fcaeSMatthias Ringwald  * @param rssi (out)
123*0138fcaeSMatthias Ringwald  */
124*0138fcaeSMatthias Ringwald void radio_receive(radio_callback_t callback, uint32_t timeout_us, uint8_t * buffer, uint16_t len, int8_t * rssi);
125*0138fcaeSMatthias Ringwald 
126*0138fcaeSMatthias Ringwald /**
127*0138fcaeSMatthias Ringwald  * Stop active transmission, e.g. tx after rx
128*0138fcaeSMatthias Ringwald  * @param callback
129*0138fcaeSMatthias Ringwald  */
130*0138fcaeSMatthias Ringwald void radio_stop(radio_callback_t callback);
131*0138fcaeSMatthias Ringwald 
132*0138fcaeSMatthias Ringwald /* API_END */
133*0138fcaeSMatthias Ringwald 
134*0138fcaeSMatthias Ringwald #if defined __cplusplus
135*0138fcaeSMatthias Ringwald }
136*0138fcaeSMatthias Ringwald #endif
137*0138fcaeSMatthias Ringwald 
138*0138fcaeSMatthias Ringwald #endif // LL_H
139