-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathir.ts
101 lines (94 loc) · 3.17 KB
/
ir.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class InfraredPacket {
/**
* The first number in the payload.
*/
public receivedNumber: number;
/**
* The array of numbers of received.
*/
public receivedNumbers: number[];
/**
* The raw buffer of data received
*/
public receivedBuffer: Buffer;
}
namespace network {
/**
* Send a number over the infrared transmitter.
* @param value number to send
*/
//% blockId="ir_send_number" block="infrared send number %value"
//% help=network/infrared-send-number
//% parts="ir" weight=90 group="Infrared"
export function infraredSendNumber(value: number) {
infraredSendNumbers([value]);
}
/**
* Send an array of numbers over infrared. The array size has to be 32 bytes or less.
* @param values
*/
//% parts="ir" group="Infrared"
export function infraredSendNumbers(values: number[]) {
let buf = msgpack.packNumberArray(values);
if (buf.length % 2) {
const buf2 = pins.createBuffer(buf.length + 1);
buf2.write(0, buf);
buf2[buf2.length - 1] = 0xc1;
buf = buf2;
}
infraredSendPacket(buf);
}
/**
* Run some code when the infrared receiver gets a number.
*/
//% blockId=ir_on_infrared_received block="on infrared received" blockGap=8
//% help=network/on-infrared-received-number
//% parts="ir" group="Infrared"
export function onInfraredReceivedNumber(handler: (num: number) => void) {
onInfraredPacket(() => {
const buf: Buffer = infraredPacket();
const nums: number[] = msgpack.unpackNumberArray(buf) || [];
const num = nums[0] || 0;
handler(num);
});
}
/**
* Run some code when the infrared receiver gets a list of numbers.
*/
export function onInfraredReceivedNumbers(handler: (nums: number[]) => void) {
onInfraredPacket(() => {
const buf: Buffer = infraredPacket();
const nums: number[] = msgpack.unpackNumberArray(buf) || [];
handler(nums);
});
}
/**
* Run some code when the infrared receiver gets a buffer.
*/
export function onInfraredReceivedBuffer(handler: (buf: Buffer) => void) {
onInfraredPacket(() => {
const buf: Buffer = infraredPacket();
handler(buf);
});
}
/**
* Run some code when the infrared receiver gets a packet.
*/
//% mutate=objectdestructuring
//% mutateText=InfraredPacket
//% mutateDefaults="receivedNumber"
//% blockId=ir_on_packet_received block="on infrared received" blockGap=8
//% parts="ir" group="Infrared" blockHidden=1 deprecated=1
export function onInfraredPacketReceived(cb: (p: InfraredPacket) => void) {
onInfraredPacket(() => {
const buf: Buffer = infraredPacket();
const nums: number[] = msgpack.unpackNumberArray(buf) || [];
const num = nums[0] || 0;
const packet = new InfraredPacket();
packet.receivedBuffer = buf;
packet.receivedNumbers = nums;
packet.receivedNumber = num;
cb(packet)
});
}
}