2 ******************************************************************************
3 * @addtogroup PIOS PIOS Core hardware abstraction layer
5 * @addtogroup PIOS_RFM22B Radio Functions
6 * @brief PIOS interface for RFM22B Radio
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
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
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
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 */
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,
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
;
82 uint16_t packets_per_sec
;
83 uint16_t tx_byte_count
;
84 uint16_t rx_byte_count
;
99 int8_t afc_correction
;
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 */