#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(){
}
+
+#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;
+}
#ifdef __cplusplus\r
extern "C" {\r
#endif\r
+\r
+\r
+#define SENSOR_UNKNOWN 0\r
+#define SENSOR_QMA6981 1\r
+#define SENSOR_SC7A21 2\r
+\r
/***************计步控制************************************/\r
/*运行此函数清除 系统计步为0*/\r
//public static native int resetStepCount();\r
//public static native int recoverStepCount();\r
int qmax981_recoverStepCount();\r
\r
+\r
+\r
+\r
+int sc7a21_isStepCounterEnabled();\r
+int sc7a21_DisableStepCount();\r
+int sc7a21_EnableStepCount();\r
+int sc7a21_clearStepCount();\r
+int sc7a21_getStepCount();\r
+int getSensorType();\r
+\r
+\r
/******心率,血压****************************************/\r
/*检查 PPG硬件是否存在,返回 1 存在,0 不存在*/\r
int isPPGavailable();\r
int getLowBloodPressure();\r
/*获取血氧值*/\r
int getSPO2();\r
+\r
+\r
+\r
+\r
#ifdef __cplusplus\r
}\r
#endif\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_resetStepCount\r
(JNIEnv *env, jclass jobj){\r
-\r
- return qmax981_clearStepCount();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_clearStepCount();\r
+ case SENSOR_SC7A21:\r
+ ret= sc7a21_clearStepCount();\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
}\r
\r
/*\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getStepCount\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_getStepCount();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_getStepCount();\r
+ case SENSOR_SC7A21:\r
+ ret= sc7a21_getStepCount();\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
}\r
\r
/*\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enablePedometer\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_enable();\r
+\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_enable();\r
+ case SENSOR_SC7A21:\r
+ ret= sc7a21_EnableStepCount();\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
+\r
}\r
\r
\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_disablePedometer\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_disable();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_disable();\r
+ case SENSOR_SC7A21:\r
+ ret= sc7a21_DisableStepCount();\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
}\r
\r
/*\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPedometerEnabled\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_isStepCounterEnabled();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_isStepCounterEnabled();\r
+ case SENSOR_SC7A21:\r
+ ret= sc7a21_isStepCounterEnabled();\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
}\r
\r
/*\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_saveStepCount\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_saveStepCount();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_saveStepCount();\r
+ case SENSOR_SC7A21:\r
+ ret= -1;\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
+\r
}\r
\r
/*\r
*/\r
JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_recoverStepCount\r
(JNIEnv *env, jclass jobj){\r
- return qmax981_recoverStepCount();\r
+ int sensorType;\r
+ int ret=0;\r
+ sensorType=getSensorType();\r
+ switch(sensorType) {\r
+ case SENSOR_QMA6981:\r
+ ret= qmax981_recoverStepCount();\r
+ case SENSOR_SC7A21:\r
+ ret= -1;\r
+ default:\r
+ break;\r
+ }\r
+ return ret;\r
}\r
\r
\r