localsdk bindings for Node.js
npm install @lastos/localsdk@lastos/localsdk-x3 ,五代机是 @lastos/localsdknode-localsdk 目前的所有 API 都是异步 API,每个 API 接受两个参数:
- 第一个参数是 JSON 字符串,格式为 '{key: value, ...}' ,如果没有参数,必须传递
一个空的 JSON: '{}' 。
- 第二个参数为回调函数,当底层接口执行完毕后调用此回调函数。回调函数有两个参数:
1. 第一个参数是错误信息,当没有错误时,参数值为 undefined 。有错误,格式如下:
| key | value 类型 | 说明 |
|---------|------------|----------|
| code | number | 错误码 |
| message | string | 错误信息 |
所有错误码如下:
| code | 说明 |
|--------|------------------|
| 300001 | Json Key 无效 |
| 300002 | Json Value 无效 |
| 300003 | Json 格式错误 |
| 200001 | 出现标准异常 |
| 200002 | 出现未知异常 |
| 200003 | Api 执行失败 |
| 200004 | Api 没有实现 |
| 100001 | RPC 服务不可用 |
| 100002 | RPC 服务内部错误 |
| 100003 | 未知错误 |
2. 第二个参数是接口返回值。格式如下:
`` json`
{
"body": data
}
API 使用例子:
` javascript`
localsdk.api('{}', (err, data) => {
if (err) {
console.log(err)
} else {
console.log(data)
}
})
initConfig 的参数如下:
| key | value 类型 | 说明 |
|----------------|------------|---------------------------|
| tempDir | string | 目录必须存在 |
| logDir | string | 目录必须存在 |
| appdataDir | string | 目录必须存在 |
| mciDbPath | string | mci 数据库路径 |
| networkAdaptor | string | 网卡硬件 ID,5 代机不需要 |
Example:
` javascript
const sdk = require("@lastos/localsdk-x3")
const config = {
'tempDir': 'F:/InitConfig',
'logDir': 'F:/InitConfig',
'appdataDir': 'F:/InitConfig',
'mciDbPath': 'F:/InitConfig/mci.db',
'networkAdaptor': 'XXXXX'
}
localsdk.initConfig(JSON.stringify(config), (error, data) => {})
`
` javascript
const localsdk = require("@lastos/localsdk-x3")
global.notify = new localsdk.NotifyEventCore((name, message) => {
// process event
})
`
为了防止对象析构,需要将对象挂到 global 上。
也可以将 Node.js 中的 EventEmitter.emit 传到 NotifyEventCore 中。
` javascript
const localsdk = require("@lastos/localsdk-x3")
const events = require('events')
const emitter = new events.EventEmitter;
global.notify = new localsdk.NotifyEventCore(emitter.emit.bind(emitter))
emitter.on('event.name', (event) => {
// process event
})
`
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|--------------------------|
| force | boolean | 为 true 时,强制杀死进程 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-------------|
| hwnd | number | 窗口的 hwnd |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-------------|
| hwnd | number | 窗口的 hwnd |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-------------|
| hwnd | number | 窗口的 hwnd |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|-------------------|-----------------|----------------|
| is_desktop_window | boolean | 是否是桌面窗口 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-------------------------|
| status | boolean | true: 显示,false:隐藏 |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|---------------|-----------------|---------------|
| is\_dock_hide | boolean | Dock 是否隐藏 |
Windows :
在 hookWindowMessage 中监听 WM_WINDOWPOSCHANGING 消息,
并在回调中使用这个方法。
参数为 json 字符串
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|------------------------------------|
| w\_param | TypedArray | hookWindowMessage 回调的第一个参数 |
| l\_param | TypedArray | hookWindowMessage 回调的第一个参数 |
Expamles:
`js
win.hookWindowMessage(0x0046, (w_param, l_param) => {
message = { "w_param": w_param, "l_param": l_param }
localsdk.ignoreZorderChangeSync(JSON.stringify(message))
})
`
Linux :未实现
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|-------------|
| id | number | 置顶窗口 id |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|--------------------------|
| force | boolean | 为 true 时,强制杀死进程 |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|-----------------------|
| applist | array | 每个元素存储 APP 信息 |
APP:
| key | 类型 | 说明 |
|----------|--------|------------|
| name | string | 名字 |
| package | string | 包名 |
| binPath | string | 二进制路径 |
| params | string | 参数 |
| iconPath | string | 图标路径 |
| platform | string | 平台 |
| appid | string | AppId |
中指定的 APP,返回 APP 的信息。返回结果和 getAppList 相同,| 参数 key | 参数 value 类型 | 说明 |
|---------------|-----------------|----------|
| packages-name | array | 包名数组 |
$3
打开一个程序参数:
| 参数 key | 参数 value 类型 | 说明 |
|--------------|-----------------|------------|
| bin-path | string | 二进制路径 |
| package-name | string | 包名 |
| params | string | 启动参数 |
Channel [localsdk-x3]
$3
获取通道列表| 结果 key | 结果 value 类型 | 说明 |
|-------------|-----------------|---------------------------|
| channellist | array | 每个元素存储 Channel 信息 |
Channel:
| key | 类型 | 说明 |
|-------|--------|---------|
| id | string | 通道 id |
| type | number | 类型 |
| state | number | 状态 |
` c++/// 通道类型
enum class InputType {
/// 外接 PC 模块通道,三代机 SA06 和 PC 都共用这通道
kPcModule = 0,
/// Android 模块通道,用于区分二代机的 SA05 通道
kAndroidModule = 1,
/// HDMI 通道
kHDMI = 2,
/// VGA 通道
kVGA = 3,
/// ATV 通道
kATV = 4,
/// DTV 通道
kDTV = 5,
/// AV 通道
kAV = 6,
/// YPbPr 通道
kYPBPR = 7,
/// TV 系统通道,单 551 时 TV 通道,可理解成单 551 时 top-activity != tv-settings-activity 时候
kTVModule = 8,
};
/// 通道状态
enum class InputState {
/// 通道无插入
kUnPlugin = 0,
/// 通道插入且无信号
kPlugWithoutSignal = 1,
/// 通道插入且有信号
kPlugWithSignal = 2,
};
`
$3
获取当前通道| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|-----------------------|
| channel | object | 存储一个 Channel 信息 |
Channel:
| key | 类型 | 说明 |
|-------|--------|---------|
| id | string | 通道 id |
| type | number | 类型 |
| state | number | 状态 |
$3
选择通道| 参数 key | 参数 value 类型 | 说明 |
|------------|-----------------|---------|
| channel-id | string | 通道 id |
Info [localsdk-x3]
$3
获取设备 SN| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|-------|
| sn | string | SN 号 |
$3
获取设备副版本| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|--------|
| version | string | 版本号 |
$3
获取主版本号| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|--------|
| version | string | 版本号 |
Microphone [localsdk-x3][讲台]
$3
麦克风是否静音| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-----------|
| id | string | 麦克风 id |
结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|----------------------------|
| mute | boolean | true: 静音, false:非静音 |
$3
获取麦克风列表| 结果 key | 结果 value 类型 | 说明 |
|-------------|-----------------|------------|
| microphones | array | Microphone |
Microphone: 字符串
screenshare [localsdk-x3]
$3
获取传屏通道列表返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|--------|
| senders | array | Sender |
Sender:
| key | value 类型 | 说明 |
|------|------------|------------|
| type | number | 发送端类型 |
| name | string | 发送端名称 |
| id | string | 发送端 id |
` c++
/// 发送端的类型
enum class SenderType { /// 未知类型
kUnknown = 0,
/// Dongle
kTransmitter = 1,
/// Windows 软件传屏
kWindowsSoftware = 2,
/// Mac 软件传屏
kMacSoftware = 3,
/// Android 手机
kAndroidPhone = 4,
/// Android 平板
kAndroidPad = 5,
/// iPhone
kIPhone = 6,
/// iPad
kIPad = 7,
};
`
$3
选择传屏通道| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|-------------|
| id | string | 传屏通道 id |
settings
$3
获取壁纸| 结果 key | 结果 value 类型 | 说明 |
|----------------|-----------------|------|
| wallpaper-path | string | 路径 |
$3
设置壁纸| 参数 key | 参数 value 类型 | 说明 | |
|----------------|-----------------|------|---|
| wallpaper-path | string | 路径 | |
$3
重置系统$3
使应用程序能够通知系统它正在使用,从而防止系统在应用程序运行时进入睡眠或关闭显示。| 参数 key | 参数 value 类型 | 说明 | |
|----------|-----------------|------|---|
| state | number | 路径 | |
state 是一个枚举值
` c++
kSystemRequired = 0x00000001; // 强制系统处于工作状态
kDisplayRequired = 0x00000002; // 禁止显示器关闭
kClear = 0x80000000; // 清除已经设置的状态
kAll = kSystemRequired | kDisplayRequired // 同时设置
`$3
返回系统音量| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|------|
| volume | int | 音量 |
volume => [0, 1] 如果 volume 等于-1 表示获取音量失败
$3
设置系统音量| 参数 key | 参数 value 类型 | 说明 | |
|----------|-----------------|----------|---|
| volume | number | 音量大小 | |
volume => [0, 1]`返回系统是否静音
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|----------|
| mute | boolean | 是否静音 |
| 参数 key | 参数 value 类型 | 说明 | |
|----------|-----------------|----------|---|
| mute | boolen | 是否静音 | |
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|--------------|
| time | int | 时间,单位 s |
返回 0 表示从不关闭
返回 -1 表示获取失败
| 参数 key | 参数 value 类型 | 说明 |
|--------------|-----------------|----------|
| module | string | 模块名称 |
| key | string | 键 |
| defaul_value | string | 默认值 |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|--------|
| value | string | 配置值 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|----------|
| module | string | 模块名称 |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|---------------------------|
| contains | boolean | true: 存在,false:不存在 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|----------|
| module | string | 模块名称 |
| id | string | 图片 id |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|----------|-----------------|------------------------|
| resource | string | 以 base64 返回资源内容 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|----------|
| module | string | 模块名称 |
| key | string | 键 |
| 参数 key | 参数 value 类型 | 说明 |
|----------|-----------------|----------|
| module | string | 模块名称 |
| key | string | 键 |
返回结果:
| 结果 key | 结果 value 类型 | 说明 |
|---------------|-----------------|------------------|
| usb-disk-list | array | UsbDiskInfo 数组 |
UsbDiskInfo:
| key | 类型 | 说明 |
|-------------|--------|-----------|
| usbDiskName | string | usb label |
| usbDiskPath | string | 访问路径 |
| remainSize | number | 剩余空间 |
| totalSize | number | 总空间 |
| name | 说明 |
|-----------------------------------------------------------------|---------------------------------|
| maxhub.localsdk.node.event.system.channel.currentChannelChanged | 通道变化 [localsdk-x3] |
| maxhub.localsdk.node.event.system.channel.channelStateChanged | 通道状态变化 [localsdk-x3] |
| maxhub.localsdk.node.event.system.mci.changed | mci 改变 |
| maxhub.localsdk.node.event.system.microphone.mute | 麦克风静音 [localsdk-x3 讲台] |
| maxhub.localsdk.node.event.screenshare.senderConnect | 传屏连接 [localsdk-x3] |
| maxhub.localsdk.node.event.screenshare.senderDisconnect | 传屏断开连接 [localsdk-x3] |
| maxhub.localsdk.node.event.system.setting.wallpaperchanged | 墙纸改变 [Windows] |
| maxhub.localsdk.node.event.system.usb.pullin | USB 插入 |
| maxhub.localsdk.node.event.system.usb.pullout | USB 拔出 |
| maxhub.localsdk.node.event.setting.SystemVolumeChanged | 系统音量变化 |