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

source code of linux/drivers/staging/pi433/pi433_if.h