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