/* SPDX-License-Identifier: GPL-2.0+ */ /* * userspace interface for pi433 radio module * * Pi433 is a 433MHz radio module for the Raspberry Pi. * It is based on the HopeRf Module RFM69CW. Therefore, inside of this * driver you'll find an abstraction of the rf69 chip. * * If needed this driver could also be extended to support other * devices based on HopeRf rf69 as well as HopeRf modules with a similar * interface such as RFM69HCW, RFM12, RFM95 and so on. * * Copyright (C) 2016 Wolf-Entwicklungen * Marcus Wolf */ #ifndef PI433_H #define PI433_H #include #include "rf69_enum.h" /*---------------------------------------------------------------------------*/ enum option_on_off { OPTION_OFF, OPTION_ON }; /* IOCTL structs and commands */ /** * struct pi433_tx_cfg * describes the configuration of the radio module for sending data * @frequency: * @bit_rate: * @modulation: * @data_mode: * @preamble_length: * @sync_pattern: * @tx_start_condition: * @payload_length: * @repetitions: * * ATTENTION: * If the contents of 'pi433_tx_cfg' ever change * incompatibly, then the ioctl number (see define below) must change. * * NOTE: struct layout is the same in 64bit and 32bit userspace. */ #define PI433_TX_CFG_IOCTL_NR 0 struct pi433_tx_cfg { __u32 frequency; __u16 bit_rate; __u32 dev_frequency; enum modulation modulation; enum mod_shaping mod_shaping; enum pa_ramp pa_ramp; enum tx_start_condition tx_start_condition; __u16 repetitions; /* packet format */ enum option_on_off enable_preamble; enum option_on_off enable_sync; enum option_on_off enable_length_byte; enum option_on_off enable_address_byte; enum option_on_off enable_crc; __u16 preamble_length; __u8 sync_length; __u8 fixed_message_length; __u8 sync_pattern[8]; __u8 address_byte; }; /** * struct pi433_rx_cfg * describes the configuration of the radio module for receiving data * @frequency: * @bit_rate: * @modulation: * @data_mode: * @preamble_length: * @sync_pattern: * @tx_start_condition: * @payload_length: * @repetitions: * * ATTENTION: * If the contents of 'pi433_rx_cfg' ever change * incompatibly, then the ioctl number (see define below) must change * * NOTE: struct layout is the same in 64bit and 32bit userspace. */ #define PI433_RX_CFG_IOCTL_NR 1 struct pi433_rx_cfg { __u32 frequency; __u16 bit_rate; __u32 dev_frequency; enum modulation modulation; __u8 rssi_threshold; enum threshold_decrement threshold_decrement; enum antenna_impedance antenna_impedance; enum lna_gain lna_gain; enum mantisse bw_mantisse; /* normal: 0x50 */ __u8 bw_exponent; /* during AFC: 0x8b */ enum dagc dagc; /* packet format */ enum option_on_off enable_sync; /* should be used in combination with sync, only */ enum option_on_off enable_length_byte; /* operational with sync, only */ enum address_filtering enable_address_filtering; /* only operational, if sync on and fixed length or length byte is used */ enum option_on_off enable_crc; __u8 sync_length; __u8 fixed_message_length; __u32 bytes_to_drop; __u8 sync_pattern[8]; __u8 node_address; __u8 broadcast_address; }; #define PI433_IOC_MAGIC 'r' #define PI433_IOC_RD_TX_CFG \ _IOR(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)]) #define PI433_IOC_WR_TX_CFG \ _IOW(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)]) #define PI433_IOC_RD_RX_CFG \ _IOR(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)]) #define PI433_IOC_WR_RX_CFG \ _IOW(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)]) #endif /* PI433_H */