跳到主要内容

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 背光亮度