This page has deprecated and moved to the new documentation framework of the main Bitcraze website. Please go to [[https://www.bitcraze.io/documentation/system/]]
====== Python Crazyradio Library ======
The python crazyradio lib can be found in the Crazyradio git repos https://github.com/bitcraze/crazyradio-firmware/blob/master/lib/crazyradio.py. It is a single file that implements the low level Crazyradio dongle functionalities.
===== Theory of operation =====
The Crazyradio is configured in PTX mode which means that it will start all comunication. If a device in PRX mode is on the same address, channel and datarate, the device will send back an ack packet that may contains data.
Crazyradio Device
_ _
| |
| Packet |
|------------>|
| Ack |
|<------------|
| |
This is an example on how to use the lib:
import crazyradio
cr = crazyradio.Crazyradio()
cr.set_channel(90)
cr.set_data_rate(cr.DR_2MPS)
res = cr.send_packet([0xff, ])
print res.ack # At true if an ack has been received
print res.data # The ack payload data
===== API =====
==== Crazyradio ====
=== Fields ===
None
=== Methods ===
== __init__(self. device=None, devid=0) ==
^ Name | ''_ _init_ _'' (Constructor) |
^ Parameters | (USBDevice) device, (int) devid |
^ Returns | None |
^ Description | Initialize the Crazyradio object. If device is not specified, a list of available Crazyradio is made and devId selects the Crazyradio used (by default the first one) |
== close(self) ==
^ Name | ''close'' |
^ Parameters | None |
^ Returns | None |
^ Description | Close the USB device. Should be called before closing the program. |
== set_channel(self, channel) ==
^ Name | ''set_channel'' |
^ Parameters | (int) channel |
^ Returns | None |
^ Description | Set the Crazyradio channel. Channel must be between 0 and 125. Channels are spaced by 1MHz starting at 2400MHz and ending at 2525MHz. |
== set_address(self, address) ==
^ Name | ''set_address'' |
^ Parameters | (list of int) address |
^ Returns | None |
^ Description | Set the Crazyradio address. The //address// is 5 bytes long. It should be a list of 5 bytes values. |
== set_data_rate(self, datarate) ==
^ Name | ''set_datarate'' |
^ Parameters | (int) datarate |
^ Returns | None |
^ Description | Set the Crazyradio datarate. //Datarate// is one of ''DR_250KPS'', ''DR_1MPS'' or ''DR_2MPS'' |
== set_power(self, power) ==
^ Name | ''set_power'' |
^ Parameters | (int) power |
^ Returns | None |
^ Description | Set the Crazyradio transmit power. //Power// is one of ''P_M18DBM'', ''P_M12DBM'', ''P_M6DBM'' or ''P_0DBM'' respectively for -18dBm, -12dBm, -6dBm and 0dBm. |
== set_arc(self, arc) ==
^ Name | ''set_arc'' |
^ Parameters | (int) arc |
^ Returns | None |
^ Description | Set the number of retry. 0/arc//<15. See nRF24L01 documentation for more info. |
== set_ard_time(self, us) ==
^ Name | ''set_ard_time'' |
^ Parameters | (int) us |
^ Returns | None |
^ Description | Set the time to wait for an Ack in micro seconds. 250/us//<4000. The wait time for an Ack packet corresponds to the time to receive the biggest expected Ack. See nRF24L01 documentation for more info. |
== set_ard_bytes(self, nbytes) ==
^ Name | ''set_ard_bytes'' |
^ Parameters | (int) nbytes |
^ Returns | None |
^ Description | Set the time to wait for an Ack in number of ack payload bytes. The Crazyradio will calculate the correct time with the currently selected datarate. |
== set_cont_carrier(self, active) ==
^ Name | ''set_cont_carrier'' |
^ Parameters | (bool) active |
^ Returns | None |
^ Description | Enable or disable the continious carrier mode. In continious carrier the Crazyradio transmit a constant sinus at the currently set frequency (channel) and power. This is a test mode that can affect other 2.4GHz devices (ex. wifi) it should only be used in a lab for test purposes. |
== scan_channels(self, start, stop, packet) ==
^ Name | ''scan_channels'' |
^ Parameters | (int) start, (int) stop, (int) packet|
^ Returns | (list) List of channels that Acked the packet |
^ Description | Sends \packet\ to all channels from start to stop. Returns a list of the channels for which an ACK was received. |
== send_packet(self, dataOut) ==
^ Name | ''send_packet'' |
^ Parameters | (list or tuple) dataOut |
^ Returns | ([[#_radio_ack|_radio_ack]]) Ack status |
^ Description | Sends the packet //dataOut// on the configured channel and datarate. Waits for an ack and returns a _radio_ack object that contains the ack status and optional ack payload data. |
==== _radio_ack ====
=== Fields ===
^ (bool) ack | At ''True'' if an Ack packet has been receive (ie. if the packet was received by the device) |
^ (bool) powerDet | Indicate the nRF24LU1 power detector status. See nRF24LU1 documentation for more information. |
^ (int) retry | Number of retry before an ack was received |
^ (tuple) data | Data payload received in the Ack packet |
=== Methods ===
None