2016-04-06 01:52:50 +02:00
|
|
|
/**
|
|
|
|
* Communicate data using radio packets
|
|
|
|
*/
|
2017-01-06 14:43:50 +01:00
|
|
|
//% color=#E3008C weight=96 icon="\uf012"
|
2016-03-10 23:01:04 +01:00
|
|
|
namespace radio {
|
2016-10-24 21:55:44 +02:00
|
|
|
export class Packet {
|
|
|
|
/**
|
|
|
|
* The number payload if a number was sent in this packet (via ``sendNumber()`` or ``sendValue()``)
|
|
|
|
* or 0 if this packet did not contain a number.
|
|
|
|
*/
|
|
|
|
public receivedNumber: number;
|
|
|
|
/**
|
|
|
|
* The string payload if a string was sent in this packet (via ``sendString()`` or ``sendValue()``)
|
|
|
|
* or the empty string if this packet did not contain a string.
|
|
|
|
*/
|
2016-10-26 01:39:13 +02:00
|
|
|
public receivedString: string;
|
2018-01-30 19:11:12 +01:00
|
|
|
/**
|
|
|
|
* The buffer payload if a buffer was sent in this packet
|
|
|
|
* or the empty buffer
|
|
|
|
*/
|
|
|
|
public receivedBuffer: Buffer;
|
2016-10-24 21:55:44 +02:00
|
|
|
/**
|
|
|
|
* The system time of the sender of the packet at the time the packet was sent.
|
|
|
|
*/
|
|
|
|
public time: number;
|
|
|
|
/**
|
|
|
|
* The serial number of the sender of the packet or 0 if the sender did not sent their serial number.
|
|
|
|
*/
|
|
|
|
public serial: number;
|
|
|
|
/**
|
|
|
|
* The received signal strength indicator (RSSI) of the packet.
|
|
|
|
*/
|
|
|
|
public signal: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Registers code to run when the radio receives a packet. Also takes the
|
|
|
|
* received packet from the radio queue.
|
|
|
|
*/
|
2018-05-09 19:56:48 +02:00
|
|
|
//% help=radio/on-data-packet-received deprecated=true
|
2016-11-11 17:16:27 +01:00
|
|
|
//% mutate=objectdestructuring
|
2016-10-24 21:55:44 +02:00
|
|
|
//% mutateText=Packet
|
2016-10-27 23:48:22 +02:00
|
|
|
//% mutateDefaults="receivedNumber;receivedString:name,receivedNumber:value;receivedString"
|
2016-10-24 21:55:44 +02:00
|
|
|
//% blockId=radio_on_packet block="on radio received" blockGap=8
|
|
|
|
export function onDataPacketReceived(cb: (packet: Packet) => void) {
|
|
|
|
onDataReceived(() => {
|
|
|
|
receiveNumber();
|
|
|
|
const packet = new Packet();
|
|
|
|
packet.receivedNumber = receivedNumber();
|
|
|
|
packet.time = receivedTime();
|
|
|
|
packet.serial = receivedSerial();
|
2016-10-26 01:39:13 +02:00
|
|
|
packet.receivedString = receivedString();
|
2018-01-30 19:11:12 +01:00
|
|
|
packet.receivedBuffer = receivedBuffer();
|
2016-10-24 21:55:44 +02:00
|
|
|
packet.signal = receivedSignalStrength();
|
|
|
|
cb(packet)
|
|
|
|
});
|
|
|
|
}
|
2018-05-09 19:56:48 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Registers code to run when the radio receives a packet. Also takes the
|
|
|
|
* received packet from the radio queue.
|
|
|
|
*/
|
|
|
|
//% help=radio/on-radio-received-number
|
|
|
|
//% blockId=radio_on_number block="on radio received number" blockGap=8
|
|
|
|
export function onReceivedNumber(cb: (num: number, time?: number, serial?: number, signal?: number) => void) {
|
|
|
|
onDataReceived(() => {
|
|
|
|
receiveNumber();
|
|
|
|
const packet = new Packet();
|
|
|
|
packet.receivedNumber = receivedNumber();
|
|
|
|
packet.time = receivedTime();
|
|
|
|
packet.serial = receivedSerial();
|
|
|
|
packet.signal = receivedSignalStrength();
|
|
|
|
cb(packet.receivedNumber, packet.time, packet.serial, packet.signal);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Registers code to run when the radio receives a packet. Also takes the
|
|
|
|
* received packet from the radio queue.
|
|
|
|
*/
|
|
|
|
//% help=radio/on-radio-received-string
|
|
|
|
//% blockId=radio_on_string block="on radio received string" blockGap=8
|
|
|
|
export function onReceivedString(cb: (received: string, time?: number, serial?: number, signal?: number) => void) {
|
|
|
|
onDataReceived(() => {
|
|
|
|
receiveNumber();
|
|
|
|
const packet = new Packet();
|
|
|
|
packet.time = receivedTime();
|
|
|
|
packet.serial = receivedSerial();
|
|
|
|
packet.signal = receivedSignalStrength();
|
|
|
|
packet.receivedString = receivedString();
|
|
|
|
cb(packet.receivedString, packet.time, packet.serial, packet.signal);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Registers code to run when the radio receives a packet. Also takes the
|
|
|
|
* received packet from the radio queue.
|
|
|
|
*/
|
|
|
|
//% help=radio/on-radio-received-value
|
|
|
|
//% blockId=radio_on_value block="on radio received" blockGap=8
|
|
|
|
export function onReceivedValue(cb: (packet: Packet) => void) {
|
|
|
|
onDataReceived(() => {
|
|
|
|
receiveNumber();
|
|
|
|
const packet = new Packet();
|
|
|
|
packet.receivedNumber = receivedNumber();
|
|
|
|
packet.time = receivedTime();
|
|
|
|
packet.serial = receivedSerial();
|
|
|
|
packet.signal = receivedSignalStrength();
|
|
|
|
packet.receivedString = receivedString();
|
|
|
|
cb(packet)
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
2016-03-10 23:01:04 +01:00
|
|
|
}
|