| /* SPDX-License-Identifier: GPL-2.0+ |
| * |
| * include/linux/TODO |
| * |
| * 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 be extended, to also support other |
| * devices, basing on HopeRfs rf69. |
| * |
| * The driver can also be extended, to support other modules of |
| * HopeRf with a similar interace - e. g. RFM69HCW, RFM12, RFM95, ... |
| * Copyright (C) 2016 Wolf-Entwicklungen |
| * Marcus Wolf <linux@wolf-entwicklungen.de> |
| */ |
| |
| #ifndef PI433_H |
| #define PI433_H |
| |
| #include <linux/types.h> |
| #include "rf69_enum.h" |
| |
| /*---------------------------------------------------------------------------*/ |
| |
| enum option_on_off { |
| OPTION_OFF, |
| OPTION_ON |
| }; |
| |
| /* IOCTL structs and commands */ |
| |
| /** |
| * struct pi433_tx_config |
| * describes the configuration of the radio module for sending |
| * @frequency: |
| * @bit_rate: |
| * @modulation: |
| * @data_mode: |
| * @preamble_length: |
| * @sync_pattern: |
| * @tx_start_condition: |
| * @payload_length: |
| * @repetitions: |
| * |
| * ATTENTION: |
| * If the contents of 'pi433_tx_config' 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_config |
| * describes the configuration of the radio module for sending |
| * @frequency: |
| * @bit_rate: |
| * @modulation: |
| * @data_mode: |
| * @preamble_length: |
| * @sync_pattern: |
| * @tx_start_condition: |
| * @payload_length: |
| * @repetitions: |
| * |
| * ATTENTION: |
| * If the contents of 'pi433_rx_config' 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; |
| enum option_on_off enable_length_byte; /* should be used in combination with sync, only */ |
| enum address_filtering enable_address_filtering; /* operational with sync, only */ |
| enum option_on_off enable_crc; /* only operational, if sync on and fixed length or length byte is used */ |
| |
| __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 */ |