cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pi433_if.h (3916B)


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