Files
system-design/software-copyright/11-writech-sdk/model/PenDevice.java
T
2026-03-22 15:24:40 +08:00

220 lines
7.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 自然写互动课堂应用开发SDK软件 V1.0
* PenDevice - 点阵笔设备数据模型
*
* 描述:封装点阵笔的设备信息、连接状态、能力参数等
*/
package com.writech.sdk.model;
import java.io.Serializable;
/**
* 点阵笔设备模型
* 包含设备基本信息、硬件参数和连接状态
*/
public class PenDevice implements Serializable {
private static final long serialVersionUID = 1L;
/* ========== 基本信息 ========== */
/** 设备MAC地址(唯一标识) */
private String macAddress;
/** 设备名称(用户可自定义) */
private String deviceName;
/** 设备型号(如 WP-200, WP-300 */
private String modelName;
/** 固件版本号(如 2.1.5 */
private String firmwareVersion;
/** 硬件版本号 */
private String hardwareVersion;
/** 设备序列号 */
private String serialNumber;
/* ========== 硬件能力 ========== */
/** 采样率(Hz,常见值:100, 200 */
private int sampleRate;
/** 压力感应级别(常见值:1024, 2048, 4096 */
private int pressureLevels;
/** 坐标分辨率(DPI,常见值:300, 600 */
private int coordinateDpi;
/** 是否支持倾斜角检测 */
private boolean tiltSupported;
/** BLE协议版本(4.2 / 5.0 / 5.3 */
private String bleVersion;
/** 电池容量(mAh */
private int batteryCapacity;
/* ========== 运行状态 ========== */
/** 连接状态枚举 */
public enum ConnectionState {
DISCONNECTED, /* 未连接 */
CONNECTING, /* 正在连接 */
CONNECTED, /* 已连接 */
RECONNECTING /* 正在重连 */
}
/** 当前连接状态 */
private ConnectionState connectionState = ConnectionState.DISCONNECTED;
/** 当前电量百分比(0-100 */
private int batteryLevel;
/** 是否正在充电 */
private boolean isCharging;
/** 是否正在书写(笔尖接触纸面) */
private boolean isWriting;
/** 信号强度RSSIdBm */
private int rssi;
/** 最后一次通信时间(毫秒时间戳) */
private long lastCommunicationTime;
/** 累计书写时长(秒) */
private long totalWritingDuration;
/** 绑定的学生ID */
private String boundStudentId;
/** 绑定的学生姓名 */
private String boundStudentName;
/* ========== 构造函数 ========== */
public PenDevice() {
}
public PenDevice(String macAddress, String deviceName) {
this.macAddress = macAddress;
this.deviceName = deviceName;
this.sampleRate = 100;
this.pressureLevels = 4096;
this.coordinateDpi = 300;
}
/* ========== Getter / Setter ========== */
public String getMacAddress() { return macAddress; }
public void setMacAddress(String macAddress) { this.macAddress = macAddress; }
public String getDeviceName() { return deviceName; }
public void setDeviceName(String deviceName) { this.deviceName = deviceName; }
public String getModelName() { return modelName; }
public void setModelName(String modelName) { this.modelName = modelName; }
public String getFirmwareVersion() { return firmwareVersion; }
public void setFirmwareVersion(String firmwareVersion) { this.firmwareVersion = firmwareVersion; }
public String getHardwareVersion() { return hardwareVersion; }
public void setHardwareVersion(String v) { this.hardwareVersion = v; }
public String getSerialNumber() { return serialNumber; }
public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; }
public int getSampleRate() { return sampleRate; }
public void setSampleRate(int sampleRate) { this.sampleRate = sampleRate; }
public int getPressureLevels() { return pressureLevels; }
public void setPressureLevels(int pressureLevels) { this.pressureLevels = pressureLevels; }
public int getCoordinateDpi() { return coordinateDpi; }
public void setCoordinateDpi(int coordinateDpi) { this.coordinateDpi = coordinateDpi; }
public boolean isTiltSupported() { return tiltSupported; }
public void setTiltSupported(boolean tiltSupported) { this.tiltSupported = tiltSupported; }
public String getBleVersion() { return bleVersion; }
public void setBleVersion(String bleVersion) { this.bleVersion = bleVersion; }
public int getBatteryCapacity() { return batteryCapacity; }
public void setBatteryCapacity(int batteryCapacity) { this.batteryCapacity = batteryCapacity; }
public ConnectionState getConnectionState() { return connectionState; }
public void setConnectionState(ConnectionState state) { this.connectionState = state; }
public int getBatteryLevel() { return batteryLevel; }
public void setBatteryLevel(int batteryLevel) { this.batteryLevel = batteryLevel; }
public boolean isCharging() { return isCharging; }
public void setCharging(boolean charging) { isCharging = charging; }
public boolean isWriting() { return isWriting; }
public void setWriting(boolean writing) { isWriting = writing; }
public int getRssi() { return rssi; }
public void setRssi(int rssi) { this.rssi = rssi; }
public long getLastCommunicationTime() { return lastCommunicationTime; }
public void setLastCommunicationTime(long t) { this.lastCommunicationTime = t; }
public long getTotalWritingDuration() { return totalWritingDuration; }
public void setTotalWritingDuration(long d) { this.totalWritingDuration = d; }
public String getBoundStudentId() { return boundStudentId; }
public void setBoundStudentId(String id) { this.boundStudentId = id; }
public String getBoundStudentName() { return boundStudentName; }
public void setBoundStudentName(String name) { this.boundStudentName = name; }
/* ========== 便捷方法 ========== */
/** 是否已连接 */
public boolean isConnected() {
return connectionState == ConnectionState.CONNECTED;
}
/** 电量是否低(<= 10% */
public boolean isLowBattery() {
return batteryLevel <= 10 && !isCharging;
}
/** 获取设备显示名称(优先显示学生姓名) */
public String getDisplayName() {
if (boundStudentName != null && !boundStudentName.isEmpty()) {
return boundStudentName + "的笔";
}
return deviceName != null ? deviceName : "WritechPen-" + macAddress;
}
@Override
public String toString() {
return "PenDevice{" +
"mac='" + macAddress + '\'' +
", name='" + deviceName + '\'' +
", model='" + modelName + '\'' +
", state=" + connectionState +
", battery=" + batteryLevel + "%" +
", writing=" + isWriting +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PenDevice that = (PenDevice) o;
return macAddress != null && macAddress.equals(that.macAddress);
}
@Override
public int hashCode() {
return macAddress != null ? macAddress.hashCode() : 0;
}
}