MC8Q-4G执法记录仪硬件接口文档
C8Q执法记录仪相关接口
javalib.jar 使用
MCDeviceManager.init(this);
1.按键广播处理
if(action.equals("com.pwithe.app.key.event.Action")) {
KeyEvent keyEvent= intent.getParcelableExtra("keyevent");
if (keyEvent==null)return;
if (keyEvent.getAction()==KeyEvent.ACTION_UP){
if (keyEvent.getKeyCode()==133) {//录像
localInteger = Integer.valueOf(R.drawable.lx);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==132) {//sos
localInteger = Integer.valueOf(R.drawable.sos1);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==134) {//拍照
localInteger = Integer.valueOf(R.drawable.pz);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==131) {//录音
localInteger = Integer.valueOf(R.drawable.ly);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==25) {//侧面返回
localInteger = Integer.valueOf(R.drawable.fh);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==27) {//对讲
localInteger = Integer.valueOf(R.drawable.dj);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==24) {//FN
localInteger = Integer.valueOf(R.drawable.fn);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==26) {//power
localInteger = Integer.valueOf(R.drawable.kg);
mListData.add(localInteger);
mAdapter.notifyDataSetChanged();
} else if (keyEvent.getKeyCode()==3) {//home
}
}
}
2.灯光控制处理
override fun initParams() { // app第一次启动初始化 默认电流
Log.e(TAG, "====init==lightManager============") //初始化默认灯电流
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x05 0x64")
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x06 0x64")
}
override fun setIRedEnable(enable: Boolean) {//红外灯设置
iRedLightEnable = enable
if (flashLightEnable && !iRedLightEnable)
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x09")
else if (!flashLightEnable && !iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x00")
} else if (flashLightEnable && iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x0b")
} else if (!flashLightEnable && iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x0a")
}
MCDeviceManager.getInstance().isIRCutEnabled = enable
}
private var flashLightEnable = false
private var iRedLightEnable = false
override fun setFlashLightEnable(enable: Boolean) {//白光灯设置
flashLightEnable = enable
if (flashLightEnable && !iRedLightEnable)
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x09")
else if (!flashLightEnable && !iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x00")
} else if (flashLightEnable && iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x0b")
} else if (!flashLightEnable && iRedLightEnable) {
writeNode("sys/bus/i2c/devices/5-0063/reg", "0x01 0x0a")
}
}
/**
* 写入节点值
* @param nodePath 节点路径
* @param value 值
*/
fun writeNode(nodePath: String, value: String): Boolean {
Logger.d { "write $nodePath $value" }
var writer: BufferedWriter? = null
return try {
writer = BufferedWriter(FileWriter(nodePath))
writer.write(value)
true
} catch (e: Exception) {
e.printStackTrace()
Logger.e { "writeNode failed==${e.message}" }
false
} finally {
writer?.close()
}
}
/**
* 读取节点值
* @param nodePath 节点路径
* @return 节点值
*/
fun readNode(nodePath: String): String {
// Logger.d { "read $nodePath" }
val value = StringBuilder()
var reader: BufferedReader? = null
try {
reader = BufferedReader(FileReader(nodePath))
var line: String?
while (true) {
line = reader.readLine()
if (line == null) break
value.append(line).append('\n')
}
if (value.isNotEmpty()) value.deleteCharAt(value.length - 1)
} catch (e: Exception) {
e.printStackTrace()
} finally {
reader?.close()
}
return value.toString()
}
override fun openStrobeLight0() {//爆闪灯0 开
MCDeviceManager.getInstance().ledgpio20Control(true)
}
override fun closeStrobeLight0() {//爆闪灯0 关
MCDeviceManager.getInstance().ledgpio20Control(false)
}
override fun openStrobeLight1() {//爆闪灯1 开
MCDeviceManager.getInstance().ledgpio88Control(true)
}
override fun closeStrobeLight1() {//爆闪灯1 关
MCDeviceManager.getInstance().ledgpio88Control(false)
}
提示:通过控制 开 关 实现闪烁效果
MCDeviceManager.getInstance().ledgpio6Control(false)//led 黄灯
MCDeviceManager.getInstance().ledgpio7Control(false)//led 绿灯
MCDeviceManager.getInstance().ledgpio8Control(false) //led 红灯
3.转U盘处理
override fun setUsbEnable(enable: Boolean) {
if (enable) MCDeviceManager.getInstance()
.changeSDToDisk() else MCDeviceManager.getInstance().changeDiskToSD()
}
4.水印设置
SystemProperties.set(
"persist.vendor.osd.line1",
strLocation
)
SystemProperties.set(
"persist.vendor.osd.line2",
deviceId
)
SystemProperties.set(
"persist.vendor.osd.line3",
userId
)
SystemProperties.set(
"persist.vendor.osd.line4",
""
)
SystemProperties.set(
"persist.vendor.osd.watermark_extra1",
""
)
SystemProperties.set(
"persist.vendor.osd.watermark_extra2",
""
)
5.防抖设置
private fun chooseStabilizationMode(builder: CaptureRequest.Builder) {
val opticalModes =
cameraCharacteristics?.get(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION)
if (opticalModes?.contains(CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_ON) == true) {
builder.set(
CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE,
CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_ON
)
builder.set(
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE,
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_OFF
)
Log.d(TAG, "Using optical stabilization.")
return
}
// If no optical mode is available, try software.
val videoModes =
cameraCharacteristics?.get(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES)
if (videoModes?.contains(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON) == true) {
builder.set(
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE,
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON
)
builder.set(
CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE,
CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_OFF
)
Log.d(TAG, "Using video stabilization.")
return
}
Log.d(TAG, "Stabilization not available.")
}
6.其他设置
(1) ota 升级 走系统标准接口 提供ota升级固件包
(2) 序列号 设备号 从android.os.Build 接口获取 不懂可百度一下
(3) imei号获取 val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
TelephonyManager 中的相关方法
7.系统签名账号密码
android9 {
storeFile file('../debug_android9_c7.keystore')
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
}
