root/drivers/staging/pi433/pi433_if.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */

/* [<][>][^][v][top][bottom][index][help] */