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