From 6f4b4fc99e9b66c4850dce9f5162fd5c078e555e Mon Sep 17 00:00:00 2001
From: MultiMote <contact@mmote.ru>
Date: Tue, 12 Nov 2024 09:36:38 +0300
Subject: [PATCH] Update docs

---
 .../documents/niimbot_hardware_interfacing.md |  18 +++---
 docs/documents/niimbot_proto.md               |   7 +++
 docs/documents/proto/bluetooh_terminal.jpg    | Bin 0 -> 54332 bytes
 src/client/bluetooth_impl.ts                  |   6 +-
 src/client/index.ts                           |   6 ++
 src/client/serial_impl.ts                     |   6 +-
 src/events.ts                                 |  59 ++++++++++++++----
 src/image_encoder.ts                          |   7 +++
 src/index.ts                                  |   4 ++
 src/packets/abstraction.ts                    |  26 +++++++-
 src/packets/commands.ts                       |  18 +++++-
 src/packets/data_reader.ts                    |   6 +-
 src/packets/packet.ts                         |   5 ++
 src/packets/packet_generator.ts               |   1 +
 src/packets/payloads.ts                       |  31 +++++++--
 src/print_tasks/AbstractPrintTask.ts          |   7 ++-
 src/print_tasks/B1PrintTask.ts                |   3 +
 src/print_tasks/B21V1PrintTask.ts             |   3 +
 src/print_tasks/D110PrintTask.ts              |   3 +
 src/print_tasks/OldD11PrintTask.ts            |   3 +
 src/print_tasks/V5PrintTask.ts                |   3 +
 src/print_tasks/index.ts                      |  24 +++++--
 src/printer_models.ts                         |   5 ++
 src/utils.ts                                  |   2 +
 typedoc.json                                  |   3 +-
 utils/gen-printer-models.js                   |   5 ++
 26 files changed, 221 insertions(+), 40 deletions(-)
 create mode 100644 docs/documents/proto/bluetooh_terminal.jpg

diff --git a/docs/documents/niimbot_hardware_interfacing.md b/docs/documents/niimbot_hardware_interfacing.md
index 383456f..1ae41ae 100644
--- a/docs/documents/niimbot_hardware_interfacing.md
+++ b/docs/documents/niimbot_hardware_interfacing.md
@@ -2,7 +2,7 @@
 title: NIIMBOT hardware interfacing
 ---
 
-# Hardware interfacing
+# NIIMBOT hardware interfacing
 
 ## Bluetooth
 
@@ -10,7 +10,7 @@ NIIMBOT printers have two bluetooth addresses.
 
 In case of D110 :
 
-* `26:03:03:c3:f9:11` - low energy
+* `26:03:03:C3:F9:11` - low energy
 * `03:26:03:C3:F9:11` - classic
 
 ### Bluetooth Low Energy
@@ -19,7 +19,7 @@ You can interact with printer through a specific BLE characteristic.
 To find what characteristic is suitable for this:
 
 1. Find services which have UUID length > 4.
-2. Find characteristic in these services which have `NOTIFY` and `WRITE_WITHOUT_RESPONSE` properties.
+2. Find characteristic in these services which have `NOTIFY` and `WRITE_NO_RESPONSE` properties.
 
    ![](proto/characteristic.png)
 
@@ -32,10 +32,14 @@ To send data, write a value without response.
 
 ### Bluetooth Classic
 
-Use bluetooth serial.
+Use bluetooth serial. The only problem is that packets may be fragmented.
+
+For example, packet `5555d9091f90044c000001000016aaaa` can be received as `5555d9091f90044c000001000016` `aaaa`.
+
+Android [Serial Bluetooth Terminal](https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal) test:
+
+![](proto/bluetooh_terminal.jpg)
 
 ## Serial (USB)
 
