Buffers
Buffers can be dynamically allocated, read and written. This can be used to conserve memory (regular variables always take 8 bytes) and create arrays (with fixed upper limit).
const mybuf = Buffer.alloc(12) // 12 byte buffer
mybuf.setAt(10, "u16", 123)
mybuf.setAt(3, "u22.10", 173.282)
const z = mybuf.getAt(3, "u22.10")
hex
hex is a string literal template that converts data in hexadecimal form into a readonly Buffer in flash.
// Buffer in flash!
const data = hex`010203040506070809`
console.log(data)
Comments and whitespace are allowed in hex literals:
const commentedData = hex`
01 02 03 // first three numbers
ff aa    // two more bytes
`
packet
There is a special buffer called ds.packet which represents a buffer to be passed to next
command or register write.
It supports ds.packet.setLength() function (unlike regular buffers),
and can be passed to any command or register write.
For example lamp.intensity.write(0.7) is equivalent to:
const lamp = new ds.Led()
ds.packet.setLength(2)
ds.packet.setAt(0, "u0.16", 0.7)
lamp.intensity.write(ds.packet)