From: snickersun Date: Thu, 21 May 2020 11:12:14 +0000 (+0800) Subject: 添加对SC7A21 的支持 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=da797594db656d78c406817a03e478ecd8d274bf;p=ag3335m_download_demo.git 添加对SC7A21 的支持 暂时不支持 save stepcount 和restore stepcount --- diff --git a/app/src/main/jni/driverHal.c b/app/src/main/jni/driverHal.c index cf6d352..078b1fb 100644 --- a/app/src/main/jni/driverHal.c +++ b/app/src/main/jni/driverHal.c @@ -96,7 +96,65 @@ #define ACC_UNIT_CONVERSION(value) ((value) * GRAVITY_EARTH / (1024.0f)) +#define SENSOR_UNKNOWN 0 +#define SENSOR_QMA6981 1 +#define SENSOR_SC7A21 2 +static int g_sensor_type=0; //0 no sensor, 1 QMA6981, 2 SC7A21 + + +/*HRS3300*/ +#define LTR_IOCTL_MAGIC 0x1C +#define LTR_IOCTL_GET_PFLAG _IOR(LTR_IOCTL_MAGIC, 1, int) +#define LTR_IOCTL_GET_LFLAG _IOR(LTR_IOCTL_MAGIC, 2, int) +#define LTR_IOCTL_SET_PFLAG _IOW(LTR_IOCTL_MAGIC, 3, int) +#define LTR_IOCTL_SET_LFLAG _IOW(LTR_IOCTL_MAGIC, 4, int) +#define LTR_IOCTL_GET_DATA _IOW(LTR_IOCTL_MAGIC, 5, unsigned char) +#define LTR_IOCTL_GET_CHIPINFO _IOR(LTR_IOCTL_MAGIC, 6, char) + +#define HRS3300_DEV_PATH_NAME "/dev/hrs3300" +#define HRS3300_INPUT_NAME "hrs3300" + +int hrs3300_startTest(){ + int dev_fd; + int err = 0; + int tmp =1; + dev_fd = open(HRS3300_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", HRS3300_DEV_PATH_NAME); + return 1; + } + LOGD(" Start HRS3300 Test ioctl"); + err = ioctl(dev_fd, LTR_IOCTL_SET_LFLAG, + &tmp); + + if (err != 0) { + LOGE("CLEAR_STEPCOUNT failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return tmp; +} +int hrs3300_stopTest(){ + int dev_fd; + int err = 0; + int tmp =0; + dev_fd = open(HRS3300_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", HRS3300_DEV_PATH_NAME); + return 1; + } + LOGD(" Start HRS3300 Test ioctl"); + err = ioctl(dev_fd, LTR_IOCTL_SET_LFLAG, + &tmp); + + if (err != 0) { + LOGE("CLEAR_STEPCOUNT failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return tmp; +} int qmax981_enable(){ @@ -434,3 +492,152 @@ static int getPPGFromStr(char* buf,int* wared,int *ppg,int *spo2,int* bph,int* b } + +#define SC7A21_ACC_IOCTL_BASE 77 //0x1D +#define SC7A21_ACC_IOCTL_SET_DELAY _IOW(SC7A21_ACC_IOCTL_BASE,0,int) +#define SC7A21_ACC_IOCTL_GET_DELAY _IOR(SC7A21_ACC_IOCTL_BASE,1,int) +#define SC7A21_ACC_IOCTL_SET_ENABLE _IOW(SC7A21_ACC_IOCTL_BASE,2,int) +#define SC7A21_ACC_IOCTL_GET_ENABLE _IOR(SC7A21_ACC_IOCTL_BASE,3,int) +#define SC7A21_ACC_IOCTL_CALIBRATION _IOW(SC7A21_ACC_IOCTL_BASE,4,int) +#define SC7A21_ACC_IOCTL_SET_STEPCOUNT_ENABLE _IOW(SC7A21_ACC_IOCTL_BASE,5,int) +#define SC7A21_ACC_IOCTL_GET_STEPCOUNT_ENABLE _IOR(SC7A21_ACC_IOCTL_BASE,6,int) +#define SC7A21_ACC_IOCTL_GET_STEPCOUNT _IOR(SC7A21_ACC_IOCTL_BASE,7,int) +#define SC7A21_ACC_IOCTL_CLEAR_STEPCOUNT _IOR(SC7A21_ACC_IOCTL_BASE,8,int) + +#define SC7A21_ACC_DEV_PATH_NAME "/dev/sc7a21" + + +int sc7a21_isStepCounterEnabled(){ + + int dev_fd; + int err = 0; + int tmp =0; + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + return 1; + } + LOGD(" GET_STEPCOUNT_ENABLE ioctl"); + err = ioctl(dev_fd, SC7A21_ACC_IOCTL_GET_ENABLE, + &tmp); + + if (err != 0) { + LOGE("CLEAR_STEPCOUNT failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return tmp; +} + + +int sc7a21_DisableStepCount(){ + + int dev_fd; + int err = 0; + int tmp =0; + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + return 1; + } + LOGD(" SC7A21_ACC_IOCTL_SET_ENABLE ioctl "); + err = ioctl(dev_fd, SC7A21_ACC_IOCTL_SET_ENABLE, + &tmp); + + if (err != 0) { + LOGE("SC7A21_ACC_IOCTL_SET_ENABLE failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return 0; +} + + +int sc7a21_EnableStepCount(){ + + int dev_fd; + int err = 0; + int tmp =1; + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + return 1; + } + LOGD(" SC7A21_ACC_IOCTL_SET_ENABLE ioctl "); + err = ioctl(dev_fd, SC7A21_ACC_IOCTL_SET_ENABLE, + &tmp); + + if (err != 0) { + LOGE("SC7A21_ACC_IOCTL_SET_ENABLE failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return 0; +} + +int sc7a21_clearStepCount(){ + + int dev_fd; + int err = 0; + int tmp =0; + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + return 1; + } + LOGD(" CLEAR_STEPCOUNT ioctl "); + err = ioctl(dev_fd, SC7A21_ACC_IOCTL_CLEAR_STEPCOUNT, + &tmp); + + if (err != 0) { + LOGE("CLEAR_STEPCOUNT failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + return 0; +} + + +int sc7a21_getStepCount(){ + + int dev_fd; + int err = 0; + int stepcount =0; + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDWR | O_SYNC); + if (dev_fd < 0) { + fprintf(stderr, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + return 1; + } + LOGD(" GET_STEPCOUNT ioctl "); + err = ioctl(dev_fd, SC7A21_ACC_IOCTL_GET_STEPCOUNT, + &stepcount); + + if (err != 0) { + LOGE("GET_STEPCOUNT failed (%s)", strerror(errno)); + return err; + } + close(dev_fd); + + return stepcount; +} + +int getSensorType(){ + int tmp=SENSOR_UNKNOWN; + + int dev_fd; + dev_fd = open(QMAX981_ACC_DEV_PATH_NAME, O_RDONLY); + if (dev_fd > 0) { + // fprintf(stderr, "cannot open %s\n", QMAX981_ACC_DEV_PATH_NAME); + tmp=SENSOR_QMA6981; + close(dev_fd); + }else{ + + dev_fd = open(SC7A21_ACC_DEV_PATH_NAME, O_RDONLY); + if (dev_fd > 0) { + // fprintf(std, "cannot open %s\n", SC7A21_ACC_DEV_PATH_NAME); + tmp=SENSOR_SC7A21; + close(dev_fd); + } + } + return tmp; +} diff --git a/app/src/main/jni/native-lib.c b/app/src/main/jni/native-lib.c index c607f77..24e082d 100644 --- a/app/src/main/jni/native-lib.c +++ b/app/src/main/jni/native-lib.c @@ -13,6 +13,12 @@ #ifdef __cplusplus extern "C" { #endif + + +#define SENSOR_UNKNOWN 0 +#define SENSOR_QMA6981 1 +#define SENSOR_SC7A21 2 + /***************计步控制************************************/ /*运行此函数清除 系统计步为0*/ //public static native int resetStepCount(); @@ -36,6 +42,17 @@ int qmax981_saveStepCount(); //public static native int recoverStepCount(); int qmax981_recoverStepCount(); + + + +int sc7a21_isStepCounterEnabled(); +int sc7a21_DisableStepCount(); +int sc7a21_EnableStepCount(); +int sc7a21_clearStepCount(); +int sc7a21_getStepCount(); +int getSensorType(); + + /******心率,血压****************************************/ /*检查 PPG硬件是否存在,返回 1 存在,0 不存在*/ int isPPGavailable(); @@ -56,6 +73,10 @@ int getHighBloodPressure(); int getLowBloodPressure(); /*获取血氧值*/ int getSPO2(); + + + + #ifdef __cplusplus } #endif @@ -71,8 +92,18 @@ int getSPO2(); */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_resetStepCount (JNIEnv *env, jclass jobj){ - - return qmax981_clearStepCount(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_clearStepCount(); + case SENSOR_SC7A21: + ret= sc7a21_clearStepCount(); + default: + break; + } + return ret; } /* @@ -82,7 +113,18 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_resetStepCount */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getStepCount (JNIEnv *env, jclass jobj){ - return qmax981_getStepCount(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_getStepCount(); + case SENSOR_SC7A21: + ret= sc7a21_getStepCount(); + default: + break; + } + return ret; } /* @@ -92,7 +134,20 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getStepCount */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enablePedometer (JNIEnv *env, jclass jobj){ - return qmax981_enable(); + + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_enable(); + case SENSOR_SC7A21: + ret= sc7a21_EnableStepCount(); + default: + break; + } + return ret; + } @@ -103,7 +158,18 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enablePedometer */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_disablePedometer (JNIEnv *env, jclass jobj){ - return qmax981_disable(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_disable(); + case SENSOR_SC7A21: + ret= sc7a21_DisableStepCount(); + default: + break; + } + return ret; } /* @@ -113,7 +179,18 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_disablePedometer */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPedometerEnabled (JNIEnv *env, jclass jobj){ - return qmax981_isStepCounterEnabled(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_isStepCounterEnabled(); + case SENSOR_SC7A21: + ret= sc7a21_isStepCounterEnabled(); + default: + break; + } + return ret; } /* @@ -123,7 +200,19 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPedometerEnabled */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_saveStepCount (JNIEnv *env, jclass jobj){ - return qmax981_saveStepCount(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_saveStepCount(); + case SENSOR_SC7A21: + ret= -1; + default: + break; + } + return ret; + } /* @@ -133,7 +222,18 @@ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_saveStepCount */ JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_recoverStepCount (JNIEnv *env, jclass jobj){ - return qmax981_recoverStepCount(); + int sensorType; + int ret=0; + sensorType=getSensorType(); + switch(sensorType) { + case SENSOR_QMA6981: + ret= qmax981_recoverStepCount(); + case SENSOR_SC7A21: + ret= -1; + default: + break; + } + return ret; } diff --git a/app/src/main/libs/arm64-v8a/libICJniUtils.so b/app/src/main/libs/arm64-v8a/libICJniUtils.so index 0210e30..baee189 100644 Binary files a/app/src/main/libs/arm64-v8a/libICJniUtils.so and b/app/src/main/libs/arm64-v8a/libICJniUtils.so differ diff --git a/app/src/main/libs/armeabi-v7a/libICJniUtils.so b/app/src/main/libs/armeabi-v7a/libICJniUtils.so index 6f9fd5b..3fc7b1e 100644 Binary files a/app/src/main/libs/armeabi-v7a/libICJniUtils.so and b/app/src/main/libs/armeabi-v7a/libICJniUtils.so differ diff --git a/app/src/main/libs/x86/libICJniUtils.so b/app/src/main/libs/x86/libICJniUtils.so index 59cf22e..5cbb021 100644 Binary files a/app/src/main/libs/x86/libICJniUtils.so and b/app/src/main/libs/x86/libICJniUtils.so differ diff --git a/app/src/main/libs/x86_64/libICJniUtils.so b/app/src/main/libs/x86_64/libICJniUtils.so index 5a4f1b4..752b920 100644 Binary files a/app/src/main/libs/x86_64/libICJniUtils.so and b/app/src/main/libs/x86_64/libICJniUtils.so differ