| ===== |
| 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. Therfore 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 then hardware fifo size. If the telegram is send 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 an 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 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 |
| telgram. 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 transfered via struct pi433_rx_cfg, the parameterset for receiving. 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 |
| rssi_threshold |
| threshold value for the signal strength on the receiver input. |
| If this value is exeeded, 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 determed 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 adress 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 transfering |
| data to the read buffer |
| This option is only usefull, 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. |
| |
| |