xref: /btstack/port/nrf5-cinnamon/port/radio.h (revision 2fca4dad957cd7b88f4657ed51e89c12615dda72)
10138fcaeSMatthias Ringwald /*
20138fcaeSMatthias Ringwald  * Copyright (C) 2020 BlueKitchen GmbH
30138fcaeSMatthias Ringwald  *
40138fcaeSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
50138fcaeSMatthias Ringwald  * modification, are permitted provided that the following conditions
60138fcaeSMatthias Ringwald  * are met:
70138fcaeSMatthias Ringwald  *
80138fcaeSMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
90138fcaeSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
100138fcaeSMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
110138fcaeSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
120138fcaeSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
130138fcaeSMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
140138fcaeSMatthias Ringwald  *    contributors may be used to endorse or promote products derived
150138fcaeSMatthias Ringwald  *    from this software without specific prior written permission.
160138fcaeSMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
170138fcaeSMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
180138fcaeSMatthias Ringwald  *    monetary gain.
190138fcaeSMatthias Ringwald  *
200138fcaeSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
210138fcaeSMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
220138fcaeSMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*2fca4dadSMilanka Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN
24*2fca4dadSMilanka Ringwald  * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
250138fcaeSMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
260138fcaeSMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
270138fcaeSMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
280138fcaeSMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
290138fcaeSMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
300138fcaeSMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
310138fcaeSMatthias Ringwald  * SUCH DAMAGE.
320138fcaeSMatthias Ringwald  *
330138fcaeSMatthias Ringwald  * Please inquire about commercial licensing options at
340138fcaeSMatthias Ringwald  * [email protected]
350138fcaeSMatthias Ringwald  *
360138fcaeSMatthias Ringwald  */
370138fcaeSMatthias Ringwald 
380138fcaeSMatthias Ringwald /*
390138fcaeSMatthias Ringwald  *  radio.h
400138fcaeSMatthias Ringwald  */
410138fcaeSMatthias Ringwald 
420138fcaeSMatthias Ringwald #ifndef RADIO_H
430138fcaeSMatthias Ringwald #define RADIO_H
440138fcaeSMatthias Ringwald 
450138fcaeSMatthias Ringwald #include "btstack_bool.h"
460138fcaeSMatthias Ringwald #include <stdint.h>
470138fcaeSMatthias Ringwald 
480138fcaeSMatthias Ringwald #if defined __cplusplus
490138fcaeSMatthias Ringwald extern "C" {
500138fcaeSMatthias Ringwald #endif
510138fcaeSMatthias Ringwald 
520138fcaeSMatthias Ringwald /* API_START */
530138fcaeSMatthias Ringwald 
540138fcaeSMatthias Ringwald typedef struct {
550138fcaeSMatthias Ringwald     void (*tx_done)(void);
560138fcaeSMatthias Ringwald     void (*rx_done)(void);
570138fcaeSMatthias Ringwald } radio_callbacks_t;
580138fcaeSMatthias Ringwald 
590138fcaeSMatthias Ringwald typedef enum {
600138fcaeSMatthias Ringwald     RADIO_TRANSITION_TX_ONLY,
610138fcaeSMatthias Ringwald     RADIO_TRANSITION_TX_TO_RX,
620138fcaeSMatthias Ringwald } radio_transition_t;
630138fcaeSMatthias Ringwald 
640138fcaeSMatthias Ringwald typedef enum {
650138fcaeSMatthias Ringwald     RADIO_RESULT_OK,
660138fcaeSMatthias Ringwald     RADIO_RESULT_CRC_ERROR,
670138fcaeSMatthias Ringwald     RADIO_RESULT_TIMEOUT,
680138fcaeSMatthias Ringwald } radio_result_t;
690138fcaeSMatthias Ringwald 
700138fcaeSMatthias Ringwald typedef void (*radio_callback_t)(radio_result_t result);
710138fcaeSMatthias Ringwald 
720138fcaeSMatthias Ringwald /**
730138fcaeSMatthias Ringwald  * Init radio
740138fcaeSMatthias Ringwald  */
750138fcaeSMatthias Ringwald void radio_init(void);
760138fcaeSMatthias Ringwald 
770138fcaeSMatthias Ringwald /**
780138fcaeSMatthias Ringwald  * Set Access Address
790138fcaeSMatthias Ringwald  * @param access_address
800138fcaeSMatthias Ringwald  */
810138fcaeSMatthias Ringwald void radio_set_access_address(uint32_t access_address);
820138fcaeSMatthias Ringwald 
830138fcaeSMatthias Ringwald /**
840138fcaeSMatthias Ringwald  * Enable RF CLock
850138fcaeSMatthias Ringwald  * @param wait_until_ready if true, waits until HF clock is ready
860138fcaeSMatthias Ringwald  */
870138fcaeSMatthias Ringwald void radio_hf_clock_enable(bool wait_until_ready);
880138fcaeSMatthias Ringwald 
890138fcaeSMatthias Ringwald /**
900138fcaeSMatthias Ringwald  * Disable RF CLock
910138fcaeSMatthias Ringwald  */
920138fcaeSMatthias Ringwald void radio_hf_clock_disable(void);
930138fcaeSMatthias Ringwald 
940138fcaeSMatthias Ringwald /**
950138fcaeSMatthias Ringwald  * Set CRC Init value
960138fcaeSMatthias Ringwald  * @param crc 24-bit init value
970138fcaeSMatthias Ringwald  */
980138fcaeSMatthias Ringwald void radio_set_crc_init(uint32_t crc);
990138fcaeSMatthias Ringwald 
1000138fcaeSMatthias Ringwald /**
1010138fcaeSMatthias Ringwald  * Set Channel: frequency and whitening
1020138fcaeSMatthias Ringwald  * @param channel 0..39
1030138fcaeSMatthias Ringwald  */
1040138fcaeSMatthias Ringwald void radio_set_channel(uint8_t channel);
1050138fcaeSMatthias Ringwald 
1060138fcaeSMatthias Ringwald /**
1070138fcaeSMatthias Ringwald  * Transmit packet.
1080138fcaeSMatthias Ringwald  * @param callback
1090138fcaeSMatthias Ringwald  * @param transition - on RADIO_TRANSITION_TX_TO_RX, radio transitions to RX
1100138fcaeSMatthias Ringwald  * @param packet
1110138fcaeSMatthias Ringwald  * @param len
1120138fcaeSMatthias Ringwald  */
1130138fcaeSMatthias Ringwald void radio_transmit(radio_callback_t callback, radio_transition_t transition, const uint8_t * packet, uint16_t len);
1140138fcaeSMatthias Ringwald 
1150138fcaeSMatthias Ringwald /**
1160138fcaeSMatthias Ringwald  * Receive packet
1170138fcaeSMatthias Ringwald  * @note automatic transition to TX
1180138fcaeSMatthias Ringwald  * @param callback
1190138fcaeSMatthias Ringwald  * @param timeout_us if radio was disabled before (i.e. not in tx -> rx transition)
1200138fcaeSMatthias Ringwald  * @param buffer
1210138fcaeSMatthias Ringwald  * @param len
1220138fcaeSMatthias Ringwald  * @param rssi (out)
1230138fcaeSMatthias Ringwald  */
1240138fcaeSMatthias Ringwald void radio_receive(radio_callback_t callback, uint32_t timeout_us, uint8_t * buffer, uint16_t len, int8_t * rssi);
1250138fcaeSMatthias Ringwald 
1260138fcaeSMatthias Ringwald /**
1270138fcaeSMatthias Ringwald  * Stop active transmission, e.g. tx after rx
1280138fcaeSMatthias Ringwald  * @param callback
1290138fcaeSMatthias Ringwald  */
1300138fcaeSMatthias Ringwald void radio_stop(radio_callback_t callback);
1310138fcaeSMatthias Ringwald 
1320138fcaeSMatthias Ringwald /* API_END */
1330138fcaeSMatthias Ringwald 
1340138fcaeSMatthias Ringwald #if defined __cplusplus
1350138fcaeSMatthias Ringwald }
1360138fcaeSMatthias Ringwald #endif
1370138fcaeSMatthias Ringwald 
1380138fcaeSMatthias Ringwald #endif // LL_H
139