Skip to content

Commit 47c680e

Browse files
committed
feat(gif/oled):
- allow to send gif to N&B box
1 parent b70dbe2 commit 47c680e

3 files changed

Lines changed: 25 additions & 15 deletions

File tree

packages/lovebox-client/README.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,6 @@ if(boxWithoutColor) {
6363

6464
````
6565

66-
### OLED picture
67-
68-
When sending oled pictures, you need to pass an array of `1024` bytes .
69-
This bytes will be divided in `64` rows per `128` columns,
70-
71-
Each row is divided by 8 bits, 1 = light off / 0 = light on (common anode)
72-
73-
you can use the editor [here](https://thib3113.github.io/node-lovebox/tools/editor/) to generate an example picture
74-
75-
7666
### Sending gif
7767
sending gif is very limited .
7868
original gif are 3 frames only .
@@ -91,3 +81,18 @@ await client.sendPicture({
9181
senderDeviceId: me.device._id
9282
}, boxWithColor, me.device._id);
9383
````
84+
85+
86+
### OLED picture
87+
When sending OLED pictures, you need to pass an array of `1024` bytes .
88+
This bytes will be divided in `64` rows per `128` columns,
89+
90+
Each row is divided by 8 bits, 1 = light off / 0 = light on (common anode)
91+
92+
you can use the editor [here](https://thib3113.github.io/node-lovebox/tools/editor/) to generate an example picture
93+
94+
95+
### Sending gif to OLED
96+
97+
to send gif to OLED, you need to add another frames in the bytes array, max 3 frames (3072 bytes)
98+

packages/lovebox-client/src/LoveBoxClient.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createDebugger } from './utils.js';
22
import axios from 'axios';
3-
import { DEFAULT_OLED_BASE64, LOVEBOX_API_HOST, LOVEBOX_API_URL } from './constants.js';
3+
import { DEFAULT_OLED_BASE64, LOVEBOX_API_HOST, LOVEBOX_API_URL, OLED_PICTURE_BYTES, OLED_PICTURE_MAX_FRAME } from './constants.js';
44
import { LoveBoxApiLoginWithPasswordResponse } from './lovebox/types/responses.js';
55
import { GraphQLClient, Variables } from 'graphql-request';
66
import { BoxSettings, mongoId } from './lovebox/types/commons.js';
@@ -188,7 +188,7 @@ export class LoveBoxClient {
188188

189189
/**
190190
* works only on Black and white loveBox
191-
* @param bytes an array of 1024 bytes . Works with common anode => 0 light on / 1 light off . 64 rows by 128 columns, each row is subsidised by bits
191+
* @param bytes an array of a multiple of 1024 bytes . Works with common anode => 0 light on / 1 light off . 64 rows by 128 columns, each row is subsidised by bits . 1024 bytes per frames (max 3 frames)
192192
* @param frames
193193
* @param boxId
194194
* @param senderDeviceId
@@ -204,8 +204,9 @@ export class LoveBoxClient {
204204
}): Promise<(typeof sendMessageV1.__response)['sendMessageV1']> {
205205
const { box, device } = await this.getDefaultBoxAndSender(boxId, senderDeviceId, false);
206206

207-
if (bytes.length !== 1024 || bytes.some((b) => b > 255 || b < 0)) {
208-
throw new Error('Bytes buffer seems incorrect . need to contain 1024 bytes');
207+
const maxBytes = OLED_PICTURE_BYTES * OLED_PICTURE_MAX_FRAME;
208+
if (bytes.length % OLED_PICTURE_BYTES !== 0 || bytes.length > maxBytes || bytes.some((b) => b > 255 || b < 0)) {
209+
throw new Error(`Bytes buffer seems incorrect . need to contain a multiple of ${OLED_PICTURE_BYTES} bytes, max ${maxBytes}`);
209210
}
210211

211212
return (
@@ -214,7 +215,8 @@ export class LoveBoxClient {
214215
bytes: [...bytes],
215216
recipient: box,
216217
options: {
217-
deviceId: device
218+
deviceId: device,
219+
premium: bytes.length > OLED_PICTURE_BYTES
218220
}
219221
})
220222
).sendMessageV1;

packages/lovebox-client/src/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ export const LOVEBOX_API_URL = `https://${LOVEBOX_API_HOST}`;
33

44
export const DEFAULT_OLED_BASE64 =
55
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAYAAADFkM5nAAAAAXNSR0IArs4c6QAACuhJREFUeF7t1kEBAAAIAjHpX9ogNxswfLBzBAgQIECAQE5gucQCEyBAgAABAmcAeAICBAgQIBAUMACCpYtMgAABAgQMAD9AgAABAgSCAgZAsHSRCRAgQICAAeAHCBAgQIBAUMAACJYuMgECBAgQMAD8AAECBAgQCAoYAMHSRSZAgAABAgaAHyBAgAABAkEBAyBYusgECBAgQMAA8AMECBAgQCAoYAAESxeZAAECBAgYAH6AAAECBAgEBQyAYOkiEyBAgAABA8APECBAgACBoIABECxdZAIECBAgYAD4AQIECBAgEBQwAIKli0yAAAECBAwAP0CAAAECBIICBkCwdJEJECBAgIAB4AcIECBAgEBQwAAIli4yAQIECBAwAPwAAQIECBAIChgAwdJFJkCAAAECBoAfIECAAAECQQEDIFi6yAQIECBAwADwAwQIECBAIChgAARLF5kAAQIECBgAfoAAAQIECAQFDIBg6SITIECAAAEDwA8QIECAAIGggAEQLF1kAgQIECBgAPgBAgQIECAQFDAAgqWLTIAAAQIEDAA/QIAAAQIEggIGQLB0kQkQIECAgAHgBwgQIECAQFDAAAiWLjIBAgQIEDAA/AABAgQIEAgKGADB0kUmQIAAAQIGgB8gQIAAAQJBAQMgWLrIBAgQIEDAAPADBAgQIEAgKGAABEsXmQABAgQIGAB+gAABAgQIBAUMgGDpIhMgQIAAAQPADxAgQIAAgaCAARAsXWQCBAgQIGAA+AECBAgQIBAUMACCpYtMgAABAgQMAD9AgAABAgSCAgZAsHSRCRAgQICAAeAHCBAgQIBAUMAACJYuMgECBAgQMAD8AAECBAgQCAoYAMHSRSZAgAABAgaAHyBAgAABAkEBAyBYusgECBAgQMAA8AMECBAgQCAoYAAESxeZAAECBAgYAH6AAAECBAgEBQyAYOkiEyBAgAABA8APECBAgACBoIABECxdZAIECBAgYAD4AQIECBAgEBQwAIKli0yAAAECBAwAP0CAAAECBIICBkCwdJEJECBAgIAB4AcIECBAgEBQwAAIli4yAQIECBAwAPwAAQIECBAIChgAwdJFJkCAAAECBoAfIECAAAECQQEDIFi6yAQIECBAwADwAwQI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';
6+
7+
export const OLED_PICTURE_BYTES = 1024;
8+
export const OLED_PICTURE_MAX_FRAME = 3;

0 commit comments

Comments
 (0)