xref: /openbmc/linux/drivers/staging/pi433/pi433_if.h (revision f80d2f08)
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 
20 #ifndef PI433_H
21 #define PI433_H
22 
23 #include <linux/types.h>
24 #include "rf69_enum.h"
25 
26 /*---------------------------------------------------------------------------*/
27 
28 enum option_on_off {
29 	OPTION_OFF,
30 	OPTION_ON
31 };
32 
33 /* IOCTL structs and commands */
34 
35 /**
36  * struct pi433_tx_config
37  * describes the configuration of the radio module for sending
38  * @frequency:
39  * @bit_rate:
40  * @modulation:
41  * @data_mode:
42  * @preamble_length:
43  * @sync_pattern:
44  * @tx_start_condition:
45  * @payload_length:
46  * @repetitions:
47  *
48  * ATTENTION:
49  * If the contents of 'pi433_tx_config' ever change
50  * incompatibly, then the ioctl number (see define below) must change.
51  *
52  * NOTE: struct layout is the same in 64bit and 32bit userspace.
53  */
54 #define PI433_TX_CFG_IOCTL_NR	0
55 struct pi433_tx_cfg {
56 	__u32			frequency;
57 	__u16			bit_rate;
58 	__u32			dev_frequency;
59 	enum modulation		modulation;
60 	enum mod_shaping	mod_shaping;
61 
62 	enum pa_ramp		pa_ramp;
63 
64 	enum tx_start_condition	tx_start_condition;
65 
66 	__u16			repetitions;
67 
68 	/* packet format */
69 	enum option_on_off	enable_preamble;
70 	enum option_on_off	enable_sync;
71 	enum option_on_off	enable_length_byte;
72 	enum option_on_off	enable_address_byte;
73 	enum option_on_off	enable_crc;
74 
75 	__u16			preamble_length;
76 	__u8			sync_length;
77 	__u8			fixed_message_length;
78 
79 	__u8			sync_pattern[8];
80 	__u8			address_byte;
81 };
82 
83 /**
84  * struct pi433_rx_config
85  * describes the configuration of the radio module for sending
86  * @frequency:
87  * @bit_rate:
88  * @modulation:
89  * @data_mode:
90  * @preamble_length:
91  * @sync_pattern:
92  * @tx_start_condition:
93  * @payload_length:
94  * @repetitions:
95  *
96  * ATTENTION:
97  * If the contents of 'pi433_rx_config' ever change
98  * incompatibly, then the ioctl number (see define below) must change
99  *
100  * NOTE: struct layout is the same in 64bit and 32bit userspace.
101  */
102 #define PI433_RX_CFG_IOCTL_NR	1
103 struct pi433_rx_cfg {
104 	__u32			frequency;
105 	__u16			bit_rate;
106 	__u32			dev_frequency;
107 
108 	enum modulation		modulation;
109 
110 	__u8			rssi_threshold;
111 	enum threshold_decrement threshold_decrement;
112 	enum antenna_impedance	antenna_impedance;
113 	enum lna_gain		lna_gain;
114 	enum mantisse		bw_mantisse;	/* normal: 0x50 */
115 	__u8			bw_exponent;	/* during AFC: 0x8b */
116 	enum dagc		dagc;
117 
118 	/* packet format */
119 	enum option_on_off	enable_sync;
120 	enum option_on_off	enable_length_byte;	  /* should be used in combination with sync, only */
121 	enum address_filtering	enable_address_filtering; /* operational with sync, only */
122 	enum option_on_off	enable_crc;		  /* only operational, if sync on and fixed length or length byte is used */
123 
124 	__u8			sync_length;
125 	__u8			fixed_message_length;
126 	__u32			bytes_to_drop;
127 
128 	__u8			sync_pattern[8];
129 	__u8			node_address;
130 	__u8			broadcast_address;
131 };
132 
133 #define PI433_IOC_MAGIC			'r'
134 
135 #define PI433_IOC_RD_TX_CFG	_IOR(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)])
136 #define PI433_IOC_WR_TX_CFG	_IOW(PI433_IOC_MAGIC, PI433_TX_CFG_IOCTL_NR, char[sizeof(struct pi433_tx_cfg)])
137 
138 #define PI433_IOC_RD_RX_CFG	_IOR(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)])
139 #define PI433_IOC_WR_RX_CFG	_IOW(PI433_IOC_MAGIC, PI433_RX_CFG_IOCTL_NR, char[sizeof(struct pi433_rx_cfg)])
140 
141 #endif /* PI433_H */
142