-Packet format is same as Bluetooth. The only problem is that packets may be fragmented.
-
-For example, packet `5555d9091f90044c000001000016aaaa` can be received as `5555d9091f90044c000001000016` `aaaa`.
+Packet format is same as Bluetooth. Packets may be fragmented.
diff --git a/docs/documents/niimbot_proto.md b/docs/documents/niimbot_proto.md
index b7dddcb..f7bc776 100644
--- a/docs/documents/niimbot_proto.md
+++ b/docs/documents/niimbot_proto.md
@@ -53,3 +53,10 @@ WIP
 | 0xdc | Heartbeat | 0xde, 0xdf, 0xdd, 0xd9 |
 | 0xe3 | PageEnd | 0xe4 |
 | 0xf3 | PrintEnd | 0xf4 |
+
+## Packets example
+
+* `55 55 40 01 0b 4a aa aa` - get device serial number
+* `55 55 1a 01 01 1a aa aa` - get rfid data
+* `55 55 58 03 01 01 01 5a aa aa` - enable Bluetooth connection sound
+* `55 55 58 03 01 01 00 5b aa aa` - disable Bluetooth connection sound
diff --git a/docs/documents/proto/bluetooh_terminal.jpg b/docs/documents/proto/bluetooh_terminal.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..07d32f5af4ebcac6921ceb1a7ffe7975f81ecf5c
GIT binary patch
literal 54332
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

literal 0
HcmV?d00001

diff --git a/src/client/bluetooth_impl.ts b/src/client/bluetooth_impl.ts
index fbc7c2f..194f1e7 100644
--- a/src/client/bluetooth_impl.ts
+++ b/src/client/bluetooth_impl.ts
@@ -27,7 +27,11 @@ class BleConfiguration {
   ];
 }
 
