ColoPLAY服务扩展
在ColoPLAY上提供功能服务
注意事项:
- 使用扩展服务需要注意资源利用,避免性能和内存不足
- 如果服务路径是$开头的话,无法使用svcset
- 服务是所有应用共享的
系统信息服务
通过svcget,可以查询系统信息,注意返回值为nil时的处理
- $sys.model 设备型号
- $sys.Ver 版本号
- $sys.USB usb是否连接,布尔值
- $sys.vol 喇叭音量
- $sys.micvol 麦克风音量
- $sys.micgain 麦克风增益
- $sys.tzcfg 时区
- $sys.lang 语言 1-English 2-中文
- $sys.blg 屏幕背光亮度
- $sys.boot 是否跳过开机向导
- $sys.fsm 文件系统剩余量
下面例子获取配置:
local lang=svcget('$sys.lang') or 1
网络服务-wifi
可以查询wifi状态
- $wifi.ssid - 连接的ssid
- $wifi.rssi - wifi信号强度
- $wifi.ready - wifi是否连接,布尔值
- $wifi.mac - mac地址
- $wifi.ip - ip地址
传感器服务
如果设备接入了传感器,可以查询实时数据
- $sc.T 本地温度,单位摄氏度,浮点数 (默认硬件不支持)
- $sc.H 本地湿度,单位%,浮点数: 50.0 表示 50% (默认硬件不支持)
- $sc.Z 本地光照度,整数 (相对值,体现亮度高低)
- $sc.V 接入电压,单位V,浮点数
小键盘信息
如果配置了小键盘,可以通过下面数据点查询相关配置
- $key.KEY[x][y] - x:键盘配置页 0..3 ; y:键索引 [0..6]
local k1=svcget('$key.KEY01')
蓝牙数据接收
设备可以接收蓝牙广播信息,这样可以实时对接蓝牙体重秤之类的使用蓝牙广播发布数据的设备
- $bleadv.rssi 信号强度
- $bleadv.address 发送端地址
- $bleadv.data 接收到的广播数据,len--31【Advertising data】+31【Scan response data】
local bleadv,vid,ttl=svcget('$bleadv')
pcall(function()
if bleadv.rssi and bleadv.address and bleadv.rssi~=0 and bleadv.address~='' then
local mac_str=''
for i=1,6 do
mac_str = mac_str .. tostring(string.byte(bleadv.address:sub(i,i)),16)
end
print("address:"..mac_str,55,80,7,0,16)
print("rssi:"..bleadv.rssi,95,110,7,0,16)
end
end)
B站数据
如果配置了B站账号,那么可以从下面数据点读取数据
- $bilibili.bili B站ID
- $bilibili.bilitype 粉丝增长提示音 0x80-关 0x81-开
YOUTUBE数据
如果配置了youtube账号,那么可以从下面数据点读取数据
- $youtube.youtu youtube ID
- $youtube.yoututype 粉丝增长提示音 0x80-关 0x81-开
PC性能监测
pc端软件会发送监测数据,可以从下吗数据点读取实时更新的数据
- $MT.CPUL
- $MT.CPUT
- $MT.CPUFERQ
- $MT.CPUFAN
- $MT.GPUL
- $MT.GPUT
- $MT.GPUFERQ
- $MT.GPUFAN
- $MT.RAML
- $MT.RAMU
- $MT.RAMF
- $MT.NETL
- $MT.NETU
- $MT.NETD
- $MT.STORAGE
aui 麦克风拾音数据
打开mic拾音功能后,可以从下面位置获取实时音频处理信息
- $aui.micidx 麦克风拾音fft后最大频点
- $aui.micval 麦克风拾音fft后各频点音量平均值
- $aui.micmval 麦克风拾音fft最大频点音量值
- $aui.micvtab 麦克风拾音fft后各频点音量值 长度64*2
lfx 按键环境背光灯
当前设备辅助灯的状态
- $lfx.idx1type
- $lfx.idx1val
- $lfx.idx2type
- $lfx.idx2val
一键开机数据
配置的pc机mac地址
- $powerup.powerMac
获取天气预报
svcget('$weather.cur') 查询天气预报
天气预报数据例子内容格式如下:
+"wind" ["355.08,15.96"]
+"pressure" [101348.367]
+"pm25" [9]
+"nextHours"(table: 0x0b4d0680)
| +1(table: 0x0b4d06a8)
| +"wind" ["355.35,15.39"]
| +"pressure" [101303.365]
| +"pm25" [8]
| +"skycon" ["CLOUDY"]
| +"hourFullStr" ["2023-04-25T16:00+08:00"]
| +"hourTs" [1682409600]
| +"temperature" [19.67]
| +"humidity" [0.68]
| +"aqi" [33]
+"queryCity"(table: 0x0b4cf290)
| +"distance" [12779.155401337]
| +"lat" [23.021548]
| +"city" ["广东省佛山市"]
| +"lng" [113.121416]
+"skycon" ["CLOUDY"]
+"queryHourTs" [1682406000]
+"queryHourFullStr" ["2023-04-25T15:00+08:00"]
+"temperature" [19.5]
+"humidity" [0.71]
+"aqi" [30]
skycon可能的取值:
local skycon_namemap={
CLEAR_DAY='白天晴朗';
CLEAR_NIGHT='夜间晴朗';
PARTLY_CLOUDY_DAY='白天多云';
PARTLY_CLOUDY_NIGHT='夜间多云';
CLOUDY='阴天';
LIGHT_HAZE='轻度雾霾';
MODERATE_HAZE='中度雾霾';
HEAVY_HAZE='重度雾霾';
RAIN='雨';
LIGHT_RAIN='小雨';
MODERATE_RAIN='中雨';
HEAVY_RAIN='大雨';
STORM_RAIN='暴雨';
FOG='雾';
LIGHT_SNOW='小雪';
MODERATE_SNOW='中雪';
HEAVY_SNOW='大雪';
STORM_SNOW='暴雪';
DUST='浮尘';
SAND='沙尘';
WIND='大风';
}
HTTP请求
{
stat=(int); --0:inti, 1:que, 2: run, 3: end, -1:err
sn=(int);
conntm=(int); --connect timeout. 0 for default
timeout=(int); --op timeout. 0 for default
url="http://123.12.123.12/893";
[method]=0; -- 0:get 1:post 2:save file 3:read file 4:write file 5:remove file
[filename]="a.lua"; -- save file name
[filemode]="a"; -- File operation mode
[filerl]=1024; -- read file len 512 for default
[limitlen]=10240; -- save file limit length 20480 for default
[reqdata]="dddd"; -- post data
ret=(int);
rdata="";
}
--example:
if not doreq then
local req={sn=1,stat=0,url="https://api.bilibili.com/x/relation/stat?vmid=327467823"}
svcset('testsvc','baidu1',req)
svcreq("http","testsvc.baidu1")
doreq=true
end
-- check result
local sc,vid,ttl=svcget('testsvc.baidu1.stat')
if sc ==3 then
local sc,vid,ttl=svcget('testsvc.baidu1')
print(sc.ret)
print(sc.rdata)
local tbl=cjson_safe.decode(sc.rdata)
if tbl and tbl.data then
for k,v in pairs(tbl.data) do
print(string.format("%s=%s",k,v))
end
end
--svcset('testsvc.baidu1','stat',4)
else
print(tostring(sc))
end
按键发送服务
svcreq('usbkey',datapoint)
- 通过usb模拟键盘,服务名称 usbkey
- datapoint是数据点,提供参数和运行结果,数据格式如下
{
stat=(int); --0:inti, 1:que, 2: run, 3: end, -1:err
sn=(int);
seq=""; -- send que
}
发送序列seq定义
cgy[1byte]+data[...]
- [1]delayms: byte[1] ms
- [2]delaysec: byte[1] sec
- [3]key: byte[1] keycode
- [4]keys: byte[1] len, byte[len] keycode
- [5]Modifier keys: byte[1] modifier,byte[1] len, byte[len] key
- [6]push keys: byte[1] modifer, byte[1] len, byte[len] pushed key
- [7]mouse: byte[1] button, byte[1] x, byte[1] y, byte[1] wheel, byte[1] AC Pan
- [8]Consumer control: byte[2] keycode
- [9]push Consumer control: byte[2] keycode
- [10]push custom keys: byte[1] len, (byte[1] key type, key[2])*len
例子(键值可在 hid.h 中查看):
local req={sn=1,stat=0,seq=string.char(9,0,0xea)}
svcset('testsvc','usbkey_seq1',req)
svcreq("usbkey","testsvc.usbkey_seq1")
蓝牙发送服务
svcreq('ble',datapoint)
- 发送ble广播数据,服务名称 ble
- datapoint是数据点,提供参数和运行结果,数据格式如下
{
stat=(int); --0:inti, 1:que, 2: run, 3: end, -1:err
sn=(int);
reqdata=""; -- send data que
}
控制量子灯reqdata定义
协议
+------+------+---------+---------+--------+--------+--------+
| 长度 | 帧标志 | 特殊标志 | 地址标志 | 数据类型 | 地址 | 数据 |
+------+------+---------+---------+--------+--------+--------+
| 1 | 1 | 4 | 1 | 1 | 0/6 | n |
+------+------+---------+---------+--------+--------+--------+
长度
固定为0x1e
帧标志
固定为 0xff -- 用户自定义数据
特殊标志
固定为 0x4C, 0x42, 0x52, 0x43 -- LBRC
地址标志
0 无目标地址,即 地址 数据长度为0
0x80 有目标地址,即 地址 数据长度为6数据类型
0 添加遥控器 数据n=0
1 删除遥控器 数据n=0
2 控制 数据 idx(1) + type(1) + val(4) + ef_mode(1) + ef_idx(1)
例子:
local req={sn=1,stat=0,reqdata=string.char(0x1e,0xff,0x4C,0x42,0x52,0x43,0,2,2,0xff,0x00,0xff,0xff,0x00)}
svcset('testsvc','ble_seq1',req)
svcreq("ble","testsvc.ble_seq1")
udp发送服务
svcreq('udp',datapoint)
- 发送udp数据,服务名称 udp
- datapoint是数据点,提供参数和运行结果,数据格式如下
{
stat=(int); --0:inti, 1:que, 2: run, 3: end, -1:err
sn=(int);
ip='192.168.33.110'
port=80
[reqmac]="2C:60:0C:63:0A:A1"; -- post data
[reqdata]="dddd"; -- post data
ret=(int)
}
远程开机
例子:
local req={sn=1,stat=0,reqmac=string.char(0x2C,0x60,0x0C,0x63,0x0A,0xA1),port=7}
svcset('testsvc','udp_seq',req)
svcreq("udp","testsvc.udp_seq")
扩展服务
扩展服务提供各种通用功能的访问,服务名称 ex,数据点直接就是请求的参数
可使用 svcreq 直接请求访问
svcreq("ex","type[:cmd_data1][:cmd_data2]...")
{
type 类型 -- led、bles、wifi、usb、mic、config
[cmd_data1]\[cmd_data2] -- 服务参数
}
led
控制按键灯光
服务参数 idx:ty:val
idx 1\2
ty 0xce(0xcf)\0xfe(0xff)
val 0~0xff \ 0~0xffffffff
bles
发送蓝牙广播包控制按键灯光
服务参数 idx:ty:val
idx 1\2
ty 0xce(0xcf)\0xfe(0xff)
val 0~0xff \ 0~0xffffffff
wifi
wifi配置
- 服务参数 onoff / on / off
svcreq("ex","wifi:onoff") --切换wifi启动状态
usb
usb串口
- 服务参数 tx:tx_data
svcreq("ex","usb:tx:".."HelloWorld!") --使用usb串口发送 tx_data
aui
音频输入服务
- 服务参数 mstart: 开始采集音频数据
- 服务参数 mstop: 停止采集音频数据
- 服务参数 mget: 获取音频数据
svcreq("ex","aui:mstart") --启动
-- 循环更新数据
svcreq("ex","aui:mget")
local idx=svcget('$aui.micidx')
local v=svcget('$aui.micmval')
local v_tab=svcget('$aui.micvtab')
--....数据处理
--
svcreq("ex","aui:mstop") --停止
config
操作系统配置
服务参数 vol:volnum 喇叭音量
服务参数 micgain:gain 麦克风增益
服务参数 micvol:volnum 麦克风音量
服务参数 scanwifi 搜索Wi-Fi列表,通过_svcind监听数据
服务参数 wificon:ssid:password 配置Wi-Fi并连接
服务参数 tzcfg:tz 配置时区:CST-8;CST-0
服务参数 lang:lang_idx 设置语言:1-English;2-中文
服务参数 restore 清除配置,恢复出厂设置
服务参数 erasefs 清除文件系统
服务参数 blg:backlight 背光亮度