=====
Pi433
=====


Introduction
============
This driver is for controlling pi433, a radio module for the Raspberry Pi
(www.pi433.de). It supports transmission and reception. It can be opened
by multiple applications for transmission and reception. While transmit
jobs were queued and process automatically in the background, the first
application asking for reception will block out all other applications
until something gets received terminates the read request.
The driver supports on the fly reloading of the hardware fifo of the rf
chip, thus enabling for much longer telegrams then hardware fifo size.

Discription of driver operation
===============================

a) transmission

Each transmission can take place with a different configuration of the rf
module. Therefore each application can set its own set of parameters. The driver
takes care, that each transmission takes place with the parameterset of the
application, that requests the transmission. To allow the transmission to take
place in the background, a tx thread is introduced.
The transfer of data from the main thread to the tx thread is realised by a
kfifo. With each write request of an application, the passed in data and the
corresponding parameter set gets written to the kfifo.
On the other "side" of the kfifo, the tx thread continuously checks, whether the
kfifo is empty. If not, it gets one set of config and data from the kfifo. If
there is no receive request or the receiver is still waiting for something in
the air, the rf module is set to standby, the parameters for transmission gets
set, the hardware fifo of the rf chip gets preloaded and the transmission gets
started. Upon hardware fifo threshold interrupt it gets reloaded, thus enabling
much longer telegrams than the hardware fifo size. If the telegram is sent and there
is more data available in the kfifo, the procedure is repeated. If not the
transmission cycle ends.

b) reception

Since there is only one application allowed to receive data at a time, for
reception there is only one configuration set.
As soon as an application sets a request for receiving a telegram, the reception
configuration set is written to the rf module and it gets set into receiving mode.
Now the driver is waiting, that a predefined RSSI level (signal strength at the
receiver) is reached. Until this hasn't happened, the reception can be
interrupted by the transmission thread at any time to insert a transmission cycle.
As soon as the predefined RSSI level is meat, a receiving cycle starts. Similar
as described for the transmission cycle the read out of the hardware fifo is done
dynamically. Upon each hardware fifo threshold interrupt, a portion of data gets
read. So also for reception it is possible to receive more data then the hardware
fifo can hold.


Driver API
==========

The driver is currently implemented as a character device. Therefore it supports
the calls open, ioctl, read, write and close.


params for ioctl
----------------

There are four options:
PI433_IOC_RD_TX_CFG - get the transmission parameters from the driver
PI433_IOC_WR_TX_CFG - set the transmission parameters
PI433_IOC_RD_RX_CFG - get the receiving parameters from the driver
PI433_IOC_WR_RX_CFG - set the receiving parameters

The tx configuration is transfered via struct pi433_tx_cfg, the parameterset for transmission.
It is devided into two sections: rf parameters and packet format.

rf params:
	frequency
		frequency used for transmission.
		Allowed values: 433050000...434790000
	bit_rate
		bit rate used for transmission.
		Allowed values: #####
	dev_frequency
		frequency deviation in case of FSK.
		Allowed values: 600...500000
	modulation
		FSK - frequency shift key
		OOK - On-Off-key
	modShaping
		shapingOff	- no shaping
		shaping1_0	- gauss filter with BT 1 (FSK only)
		shaping0_5	- gauss filter with BT 0.5 (FSK only)
		shaping0_3	- gauss filter with BT 0.3 (FSK only)
		shapingBR	- filter cut off at BR (OOK only)
		shaping2BR	- filter cut off at 2*BR (OOK only)
	paRamp (FSK only)
		ramp3400	- amp ramps up in 3.4ms
		ramp2000	- amp ramps up in 2.0ms
		ramp1000	- amp ramps up in 1ms
		ramp500		- amp ramps up in 500us
		ramp250		- amp ramps up in 250us
		ramp125		- amp ramps up in 125us
		ramp100		- amp ramps up in 100us
		ramp62		- amp ramps up in 62us
		ramp50		- amp ramps up in 50us
		ramp40		- amp ramps up in 40us
		ramp31		- amp ramps up in 31us
		ramp25		- amp ramps up in 25us
		ramp20		- amp ramps up in 20us
		ramp15		- amp ramps up in 15us
		ramp12		- amp ramps up in 12us
		ramp10		- amp ramps up in 10us
	tx_start_condition
		fifoLevel	- transmission starts, if fifo is filled to
				  threshold level
		fifoNotEmpty	- transmission starts, as soon as there is one
				  byte in internal fifo
	repetitions
		This gives the option, to send a telegram multiple times. Default: 1

