Browse Source

feat: 文档

master
WIN-87ES3P38OPV\EDY 1 week ago
parent
commit
279341ea68
  1. 187
      md/webview-sensor.md

187
md/webview-sensor.md

@ -0,0 +1,187 @@ @@ -0,0 +1,187 @@
# Android Web容器文档
## WebView 注入对象
android端在拉起web容器时,会向其js上下文中注入全局对象
### app对象
app对象包含几个和android互操作的封装方法,基本如下
| 方法 | 描述 | 备注 |
| ------------------------------------- | -------------------------------------------------------------------------------- | --- |
| clearCache() | 清除本地缓存,并且刷新页面 | - |
| versionCode(): Int | 获取当前app版本号 | - |
| setCache(key:String, value:String) | 设置缓存数据 | - |
| getCache(key) :String | 获取缓存数据,返回string或者null | - |
| offlinePage() | 进入离线模式页面 | - |
| onlinePage() | 进入在线模式页面 | - |
| fileList(dir) | 获取当前dir下的文件,dir可传空,返回值为多行字符串,一行代表一个文件的绝对路径 | - |
| fileWriteString(path, content, token) | 参数path路径,content为文本,token为回调标记,完成后会调用 app.onFileWrite(token, path, success, err) | - |
| fileReadString(path, token) | 参数path路径,token为回调标记,完成后会调用 app.onFileRead(token, path, content) | - |
| fileDelete(path, token) | 参数path路径,token为回调标记,完成后会调用 app.onFileDelete(token, path, success) | - |
注意path参数,如不知道具体路径,则以 "/" 开头,目前不支持文件夹操作
### net对象
net包含部分网络操作封装
| 方法 | 描述 | 备注 |
| ------------------------------------------- | -------------------------- | --- |
| ping(host: String, timeoutMs: Int): Boolean | 向指定主机地址ping,不可达或超时则返回false | - |
### sensor对象
sensor对象包含传感器初始化和交互的方法,已有方法如下
| 方法 | 描述 | 备注 |
| --------------------------------------------------- | --------------- | ----------------------------------------------------- |
| initAll() | 检测并且初始化现有的所有设备 | 当前方法会阻塞调用 |
| flush() | 刷新当前检测到的所有设备 | 用于USB设备插拔后,调用此方法后,应当调用sensorList()获取最新的传感器信息 |
| sensorList():List\<Sensor> | 获取当前传感器列表数据 | |
| init(id:String) | 初始化指定传感器设备并获取权限 | 当前方法会阻塞调用 |
| open(id:String) | 打开指定传感器设备 | 开启指定传感器设备,传感器开启状态通过sensorList()获取 |
| close(id:String) | 关闭指定传感器设备 | |
| operation(id:String, opId:String, args:String) | 对传感器设备进行操作 | 此方法会在sensorList()下返回对应的操作对象, id与opId用于区分传感器和操作方法 |
| operationAsync(id:String, opId:String, args:String) | 异步对传感器设备进行操作 | 此方法调用后无返回值,而是会异步调用sensor.onOperationCallback()方法下回调参数 |
### appSensor对象
| 方法 | 描述 | 备注 |
| -------- | --------------------------- | --- |
| open() | 打开传感器管理器对象,尝试打开本地所有已物理连接的设备 | - |
| close() | 关闭传感器管理器对象 | - |
| isOpen() | 判断传感器管理器是否打开 | - |
当管理器开始工作后,会持续调用`appSensor.onValueCallback(obj)`方法,前端需要实现此方法
```js
if (appSensor != null) {
appSensor.onValueCallback = function(obj) {
console.log("obj:", obj)
}
}
```
其中obj对象结构如下,其中value可能是对象类型
```json
{
"sensor": "HWT6053",
"method": "read-speed",
"value": "1"
}
```
枚举上报值
```kotlin
enum class SensorMethod(
val sensor: Sensor,
val code: String,
val methodDesc: String
) {
TOF5000_M1(Sensor.TOF5000, "read-speed", "读取速度"),
TOF5000_M2(Sensor.TOF5000, "read-baud-rate", "获取波特率"),
TOF5000_M3(Sensor.TOF5000, "read-slave-address", "获取从站地址"),
TOF5000_M4(Sensor.TOF5000, "read-laser-switch", "获取激光开关状态"),
TOF5000_M5(Sensor.TOF5000, "read-range", "获取当前距离"),
HWT6053_M1(Sensor.HWT6053, "read-version", "获取版本号"),
HWT6053_M2(Sensor.HWT6053, "read-temp", "获取温度"),
HWT6053_M3(Sensor.HWT6053, "read-euler", "获取角度"),
HWT6053_M4(Sensor.HWT6053, "read-heading-and-vertical", "获取朝向和垂直夹角"),
CHC_CGI_430_M1(Sensor.CHC_CGI_430, "read-rtk", "获取RTK数据"),
LOCAL_EULER_M1(Sensor.LOCAL_EULER, "euler", "获取设备欧拉角数据"),
LOCAL_EULER_M2(Sensor.LOCAL_EULER, "euler-filter", "获取设备滤波后欧拉角数据"),
LOCAL_EULER_M3(Sensor.LOCAL_EULER, "yaw", "偏航角"),
LOCAL_EULER_M4(Sensor.LOCAL_EULER, "magnetic", "磁场强度"),
LOCAL_EULER_M5(Sensor.LOCAL_EULER, "has-disturb", "是否有干扰"),
LOCAL_LOCATION_M1(Sensor.LOCAL_LOCATION, "support", "本设备是否支持"),
LOCAL_LOCATION_M2(Sensor.LOCAL_LOCATION, "location", "获取定位位置"),
}
```
### appLocation对象
此对象封装了获取定位经纬度的操作函数
| 方法 | 描述 | 备注 |
| ----------- | ---------------------- | --------------------------------------------------------------- |
| isSupport() | 检查当前设备是否支持GPS定位(非基站定位) | 返回 true/false |
| isOpen() | 返回当前定位设备是否已打开 | 返回 true/false |
| open() | app侧自行申请授权并开始定位 | 此方法为异步方法,异步回调`onOpened(status)`、`onLocationChanged(location)`函数 |
| close() | 关闭定位 | |
除了web调用app侧的函数,还需要web侧实现函数用于异步回调
无特殊说明,函数均在此实例对象下,如`onOpen`函数,web侧应当如此定义
```js
if (appLocation != null) {
appLocation.onOpen = function(status) {
console.log("location device status:", status)
}
}
```
| 方法 | 描述 | 备注 |
| ---------------------- | ----------------------------------------------------------------- | --- |
| onOpened(status) | 当调用`open()`方法后回调,入参status可能值如下 0-开启成功 1-设备不支持GPS 2-用户拒绝授权 | |
| onLocationChanged(loc) | 当调用`open()`方法后回调,入参`loc`是Object类型,包含latitude,longitude,默认WGS84坐标系 | |
#### 传感器回调函数
js中,在sensor对象下自行添加实现两个函数,以接收传感器插拔的回调
| 方法 | 描述 | 备注 |
| ------------------------------------- | ---------------- | --- |
| onSensorAttached(id, name) | 当传感器插入时回调 | |
| onSensorDetached(id, name) | 当传感器拔出时回调 | |
| onOperationCallback(id, opId, result) | 异步对传感器设备进行操作后的回调 | |
## 传感器
描述传感器现有提供适配的传感器驱动
### HWT6053-水平传感器
波特率9600,从站地址0x50
| 操作 | 描述 | 备注 |
| ----------------------------- | --------- | ------------------------------- |
| $id#read-version | 获取当前传感器版本 | - |
| $id#read-temp | 获取设备温度 | - |
| $id#read-euler | 获取设备角度 | 返回值为包含roll,pitch,yaw三个角度的json字符 |
| $id#reset-euler | 重置角度传感器基准 | 返回0为成功 |
| $id#read-heading-and-vertical | 获取朝向和垂直夹角 | 返回0为成功 |
### TOF5000-距离传感器
波特率115200,从站地址0x01
| 操作 | 描述 | 备注 |
| -------------- | --------- | --- |
| $id#read-speed | 获取设备读取速度 | - |
| $id#read-range | 读取当前传感器距离 | - |
### CHC CGI-430
波特率230400,无从站地址,接入设备后会以1s的间隔下发数据
| 操作 | 描述 | 备注 |
| ------------ | ------------- | -------------------------------------------------- |
| $id#read-rtk | 获取传感设备下发的定位数据 | web端调用后,会获取到设备下发的最后一条数据,数据同手册内容,但是可能会返回截断数据,需要注意处理 |
## 离线交互流程
1. 首次启动app后,会向`223.5.5.5`ping 并且最多等待1s
2. ping成功进入在线页面
3. ping不成功进入离线页面
4. 离线页面需要在android版本发布时嵌入发布包中(后续改成在在线页面下下载?)
5. 在线离线页面中需要对应切换页面按钮,或者使用侧滑菜单选择进入对应的在线/离线页面
TODO
Loading…
Cancel
Save