OP-1516 fixed boundf mistake
[librepilot.git] / flight / pios / inc / pios_rfm22b.h
blobb6001ba38761c44944924329e2d71859b6c06945
1 /**
2 ******************************************************************************
3 * @addtogroup PIOS PIOS Core hardware abstraction layer
4 * @{
5 * @addtogroup PIOS_RFM22B Radio Functions
6 * @brief PIOS interface for RFM22B Radio
7 * @{
9 * @file pios_rfm22b.h
10 * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012.
11 * @brief RFM22B functions header.
12 * @see The GNU Public License (GPL) Version 3
14 *****************************************************************************/
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 3 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful, but
22 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
23 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24 * for more details.
26 * You should have received a copy of the GNU General Public License along
27 * with this program; if not, write to the Free Software Foundation, Inc.,
28 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #ifndef PIOS_RFM22B_H
32 #define PIOS_RFM22B_H
34 #include <uavobjectmanager.h>
35 #include <oplinksettings.h>
37 /* Constant definitions */
38 enum gpio_direction { GPIO0_TX_GPIO1_RX, GPIO0_RX_GPIO1_TX };
39 #define RFM22B_PPM_NUM_CHANNELS 8
41 /* Global Types */
42 struct pios_rfm22b_cfg {
43 const struct pios_spi_cfg *spi_cfg; /* Pointer to SPI interface configuration */
44 const struct pios_exti_cfg *exti_cfg; /* Pointer to the EXTI configuration */
45 uint8_t RFXtalCap;
46 uint8_t slave_num;
47 enum gpio_direction gpio_direction;
49 typedef void (*PPMReceivedCallback)(const int16_t *channels);
51 enum rfm22b_tx_power {
52 RFM22_tx_pwr_txpow_0 = 0x00, // +1dBm .. 1.25mW
53 RFM22_tx_pwr_txpow_1 = 0x01, // +2dBm .. 1.6mW
54 RFM22_tx_pwr_txpow_2 = 0x02, // +5dBm .. 3.16mW
55 RFM22_tx_pwr_txpow_3 = 0x03, // +8dBm .. 6.3mW
56 RFM22_tx_pwr_txpow_4 = 0x04, // +11dBm .. 12.6mW
57 RFM22_tx_pwr_txpow_5 = 0x05, // +14dBm .. 25mW
58 RFM22_tx_pwr_txpow_6 = 0x06, // +17dBm .. 50mW
59 RFM22_tx_pwr_txpow_7 = 0x07 // +20dBm .. 100mW
62 enum rfm22b_datarate {
63 RFM22_datarate_9600 = 0,
64 RFM22_datarate_19200 = 1,
65 RFM22_datarate_32000 = 2,
66 RFM22_datarate_57600 = 3,
67 RFM22_datarate_64000 = 4,
68 RFM22_datarate_100000 = 5,
69 RFM22_datarate_128000 = 6,
70 RFM22_datarate_192000 = 7,
71 RFM22_datarate_256000 = 8,
74 typedef enum {
75 PIOS_RFM22B_INT_FAILURE,
76 PIOS_RFM22B_INT_SUCCESS,
77 PIOS_RFM22B_TX_COMPLETE,
78 PIOS_RFM22B_RX_COMPLETE
79 } pios_rfm22b_int_result;
81 struct rfm22b_stats {
82 uint16_t packets_per_sec;
83 uint16_t tx_byte_count;
84 uint16_t rx_byte_count;
85 uint16_t tx_seq;
86 uint16_t rx_seq;
87 uint8_t rx_good;
88 uint8_t rx_corrected;
89 uint8_t rx_error;
90 uint8_t rx_missed;
91 uint8_t rx_failure;
92 uint8_t tx_dropped;
93 uint8_t tx_resent;
94 uint8_t tx_failure;
95 uint8_t resets;
96 uint8_t timeouts;
97 uint8_t link_quality;
98 int8_t rssi;
99 int8_t afc_correction;
100 uint8_t link_state;
103 /* Public Functions */
104 extern int32_t PIOS_RFM22B_Init(uint32_t *rfb22b_id, uint32_t spi_id, uint32_t slave_num, const struct pios_rfm22b_cfg *cfg);
105 extern void PIOS_RFM22B_Reinit(uint32_t rfb22b_id);
106 extern void PIOS_RFM22B_SetTxPower(uint32_t rfm22b_id, enum rfm22b_tx_power tx_pwr);
107 extern void PIOS_RFM22B_SetChannelConfig(uint32_t rfm22b_id, enum rfm22b_datarate datarate, uint8_t min_chan, uint8_t max_chan, uint8_t chan_set, bool coordinator, bool oneway, bool ppm_mode, bool ppm_only);
108 extern void PIOS_RFM22B_SetCoordinatorID(uint32_t rfm22b_id, uint32_t coord_id);
109 extern uint32_t PIOS_RFM22B_DeviceID(uint32_t rfb22b_id);
110 extern void PIOS_RFM22B_GetStats(uint32_t rfm22b_id, struct rfm22b_stats *stats);
111 extern uint8_t PIOS_RFM2B_GetPairStats(uint32_t rfm22b_id, uint32_t *device_ids, int8_t *RSSIs, uint8_t max_pairs);
112 extern bool PIOS_RFM22B_InRxWait(uint32_t rfb22b_id);
113 extern bool PIOS_RFM22B_LinkStatus(uint32_t rfm22b_id);
114 extern bool PIOS_RFM22B_ReceivePacket(uint32_t rfm22b_id, uint8_t *p);
115 extern bool PIOS_RFM22B_TransmitPacket(uint32_t rfm22b_id, uint8_t *p, uint8_t len);
116 extern pios_rfm22b_int_result PIOS_RFM22B_ProcessTx(uint32_t rfm22b_id);
117 extern pios_rfm22b_int_result PIOS_RFM22B_ProcessRx(uint32_t rfm22b_id);
118 extern void PIOS_RFM22B_SetPPMCallback(uint32_t rfm22b_id, PPMReceivedCallback cb);
119 extern void PIOS_RFM22B_PPMSet(uint32_t rfm22b_id, int16_t *channels);
120 extern void PIOS_RFM22B_PPMGet(uint32_t rfm22b_id, int16_t *channels);
122 /* Global Variables */
123 extern const struct pios_com_driver pios_rfm22b_com_driver;
125 #endif /* PIOS_RFM22B_H */
128 * @}
129 * @}