packet format:
	enable_preamble
		optionOn	- a preamble will be automatically generated
		optionOff	- no preamble will be generated
	enable_sync
		optionOn	- a sync word will be automatically added to
				  the telegram after the preamble
		optionOff	- no sync word will be added
		Attention: While possible to generate sync without preamble, the
		receiver won't be able to detect the sync without preamble.
	enable_length_byte
		optionOn	- the length of the telegram will be automatically
				  added to the telegram. It's part of the payload
		optionOff	- no length information will be automatically added
				  to the telegram.
		Attention: For telegram length over 255 bytes, this option can't be used
		Attention: should be used in combination with sync, only
	enable_address_byte
		optionOn	- the address byte will be automatically added to the
				  telegram. It's part of the payload
		optionOff	- the address byte will not be added to the telegram.
		The address byte can be used for address filtering, so the receiver
		will only receive telegrams with a given address byte.
		Attention: should be used in combination with sync, only
	enable_crc
		optionOn	- an crc will be automatically calculated over the
				  payload of the telegram and added to the telegram
				  after payload.
		optionOff	- no crc will be calculated
	preamble_length
		length of the preamble. Allowed values: 0...65536
	sync_length
		length of the sync word. Allowed values: 0...8
	fixed_message_length
		length of the payload of the telegram. Will override the length
		given by the buffer, passed in with the write command. Will be
		ignored if set to zero.
	sync_pattern[8]
		contains up to eight values, that are used as the sync pattern
		on sync option
	address_byte
		one byte, used as address byte on address byte option.


The rx configuration is transferred via struct pi433_rx_cfg, the parameterset for receiving. It is divided into two sections: rf parameters and packet format.

rf params:
	frequency
		frequency used for transmission.
		Allowed values: 433050000...434790000
	bit_rate
		bit rate used for transmission.
		Allowed values: #####
	dev_frequency
		frequency deviation in case of FSK.
		Allowed values: 600...500000
	modulation
		FSK - frequency shift key
		OOK - on off key
	rssi_threshold
		threshold value for the signal strength on the receiver input.
		If this value is exceeded, a reception cycle starts
		Allowed values: 0...255
	thresholdDecrement
		in order to adapt to different levels of singnal strength, over
		time the receiver gets more and more sensitive. This value
		determs, how fast the sensitivity increases.
		step_0_5db	- increase in 0,5dB steps
		step_1_0db	- increase in 1 db steps
		step_1_5db	- increase in 1,5dB steps
		step_2_0db	- increase in 2 db steps
		step_3_0db	- increase in 3 db steps
		step_4_0db	- increase in 4 db steps
		step_5_0db	- increase in 5 db steps
		step_6_0db	- increase in 6 db steps
	antennaImpedance
		sets the electrical adoption of the antenna
		fiftyOhm	- for antennas with an impedance of 50Ohm
		twohundretOhm	- for antennas with an impedance of 200Ohm
	lnaGain
		sets the gain of the low noise amp
		automatic	- lna gain is determined by an agc
		max		- lna gain is set to maximum
		maxMinus6	- lna gain is set to  6db below max
		maxMinus12	- lna gain is set to 12db below max
		maxMinus24	- lna gain is set to 24db below max
		maxMinus36	- lna gain is set to 36db below max
		maxMinus48	- lna gain is set to 48db below max
	bw_mantisse
		sets the bandwidth of the channel filter - part one: mantisse.
		mantisse16	- mantisse is set to 16
		mantisse20	- mantisse is set to 20
		mantisse24	- mantisse is set to 24
	bw_exponent
		sets the bandwidth of the channel filter - part two: exponent.
		Allowd values: 0...7
	dagc;
		operation mode of the digital automatic gain control
		normalMode
		improve
		improve4LowModulationIndex

 packet format:
	enable_sync
		optionOn  - sync detection is enabled. If configured sync pattern
			    isn't found, telegram will be internally discarded
		optionOff - sync detection is disabled.
	enable_length_byte
		optionOn   - First byte of payload will be used as length byte,
			     regardless of the amount of bytes that were requested
			     by the read request.
		optionOff  - Number of bytes to be read will be set according to
			     amount of bytes that were requested by the read request.
		Attention: should be used in combination with sync, only
	enable_address_filtering;
		filteringOff		- no address filtering will take place
		nodeAddress		- all telegrams, not matching the node
					  address will be internally discarded
		nodeOrBroadcastAddress	- all telegrams, neither matching the
					  node, nor the broadcast address will
					  be internally discarded
		Attention: Sync option must be enabled in order to use this feature
	enable_crc
		optionOn	- a crc will be calculated over the payload of
				  the telegram, that was received. If the
				  calculated crc doesn't match to two bytes,
				  that follow the payload, the telegram will be
				  internally discarded.
		Attention: This option is only operational if sync on and fixed length
		or length byte is used
	sync_length
		Gives the length of the payload.
		Attention: This setting must meet the setting of the transmitter,
		if sync option is used.
	fixed_message_length
		Overrides the telegram length either given by the first byte of
		payload or by the read request.
	bytes_to_drop
		gives the number of bytes, that will be dropped before transferring
		data to the read buffer
		This option is only useful if all packet helper are switched
		off and the rf chip is used in raw receiving mode. This may be
		needed, if a telegram of a third party device should be received,
		using a protocol not compatible with the packet engine of the rf69 chip.
	sync_pattern[8]
		contains up to eight values, that are used as the sync pattern
		on sync option.
		This setting must meet the configuration of the transmitting device,
		if sync option is enabled.
	node_address
		one byte, used as node address byte on address byte option.
	broadcast_address
		one byte, used as broadcast address byte on address byte option.


