MC8Q-4G执法记录仪硬件接口文档

发布时间: 2026-07-30 10:03:56

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'

          }