1 /* SPDX-License-Identifier: GPL-2.0+ 2 * 3 * include/linux/TODO 4 * 5 * userspace interface for pi433 radio module 6 * 7 * Pi433 is a 433MHz radio module for the Raspberry Pi. 8 * It is based on the HopeRf Module RFM69CW. Therefore inside of this 9 * driver, you'll find an abstraction of the rf69 chip. 10 * 11 * If needed, this driver could be extended, to also support other 12 * devices, basing on HopeRfs rf69. 13 * 14 * The driver can also be extended, to support other modules of 15 * HopeRf with a similar interace - e. g. RFM69HCW, RFM12, RFM95, ... 16 * Copyright (C) 2016 Wolf-Entwicklungen 17 * Marcus Wolf <linux@wolf-entwicklungen.de> 18 * 19 * This program is free software; you can redistribute it and/or modify 20 * it under the terms of the GNU General Public License as published by 21 * the Free Software Foundation; either version 2 of the License, or 22 * (at your option) any later version. 23 * 24 * This program is distributed in the hope that it will be useful, 25 * but WITHOUT ANY WARRANTY; without even the implied warranty of 26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 27 * GNU General Public License for more details. 28 */ 29 30 #ifndef PI433_H 31 #define PI433_H 32 33 #include <linux/types.h> 34 #include "rf69_enum.h" 35 36 /*---------------------------------------------------------------------------*/ 37 38 enum option_on_off { 39 OPTION_OFF, 40 OPTION_ON 41 }; 42 43 /* IOCTL structs and commands */ 44 45 /** 46 * struct pi433_tx_config 47 * describes the configuration of the radio module for sending 48 * @frequency: 49 * @bit_rate: 50 * @modulation: 51 * @data_mode: 52 * @preamble_length: 53 * @sync_pattern: 54 * @tx_start_condition: 55 * @payload_length: 56 * @repetitions: 57 * 58 * ATTENTION: 59 * If the contents of 'pi433_tx_config' ever change 60 * incompatibly, then the ioctl number (see define below) must change. 61 * 62 * NOTE: struct layout is the same in 64bit and 32bit userspace. 63 */ 64 #define PI433_TX_CFG_IOCTL_NR 0 65 struct pi433_tx_cfg { 66 __u32 frequency; 67 __u16 bit_rate; 68 __u32 dev_frequency; 69 enum modulation modulation; 70 enum mod_shaping mod_shaping; 71 72 enum pa_ramp pa_ramp; 73 74 enum tx_start_condition tx_start_condition; 75 76 __u16 repetitions; 77 78 /* packet format */ 79 enum option_on_off enable_preamble; 80 enum option_on_off enable_sync; 81 enum option_on_off enable_length_byte; 82 enum option_on_off enable_address_byte; 83 enum option_on_off enable_crc; 84 85 __u16 preamble_length; 86 __u8 sync_length; 87 __u8 fixed_message_length; 88 89 __u8 sync_pattern[8]; 90 __u8 address_byte; 91 }; 92 93 /** 94 * struct pi433_rx_config 95 * describes the configuration of the radio module for sending 96 * @frequency: 97 * @bit_rate: 98 * @modulation: 99 * @data_mode: 100 * @preamble_length: 101 * @sync_pattern: 102 * @tx_start_condition: 103 * @payload_length: 104 * @repetitions: 105 * 106 * ATTENTION: 107 * If the contents of 'pi433_rx_config' ever change 108 * incompatibly, then the ioctl number (see define below) must change 109 * 110 * NOTE: struct layout is the same in 64bit and 32bit userspace. 111 */ 112 #define PI433_RX_CFG_IOCTL_NR 1 113 struct pi433_rx_cfg { 114 __u32 frequency; 115 __u16 bit_rate; 116 __u32 dev_frequency; 117 118 enum modulation modulation; 119 120 __u8 rssi_threshold; 121 enum threshold_decrement threshold_decrement; 122 enum antenna_impedance antenna_impedance; 123 enum lna_gain lna_gain; 124 enum mantisse bw_mantisse; /* normal: 0x50 */ 125 __u8 bw_exponent; /* during AFC: 0x8b */ 126 enum dagc dagc; 127 128 /* packet format */ 129 enum option_on_off enable_sync; 130 enum option_on_off enable_length_byte; /* should be used in combination with sync, only */ 131 enum address_filtering enable_address_filtering; /* operational with sync, only */ 132 enum option_on_off enable_crc; /* only operational, if sync on and fixed length or length byte is used */ 133 134 __u8 sync_length; 135 __u8 fixed_message_length; 136 __u32 bytes_to_drop; 137 138 __u8 sync_pattern[8]; 139 __u8 node_address; 140 __u8 broadcast_address; 141 }; 142 143 #define PI433_IOC_MAGIC 'r' 144 145 #define PI433_IOC_RD_TX_CFG _IOR(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)]) 146 #define PI433_IOC_WR_TX_CFG _IOW(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)]) 147 148 #define PI433_IOC_RD_RX_CFG _IOR(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)]) 149 #define PI433_IOC_WR_RX_CFG _IOW(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)]) 150 151 #endif /* PI433_H */ 152