ba63 2.1.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
1
  import HID from "node-hid";
2
2
  import type { Charset } from "../constants/charset";
3
3
  type RenderOptions = Partial<{
4
- /** If the message reaches the end of the top line, start printing on the bottom line.*/
4
+ /** If the message reaches the end of the top line, start printing on the bottom line */
5
5
  wrap: boolean;
6
+ /** Reset cursor position to where it was prior to rendering */
7
+ preserveCursorPos: boolean;
6
8
  }>;
7
9
  /** The start and end column positions of the section of cells used */
8
10
  type UsedCells = {
@@ -22,10 +24,10 @@ export declare class BA63 {
22
24
  static create(): Promise<BA63>;
23
25
  private run;
24
26
  render(message: string | number[], options?: RenderOptions): Promise<void>;
25
- renderCenter(message: string): Promise<UsedCells>;
26
- renderLeft(message: string): Promise<UsedCells>;
27
- renderRight(message: string): Promise<UsedCells>;
28
- fill(charCode: number): Promise<void>;
27
+ renderCenter(message: string, options?: RenderOptions): Promise<UsedCells>;
28
+ renderLeft(message: string, options?: RenderOptions): Promise<UsedCells>;
29
+ renderRight(message: string, options?: RenderOptions): Promise<UsedCells>;
30
+ fill(input: number[] | string, options?: RenderOptions): Promise<void>;
29
31
  testRender(): Promise<void>;
30
32
  carriageReturn(): Promise<void>;
31
33
  lineFeed(): Promise<void>;
@@ -36,6 +38,7 @@ export declare class BA63 {
36
38
  setCursorColumn(column: number): Promise<void>;
37
39
  setCursorRow(row: (typeof this.cursorPos)[0]): Promise<void>;
38
40
  clearDisplay(): Promise<void>;
41
+ clearRow(row?: number): Promise<void>;
39
42
  get lengthToEnd(): number;
40
43
  get row(): "top" | "bottom";
41
44
  get currentRow(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"BA63.d.ts","sourceRoot":"","sources":["../../src/classes/BA63.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAMpD,KAAK,aAAa,GAAG,OAAO,CAAC;IAC3B,wFAAwF;IACxF,IAAI,EAAE,OAAO,CAAC;CACf,CAAC,CAAC;AAEH,sEAAsE;AACtE,KAAK,SAAS,GAAG;IACf,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAe;IAE7B,sDAAsD;IACtD,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAU;IAE/C;;OAEG;gBACS,MAAM,EAAE,GAAG,CAAC,QAAQ;WAInB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAsCtB,GAAG;IAUX,MAAM,CACV,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IAgCV,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAajD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAY/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAahD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,GAAG,IAAI,KAAK,GAAG,QAAQ,CAE1B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
1
+ {"version":3,"file":"BA63.d.ts","sourceRoot":"","sources":["../../src/classes/BA63.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAMpD,KAAK,aAAa,GAAG,OAAO,CAAC;IAC3B,wFAAwF;IACxF,IAAI,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC,CAAC;AAEH,sEAAsE;AACtE,KAAK,SAAS,GAAG;IACf,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAe;IAE7B,sDAAsD;IACtD,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAU;IAE/C;;OAEG;gBACS,MAAM,EAAE,GAAG,CAAC,QAAQ;WAInB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAsCtB,GAAG;IAUX,MAAM,CACV,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IAqCV,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,CAAC;IAaf,UAAU,CACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,CAAC;IAYf,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,CAAC;IAaf,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,GAAG,IAAI,KAAK,GAAG,QAAQ,CAE1B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
package/dist/index.js CHANGED
@@ -49,6 +49,7 @@ class BA63 {
49
49
  }
50
50
  async render(message, options) {
51
51
  const trimmedMessage = message.slice(0, this.lengthToEnd);
52
+ const savedPos = this.cursorPos;
52
53
  const arr = typeof trimmedMessage === "string" ? Array.from(Buffer.from(trimmedMessage, "ascii")) : trimmedMessage;
53
54
  await this.run(arr);
54
55
  this.setCursorColumn(this.currentColumn + arr.length);
@@ -58,51 +59,61 @@ class BA63 {
58
59
  const excessArr = typeof excessMessage === "string" ? Array.from(Buffer.from(excessMessage, "ascii")) : excessMessage;
59
60
  await this.run(excessArr);
60
61
  this.setCursorColumn(this.currentColumn + excessArr.length);
61
- return;
62
+ }
63
+ if (options?.preserveCursorPos) {
64
+ this.setCursorPosition(...savedPos);
62
65
  }
63
66
  }
64
- async renderCenter(message) {
67
+ async renderCenter(message, options) {
65
68
  const trimmedMessage = message.slice(0, 20);
66
69
  const padding = Math.floor((20 - trimmedMessage.length) / 2);
67
70
  this.setCursorPosition(this.cursorPos[0], padding);
68
- await this.render(trimmedMessage);
71
+ await this.render(trimmedMessage, options);
69
72
  const columnCellsUsed = {
70
73
  start: padding,
71
74
  end: padding + trimmedMessage.length - 1
72
75
  };
73
76
  return columnCellsUsed;
74
77
  }
75
- async renderLeft(message) {
78
+ async renderLeft(message, options) {
76
79
  const trimmedMessage = message.slice(0, 20);
77
80
  this.setCursorPosition(this.cursorPos[0], 0);
78
- await this.render(trimmedMessage);
81
+ await this.render(trimmedMessage, options);
79
82
  const columnCellsUsed = {
80
83
  start: 0,
81
84
  end: trimmedMessage.length - 1
82
85
  };
83
86
  return columnCellsUsed;
84
87
  }
85
- async renderRight(message) {
88
+ async renderRight(message, options) {
86
89
  const trimmedMessage = message.slice(0, 20);
87
90
  const startPos = 20 - trimmedMessage.length;
88
91
  this.setCursorPosition(this.cursorPos[0], startPos);
89
- await this.render(trimmedMessage);
92
+ await this.render(trimmedMessage, options);
90
93
  const columnCellsUsed = {
91
94
  start: startPos,
92
95
  end: 19
93
96
  };
94
97
  return columnCellsUsed;
95
98
  }
96
- async fill(charCode) {
99
+ async fill(input, options) {
97
100
  const savedPos = this.cursorPos;
98
- const command = Array(40).fill(charCode);
101
+ let charCodes = [];
102
+ const isString = typeof input === "string";
103
+ for (let i = 0;i < 40; i++) {
104
+ if (isString) {
105
+ charCodes.push(input.charCodeAt(i % input.length));
106
+ } else {
107
+ charCodes.push(input[i % input.length]);
108
+ }
109
+ }
99
110
  await this.setCursorPosition(0, 0);
100
- await this.render(command, { wrap: true });
111
+ await this.render(charCodes, { wrap: true, ...options });
101
112
  this.setCursorPosition(...savedPos);
102
113
  }
103
114
  async testRender() {
104
115
  const testMessage = "Hello from BA63!";
105
- await this.fill(blocks.LIGHT_SHADE);
116
+ await this.fill([blocks.LIGHT_SHADE]);
106
117
  await this.renderCenter(testMessage);
107
118
  await this.setCursorRow(1);
108
119
  await this.renderCenter("- Caleb");
@@ -147,6 +158,14 @@ class BA63 {
147
158
  const command = [27, 91, 50, 74];
148
159
  await this.run(command);
149
160
  }
161
+ async clearRow(row) {
162
+ if (row !== undefined) {
163
+ await this.setCursorPosition(row, 0);
164
+ } else {
165
+ await this.setCursorPosition(this.currentRow, 0);
166
+ }
167
+ await this.deleteToEOL();
168
+ }
150
169
  get lengthToEnd() {
151
170
  return 20 - this.cursorPos[1];
152
171
  }
@@ -192,4 +211,4 @@ export {
192
211
  BA63
193
212
  };
194
213
 
195
- //# debugId=ED2021B19F57697E64756E2164756E21
214
+ //# debugId=9FBCBC57D6583F4264756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/classes/BA63.ts", "../src/constants/blocks.ts", "../src/constants/charset.ts"],
4
4
  "sourcesContent": [
5
- "import HID from \"node-hid\";\nimport type { Charset } from \"../constants/charset\";\nimport { blocks } from \"../constants/blocks\";\n\nconst vendorId = 2727;\nconst productId = 512;\n\ntype RenderOptions = Partial<{\n /** If the message reaches the end of the top line, start printing on the bottom line.*/\n wrap: boolean;\n}>;\n\n/** The start and end column positions of the section of cells used */\ntype UsedCells = {\n /** The start position of the section of cells used */\n start: number;\n /** The end position of the section of cells used */\n end: number;\n};\n\nexport class BA63 {\n private device: HID.HIDAsync;\n\n /** Current cursor position in [row, column] format */\n protected cursorPos: [number, number] = [0, 0];\n\n /**\n * **NOTE**: This constructor should only be used if you already have an open HID device to interface with.\n */\n constructor(device: HID.HIDAsync) {\n this.device = device;\n }\n\n static async create(): Promise<BA63> {\n const devices = HID.devices();\n const ba63Devices = devices.filter(\n (device) => device.vendorId === vendorId && device.productId === productId\n );\n\n if (ba63Devices.length === 0) {\n throw new Error(\"BA63 device not found\");\n }\n\n /*\n * When connecting to a BA63, you'll find that there are two different interfaces\n * to connect to. Interface 0 is for updating the BA63's firmware whereas interface 1\n * is for communicating with the display itself.\n */\n const displayInterface = ba63Devices.find((d) => d.interface === 1);\n\n if (!displayInterface) {\n throw new Error(\"BA63 display interface (Interface 1) not found!\");\n }\n\n const device = await HID.HIDAsync.open(displayInterface.path!);\n\n // device.on(\"data\", (data) => {\n // console.log(\"Data received:\", data);\n // });\n\n // device.on(\"error\", (err) => {\n // console.error(\"Error:\", err);\n // });\n\n const ba63 = new BA63(device);\n await ba63.clearDisplay();\n await ba63.setCharset(0); // Set to USA charset\n\n return ba63;\n }\n\n private async run(command: number[]): Promise<void> {\n // Pad to 32 bytes (HID report size)\n const writeCommand = [0x02, 0x00, command.length, ...command];\n while (writeCommand.length < 32) {\n writeCommand.push(0x00);\n }\n\n await this.device.write(writeCommand);\n }\n\n async render(\n message: string | number[],\n options?: RenderOptions\n ): Promise<void> {\n const trimmedMessage = message.slice(0, this.lengthToEnd);\n\n const arr =\n typeof trimmedMessage === \"string\"\n ? Array.from(Buffer.from(trimmedMessage, \"ascii\"))\n : trimmedMessage;\n\n await this.run(arr);\n this.setCursorColumn(this.currentColumn + arr.length);\n\n // If wrapping is enabled, we're on the top line, and there's more message to render, continue rendering on next line\n if (\n options?.wrap &&\n this.row === \"top\" &&\n message.length > trimmedMessage.length\n ) {\n const excessMessage = message.slice(trimmedMessage.length);\n\n await this.setCursorPosition(1, 0);\n\n const excessArr =\n typeof excessMessage === \"string\"\n ? Array.from(Buffer.from(excessMessage, \"ascii\"))\n : excessMessage;\n\n await this.run(excessArr);\n this.setCursorColumn(this.currentColumn + excessArr.length);\n return;\n }\n }\n\n async renderCenter(message: string): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n const padding = Math.floor((20 - trimmedMessage.length) / 2);\n this.setCursorPosition(this.cursorPos[0], padding);\n\n await this.render(trimmedMessage);\n const columnCellsUsed = {\n start: padding,\n end: padding + trimmedMessage.length - 1,\n };\n return columnCellsUsed;\n }\n\n async renderLeft(message: string): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n this.setCursorPosition(this.cursorPos[0], 0);\n\n await this.render(trimmedMessage);\n const columnCellsUsed = {\n start: 0,\n end: trimmedMessage.length - 1,\n };\n return columnCellsUsed;\n }\n\n async renderRight(message: string): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n const startPos = 20 - trimmedMessage.length;\n this.setCursorPosition(this.cursorPos[0], startPos);\n\n await this.render(trimmedMessage);\n const columnCellsUsed = {\n start: startPos,\n end: 19,\n };\n return columnCellsUsed;\n }\n\n async fill(charCode: number): Promise<void> {\n const savedPos = this.cursorPos;\n const command = Array(40).fill(charCode);\n await this.setCursorPosition(0, 0);\n await this.render(command, { wrap: true });\n this.setCursorPosition(...savedPos);\n }\n\n async testRender(): Promise<void> {\n const testMessage = \"Hello from BA63!\";\n await this.fill(blocks.LIGHT_SHADE);\n await this.renderCenter(testMessage);\n await this.setCursorRow(1);\n await this.renderCenter(\"- Caleb\");\n }\n\n async carriageReturn(): Promise<void> {\n const command = [0x0d];\n await this.run(command);\n this.setCursorColumn(0);\n }\n\n async lineFeed(): Promise<void> {\n const command = [0x0a];\n await this.run(command);\n this.setCursorRow(1);\n }\n\n async backspace(): Promise<void> {\n const command = [0x08];\n await this.run(command);\n this.setCursorColumn(Math.max(0, this.currentColumn - 1));\n }\n\n async setCharset(charset: Charset): Promise<void> {\n const command = [0x1b, 0x52, charset];\n await this.run(command);\n }\n\n async deleteToEOL(): Promise<void> {\n const command = [0x1b, 0x5b, 0x30, 0x4b];\n await this.run(command);\n }\n\n async setCursorPosition(row: number, column: number): Promise<void> {\n this.cursorPos = [row, column];\n\n const asciiRow = (row + 1).toString().charCodeAt(0);\n // asciiColumn can be more than one digit\n const asciiColumn = (column + 1)\n .toString()\n .split(\"\")\n .map((char) => char.charCodeAt(0));\n\n const command = [0x1b, 0x5b, asciiRow, 0x3b, ...asciiColumn, 0x48];\n await this.run(command);\n }\n\n async setCursorColumn(column: number): Promise<void> {\n this.setCursorPosition(this.cursorPos[0], column);\n }\n\n async setCursorRow(row: (typeof this.cursorPos)[0]): Promise<void> {\n this.setCursorPosition(row, this.cursorPos[1]);\n }\n\n async clearDisplay(): Promise<void> {\n const command = [0x1b, 0x5b, 0x32, 0x4a];\n await this.run(command);\n }\n\n get lengthToEnd(): number {\n return 20 - this.cursorPos[1];\n }\n\n get row(): \"top\" | \"bottom\" {\n return this.cursorPos[0] === 0 ? \"top\" : \"bottom\";\n }\n\n get currentRow(): number {\n return this.cursorPos[0];\n }\n\n get currentColumn(): number {\n return this.cursorPos[1];\n }\n}\n",
5
+ "import HID from \"node-hid\";\nimport type { Charset } from \"../constants/charset\";\nimport { blocks } from \"../constants/blocks\";\n\nconst vendorId = 2727;\nconst productId = 512;\n\ntype RenderOptions = Partial<{\n /** If the message reaches the end of the top line, start printing on the bottom line */\n wrap: boolean;\n /** Reset cursor position to where it was prior to rendering */\n preserveCursorPos: boolean;\n}>;\n\n/** The start and end column positions of the section of cells used */\ntype UsedCells = {\n /** The start position of the section of cells used */\n start: number;\n /** The end position of the section of cells used */\n end: number;\n};\n\nexport class BA63 {\n private device: HID.HIDAsync;\n\n /** Current cursor position in [row, column] format */\n protected cursorPos: [number, number] = [0, 0];\n\n /**\n * **NOTE**: This constructor should only be used if you already have an open HID device to interface with.\n */\n constructor(device: HID.HIDAsync) {\n this.device = device;\n }\n\n static async create(): Promise<BA63> {\n const devices = HID.devices();\n const ba63Devices = devices.filter(\n (device) => device.vendorId === vendorId && device.productId === productId\n );\n\n if (ba63Devices.length === 0) {\n throw new Error(\"BA63 device not found\");\n }\n\n /*\n * When connecting to a BA63, you'll find that there are two different interfaces\n * to connect to. Interface 0 is for updating the BA63's firmware whereas interface 1\n * is for communicating with the display itself.\n */\n const displayInterface = ba63Devices.find((d) => d.interface === 1);\n\n if (!displayInterface) {\n throw new Error(\"BA63 display interface (Interface 1) not found!\");\n }\n\n const device = await HID.HIDAsync.open(displayInterface.path!);\n\n // device.on(\"data\", (data) => {\n // console.log(\"Data received:\", data);\n // });\n\n // device.on(\"error\", (err) => {\n // console.error(\"Error:\", err);\n // });\n\n const ba63 = new BA63(device);\n await ba63.clearDisplay();\n await ba63.setCharset(0); // Set to USA charset\n\n return ba63;\n }\n\n private async run(command: number[]): Promise<void> {\n // Pad to 32 bytes (HID report size)\n const writeCommand = [0x02, 0x00, command.length, ...command];\n while (writeCommand.length < 32) {\n writeCommand.push(0x00);\n }\n\n await this.device.write(writeCommand);\n }\n\n async render(\n message: string | number[],\n options?: RenderOptions\n ): Promise<void> {\n const trimmedMessage = message.slice(0, this.lengthToEnd);\n\n const savedPos = this.cursorPos;\n\n const arr =\n typeof trimmedMessage === \"string\"\n ? Array.from(Buffer.from(trimmedMessage, \"ascii\"))\n : trimmedMessage;\n\n await this.run(arr);\n this.setCursorColumn(this.currentColumn + arr.length);\n\n // If wrapping is enabled, we're on the top line, and there's more message to render, continue rendering on next line\n if (\n options?.wrap &&\n this.row === \"top\" &&\n message.length > trimmedMessage.length\n ) {\n const excessMessage = message.slice(trimmedMessage.length);\n\n await this.setCursorPosition(1, 0);\n\n const excessArr =\n typeof excessMessage === \"string\"\n ? Array.from(Buffer.from(excessMessage, \"ascii\"))\n : excessMessage;\n\n await this.run(excessArr);\n this.setCursorColumn(this.currentColumn + excessArr.length);\n }\n\n if (options?.preserveCursorPos) {\n this.setCursorPosition(...savedPos);\n }\n }\n\n async renderCenter(\n message: string,\n options?: RenderOptions\n ): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n const padding = Math.floor((20 - trimmedMessage.length) / 2);\n this.setCursorPosition(this.cursorPos[0], padding);\n\n await this.render(trimmedMessage, options);\n const columnCellsUsed = {\n start: padding,\n end: padding + trimmedMessage.length - 1,\n };\n return columnCellsUsed;\n }\n\n async renderLeft(\n message: string,\n options?: RenderOptions\n ): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n this.setCursorPosition(this.cursorPos[0], 0);\n\n await this.render(trimmedMessage, options);\n const columnCellsUsed = {\n start: 0,\n end: trimmedMessage.length - 1,\n };\n return columnCellsUsed;\n }\n\n async renderRight(\n message: string,\n options?: RenderOptions\n ): Promise<UsedCells> {\n const trimmedMessage = message.slice(0, 20);\n const startPos = 20 - trimmedMessage.length;\n this.setCursorPosition(this.cursorPos[0], startPos);\n\n await this.render(trimmedMessage, options);\n const columnCellsUsed = {\n start: startPos,\n end: 19,\n };\n return columnCellsUsed;\n }\n\n async fill(input: number[] | string, options?: RenderOptions): Promise<void> {\n const savedPos = this.cursorPos;\n let charCodes: number[] = [];\n\n const isString = typeof input === \"string\";\n\n for (let i = 0; i < 40; i++) {\n if (isString) {\n charCodes.push(input.charCodeAt(i % input.length));\n } else {\n charCodes.push(input[i % input.length]!);\n }\n }\n\n await this.setCursorPosition(0, 0);\n await this.render(charCodes, { wrap: true, ...options });\n this.setCursorPosition(...savedPos);\n }\n\n async testRender(): Promise<void> {\n const testMessage = \"Hello from BA63!\";\n await this.fill([blocks.LIGHT_SHADE]);\n await this.renderCenter(testMessage);\n await this.setCursorRow(1);\n await this.renderCenter(\"- Caleb\");\n }\n\n async carriageReturn(): Promise<void> {\n const command = [0x0d];\n await this.run(command);\n this.setCursorColumn(0);\n }\n\n async lineFeed(): Promise<void> {\n const command = [0x0a];\n await this.run(command);\n this.setCursorRow(1);\n }\n\n async backspace(): Promise<void> {\n const command = [0x08];\n await this.run(command);\n this.setCursorColumn(Math.max(0, this.currentColumn - 1));\n }\n\n async setCharset(charset: Charset): Promise<void> {\n const command = [0x1b, 0x52, charset];\n await this.run(command);\n }\n\n async deleteToEOL(): Promise<void> {\n const command = [0x1b, 0x5b, 0x30, 0x4b];\n await this.run(command);\n }\n\n async setCursorPosition(row: number, column: number): Promise<void> {\n this.cursorPos = [row, column];\n\n const asciiRow = (row + 1).toString().charCodeAt(0);\n // asciiColumn can be more than one digit\n const asciiColumn = (column + 1)\n .toString()\n .split(\"\")\n .map((char) => char.charCodeAt(0));\n\n const command = [0x1b, 0x5b, asciiRow, 0x3b, ...asciiColumn, 0x48];\n await this.run(command);\n }\n\n async setCursorColumn(column: number): Promise<void> {\n this.setCursorPosition(this.cursorPos[0], column);\n }\n\n async setCursorRow(row: (typeof this.cursorPos)[0]): Promise<void> {\n this.setCursorPosition(row, this.cursorPos[1]);\n }\n\n async clearDisplay(): Promise<void> {\n const command = [0x1b, 0x5b, 0x32, 0x4a];\n await this.run(command);\n }\n\n async clearRow(row?: number): Promise<void> {\n if (row !== undefined) {\n await this.setCursorPosition(row, 0);\n } else {\n await this.setCursorPosition(this.currentRow, 0);\n }\n await this.deleteToEOL();\n }\n\n get lengthToEnd(): number {\n return 20 - this.cursorPos[1];\n }\n\n get row(): \"top\" | \"bottom\" {\n return this.cursorPos[0] === 0 ? \"top\" : \"bottom\";\n }\n\n get currentRow(): number {\n return this.cursorPos[0];\n }\n\n get currentColumn(): number {\n return this.cursorPos[1];\n }\n}\n",
6
6
  "export const blocks = {\n EMPTY: 0,\n LIGHT_SHADE: 176,\n MEDIUM_SHADE_1: 177,\n MEDIUM_SHADE_2: 178,\n LOWER_HALF: 220,\n UPPER_HALF: 223,\n LEFT_HALF: 221,\n RIGHT_HALF: 222,\n FULL: 219,\n};\n\nexport type Block = (typeof blocks)[keyof typeof blocks];\n",
7
7
  "export const charset = {\n USA: 0,\n France: 1,\n Germany: 2,\n UK: 3,\n Denmark1: 4,\n Sweden: 5,\n Italy: 6,\n Spain1: 7,\n Japan: 8,\n Norway: 9,\n Denmark2: 10,\n Spain2: 11,\n LatinAmerica: 12,\n Standard: 30,\n Latin1: 31,\n Latin2: 32,\n Latin5_Turkey: 33,\n LatinInternational: 34,\n Cyrillic: 35,\n Hebrew: 37,\n Greek2: 36,\n Katakana: 63,\n SpacePage: 73,\n} as const;\n\nexport type Charset = (typeof charset)[keyof typeof charset];\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "ED2021B19F57697E64756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "9FBCBC57D6583F4264756E2164756E21",
11
11
  "names": []
12
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ba63",
3
- "version": "2.1.0",
3
+ "version": "3.1.0",
4
4
  "author": {
5
5
  "name": "Caleb Perry",
6
6
  "url": "https://github.com/foxtrotperry",