-/** Uses Web Bluetooth API */
+/**
+ * Uses [Web Bluetooth API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API)
+ *
+ * @category Client
+ */
 export class NiimbotBluetoothClient extends NiimbotAbstractClient {
   private gattServer?: BluetoothRemoteGATTServer = undefined;
   private channel?: BluetoothRemoteGATTCharacteristic = undefined;
diff --git a/src/client/index.ts b/src/client/index.ts
index dde9d55..3315675 100644
--- a/src/client/index.ts
+++ b/src/client/index.ts
@@ -14,6 +14,8 @@ import { findPrintTask, PrintTaskName } from "../print_tasks";
 
 /**
  * Represents the connection result information.
+ *
+ * @category Client
  */
 export type ConnectionInfo = {
   deviceName?: string;
@@ -22,6 +24,8 @@ export type ConnectionInfo = {
 
 /**
  * Interface representing printer information.
+ *
+ * @category Client
  */
 export interface PrinterInfo {
   connectResult?: ConnectResult;
@@ -40,6 +44,8 @@ export interface PrinterInfo {
 /**
  * Abstract class representing a client with common functionality for interacting with a printer.
  * Hardware interface must be defined after extending this class.
+ *
+ * @category Client
  */
 export abstract class NiimbotAbstractClient extends EventEmitter<ClientEventMap> {
   public readonly abstraction: Abstraction;
diff --git a/src/client/serial_impl.ts b/src/client/serial_impl.ts
index e315372..0fdd5ea 100644
--- a/src/client/serial_impl.ts
+++ b/src/client/serial_impl.ts
@@ -11,7 +11,11 @@ import { NiimbotPacket } from "../packets/packet";
 import { ConnectResult, PrinterErrorCode, PrintError, ResponseCommandId } from "../packets";
 import { Utils, Validators } from "../utils";
 
-/** Uses Web Serial API */
+/**
+ * Uses [Web Serial API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API)
+ *
+ * @category Client
+ **/
 export class NiimbotSerialClient extends NiimbotAbstractClient {
   private port?: SerialPort = undefined;
   private writer?: WritableStreamDefaultWriter<Uint8Array> = undefined;
diff --git a/src/events.ts b/src/events.ts
index 700e24a..758bb18 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -1,6 +1,9 @@
 import { ConnectionInfo, PrinterInfo, NiimbotAbstractClient, AbstractPrintTask, HeartbeatData, NiimbotPacket } from ".";
 
-/** Base client event */
+/**
+ * Base client event
+ * @category Events
+ */
 export class NiimbotEvent {
   readonly type: string;
 
@@ -9,7 +12,10 @@ export class NiimbotEvent {
   }
 }
 
-/** Fired when client connected to printer and fetched it's information. */
+/**
+ * Fired when client connected to printer and fetched it's information.
+ * @category Events
+ */
 export class ConnectEvent extends NiimbotEvent {
   info: ConnectionInfo;
   constructor(info: ConnectionInfo) {
@@ -18,14 +24,20 @@ export class ConnectEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when client disconnected from printer. */
+/**
+ * Fired when client disconnected from printer.
+ * @category Events
+ */
 export class DisconnectEvent extends NiimbotEvent {
   constructor() {
     super("disconnect");
   }
 }
 
-/** Fired when packet received, converted to object and validated (head, tail, checksum). */
+/**
+ * Fired when packet received, converted to object and validated (head, tail, checksum).
+ * @category Events
+ */
 export class PacketReceivedEvent extends NiimbotEvent {
   packet: NiimbotPacket;
   constructor(packet: NiimbotPacket) {
@@ -34,7 +46,10 @@ export class PacketReceivedEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when packet object sent. */
+/**
+ * Fired when packet object sent.
+ * @category Events
+ */
 export class PacketSentEvent extends NiimbotEvent {
   packet: NiimbotPacket;
   constructor(packet: NiimbotPacket) {
@@ -43,7 +58,10 @@ export class PacketSentEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when raw packet sent to printer. */
+/**
+ * Fired when raw packet sent to printer.
+ * @category Events
+ */
 export class RawPacketSentEvent extends NiimbotEvent {
   data: Uint8Array;
   constructor(data: Uint8Array) {
@@ -52,7 +70,10 @@ export class RawPacketSentEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when raw packet received from printer. */
+/**
+ * Fired when raw packet received from printer.
+ * @category Events
+ */
 export class RawPacketReceivedEvent extends NiimbotEvent {
   data: Uint8Array;
   constructor(data: Uint8Array) {
@@ -61,7 +82,10 @@ export class RawPacketReceivedEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when heartbeat packet received and parsed. */
+/**
+ * Fired when heartbeat packet received and parsed.
+ * @category Events
+ */
 export class HeartbeatEvent extends NiimbotEvent {
   data: HeartbeatData;
   constructor(data: HeartbeatData) {
@@ -70,7 +94,10 @@ export class HeartbeatEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when no response received after heartbeat packet sent. */
+/**
+ * Fired when no response received after heartbeat packet sent.
+ * @category Events
+ */
 export class HeartbeatFailedEvent extends NiimbotEvent {
   failedAttempts: number;
   constructor(failedAttempts: number) {
@@ -79,7 +106,10 @@ export class HeartbeatFailedEvent extends NiimbotEvent {
   }
 }
 
-/** Fired when info fetched from printer (after {@link NiimbotAbstractClient.fetchPrinterInfo} finished). */
+/**
+ * Fired when info fetched from printer (after {@link NiimbotAbstractClient.fetchPrinterInfo} finished).
+ * @category Events
+ */
 export class PrinterInfoFetchedEvent extends NiimbotEvent {
   info: PrinterInfo;
   constructor(info: PrinterInfo) {
@@ -88,7 +118,10 @@ export class PrinterInfoFetchedEvent extends NiimbotEvent {
   }
 }
 
-/** Fired progress received (during {@link AbstractPrintTask.waitForFinished}). */
+/**
+ * Fired progress received (during {@link AbstractPrintTask.waitForFinished}).
+ * @category Events
+ */
 export class PrintProgressEvent extends NiimbotEvent {
   /** 0 – n */
   page: number;
@@ -108,6 +141,10 @@ export class PrintProgressEvent extends NiimbotEvent {
   }
 }
 
+/**
+ * Event list for {@link NiimbotAbstractClient}.
+ * @category Events
+ */
 export type ClientEventMap = {
   connect: (event: ConnectEvent) => void;
   disconnect: (event: DisconnectEvent) => void;
diff --git a/src/image_encoder.ts b/src/image_encoder.ts
index 8a3c661..8ed641a 100644
--- a/src/image_encoder.ts
+++ b/src/image_encoder.ts
@@ -1,5 +1,6 @@
 import { Utils } from ".";
 
+/** @category Image encoder */
 export type ImageRow = {
   dataType: "void" | "pixels";
   rowNumber: number;
@@ -8,14 +9,20 @@ export type ImageRow = {
   rowData?: Uint8Array;
 };
 
+/** @category Image encoder */
 export type EncodedImage = {
   cols: number;
   rows: number;
   rowsData: ImageRow[];
 };
 
+/** @category Image encoder */
 export type PrintDirection = "left" | "top";
 
+/**
+ * @category Helpers
+ * @category Image encoder
+ */
 export class ImageEncoder {
   /** printDirection = "left" rotates image for 90 degrees clockwise */
   public static encodeCanvas(canvas: HTMLCanvasElement, printDirection: PrintDirection = "left"): EncodedImage {
diff --git a/src/index.ts b/src/index.ts
index 619dcf1..44fb540 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,3 +1,7 @@
+/**
+ * @module API
+ */
+
 export * from "./client";
 export * from "./packets";
 export * from "./events";
diff --git a/src/packets/abstraction.ts b/src/packets/abstraction.ts
index e7a249e..e30638b 100644
--- a/src/packets/abstraction.ts
+++ b/src/packets/abstraction.ts
@@ -18,6 +18,9 @@ import { SequentialDataReader } from "./data_reader";
 import { NiimbotPacket } from "./packet";
 import { PacketGenerator } from "./packet_generator";
 
+/**
+ * @category Packets
+ */
 export class PrintError extends Error {
   public readonly reasonId: number;
 
@@ -27,6 +30,9 @@ export class PrintError extends Error {
   }
 }
 
+/**
+ * @category Packets
+ */
 export interface PrintStatus {
   /** 0 – n */
   page: number;
@@ -35,7 +41,9 @@ export interface PrintStatus {
   /** 0 – 100 */
   pageFeedProgress: number;
 }
-
+/**
+ * @category Packets
+ */
 export interface RfidInfo {
   tagPresent: boolean;
   uuid: string;
@@ -46,7 +54,9 @@ export interface RfidInfo {
   consumablesType: LabelType;
 }
 
-/** closingState inverted on some printers */
+/**
+ * @category Packets
+ **/
 export interface HeartbeatData {
   paperState: number;
   rfidReadState: number;
@@ -54,18 +64,28 @@ export interface HeartbeatData {
   powerLevel: BatteryChargeLevel;
 }
 
+/**
+ * @category Packets
+ */
 export interface SoundSettings {
   category: SoundSettingsType;
   item: SoundSettingsItemType;
   value: boolean;
 }
 
+/**
+ * @category Packets
+ */
 export interface PrinterStatusData {
   supportColor: number;
   protocolVersion: number;
 }
 
-/** Not sure for name. */
+/**
+ * Packet sender and parser.
+ *
+ * @category Packets
+ */
 export class Abstraction {
   private readonly DEFAULT_PACKET_TIMEOUT: number = 1_000;
   private client: NiimbotAbstractClient;
diff --git a/src/packets/commands.ts b/src/packets/commands.ts
index a9f2f52..ba9628f 100644
--- a/src/packets/commands.ts
+++ b/src/packets/commands.ts
@@ -1,4 +1,8 @@
-/** Commands IDs from client to printer */
+/**
+ * Commands IDs from client to printer
+ *
+ * @category Packets
+ **/
 export enum RequestCommandId {
   Invalid = -1,
   /** Entire packet should be prefixed with 0x03 */
@@ -39,7 +43,11 @@ export enum RequestCommandId {
   PrintTestPage = 0x5a,
 }
 
-/** Commands IDs from printer to client */
+/**
+ * Commands IDs from printer to client
+ *
+ * @category Packets
+ **/
 export enum ResponseCommandId {
   Invalid = -1,
   In_NotSupported = 0x00,
@@ -95,7 +103,11 @@ export enum ResponseCommandId {
 import TX = RequestCommandId;
 import RX = ResponseCommandId;
 
-/** Map request id to response id. null meant no response expected (one way). */
+/**
+ * Map request id to response id. null meant no response expected (one way).
+ *
+ * @category Packets
+ **/
 export const commandsMap: Record<RequestCommandId, ResponseCommandId[] | null> = {
   [TX.Invalid]: null,
   [TX.PrintBitmapRow]: null,
diff --git a/src/packets/data_reader.ts b/src/packets/data_reader.ts
index c3b0bde..9f8cf81 100644
--- a/src/packets/data_reader.ts
+++ b/src/packets/data_reader.ts
@@ -1,6 +1,10 @@
 import { Utils } from "../utils";
 
-/** Utility class to sequentially fetch data from byte array. EOF checks included.  */
+/**
+ * Utility class to sequentially fetch data from byte array. EOF checks included.
+ *
+ * @category Packets
+ **/
 export class SequentialDataReader {
   private bytes: Uint8Array;
   private offset: number;
diff --git a/src/packets/packet.ts b/src/packets/packet.ts
index 2081ca6..b8daf50 100644
--- a/src/packets/packet.ts
+++ b/src/packets/packet.ts
@@ -1,6 +1,11 @@
 import { Validators } from "../utils";
 import { RequestCommandId, ResponseCommandId } from ".";
 
+/**
+ * NIIMBOT packet object
+ * 
+ * @category Packets
+ */
 export class NiimbotPacket {
   public static readonly HEAD = new Uint8Array([0x55, 0x55]);
   public static readonly TAIL = new Uint8Array([0xaa, 0xaa]);
diff --git a/src/packets/packet_generator.ts b/src/packets/packet_generator.ts
index 31364a3..e1b6a3c 100644
--- a/src/packets/packet_generator.ts
+++ b/src/packets/packet_generator.ts
@@ -14,6 +14,7 @@ import { Utils } from "../utils";
 
 /**
  * A helper class that generates various types of packets.
+ * @category Packets
  */
 export class PacketGenerator {
   /**
diff --git a/src/packets/payloads.ts b/src/packets/payloads.ts
index d75f9a0..90f09dd 100644
--- a/src/packets/payloads.ts
+++ b/src/packets/payloads.ts
@@ -1,7 +1,10 @@
 import { modelsLibrary } from "../printer_models";
 import { RequestCommandId, ResponseCommandId } from "./commands";
 
-/** Sent with {@link RequestCommandId.PrinterInfo} */
+/**
+ * Sent with {@link RequestCommandId.PrinterInfo}
+ * @category Packets
+ **/
 export enum PrinterInfoType {
   Density = 1,
   Speed = 2,
@@ -19,17 +22,23 @@ export enum PrinterInfoType {
   Area = 15,
 }
 
+/** @category Packets */
 export enum SoundSettingsType {
   SetSound = 0x01,
   GetSoundState = 0x02,
 }
 
+/** @category Packets */
 export enum SoundSettingsItemType {
   BluetoothConnectionSound = 0x01,
   PowerSound = 0x02,
 }
 
-/** Sent with {@link RequestCommandId.SetLabelType}. */
+/**
+ * Sent with {@link RequestCommandId.SetLabelType}.
+ *
+ * @category Packets
+ **/
 export enum LabelType {
   Invalid = 0,
   /** Default for most of label printers */
@@ -43,6 +52,7 @@ export enum LabelType {
   HeatShrinkTube = 11,
 }
 
+/** @category Packets */
 export enum HeartbeatType {
   Advanced1 = 1,
   Basic = 2,
@@ -50,6 +60,7 @@ export enum HeartbeatType {
   Advanced2 = 4,
 }
 
+/** @category Packets */
 export enum AutoShutdownTime {
   /** Usually 15 minutes. */
   ShutdownTime1 = 1,
@@ -61,7 +72,10 @@ export enum AutoShutdownTime {
   ShutdownTime4 = 4,
 }
 
-/** Battery charge level */
+/**
+ * Battery charge level
+ * @category Packets
+ **/
 export enum BatteryChargeLevel {
   Charge0 = 0,
   Charge25 = 1,
@@ -70,7 +84,10 @@ export enum BatteryChargeLevel {
   Charge100 = 4,
 }
 
-/** {@link ResponseCommandId.In_Connect} status codes. */
+/**
+ * {@link ResponseCommandId.In_Connect} status codes.
+ * @category Packets
+ **/
 export enum ConnectResult {
   Disconnect = 0,
   Connected = 1,
@@ -79,9 +96,13 @@ export enum ConnectResult {
   FirmwareErrors = 90,
 }
 
-/** {@link ResponseCommandId.In_PrintError} status codes. */
+/**
+ * {@link ResponseCommandId.In_PrintError} status codes.
+ * @category Packets
+ **/
 export enum PrinterErrorCode {
   CoverOpen = 0x01,
+  /** No paper */
   LackPaper = 0x02,
   LowBattery = 0x03,
   BatteryException = 0x04,
diff --git a/src/print_tasks/AbstractPrintTask.ts b/src/print_tasks/AbstractPrintTask.ts
index 0f53ce8..f78909b 100644
--- a/src/print_tasks/AbstractPrintTask.ts
+++ b/src/print_tasks/AbstractPrintTask.ts
@@ -2,7 +2,10 @@ import { EncodedImage } from "../image_encoder";
 import { LabelType } from "../packets";
 import { Abstraction } from "../packets/abstraction";
 
-/** Print options for print tasks. */
+/**
+ * Print options for print tasks.
+ * @category Print tasks
+ */
 export type PrintOptions = {
   /** Printer label type */
   labelType: LabelType;
@@ -54,6 +57,8 @@ const printOptionsDefaults: PrintOptions = {
  *   await client.abstraction.printEnd();
  * }
  * ```
+ *
+ * @category Print tasks
  **/
 export abstract class AbstractPrintTask {
   protected abstraction: Abstraction;
diff --git a/src/print_tasks/B1PrintTask.ts b/src/print_tasks/B1PrintTask.ts
index c885303..626b14b 100644
--- a/src/print_tasks/B1PrintTask.ts
+++ b/src/print_tasks/B1PrintTask.ts
@@ -2,6 +2,9 @@ import { EncodedImage } from "../image_encoder";
 import { PacketGenerator } from "../packets";
 import { AbstractPrintTask } from "./AbstractPrintTask";
 
+/**
+ * @category Print tasks
+ */
 export class B1PrintTask extends AbstractPrintTask {
   override printInit(): Promise<void> {
     return this.abstraction.sendAll([
diff --git a/src/print_tasks/B21V1PrintTask.ts b/src/print_tasks/B21V1PrintTask.ts
index b6323b9..4076a32 100644
--- a/src/print_tasks/B21V1PrintTask.ts
+++ b/src/print_tasks/B21V1PrintTask.ts
@@ -2,6 +2,9 @@ import { EncodedImage } from "../image_encoder";
 import { PacketGenerator } from "../packets";
 import { AbstractPrintTask } from "./AbstractPrintTask";
 
+/**
+ * @category Print tasks
+ */
 export class B21V1PrintTask extends AbstractPrintTask {
   override printInit(): Promise<void> {
     return this.abstraction.sendAll([
diff --git a/src/print_tasks/D110PrintTask.ts b/src/print_tasks/D110PrintTask.ts
index e782096..03c9080 100644
--- a/src/print_tasks/D110PrintTask.ts
+++ b/src/print_tasks/D110PrintTask.ts
@@ -2,6 +2,9 @@ import { EncodedImage } from "../image_encoder";
 import { PacketGenerator } from "../packets";
 import { AbstractPrintTask } from "./AbstractPrintTask";
 
+/**
+ * @category Print tasks
+ */
 export class D110PrintTask extends AbstractPrintTask {
   override printInit(): Promise<void> {
     return this.abstraction.sendAll([
diff --git a/src/print_tasks/OldD11PrintTask.ts b/src/print_tasks/OldD11PrintTask.ts
index 1102416..7a21e83 100644
--- a/src/print_tasks/OldD11PrintTask.ts
+++ b/src/print_tasks/OldD11PrintTask.ts
@@ -2,6 +2,9 @@ import { EncodedImage } from "../image_encoder";
 import { PacketGenerator } from "../packets";
 import { AbstractPrintTask } from "./AbstractPrintTask";
 
+/**
+ * @category Print tasks
+ */
 export class OldD11PrintTask extends AbstractPrintTask {
   override printInit(): Promise<void> {
     return this.abstraction.sendAll([
diff --git a/src/print_tasks/V5PrintTask.ts b/src/print_tasks/V5PrintTask.ts
index de2e612..8affe0c 100644
--- a/src/print_tasks/V5PrintTask.ts
+++ b/src/print_tasks/V5PrintTask.ts
@@ -2,6 +2,9 @@ import { EncodedImage } from "../image_encoder";
 import {  PacketGenerator } from "../packets";
 import { AbstractPrintTask } from "./AbstractPrintTask";
 
+/**
+ * @category Print tasks
+ */
 export class V5PrintTask extends AbstractPrintTask {
   override printInit(): Promise<void> {
     return this.abstraction.sendAll([
diff --git a/src/print_tasks/index.ts b/src/print_tasks/index.ts
index cf6cad9..581116b 100644
--- a/src/print_tasks/index.ts
+++ b/src/print_tasks/index.ts
@@ -5,7 +5,10 @@ import { D110PrintTask } from "./D110PrintTask";
 import { OldD11PrintTask } from "./OldD11PrintTask";
 import { V5PrintTask } from "./V5PrintTask";
 
-/** Define available print tasks. */
+/**
+ * Define available print tasks.
+ * @category Print tasks
+ */
 export const printTasks = {
   D11_V1: OldD11PrintTask,
   D110: D110PrintTask,
@@ -14,12 +17,19 @@ export const printTasks = {
   V5: V5PrintTask,
 };
 
-/** Available print task name type. */
+/**
+ * Available print task name type.
+ * @category Print tasks
+ */
 export type PrintTaskName = keyof typeof printTasks;
 
-/** List of available print task names. */
+/**
+ * List of available print task names.
+ * @category Print tasks
+ */
 export const printTaskNames = Object.keys(printTasks) as PrintTaskName[];
 
+/** @category Printer model library */
 export type ModelWithProtocol = {
   /** Model */
   m: M;
@@ -31,7 +41,8 @@ export type ModelWithProtocol = {
  * Define print tasks for models.
  * Model or model with protocol version can be specified.
  * Model with protocol version has priority over just model.
- **/
+ * @category Print tasks
+ */
 export const modelPrintTasks: Partial<Record<PrintTaskName, (ModelWithProtocol | M)[]>> = {
   D11_V1: [M.D11, M.D11S],
   B21_V1: [M.B21, M.B21_L2B, M.B21_C2B],
@@ -39,7 +50,10 @@ export const modelPrintTasks: Partial<Record<PrintTaskName, (ModelWithProtocol |
   B1: [M.D11_H, M.D110_M, M.B1],
 };
 
-/** Search print task. */
+/**
+ * Search print task.
+ * @category Print tasks
+ */
 export const findPrintTask = (model: M, protocolVersion?: number): PrintTaskName | undefined => {
   const tasks = Object.keys(modelPrintTasks) as PrintTaskName[];
 
diff --git a/src/printer_models.ts b/src/printer_models.ts
index baa1387..42e6245 100644
--- a/src/printer_models.ts
+++ b/src/printer_models.ts
@@ -4,6 +4,7 @@
 import { PrintDirection } from "./image_encoder";
 import { LabelType as LT } from "./packets";
 
+/** @category Printer model library */
 export enum PrinterModel {
   UNKNOWN = "UNKNOWN",
   A20 = "A20",
@@ -69,6 +70,7 @@ export enum PrinterModel {
   Z401 = "Z401",
 };
 
+/** @category Printer model library */
 export interface PrinterModelMeta {
   model: PrinterModel;
   id: [number, ...number[]];
@@ -81,6 +83,7 @@ export interface PrinterModelMeta {
   densityDefault: number;
 }
 
+/** @category Printer model library */
 export const modelsLibrary: PrinterModelMeta[] = [
   {
     model: PrinterModel.A20,
@@ -722,10 +725,12 @@ export const modelsLibrary: PrinterModelMeta[] = [
   },
 ];
 
+/** @category Printer model library */
 export const getPrinterMetaById = (id: number): PrinterModelMeta | undefined => {
     return modelsLibrary.find((o) => o.id.includes(id));
 };
 
+/** @category Printer model library */
 export const getPrinterMetaByModel = (model: PrinterModel): PrinterModelMeta | undefined => {
     return modelsLibrary.find((o) => o.model === model);
 };
diff --git a/src/utils.ts b/src/utils.ts
index e7ec81d..5b4962c 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -1,5 +1,6 @@
 /**
  * Utility class for various common operations.
+ * @category Helpers
  */
 export class Utils {
   /**
@@ -149,6 +150,7 @@ export class Utils {
 
 /**
  * Utility class for validating objects.
+ * @category Helpers
  */
 export class Validators {
   /**
diff --git a/typedoc.json b/typedoc.json
index 8102976..1005dd4 100644
--- a/typedoc.json
+++ b/typedoc.json
@@ -1,13 +1,12 @@
 {
   "$schema": "https://typedoc.org/schema.json",
   "name": "NiimBlueLib Docs",
-  "entryPoints": ["./src"],
+  "entryPoints": ["./src/index.ts"],
   "navigationLinks": {
     "GitHub": "https://github.com/MultiMote/niimbluelib"
   },
   "treatValidationWarningsAsErrors": true,
   "excludeReferences": true,
-  "entryPointStrategy": "expand",
   "out": "./docs/html",
   "projectDocuments": ["docs/documents/*.md"],
 }
diff --git a/utils/gen-printer-models.js b/utils/gen-printer-models.js
index 3a9a981..977f763 100644
--- a/utils/gen-printer-models.js
+++ b/utils/gen-printer-models.js
@@ -33,6 +33,7 @@ fetch("https://oss-print.niimbot.com/public_resources/static_resources/devices.j
     console.log('import { PrintDirection } from "./image_encoder";');
     console.log('import { LabelType as LT } from "./packets";\n');
 
+    console.log("/** @category Printer model library */");
     console.log("export enum PrinterModel {");
     console.log('  UNKNOWN = "UNKNOWN",');
     for (const item of items) {
@@ -43,6 +44,7 @@ fetch("https://oss-print.niimbot.com/public_resources/static_resources/devices.j
     console.log("};");
 
     console.log(`
+/** @category Printer model library */
 export interface PrinterModelMeta {
   model: PrinterModel;
   id: [number, ...number[]];
@@ -56,6 +58,7 @@ export interface PrinterModelMeta {
 }
 `);
 
+    console.log("/** @category Printer model library */");
     console.log("export const modelsLibrary: PrinterModelMeta[] = [");
     for (const item of items) {
       if (item.codes.length === 0) {
@@ -83,10 +86,12 @@ export interface PrinterModelMeta {
     console.log("];");
 
     console.log(`
+/** @category Printer model library */
 export const getPrinterMetaById = (id: number): PrinterModelMeta | undefined => {
     return modelsLibrary.find((o) => o.id.includes(id));
 };
 
+/** @category Printer model library */
 export const getPrinterMetaByModel = (model: PrinterModel): PrinterModelMeta | undefined => {
     return modelsLibrary.find((o) => o.model === model);
 };`);