高通平台java层操作NV数据的方法
点击打开链接
文档目的
java层方法定义
- public class NvWriter {
- private static final String TAG = "NvWriter-TAG";
- private static NvWriter sInstance = null;
- /*FLAG RESULT*/
- public static final char PASS = 'P';
- public static final char FAIL = 'F';
- public static final char NA = ' ';
- static {
- System.loadLibrary("nvwriter_jni");
- }
- private native String native_readflag_NV();
- private native void native_writeflag_NV(int index,char result);
- public static NvWriter getInstance() {
- if (sInstance == null) {
- sInstance = new NvWriter();
- }
- return sInstance;
- }
- public String readFlagNV() {
- String mFlagNv = native_readflag_NV();
- Log.i(TAG,"readFlagNV: mFlagNv = " + mFlagNv);
- return mFlagNv;
- }
- public void writeFlagNV(int index,char result) {
- native_writeflag_NV(index,result);
- }
- public char getFlag(int index) {
- String mFlagNv = readFlagNV();
- char flag = NA;
- if (mFlagNv != null && mFlagNv.length() >= index) {
- flag = mFlagNv.charAt(index);
- }
- Log.i(TAG,index + ": flag = " + flag);
- return flag;
- }
- }
- NvWriter.getInstance().writeFlagNV(index,NvWriter.PASS);
2.读取NV:
- NvWriter.getInstance().getFlag(index);
上述方法具体实现都是在jni层,我们接下来看一下jni层是如何实现的。
Jni层方法实现
- #include <unistd.h>
- #include <utils/Log.h>
- #include <cutils/log.h>
- #include <jni.h>
- #include <JNIHelp.h>
- #include <stdlib.h>
- #include "android_runtime/AndroidRuntime.h"
- #include <android/log.h>
- #include "nv.h"
- #ifdef LOG_TAG
- #undef LOG_TAG
- #endif
- #define LOG_TAG "NVWriter-TAG-JNI"
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
- static int SHOW_LOG = 1; // 1 for show log.
- static int SHOW_NV_LOG = 0; // 1 for show log.
- static const char* const className = "com/xxx/nv/NvWriter";
- jint NativeInit() {
- /* Calling LSM init */
- if(!Diag_LSM_Init(NULL)) { // 调用diag初始化
- LOGI("Diag_LSM_Init() failed.");
- return -1;
- }
- LOGI("Diag_LSM_Init succeeded. \n");
- /* Register the callback for the primary processor */
- register_callback(); // 注册回调方法
- return 1;
- }
- jstring CharTojstring(JNIEnv* env,const char* str) { // char转化为jstring
- jsize len = strlen(str);
- jclass clsstring = env->FindClass("java/lang/String");
- jstring strencode = env->NewStringUTF("utf-8");
- jmethodID mid = env->GetMethodID(clsstring,"<init>","([BLjava/lang/String;)V");
- jbyteArray barr = env->NewByteArray(len);
- env->SetByteArrayRegion(barr,0,len,(jbyte*)str);
- return (jstring)env->NewObject(clsstring,mid,barr,strencode);
- }
- void android_native_writeflag_NV(JNIEnv *env,jobject this_,jint index,jchar result) { //先读后存
- if (SHOW_LOG) {
- LOGI("android_native_writeflag_NV");
- }
- if (NativeInit() < 0) { // 若初始化不成功则直接返回
- return;
- }
- unsigned char tmp[22] = { 0 };
- unsigned char after[20] = { 0 };
- nv_items_enum_type nvId = NV_FACTORY_DATA_3_I; // 我们要操作的NVID
- memset(tmp, 0, sizeof(tmp)); // 申请mem
- memset(after, 0, sizeof(after));
- diag_nv_read(nvId,tmp, sizeof(tmp)); // 调用高通操作nv的api,读取NV给tmp
- for(int m=0;m < sizeof(tmp)-3;m++) { // 去掉tmp的前三个字段,重新赋值给after
- if (tmp[m+3] == NULL) {
- after[m] = ' ';
- } else {
- after[m] = tmp[m+3];
- }
- }
- LOGI("android_native_writeflag_NV index = %d\n",(int)index);
- after[sizeof(tmp)-3+1] = '\0';
- after[index] = result; // 把我们要操作的某一位重新赋值
- if (SHOW_NV_LOG) {
- for (int n=0;n < sizeof(after);n++) {
- LOGI("android_native_writeflag_NV,after[%d] = %02x \n",n,after[n]);
- }
- }
- diag_nv_write(nvId,after, sizeof(after)); // 调用高通写nv的api,重新写nv
- }
- jstring android_native_readflag_NV(JNIEnv *env) { // 读取nv
- if (SHOW_LOG) {
- LOGI("android_native_readflag_NV");
- }
- if (NativeInit() < 0) { // 若初始化不成功则直接返回
- return NULL;
- }
- unsigned char tmp[23] = { 0 };
- unsigned char after[21] = { 0 };
- memset(tmp, 0, sizeof(tmp));
- memset(after, 0, sizeof(after));
- nv_items_enum_type nvId = NV_FACTORY_DATA_3_I;
- diag_nv_read(nvId,tmp, sizeof(tmp)); // 调用高通操作nv的api,读取NV给tmp
- for(int m=0;m < sizeof(tmp)-3;m++) { // 去掉tmp的前三个字段,重新赋值给after
- if (tmp[m+3] == NULL) {
- after[m] = ' ';
- } else {
- after[m] = tmp[m+3];
- }
- }
- after[sizeof(tmp)-3+1] = '\0';
- const char* p = (const char*)(char*)after;
- if (SHOW_NV_LOG) {
- for(int i=0;i < sizeof(after);i++) {
- LOGI("android_native_readflag_NV p[%d] = %02x\n",i,p[i]);
- }
- }
- jstring flag_string = CharTojstring(env,p); // char转化为jstring
- return flag_string;
- }
- JNINativeMethod gMethods[] = {
- { "native_writeflag_NV", "(IC)V",(void*) android_native_writeflag_NV },
- { "native_readflag_NV", "()Ljava/lang/String;",(void*) android_native_readflag_NV }
- };
- int registerNativeMethods(JNIEnv* env) { //注册方法
- jclass clazz;
- clazz = env->FindClass(className);
- if (env->RegisterNatives(clazz, gMethods,
- sizeof(gMethods) / sizeof(gMethods[0])) < 0) {
- return -1;
- }
- return 0;
- }
- jint JNI_OnLoad(JavaVM* vm, void* reserved) {
- JNIEnv* env = NULL;
- jint result = -1;
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
- if (NULL != env && registerNativeMethods(env) == 0) {
- result = JNI_VERSION_1_4;
- }
- }
- return result;
- }
这个cpp要做的事情主要有以下几点:
- LOCAL_C_INCLUDES += \
- vendor/qcom/proprietary/fastmmi/libmmi \
- external/libcxx/include \
- external/skia/include/core \
- external/libxml2/include \
- external/icu/icu4c/source/common \
- $(QC_PROP_ROOT)/diag/include \
- $(QC_PROP_ROOT)/diag/src/ \
- $(TARGET_OUT_HEADERS)/common/inc
- LOCAL_SHARED_LIBRARIES := \
- libutils \
- libcutils \
- libc \
- libmmi \
- libdiag
高通平台java层操作NV数据的方法相关推荐
- 高通平台wifi命令操作
请先打patch,再烧录打patch之后编译的镜像,将xbin.zip里的工具通过adb push到system/xbin目录下,并更改权限(也可以把这几个文件放在代码里,在编译时copy到syste ...
- 华为鸿蒙或适配高通平台,博主简评华为鸿蒙操作系统,亮点是分布式操作,或将适配高通平台...
原标题:博主简评华为鸿蒙操作系统,亮点是分布式操作,或将适配高通平台 博主简评华为鸿蒙操作系统,亮点是分布式操作,或将适配高通平台 鸿蒙OS 2.0操作系统究竟如何?到底多久后才能正式推送?知名大V博 ...
- 高通平台android开发总结
http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...
- 高通平台android 环境配置编译及开发经验总结
完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- 高通平台android开发总结 .
http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...
- 高通平台android 环境配置编译及开发经验总结【转】
1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...
- 高通平台lcm 总结
以下几幅图是最近的一段时间对自己模块LCM的一些总结,目前只是完成了一部分,而且描述的不是特别到位,后期会不断更新和修改的. 第一幅是LCM的总体移植框架和组件图.介绍了LCM驱动的分部和调试屏的步骤 ...
- 高通平台android7.1系统显示旋转180度
实现方法 内核层修改 kernel\msm-3.18\arch\arm\boot\dts\qcom\dsi-panel-lm215w-lvds-1080p-video.dtsi增加qcom,mdss- ...
- 高通平台sensor学习
刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...
最新文章
- 报名 | DeeCamp2019:实战AI 铸造定雨神针
- 全志A33-修改linux kernel启动参数
- win7禁用Adnimistrator账号登录
- linux镜像包含数据库数据么,docker 镜像中包含数据库环境和运行环境
- linux ftp验证指令,linux FTP常用指令说明
- 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050
- div设置高度 vue_VsCode常用设置(新手必备!)
- Zabbix监控Nginx连接状态
- ResNet----残差结构
- MFC 对话框 添加 工具栏
- HTTP报文字段说明
- Sketch79 mac专业矢量绘图设计
- echarts地图各种点位实现
- Eterm连接不上-10001:登录失败
- 完美:利用旧版iCloud更改Apple ID地区
- c语言中swipe的作用,浅谈在vue中使用mint-ui swipe遇到的问题
- liunx安装jdk报A fatal exception has occurred. Program will exit
- DNS劫持、流量劫持,HTTP/HTTPS劫持
- use SWR为什么能成为我的最爱React库?
- QQ邮箱不显示图片解决方案
热门文章
- Java JVM内存模型
- 004_Mysql数据库的CRUD的操作
- mysql memory_MySQL MEMORY 引擎及性能比对
- linux链接curl库,Linux利用curl库快速开发http应用
- Android Studio系列教程一:下载与安装
- html 背景设为透明背景图片,Three.js中通过透明渲染设置默认背景图片
- bapi sap 创建物料_SAP使用BAPI创建物料主数据的最小输入-阿里云开发者社区
- python structure_GitHub - CYZYZG/Data_Structure_with_Python: 这是我在学习《基于Python的数据结构》的时候的笔记与代码...
- 华为云计算之ebackup了解
- kindeditor java 上传图片_java中KindEditor本地图片上传与上传失败问题