Function |
|
Send RF packet of a specified length from bufferRF. |
Purpose |
|
RF transmission |
Syntax |
|
void RFTXpacket() |
Parameters |
|
– |
Return value |
|
– |
Output values |
|
– |
Preconditions |
|
• Peer-to-peer topology: • PIN = 0 (Peer-to-peer) • DLEN = packet length in bytes (0 to 64) • Prepare data to send in bufferRF[0] to bufferRF[DLEN - 1] (if DLEN ≠ 0) • Set RF output power via setRFpower. • IQMESH: • PIN = 0x80 (IQMESH) • Other network related parameters should also be specified • If User encryption is used, the packet length must be selected with respect to ciphertext length. See encryptBufferRF. See IQRF OS User’s guide. |
Remarks |
|
• Unlike SPI, RF communication does not run on the OS background. This function is active on foreground until the packet is sent. • Duration depends on packet type and user data length. • RFTXpacket is allowed to be called at least 5 ms after RFRXpacket. See Example 4. • See Examples E01–TX, E03–TR, and E09–LINK. • Use wasRFICrestarted to fix possible RF IC silicon issue. See Errata - Workaround for sporadic RF IC failure. |
Side effects |
|
• bufferRF[DLEN] and bufferRF[DLEN+1] are destroyed • System tick timing is slightly affected. • The RF circuitry wakes up (in case of sleeping). |
See also |
|
RFRXpacket, wasRFICrestarted, encryptBufferRF, setRFpower, setRFmode, and (in case of IQMESH) also other RF functions |
Example 1 |
|
// Peer-to-peer topology PIN=0; // Peer-to-peer (update also after every RFRXpacket // before every RFTXpacket) setNonetMode(); bufferRF[0] = "I"; // Data to send bufferRF[1] = "Q"; DLEN = 2; // 2 B packet RFTXpacket(); // Send the packet to all Peer-to-peer Nodes in range // and to all IQMESH Nodes having set filtering off // Program stays here until the packet is sent ... // and then continues |
Example 2 |
|
// IQMESH without routing, packet from Coordinator to Node #10 PIN = 0; // PIN preclearing (update also after every RFRXpacket // before every RFTXpacket) setCoordinatorMode(); // The _NTWF flag (PIN.7) is set here. bufferRF[0] = "I"; // Data to send bufferRF[1] = "Q"; DLEN = 2; // 2 B packet RX = 10; // Packet for Node #10 // _ROUTEF = 0; // Routing disabled - not necessary (default by OS) RFTXpacket(); // Send the packet to IQMESH Node #10 in this network // Reception depends on the Node (its current network // or filtering) |
Example 3 |
|
// IQMESH with routing // Packet from Coordinator to Node #10 PIN = 0; // PIN preclearing (update also after every RFRXpacket // before every RFTXpacket) setCoordinatorMode(); // The _NTWF flag (PIN.7) is set here. bufferRF[0] = "I"; // Data to send bufferRF[1] = "Q"; DLEN = 5; // 5 B packet RX = 10; // Packet for Node #10 _ROUTEF = 1; // Routing enabled for outgoing packets RTDEF = 1; // SFM (Static Full MESH) // RTDEF = 2; // DFM (Discovered Full MESH) RTHOPS = 10; // 10 hops // RTHOPS = eeReadByte[0]; // # hops = # bonded nodes
RTTSLOT = 2; // Time slot = 2 ticks (20 ms is enough for DLEN=5) RFTXpacket(); // Send the packet to IQMESH Node #10 in this network // Reception depends on the Node (its current network // or filtering) |
Example 4 |
|
if (RFRXpacket()); { ... // If there is no other code taking at least 5 ms, waitMS(5); // the delay must be inluded here RFTXpacket() ... } |