#endif
#ifndef USE_HX3918
-#define USE_HX3918 1
+#define USE_HX3918 0
+#endif
+//ºã°®ÑªÑ¹Ë㷨ģ×é
+#ifndef USE_FR8012HAQ
+#define USE_FR8012HAQ 1
#endif
-
#ifndef USE_WMM300
#define USE_WMM300 0
#endif
indev/HX3918/hx3918_prox.c
indev/HX3918/hx3918_spo2_agc.c
+ indev/FR8012HAQ/fr8012haq.c
+
indev/WMM300/alg_example.c
indev/WMM300/alg_port.c
--- /dev/null
+
+
+
+#include "lv_drv_conf_CUSTOM.h"
+#if USE_FR8012HAQ
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <math.h>
+#include "fr8012haq.h"
+
+#include "../../board.h"
+#include "../../common/i2c.h"
+#include "../../../../product/craneg_modem/framework/inc/gpio_api.h"
+#include "lvgl/hal/hal.h"
+#include "../../../lv_watch/app_adaptor/app_sensor_task.h"
+//#include "osa.h"
+#include "../../../../product/craneg_modem/pcac/httpclient/inc/libhttpclient.h"
+//#include "libhttpclient.h"
+//#include "../../../../product/craneg_modem/pcac/httpclient/inc/httpclient_sys.h"
+
+char fr8012haq_ppg_timerout_flag = 0;
+static void * fr8012haq_ppg_timer = NULL;
+
+char fr8012haq_agc_timerout_flag = 0;
+static void * fr8012haq_agc_timer = NULL;
+/************************simware add start***********************************/
+/************************simware add start***********************************/
+static uint32_t fr8012haq_mfp_cfgs[] = {
+ MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+ MFP_REG(GPIO_18) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+ MFP_REG(GPIO_81) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+ MFP_REG(GPIO_84) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+ MFP_REG(GPIO_16) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+ MFP_EOC
+};
+
+typedef void* OS_HISR;
+static OS_HISR fr8012haq_hisr_ref;
+
+
+static unsigned char is_FR8012HAQ = 0;//是否存在IC
+static unsigned char is_open_FR8012HAQ = 0; //是否打开测试
+static unsigned char s_FR8012HAQ_heart_rate = 0x0;//心律
+static unsigned char s_FR8012HAQ_high_blood = 0x0;//血压/高压
+static unsigned char s_FR8012HAQ_low_blood = 0x0;//血压/低压
+static unsigned char s_FR8012HAQ_blood_oxygen = 0x0;//血氧
+static unsigned char s_FR8012HAQ_HRV = 0x0;//hrv
+unsigned char s_FR8012HAQ_wear_status = 1;//佩戴状态
+static float temp = 0.00;
+#define HEART_RATE_BUFF_LEN 10
+unsigned char s_FR8012HAQ_heart_rate_buff[HEART_RATE_BUFF_LEN]={0};
+unsigned short s_FR8012HAQ_heart_rate_buff_count = 0;
+uint32_t FR8012HAQ_run_mode = NULL_MODE;
+uint32_t FR8012HAQ_jobs_mode = NULL_MODE;
+int ir_wear = 0;//红外佩戴状态
+int cap_wear = 1;//电容佩戴状态
+char is_open_sar = 1;//是否打开sar检测
+static void DelayInUs(unsigned int us);
+void FR8012HAQ_close(void);
+TASK_HANDLE * Hsensor_task_id;
+//字符串里查找最近一个c字符,返回偏移位置
+unsigned int find_c(char *data,char c)
+{
+ unsigned char count = 0;
+ while(data[count])
+ {
+ if(data[count] == c)
+ return count;
+ count++;
+ if(count > 65532)
+ return 0;
+ }
+}
+static void fr8012haq_en_gpio_init(void)
+{
+ gpio_set_direction(GPIO18, GPIO_OUT);
+ gpio_set_direction(GPIO81, GPIO_OUT);
+ gpio_set_direction(GPIO84, GPIO_OUT);
+ gpio_set_direction(GPIO16, GPIO_OUT);
+
+}
+void fr8012haq_delay(uint32_t ms)
+{
+ // INT32 cnt = 0x29F9; //uart_log cal as: 1ms
+ // volatile INT32 i = 0;
+
+ // for(;ms != 0; ms--){
+ // i = cnt;
+ // for(;i != 0; i--);
+ // }
+ ms = ms/4+1;
+ UOS_SleepMs(ms);
+}
+
+//Hsensor 电源、复位
+static void fr8012haq_en_gpio_enable(bool param)
+{
+ static flag = 0;
+ if(param)
+ flag++;
+ else
+ {
+ if(flag > 0)
+ flag --;
+ }
+
+ if(flag > 0) {
+ gpio_set_value(GPIO18, GPIO_HIGH);
+ gpio_set_value(GPIO81, GPIO_HIGH);
+ gpio_set_value(GPIO84, GPIO_LOW);
+ gpio_set_value(GPIO16, GPIO_HIGH);
+ //gpio_set_value(GPIO7, GPIO_LOW);
+ // while(1)
+ // {
+ // UOS_SleepMs(1000);
+
+ // FR8012HAQ_LOG("fr8012haq_en_gpio_enable2!!!!\n\n");
+ // }
+ } else {
+ gpio_set_value(GPIO18, GPIO_LOW);
+ gpio_set_value(GPIO81, GPIO_LOW);
+ //gpio_set_value(GPIO7, GPIO_LOW);
+ // gpio_set_value(GPIO84, GPIO_LOW);
+ }
+}
+static char * response_data = NULL;
+static int response_len = 0;
+
+/*
+data: the data is received http context data
+len: the length of http context data
+num: the http response header "Content-Length" value
+cbdata: user private data
+*/
+static void response_cb(char * data, int len, int num, void *cbdata)
+{
+ char * temp;
+ char *private_data=(char *)cbdata;
+
+ //FR8012HAQ_LOG("[http_client_test]Get private_data %s\n", private_data);
+
+ FR8012HAQ_LOG("[http_client_test]Get data %d\n", len);
+
+ temp = (void*)malloc(response_len + len);
+ if (!temp) {
+ FR8012HAQ_LOG("[http_client_test]Malloc failed...\n");
+ return;
+ }
+ memset(temp, 0, response_len + len);
+ if (response_data) {
+ memcpy(temp, response_data, response_len);
+ free(response_data);
+ }
+ memcpy(&temp[response_len], data, len);
+ response_data = temp;
+ response_len += len;
+}
+http_client * fr8012haq_client = NULL;
+static void * fr8012haq_http_post_json_timer = NULL;
+void fr8012haq_http_post_json_cb(unsigned int p)
+{
+ if(fr8012haq_client!=NULL)
+ http_client_stop(fr8012haq_client);
+ uos_timer_stop(fr8012haq_http_post_json_timer);
+
+}
+int fr8012haq_http_post_json(char *url,char *post_data,char *read_buf,unsigned int read_buf_max,unsigned int timeout)
+{
+ int response_code= 0;
+ int ret = 0;
+ struct http_client_list * header = NULL;
+ if (fr8012haq_client != NULL)
+ return -2;
+ if(fr8012haq_http_post_json_timer == NULL )
+ uos_timer_create(&fr8012haq_http_post_json_timer);
+
+ uos_timer_start(fr8012haq_http_post_json_timer, MS_TO_TICKS(timeout), MS_TO_TICKS(timeout), fr8012haq_http_post_json_cb, NULL);
+
+ fr8012haq_client = http_client_init();
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_URL, url); /*set URL:support http/https and ip4/ip6*/
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_HTTP1_0, 0); /*"0" is HTTP 1.1, "1" is HTTP 1.0*/
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_RESPONSECB, response_cb); /*response callback*/
+ //http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_RESPONSECB_DATA, private_data); /*set user private data,*/
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_METHOD, HTTPCLIENT_REQUEST_POST); /*set method,support GET/POST/PUT*/
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_POSTDATA, post_data); /*post data is http context*/
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_POSTLENGTH, strlen(post_data)); /*http context length*/
+ header = http_client_list_append(header, "Content-Type: application/json\r\n");
+ header = http_client_list_append(header, "Accept: */*\r\n");
+ http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_HTTPHEADER, header);
+ http_client_getinfo(fr8012haq_client, HTTPCLIENT_GETINFO_TCP_STATE, &response_code);
+ if(response_code != HTTP_TCP_ESTABLISHED){
+ FR8012HAQ_LOG("fr8012haq_http_post_json:http tcp not connecting\n");
+ ret = -1;
+ goto EXIT;
+ }
+ response_code=http_client_perform(fr8012haq_client); /*execute http send and recv*/
+ if(response_code != HTTP_CLIENT_OK){
+ FR8012HAQ_LOG("[http_client_test]http perform have some wrong[%d]\n",response_code);
+ ret = -1;
+ goto EXIT;
+ }
+ http_client_getinfo(fr8012haq_client, HTTPCLIENT_GETINFO_RESPONSE_CODE, &response_code);
+ if (response_code != 200 && response_code != 204) {
+ FR8012HAQ_LOG("[http_client_test]response is not 'HTTP OK'(%d)\n", response_code);
+ }
+ int read_buf_len = 0;
+ if(response_len>=read_buf_max)
+ read_buf_len = read_buf_max-1;
+ else
+ read_buf_len = response_len;
+ memcpy(read_buf,response_data,read_buf_len);
+ read_buf[read_buf_len] = 0;
+ FR8012HAQ_LOG("fr8012haq_http_post_json:Get total data len:%d\n", response_len);
+ FR8012HAQ_LOG("fr8012haq_http_post_json:response_data %s\n",read_buf);
+ uos_timer_stop(fr8012haq_http_post_json_timer);//获取数据成功,关闭定时器
+EXIT:
+ if (header) {
+ http_client_list_destroy(header);
+ header = NULL;
+ }
+ if(fr8012haq_client)
+ {
+ http_client_shutdown(fr8012haq_client);
+ fr8012haq_client = NULL;
+ }
+ if (response_data)
+ free(response_data);
+ response_data = NULL;
+ response_len = 0;
+ return ret;
+}
+static void fr8012haq_task_callback(VOID * argv)
+{
+ //sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_PROCESS_DATA);
+ //mfp_config(uart4_pin_mfp_cfgs);
+ int response_code,trynum=0;
+ struct http_client * client = NULL;
+ struct http_client_list * header = NULL;
+
+ //char data[500]= {0};
+ int len = 0;
+ //uart4_debug();
+ char post_data[] ="{\"app_key\": \"1db74281ece314ba6bbc2b553222cd84\",\"name\": \"RH303\",\"firm\": \"魔方\",\"mac\": \"DA:19:72:F3:0A:89\",\"model\": \"T11\",\"sensor\": {\"model\": \"VP60\",\"fs\": 81},\"sinklib_version\": \"v0.3.0.072522\",\"request_code\":\"6+m78fFJkFKu1mzhhL4jKRJTEhJMwvSJFlJhWIgRC8wfyB0HFw8JMURNQ6c3MP/U\"}" ;
+ char *read_buff = (void*)malloc(2000);
+ if(!read_buff)
+ return ;
+ while(1)
+ {
+
+ UOS_SleepMs(5000);
+
+ //fr8012haq_http_post_json("http://test.aicaring.com/api/v0/sinklib/activation",post_data,read_buff,2000,10000);
+
+ // FR8012HAQ_LOG("fr8012haq_task_callback1!!!!\n");
+ // client = http_client_init();
+ // http_client_setopt(client, HTTPCLIENT_OPT_URL, "http://test.aicaring.com/api/v0/sinklib/activation"); /*set URL:support http/https and ip4/ip6*/
+ // http_client_setopt(client, HTTPCLIENT_OPT_HTTP1_0, 0); /*"0" is HTTP 1.1, "1" is HTTP 1.0*/
+
+ // http_client_setopt(client, HTTPCLIENT_OPT_RESPONSECB, response_cb); /*response callback*/
+ // //http_client_setopt(client, HTTPCLIENT_OPT_RESPONSECB_DATA, private_data); /*set user private data,*/
+ // http_client_setopt(client, HTTPCLIENT_OPT_METHOD, HTTPCLIENT_REQUEST_POST); /*set method,support GET/POST/PUT*/
+ // http_client_setopt(client, HTTPCLIENT_OPT_POSTDATA, post_data); /*post data is http context*/
+ // http_client_setopt(client, HTTPCLIENT_OPT_POSTLENGTH, strlen(post_data)); /*http context length*/
+ // //http_client_setopt(client, HTTPCLIENT_OPT_AUTH_TYPE, HTTP_AUTH_TYPE_BASE); /*auth type support base and digest*/
+ // // http_client_setopt(client, HTTPCLIENT_OPT_AUTH_USERNAME, "admin"); /*username*/
+ // // http_client_setopt(client, HTTPCLIENT_OPT_AUTH_PASSWORD, "admin"); /*password*/
+
+ // // Add private HTTP header
+ // header = http_client_list_append(header, "Content-Type: application/json\r\n");
+ // header = http_client_list_append(header, "Accept: */*\r\n");
+ // FR8012HAQ_LOG("fr8012haq_task_callback2!!!!\n");
+ // /*set http private header,our http stack already support Referer/Host/Authorization/User-Agent/Connection/cookie/Content-Length,
+ // this header is other http header,ex: Content-Type..., we call it private header,*/
+ // http_client_setopt(client, HTTPCLIENT_OPT_HTTPHEADER, header);
+ // FR8012HAQ_LOG("fr8012haq_task_callback3!!!!\n");
+ // http_client_getinfo(client, HTTPCLIENT_GETINFO_TCP_STATE, &response_code);
+ // FR8012HAQ_LOG("fr8012haq_task_callback4!!!!\n");
+ // FR8012HAQ_LOG("[http_client_test]Get tcp state %d\n", response_code);
+
+ // if(response_code != HTTP_TCP_ESTABLISHED){
+ // FR8012HAQ_LOG("[http_client_test]http tcp not connecting\n");
+ // http_client_shutdown(client); /*release http resources*/
+ // //client = http_client_init();
+ // continue;
+ // }
+
+
+ // response_code=http_client_perform(client); /*execute http send and recv*/
+ // if(response_code != HTTP_CLIENT_OK){
+ // FR8012HAQ_LOG("[http_client_test]http perform have some wrong[%d]\n",response_code);
+ // http_client_shutdown(client); /*release http resources*/
+ // //client = http_client_init();
+ // continue;
+ // }
+ // FR8012HAQ_LOG("fr8012haq_task_callback5!!!!\n");
+ // http_client_getinfo(client, HTTPCLIENT_GETINFO_RESPONSE_CODE, &response_code);
+ // if (response_code != 200 && response_code != 204) {
+ // FR8012HAQ_LOG("[http_client_test]response is not 'HTTP OK'(%d)\n", response_code);
+ // }
+ // FR8012HAQ_LOG("fr8012haq_task_callback6!!!!\n");
+ // FR8012HAQ_LOG("[http_client_test]Get total data %d\n", response_len);
+ // FR8012HAQ_LOG("[http_client_test]response_data %s\n",response_data);
+ // UOS_SleepMs(500);
+ // if (response_data) free(response_data);
+ // response_data = NULL;
+ // response_len = 0;
+
+ // //FR8012HAQ_LOG("[http_client_test]free(response_data)\n");
+ // // Free private HTTP header
+ // if (header) {
+ // http_client_list_destroy(header);
+ // header = NULL;
+ // }
+ // //FR8012HAQ_LOG("[http_client_test]http_client_list_destroy(header)\n");
+ // http_client_shutdown(client); /*release http resources*/
+ // FR8012HAQ_LOG("fr8012haq_task_callback7!!!!\n");
+ // //FR8012HAQ_LOG("[http_client_test]http_client_shutdown(client)\n");
+ UOS_SleepMs(2000);
+ //uart4_send_data("UART4:1111!!!!!!!\n",sizeof("UART4:1111!!!!!!!\n"));
+ // len =uart4_recv_data(data,sizeof(data),64);
+ // if(len)
+ // FR8012HAQ_LOG("UART4:len:%d str:%s\n",len,data);
+ //uart4_send_data("UART4:1111!!!!!!!\n",sizeof("UART4:1111!!!!!!!\n"));
+ }
+}
+static void fr8012haq_hisr_callback(void)
+{
+ sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_PROCESS_DATA);
+}
+static void fr8012haq_create_hisr(void)
+{
+ Hsensor_task_id = uos_create_task(fr8012haq_task_callback, NULL, 64, 8*1024, 202, "Hsensor_task");
+ //cplog_printf("fr8012haq_create_hisr:Hsensor_task_id:%d!!\n",Hsensor_task_id);
+ OS_Create_HISR(&fr8012haq_hisr_ref,"fr8012haq_hisr", fr8012haq_hisr_callback, HISR_PRIORITY_2);
+ // OS_Activate_HISR(&fr8012haq_hisr_ref);
+}
+
+static void * fr8012haq_timer = NULL;
+void fr8012haq_timerout_cb(void)
+{
+ FR8012HAQ_LOG("fr8012haq_timerout_cb\n");
+ OS_Activate_HISR(&fr8012haq_hisr_ref);
+}
+void fr8012haq_timer_cfg(bool en) //320ms
+{
+ FR8012HAQ_LOG("fr8012haq_timer_cfg :%d!!!!!!\n\n",en);
+ if(en)
+ {
+ if(fr8012haq_timer == NULL )
+ uos_timer_create(&fr8012haq_timer);
+ //fr8012haq_timer = Helios_Timer_init( (void* )fr8012haq_timerout_cb, NULL);
+ if(FR8012HAQ_jobs_mode == WEAR_MODE)
+ {
+
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
+ //Helios_Timer_Start(fr8012haq_timer, 3000, 1);
+ //Helios_Timer_Start(fr8012haq_timer, 320, 1);
+ }else
+ {
+
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+ }
+
+ //Helios_Timer_Start(fr8012haq_timer, 320, 1);
+
+ }
+ else
+ {
+ if(fr8012haq_timer)
+ {
+ FR8012HAQ_LOG("fr8012haq_timer_cfg Timer_Stop\n\n");
+ uos_timer_stop(fr8012haq_timer);
+ //Helios_Timer_Stop(fr8012haq_timer);
+ }
+ }
+
+}
+/* Timer0_0 is configured to free run @1MHz from BootROM. */
+static void DelayInUs(unsigned int us)
+{
+ unsigned long startTime, endTime;
+ Timer0_Switch(1);
+ startTime = GetTimer0CNT();
+ do
+ {
+ endTime = GetTimer0CNT();
+ }
+ while(Timer0IntervalInMicro(startTime, endTime) < us);
+}
+void FR8012HAQ_test(uint32_t mode)
+{
+ s_FR8012HAQ_heart_rate = 0x0;
+ s_FR8012HAQ_heart_rate_buff_count = 0;
+ s_FR8012HAQ_high_blood = 0x0;
+ s_FR8012HAQ_low_blood = 0x0;
+ s_FR8012HAQ_HRV = 0;
+ //s_FR8012HAQ_wear_status = 0;
+ s_FR8012HAQ_blood_oxygen = 0x0;
+ FR8012HAQ_LOG("FR8012HAQ_test1:%d!!!!\n\n",mode);
+ if(mode <= close_MODE)
+ {
+
+ switch (mode)
+ {
+ case HRS_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}"));
+ break;
+ case SPO2_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}"));
+ break;
+ case BP_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"bp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"bp\"}"));
+ break;
+ case WEAR_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"wear\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"wear\"}"));
+ break;
+ case HRV_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}"));
+ break;
+ // case YYL_MODE:
+ // /* code */
+ // uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}"));
+ // break;
+ default:
+ break;
+ }
+ }
+ fr8012haq_timer_cfg(true);
+
+ FR8012HAQ_LOG("FR8012HAQ_test2:%d!!!!\n\n",mode);
+}
+static void fr8012haq_start(void)
+{
+ FR8012HAQ_LOG("fr8012haq_start:FR8012HAQ_run_mode:%d\n",FR8012HAQ_run_mode);
+ Timer0_Switch(1);
+
+ hal_fr8012haq_int_init();
+ FR8012HAQ_restart();
+ if(FR8012HAQ_jobs_mode != NULL_MODE)//没关闭就打开其他模式,先关闭一次
+ {
+ // FR8012HAQ_close();
+ // fr8012haq_delay(20);
+ // FR8012HAQ_jobs_mode = NULL_MODE;
+ }
+ // else
+ // FR8012HAQ_restart();
+
+ FR8012HAQ_test(FR8012HAQ_run_mode);
+ FR8012HAQ_jobs_mode = FR8012HAQ_run_mode;
+ FR8012HAQ_run_mode = NULL_MODE;
+
+ // hal_gh30x_int_init();
+ // fr8012haq_en_gpio_enable(false);
+ // DelayInUs(10*1000);
+ // fr8012haq_en_gpio_enable(true);
+ // DelayInUs(50*1000);
+ // int ret = gh30x_module_init();
+
+
+ //gh30x_module_start_without_adt(measure_mode);
+}
+
+static void fr8012haq_stop(void)
+{
+ FR8012HAQ_LOG("[%s][%d]: \n", __FUNCTION__, __LINE__);
+ //gh30x_module_stop();
+
+ //fr8012haq_en_gpio_enable(false);
+ FR8012HAQ_close();
+ //FR8012HAQ_LOG("FR8012HAQ_irq_cb: 1111111111111!!!!!!!!\r\n");
+ FR8012HAQ_run_mode = NULL_MODE;
+ FR8012HAQ_jobs_mode = NULL_MODE;
+ fr8012haq_ppg_timerout_flag = 0;
+ fr8012haq_agc_timerout_flag = 0;
+ Timer0_Switch(0);
+
+}
+//解析数据
+void fr8012haq_analysis_data(char *data,unsigned int len)
+{
+ char *tem_data = NULL;
+ char num_buf[20] = {0};
+ unsigned char num_buf_len = 0;
+ /*心率*/
+ tem_data = strstr(data,"\"hrs_data\":\"");
+ if(tem_data)
+ {
+
+ unsigned char hrs = 0;
+ tem_data += strlen("\"hrs_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ hrs = atoi(num_buf);
+ FR8012HAQ_result_set_heart_rate(hrs);
+ }
+ /*血氧*/
+ tem_data = strstr(data,"\"spo2_data\":\"");
+ if(tem_data)
+ {
+
+ unsigned char spo2 = 0;
+ tem_data += strlen("\"spo2_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ spo2 = atoi(num_buf);
+ FR8012HAQ_result_set_blood_oxygen(spo2);
+ }
+ /*血压*/
+ tem_data = strstr(data,"\"bp_data\":\"");
+ if(tem_data)
+ {
+
+ unsigned char spo2 = 0;
+ tem_data += strlen("\"spo2_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ spo2 = atoi(num_buf);
+ FR8012HAQ_result_set_blood_oxygen(spo2);
+ }
+ /*体温*/
+ tem_data = strstr(data,"\"temper_data\":\"");
+ if(tem_data)
+ {
+
+ //unsigned char hrs = 0;
+ tem_data += strlen("\"temper_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ temp = atof(num_buf);
+ }
+ /*佩戴*/
+ tem_data = strstr(data,"\"wear_data\":\"");
+ if(tem_data)
+ {
+
+ //unsigned char hrs = 0;
+ tem_data += strlen("\"wear_data\":\"");
+ if(*tem_data == '0')
+ {
+ FR8012HAQ_result_set_wear_status(0);
+ }else
+ {
+ FR8012HAQ_result_set_wear_status(1);
+ }
+ }
+}
+#define UART4_BUF_LEN 2*1024
+void fr8012haq_process_data(uint32_t *process_data)
+{
+ // char data[500] = {0};
+ unsigned int len = 0;
+ Timer0_Switch(1);
+ void *data = malloc(UART4_BUF_LEN);
+ if(data == NULL)
+ return;
+ memset(data,0,UART4_BUF_LEN);
+ FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_jobs_mode);
+ switch (FR8012HAQ_jobs_mode)
+ {
+ case HRS_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"hrs\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrs\"}"));
+ break;
+ case SPO2_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"spo2\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"spo2\"}"));
+ break;
+ case BP_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"bp\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"bp\"}"));
+ break;
+ case WEAR_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"wear\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"wear\"}"));
+ break;
+ case HRV_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"hrv\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrv\"}"));
+ break;
+ // case YYL_MODE:
+ // /* code */
+ // uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}"));
+ // break;
+ default:
+ break;
+ }
+ FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n\n",FR8012HAQ_jobs_mode);
+ len =uart4_recv_data(data,UART4_BUF_LEN,10000);
+ if(len)
+ {
+ FR8012HAQ_LOG("UART4:len:%d str:%s",len,data);
+ //char *data_tmp = (char *)data+128;
+ FR8012HAQ_LOG("%s\n", (char *)data+110);
+ fr8012haq_analysis_data(data,len);
+ //UOS_SleepMs(100);
+ }
+
+
+ free(data);
+}
+void hal_fr8012haq_int_init(void)
+{
+ // code implement by user
+ // must register func hal_gh30x_int_handler as callback
+ Timer0_Switch(1);
+ mfp_config(fr8012haq_mfp_cfgs);
+ fr8012haq_en_gpio_init();
+ FR8012HAQ_LOG("FR8012HAQ ID : 0x%02x\n",get_fr8012haq_id());
+
+}
+void Fr8012haq_Init(void)
+{
+ //char data[100]= {0};
+ //int len = 0;
+ Timer0_Switch(1);
+ FR8012HAQ_LOG("Fr8012haq_Init1!!!!\n\n");
+ static bool register_dev_flag = false;
+ if(!register_dev_flag)
+ {
+ register_dev_flag = true;
+ sensor_drv_t sensor_drv;
+ sensor_drv.sensor_name = "fr8012haq";
+ sensor_drv.sensor_start = fr8012haq_start;
+ sensor_drv.sensor_stop = fr8012haq_stop;
+ sensor_drv.sensor_process_data = fr8012haq_process_data;
+ sensor_drv_register(FR8012HAQ_ID,&sensor_drv);
+ FR8012HAQ_LOG("Fr8012haq_Init1.1!!!!\n\n");
+ }
+ FR8012HAQ_LOG("Fr8012haq_Init2!!!!\n\n");
+ fr8012haq_create_hisr();
+ FR8012HAQ_LOG("Fr8012haq_Init3!!!!\n\n");
+ hal_fr8012haq_int_init();
+ FR8012HAQ_LOG("Fr8012haq_Init4!!!!\n\n");
+ FR8012HAQ_restart();
+ uart4_debug();
+ // while(1)
+ // {
+ // UOS_SleepMs(1000);
+ // FR8012HAQ_LOG("Fr8012haq_Init5!!!!\n\n");
+ // }
+ //fr8012haq_init(WEAR_MODE);//打开佩戴检测
+
+}
+
+uint8_t get_fr8012haq_id(void)
+{
+ uint8_t fr8012haq_chip_id = 0;
+ fr8012haq_en_gpio_enable(true);
+ fr8012haq_delay(50);
+ //fr8012haq_write_reg(0x01, 0x00);
+ fr8012haq_delay(5);
+ //fr8012haq_chip_id = fr8012haq_read_reg(0x00);
+ fr8012haq_en_gpio_enable(false);
+ return fr8012haq_chip_id;
+}
+
+static bool is_measuring_flag = false;
+void fr8012haq_measure_hr_start(void)
+{
+ sys_pm_wakeup_no_lcd();
+
+
+ FR8012HAQ_run_mode = BP_MODE;
+ FR8012HAQ_LOG("fr8012haq_measure_hr_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
+ sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
+}
+
+void fr8012haq_measure_bo_start(void)
+{
+ sys_pm_wakeup_no_lcd();
+ FR8012HAQ_run_mode = SPO2_MODE;
+ FR8012HAQ_LOG("fr8012haq_measure_bo_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
+ sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
+}
+
+void fr8012haq_measure_bp_start(void)
+{
+ sys_pm_wakeup_no_lcd();
+ FR8012HAQ_run_mode = BP_MODE ;
+ FR8012HAQ_LOG("fr8012haq_measure_bp_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
+ sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
+}
+
+void FR8012HAQ_restart(void)
+{
+ fr8012haq_en_gpio_enable(false);
+ fr8012haq_delay(50);
+ fr8012haq_en_gpio_enable(true);
+ fr8012haq_delay(50);
+}
+void fr8012haq_measure_stop(void)
+{
+ FR8012HAQ_LOG("fr8012haq_measure_stop !!!!!!!!\n");
+ FR8012HAQ_run_mode = close_MODE;
+ sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_STOP);
+}
+void FR8012HAQ_close(void)
+{
+ FR8012HAQ_LOG("FR8012HAQ_close !!!!!!!!\n");
+ watch_set_sleep_lcd_only(false);
+ is_measuring_flag = false;
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"close\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"close\"}"));
+ fr8012haq_timer_cfg(false);
+ //fr8012haq_hrs_disable
+ // if(FR8012HAQ_jobs_mode == HRS_MODE)
+ // {
+ // //fr8012haq_hrs_disable();
+ // }else if(FR8012HAQ_jobs_mode == SPO2_MODE)
+ // {
+ // //fr8012haq_spo2_disable();
+ // }else if(FR8012HAQ_jobs_mode == HRV_MODE)
+ // {
+ // //fr8012haq_hrv_disable();
+ // }
+ // if(sensor_timer != 0)
+ // {
+ // Helios_Timer_Stop(sensor_timer);
+ // }
+ //FR8012HAQ_restart();
+ //打开佩戴检测
+
+
+}
+
+static void fr8012haq_hr_bp_bo_value_update(uint16_t hr, uint16_t bp_high, uint16_t bp_low, uint16_t bo)
+{
+ FR8012HAQ_LOG("[@CHENG_DEBUG][%s][%d]: %d,%d,%d,%d\n", __FUNCTION__, __LINE__, hr, bp_high, bp_low, bo);
+ s_FR8012HAQ_heart_rate = hr;
+ s_FR8012HAQ_blood_oxygen = bo;
+ s_FR8012HAQ_high_blood = bp_high ;
+ s_FR8012HAQ_low_blood = bp_low ;
+
+
+ // if(hr > 0) {
+ // fr8012haq_hr_bp_bo_value.hr = hr;
+ // }
+ // if(bp_high > 0 && bp_low > 0) {
+ // fr8012haq_hr_bp_bo_value.bp_high = bp_high;
+ // fr8012haq_hr_bp_bo_value.bp_low = bp_low;
+ // }
+ // if(bo > 0) {
+ // fr8012haq_hr_bp_bo_value.bo = bo;
+ // }
+ // //app_adaptor_pedometer_data_clear();
+}
+
+uint16_t get_fr8012haq_hr_value(void)
+{
+ return s_FR8012HAQ_heart_rate;
+}
+
+uint16_t get_fr8012haq_b0_value(void)
+{
+ return s_FR8012HAQ_blood_oxygen;
+}
+
+void fr8012haq_hr_bp_bo_value_get(uint16_t *hr, uint16_t *bp_high, uint16_t *bp_low, uint16_t *bo)
+{
+ if(hr != NULL)
+ *hr = s_FR8012HAQ_heart_rate;
+ if(bp_high != NULL)
+ *bp_high = s_FR8012HAQ_high_blood;
+ if(bp_low != NULL)
+ *bp_low = s_FR8012HAQ_low_blood;
+ if(bo != NULL)
+ *bo = s_FR8012HAQ_blood_oxygen;
+}
+
+void fr8012haq_hr_bp_bo_value_clear(void)
+{
+ s_FR8012HAQ_heart_rate = 0x0;
+ s_FR8012HAQ_heart_rate_buff_count = 0;
+ s_FR8012HAQ_high_blood = 0x0;
+ s_FR8012HAQ_low_blood = 0x0;
+ s_FR8012HAQ_HRV = 0;
+ //s_FR8012HAQ_wear_status = 0;
+ s_FR8012HAQ_blood_oxygen = 0x0;
+ //memset(&fr8012haq_hr_bp_bo_value, 0, sizeof(fr8012haq_hr_bp_bo_value));
+
+}
+/******************************************************************************/
+void FR8012HAQ_result_set_heart_rate(unsigned char heart_rate)
+{
+// s_FR8012HAQ_heart_rate_buff[HEART_RATE_BUFF_LEN]={0};
+// uint16 s_FR8012HAQ_heart_rate_buff_count = 0;
+ uint32_t i,tmp = 0;
+ s_FR8012HAQ_heart_rate_buff[s_FR8012HAQ_heart_rate_buff_count] = heart_rate;
+ s_FR8012HAQ_heart_rate_buff_count++;
+ for(i=0;i<s_FR8012HAQ_heart_rate_buff_count;i++)//算总和,取平均值
+ {
+ tmp+=s_FR8012HAQ_heart_rate_buff[i];
+ }
+ s_FR8012HAQ_heart_rate = tmp/s_FR8012HAQ_heart_rate_buff_count;//取平均值
+ //s_FR8012HAQ_heart_rate = heart_rate;
+ if(s_FR8012HAQ_heart_rate_buff_count >= HEART_RATE_BUFF_LEN)
+ s_FR8012HAQ_heart_rate_buff_count = 0;
+ s_FR8012HAQ_high_blood = (uint8_t)(heart_rate * 1.5);
+
+ s_FR8012HAQ_low_blood = (uint8_t)(heart_rate * 0.95);
+}
+void FR8012HAQ_result_set_wear_status(unsigned char wear_status)
+{
+ if(wear_status != 1)
+ s_FR8012HAQ_wear_status = 0;
+ else
+ s_FR8012HAQ_wear_status = 1;
+ //FR8012HAQ_LOG("s_FR8012HAQ_wear_status:%d !!!!!!!!!!!!!!!!!\n\n\n",s_FR8012HAQ_wear_status);
+}
+unsigned char FR8012HAQ_result_get_wear_status(void)
+{
+
+ return s_FR8012HAQ_wear_status ;
+}
+void FR8012HAQ_result_set_blood_oxygen(unsigned char blood_oxygen)
+{
+ s_FR8012HAQ_blood_oxygen = blood_oxygen;
+}
+
+void FR8012HAQ_result_set_hrv(unsigned char hrv)
+{
+ s_FR8012HAQ_HRV = hrv;
+}
+/*****************************************************************************/
+
+#endif //USE_FR8012HAQ
--- /dev/null
+#ifndef _fr8012haq_H_
+#define _fr8012haq_H_
+#include <stdint.h>
+#include <stdbool.h>
+
+#define FR8012HAQ_DEBUG 1
+#if FR8012HAQ_DEBUG == 1
+#define FR8012HAQ_LOG(msg, ...) cplog_printf( msg, ##__VA_ARGS__)//printf( msg, ##__VA_ARGS__)//
+//#define FR8012HAQ_LOG(msg, ...) printf( msg, ##__VA_ARGS__)//printf( msg, ##__VA_ARGS__)//
+#else
+#define FR8012HAQ_LOG(msg, ...)
+#endif
+//#include "tyhx_mems.h"
+//#define DEBUG_PPG_ONLY // 只用IR 判断佩带和非佩戴, 靠近感应功能关闭, 但是FR8012HAQ_PROX.C要合入编译
+
+typedef enum {
+ HRS_MODE,
+ SPO2_MODE,
+ BP_MODE,
+ WEAR_MODE,
+ HRV_MODE,
+ YYL_MODE,
+ LIVING_MODE,
+ LAB_TEST_MODE,
+ FT_LEAK_LIGHT_MODE,
+ FT_GRAY_CARD_MODE,
+ FT_INT_TEST_MODE,
+ NULL_MODE,
+ close_MODE
+} WORK_MODE_T;
+
+
+
+bool fr8012haq_living_send_data(int32_t *new_raw_data, uint8_t dat_len, uint32_t green_data_als, int16_t *gsen_data_x, int16_t *gsen_data_y, int16_t *gsen_data_z);
+
+void agc_timeout_handler(void * p_context);
+void heart_rate_meas_timeout_handler(void * p_context);
+
+int16_t fr8012haqxxx_read_two_reg_low_triple(uint8_t addh, uint8_t addl);
+void display_refresh(void);
+extern char fr8012haq_ppg_timerout_flag ;
+extern char fr8012haq_agc_timerout_flag ;
+void fr8012haq_set_gsen_fifo(short *x,short *y,short *z, int count);
+void Fr8012haq_Init(void);
+uint8_t get_fr8012haq_id(void);
+void FR8012HAQ_result_set_wear_status(unsigned char wear_status);
+unsigned char FR8012HAQ_result_get_wear_status(void);
+void FR8012HAQ_close(void);
+void fr8012haq_measure_stop(void);
+#endif
* INCLUDES
*********************/
#include "my_xMotion.h"
-
+#include "lv_drv_conf_CUSTOM.h"
#if USE_MY_XMOTION
#include <stdio.h>
OS_Activate_HISR(&xmotion_hisr_ref);
}
#endif
+short Gsensor_x[32];
+short Gsensor_y[32];
+short Gsensor_z[32];
+int Gsensor_xyz_len = 0;
+#if USE_HX3918
+extern void hx3918_set_gsen_fifo(short *x,short *y,short *z, int count);
+#endif
static void My_Motion_Main(VOID * argv)
{
uint16_t MsgId;
uos_timer_start(pptimer, XMOTION_TIME, XMOTION_TIME, xmotion_timer_callback, NULL);
gpio_enable_edge_detect(my_xm_info.irq_pin, EDGE_FLAG_FALL);
#endif
-
+ Gsensor_xyz_len = xMotion_FIFO_Read_XYZ(Gsensor_x,Gsensor_y,Gsensor_z);
+#if USE_HX3918
+ hx3918_set_gsen_fifo(Gsensor_x,Gsensor_y,Gsensor_z,Gsensor_xyz_len);
+#endif
my_xmotion_sleep_resume();
break;
}
//raise_pm_wakeup_3s();
}
break;
+ case EVENT_FALL_NOTIFY:
+ printf(" [ FALL = %ld ].\r\n",data_m);
+ mmi_gsensor_sensor_fall_alarm();
+ break;
default:
break;
}
#if USE_HX3918
#include "../../lv_drivers/indev/HX3918/hx3918.h"
#endif
+#if USE_FR8012HAQ
+#include "../../lv_drivers/indev/FR8012HAQ/fr8012haq.h"
+#endif
#if USE_WMM300
#include "../../lv_drivers/indev/WMM300/whale_algo.h"
#endif
{
return (get_xmotion_id());
}
-
+//²úÉúµøµ¹±¨¾¯ºó£¬»á´¥·¢¸Ãº¯Êý£¬ÇëÔÚº¯ÊýÄÚʵÏÖ·¢ÏûÏ¢´¥·¢UI¶¯×÷
+void mmi_gsensor_sensor_fall_alarm(void)
+{
+ /*...*/
+}
void asl_pedometer_poweron_on_init(void)
{
hal_rtc_t today;
{
#if USE_HX3918
return HX3918_result_get_wear_status();
+#elif USE_FR8012HAQ
+ return FR8012HAQ_result_get_wear_status();
#elif USE_WMM300
return wmm300_result_get_wear_status();
#else
#if USE_HX3918
hx3918_hr_bp_bo_value_clear();
#endif
+#if USE_FR8012HAQ
+ fr8012haq_hr_bp_bo_value_clear();
+#endif
#if USE_WMM300
wmm300_hr_bp_bo_value_clear();
#endif
#if USE_HX3918
hx3918_measure_hr_start();
#endif
+#if USE_FR8012HAQ
+ fr8012haq_measure_hr_start();
+#endif
#if USE_WMM300
wmm300_measure_hr_start();
#endif
#if USE_HX3918
hx3918_measure_bo_start();
#endif
+#if USE_FR8012HAQ
+ fr8012haq_measure_bo_start();
+#endif
#if USE_WMM300
wmm300_measure_bo_start();
#endif
#endif
}
+void mmi_hsensor_bp_measure_start(void)
+{
+ mmi_hsensor_measure_value_clear();
+
+#if USE_FR8012HAQ
+ fr8012haq_measure_bp_start();
+#endif
+
+}
+
void mmi_hsensor_measure_stop(void)
{
#if USE_HX3918
hx3918_measure_stop();
#endif
+#if USE_FR8012HAQ
+ fr8012haq_measure_stop();
+#endif
#if USE_WMM300
wmm300_measure_stop();
#endif
#if USE_HX3918
hx3918_hr_bp_bo_value_get(hr, bp_high, bp_low, bo);
#endif
+#if USE_FR8012HAQ
+ fr8012haq_hr_bp_bo_value_get(hr, bp_high, bp_low, bo);
+#endif
#if USE_WMM300
wmm300_hr_bp_bo_value_get(hr, bp_high, bp_low, bo);
#endif
return get_gh3018_id();
#elif USE_HX3918
return get_hx3918_id();
+#elif USE_FR8012HAQ
+ return get_fr8012haq_id();
#elif USE_WMM300
return whale_check_chip();
#else
gh3018_measure_hr_start();
#elif USE_HX3918
hx3918_measure_hr_start();
+#elif USE_FR8012HAQ
+ fr8012haq_measure_hr_start();
#elif USE_WMM300
wmm300_measure_hr_start();
#else
/**************************Pedometer ********************/
//uint8_t asl_pedometer_sensor_id_get(void);
+void mmi_gsensor_sensor_fall_alarm(void);
void asl_pedometer_poweron_on_init(void);
void asl_pedometer_steps_update(uint32_t steps);
uint32_t asl_pedometer_steps_get(void);
#if USE_HX3918
HX3918_ID,
#endif
+#if USE_FR8012HAQ
+ FR8012HAQ_ID,
+#endif
#if USE_WMM300
WMM300_ID,
#endif
#include "cam_sensor.h"
#include "cam_gc032a_tuningtab.h"
-
+#include "../../../../config/watch/lv_conf_CUSTOM.h"
//raw8 640 * 486 spi 2 lan sdr crc 20fps
static const struct regval_tab GC032a_init_raw8_spi2lan_crc_sdr[] = {
{0xf3, 0x83}, /*System*/
{0x92, 0x03},
{0x93, 0x03},
{0x94, 0x08},
+#if DRV_PROJECT_Z5_Z12
+ {0x95, 0x78},
+#else
{0x95, 0x44},
+#endif
{0x97, 0x00},
{0x98, 0x00},
{0xfe, 0x00}, /*ASDE*/
{0xfe, 0x00}, /*YCP*/
{0xd1, 0x3c},
{0xd2, 0x3c},
+#if DRV_PROJECT_Z5_Z12
+ {0xd3, 0x44},
+#else
{0xd3, 0x38},
+#endif
{0xd6, 0xf4},
{0xd7, 0x1d},
{0xdd, 0x73},
{0x4f, 0x01}, // aec_en
{0xfe, 0x01},
{0x12, 0xa0},
+#if DRV_PROJECT_Z5_Z12
+ {0x13, 0x46},
+#else
{0x13, 0x3a},
+#endif
{0x44, 0x04},
{0x1f, 0x30},
{0x20, 0x40},
/*DNDD*/
{0xfe, 0x00},
{0x81, 0xb8},//f8
+#if DRV_PROJECT_Z5_Z12
+ {0x82, 0x1a},
+ {0x83, 0x0f},
+#else
{0x82, 0x12},
{0x83, 0x0a},
+#endif
{0x84, 0x01},
{0x86, 0x50},
{0x87, 0x18},
{0x92, 0x03},
{0x93, 0x03},
{0x94, 0x08},
+#if DRV_PROJECT_Z5_Z12
+ {0x95, 0x82},
+#else
{0x95, 0x44},
+#endif
{0x97, 0x00},
{0x98, 0x00},
/*YCP*/
{0xfe, 0x00},
- {0xd1, 0x3c},
+
+#if DRV_PROJECT_Z5_Z12
+ {0xd1, 0x36},
+ {0xd2, 0x36},
+ {0xd3, 0x44},
+#else
+ {0xd1, 0x3c},
{0xd2, 0x3c},
{0xd3, 0x38},
+#endif
+
{0xd6, 0xf4},
{0xd7, 0x1d},
{0xdd, 0x73},
extern int uartx_rx_hanlder(int id);
extern void gps_uart_clear_receive_fifo (uint32 port_id);
-
-
+extern int uart4_recv_data(char *buf,int buf_max_len,unsigned int timeout);
+extern void uart4_send_data(char *buf,int len);
#endif
#include "intc.h"
#include "qspi_dma.h"
#include "gpsnmeaapi.h"
-
+#include "../inc/gps_uart.h"
+#include "../inc/gps_uart_api.h"
/*********************
* DEFINES
*********************/
**********************/
int uartx_rx_hanlder(int id);
-
+int uart4_rx_hanlder(int id);
/**********************
* STATIC VARIABLES
**********************/
static char rx_buf_hisr[RX_BUF_MAX];
static int rx_buf_w_point=0;
static int rx_buf_r_point=0;
-
+char uart4_rx_buf[2048];
+int uart4_rx_buf_len = 0;
static gps_uart_cfg uart2_port =
{
GPS_UART2_ID, //port_id
gps_rx_int, //int_type
0, //highspeed = 0
0, //flowctrl = 0
- GPS_BAUDRATE_9600, //GPS_BAUDRATE_9600, //baudrate = BAUDRATE_115200
+ GPS_BAUDRATE_115200, //GPS_BAUDRATE_9600, //baudrate = BAUDRATE_115200
GPS_DATA_8, //datawidth = DATA_8
GPS_PARITY_NONE, //parity = PARITY_NONE
- (GPS_UartIsrCb)uartx_rx_hanlder,
+ (GPS_UartIsrCb)uart4_rx_hanlder,
NULL,
};
gps_uart_clear_receive_fifo(uart4_port.port_id);
DEBUG("uart4_debug%d\n", gps_uart_id);
}
+int uart4_rx_hanlder(int id)
+{
+
+ uint32 data,err_data,err = 0;
+ uint32 uart_base;
+ gps_uart_enable_RxInt(id,0);
+
+ uart_base = gps_uart_info[id].base_addr;
+ data = read32 (uart_base + GPS_UART_LSR) & 0xFF;
+
+ if(data & GPS_UART_LSR_DR)
+ {
+ do
+ {
+ uart4_rx_buf[uart4_rx_buf_len] = read32 (uart_base + GPS_UART_RBR);
+ uart4_rx_buf_len++;
+
+ if(rx_buf_w_point >= 2048)
+ {
+ uart4_rx_buf_len=0;
+ }
+
+ data = read32 (uart_base + GPS_UART_LSR) & 0xFF;
+ } while ((data & GPS_UART_LSR_DR) );
+ }
+ //else
+ // return UART_DATA_ERROR;
+ gps_uart_enable_RxInt(id,1);
+ //gps_uart_callback(p_buf, uart_rx_len);
+ if(gps_hisr_ref == NULL){
+ DEBUG("=================>func=%s,gps_hisr_ref=NULL\r\n",__func__);
+ return;
+ }
+ ASSERT(OS_Activate_HISR(&gps_hisr_ref)== OS_SUCCESS);
+ return 0;
+}
+int uart4_recv_data(char *buf,int buf_max_len,unsigned int timeout)
+{
+ int len = 0;
+ int count = 0;
+ int uart4_rx_buf_len_tmp = 0;
+ //timeout = timeout/8+1;
+ //cplog_printf("uart4_recv_data:timeout:%d\n",timeout);
+ while(timeout--)
+ {
+ gps_ui_delay_us(1400);//1ms
+ //UOS_SleepMs(1);
+ if(uart4_rx_buf_len == uart4_rx_buf_len_tmp && uart4_rx_buf_len != 0)
+ {
+ count++;
+ }else
+ count = 0;
+ uart4_rx_buf_len_tmp = uart4_rx_buf_len;
+ if(count > 5)//连续5ms没新数据,认为是一帧数据,退出
+ break;
+ }
+ //cplog_printf("uart4_recv_data:count:%d timeout:%d\n",count,timeout);
+ if(uart4_rx_buf_len > buf_max_len)
+ {
+ len = buf_max_len;
+ }else
+ {
+ len = uart4_rx_buf_len;
+ }
+ memcpy(buf,uart4_rx_buf, len);
+ uart4_rx_buf_len = 0;
+ return len;
+}
+void uart4_send_data(char *buf,int len)
+{
+ //cplog_printf("uart4_send_data:%s\n",buf);
+ gps_uart_send_data(3,buf,len);
+}
int uartx_rx_hanlder(int id)
{
#if USE_HX3918
#include "lv_drivers/indev/HX3918/hx3918.h"
#endif
+#if USE_FR8012HAQ
+#include "lv_drivers/indev/FR8012HAQ/fr8012haq.h"
+#endif
#if USE_WMM300
#include "lv_drivers/indev/WMM300/whale_algo.h"
#endif
#if USE_HX3918
Hx3918_Init();
#endif
+#if USE_FR8012HAQ
+ Fr8012haq_Init();
+#endif
#if USE_WMM300
Wmm300_Init();
#endif
PACKAGE_NAME = lwm2m
PACKAGE_BASE = pcac
PACKAGE_DEP_FILE = lwm2m_dep.mak
-PACKAGE_PATH = ${BUILD_ROOT}/${PACKAGE_BASE}/${PACKAGE_NAME}
+PACKAGE_ORIG = pcac
+PACKAGE_PATH = ${BUILD_ROOT}/${PACKAGE_ORIG}/${PACKAGE_NAME}
PACKAGE_INC_PATHS = \
sdksrc/sdk/dm_lwm2msdk.c \
sdksrc/sdk/dm_object_device.c \
sdksrc/sdk/dm_object_dm.c \
+ sdksrc/sdk/dm_object_dmpWrite.c \
+ sdksrc/sdk/dm_object_dmpRead.c \
sdksrc/sdk/dm_object_security.c \
sdksrc/sdk/dm_object_server.c \
sdksrc/shared/dm_commandline.c \
atiny_lwm2m/agent_tiny_demo.c
endif
+ifneq (,$(findstring LWM2M_WAKAAMA,${VARIANT_LIST}))
+# The relative path locations of source and include file directories.
+PACKAGE_SRC_PATH = ${PACKAGE_PATH}/src/lwm2m_wakaama
+PACKAGE_INC_PATHS += ${PACKAGE_PATH}/src/lwm2m_wakaama/core \
+ ${PACKAGE_PATH}/src/lwm2m_wakaama/coap/er-coap-13 \
+ ${PACKAGE_PATH}/src/lwm2m_wakaama/adaptor \
+ ${PACKAGE_PATH}/src/lwm2m_wakaama/adaptor/asrclient \
+ ${PACKAGE_PATH}/src/lwm2m_wakaama/include
+# Package source files, paths not required
+PACKAGE_SRC_FILES = \
+ coap/er-coap-13/er-coap-13.c \
+ coap/block.c \
+ coap/transaction.c \
+ core/bootstrap.c \
+ core/discover.c \
+ core/liblwm2m.c \
+ core/list.c \
+ core/management.c \
+ core/objects.c \
+ core/observe.c \
+ core/packet.c \
+ core/registration.c \
+ core/uri.c \
+ core/utils.c \
+ data/data.c \
+ data/json.c \
+ data/tlv.c \
+ data/json_common.c \
+ data/senml_json.c \
+ adaptor/commandline.c \
+ adaptor/connection.c \
+ adaptor/lwm2m_platform.c \
+ adaptor/memtrace.c \
+ adaptor/asrclient/lwm2mclient.c \
+ adaptor/asrclient/object_access_control.c \
+ adaptor/asrclient/object_connectivity_moni.c \
+ adaptor/asrclient/object_connectivity_stat.c \
+ adaptor/asrclient/object_device.c \
+ adaptor/asrclient/object_firmware.c \
+ adaptor/asrclient/object_location.c \
+ adaptor/asrclient/object_security.c \
+ adaptor/asrclient/object_server.c \
+ adaptor/asrclient/object_test.c \
+ adaptor/asrclient/system_api.c
+endif
# These are the tool flags specific to the ci_stub package only.
# The environment, target, and group also set flags.
PACKAGE_CFLAGS =
-PACKAGE_DFLAGS =
+PACKAGE_DFLAGS += -I$(BUILD_ROOT)/pcac/network \
+ -I${BUILD_ROOT}/pcac/lwipv4v6/src/include \
+ -I${BUILD_ROOT}/pcac/lwipv4v6/src/include/lwip
#define REG_OBJECT_MIN_LEN 5 // "</n>,"
#define REG_PATH_END ">,"
+#define REG_VERSION_START ">;ver="
#define REG_PATH_SEPARATOR "/"
#define REG_OBJECT_PATH "<%s/%hu>,"
length = result;
index += length;
+ index -= 1;
+ index += strlen(REG_VERSION_START);
+
+ result = utils_intToText(1, (uint8_t *)buffer, sizeof(buffer));
+ if (result < 0) return 0;
+ index += result;
+
+ index += 1;
+
+ result = utils_intToText(2, (uint8_t *)buffer, sizeof(buffer));
+ if (result < 0) return 0;
+ index += result;
+
+ index += 1;
+
+ if(objectP->instanceList != NULL)
+ {
+ start = index;
+ index += length;
+ }
+
if (objectP->instanceList == NULL)
{
index -= 1;
length = result;
index += length;
+ index--;
+ result = utils_stringCopy((char *)buffer + index, bufferLen - index, REG_VERSION_START);
+ if (result < 0) return 0;
+ index += result;
+
+ result = utils_intToText(1, buffer + index, bufferLen - index);
+ if (result < 0) return 0;
+ index += result;
+
+ if( index >= bufferLen) return 0;
+ buffer[index++] = '.';
+
+ result = utils_intToText(2, buffer + index, bufferLen - index);
+ if (result < 0) return 0;
+ index += result;
+
+ if( index >= bufferLen) return 0;
+ buffer[index++] = REG_DELIMITER;
+
+ if(objectP->instanceList != NULL)
+ {
+ start = index;
+ result = prv_getObjectTemplate(buffer + index, bufferLen - index, objectP->objID);
+ if (result < 0) return 0;
+ length = result;
+ index += length;
+ }
+
if (objectP->instanceList == NULL)
{
index--;
coap_error_code = message_send(contextP, response, fromSessionH);
- lwm2m_free(payload);
- response->payload = NULL;
- response->payload_len = 0;
+ if (payload)
+ {
+ lwm2m_free(payload);
+ response->payload = NULL;
+ response->payload_len = 0;
+ }
}
else if (coap_error_code != COAP_IGNORE)
{
lwm2m_object_t * get_object_dm(void);
void free_object_dm(lwm2m_object_t * objectP);
+lwm2m_object_t * get_object_dmpWrite(void);
+void free_object_dmpWrite(lwm2m_object_t * objectP);
+void dm_update_lifetime(unsigned int lifetime);
+unsigned int dm_get_lifetime(void);
+unsigned int dm_parser_heartBeatTime_buffer(unsigned char *buffer);
+
+lwm2m_object_t * get_object_dmpRead(void);
+void free_object_dmpRead(lwm2m_object_t * objectP);
char * get_server_uri(lwm2m_object_t * objectP, uint16_t secObjInstID);
//#include <sys/stat.h>
//#include <errno.h>
//#include <signal.h>
-
+#define KEY_MODEL "Z12"
#include "dm_j_aes.h"
#include "dm_j_base64.h"
//#include <pthread.h>
#include "dm_lwm2msdk.h"
#include "dm_lwm2mclient.h"
+#include "../testsdk/sdk_cmcc_register_info_def.h"
+//#include "../../../../../../config/watch/customer_config.h"
#define MAX_PACKET_SIZE 1024
+#if 0
+//CMCC DMP V2.0
#define OBJ_COUNT 4
+#else
+//CMCC DMP V4.0
+#define OBJ_COUNT 5
+#endif
//lwm2m_object_t * objArray[OBJ_COUNT];
int g_reboot = 0;
int g_pip_ios_fd[2] ;
char g_szEPI[256]="";
-
+#if 0
+//CMCC DMP V2.0
Options g_opt = { "352099001761482", /*CMEI_IMEI*/
"", /*CMEI_IMEI2*/
"460075551608160", /*IMSI*/
300, /*life time*/
56831, /*local port*/
0}; /*bootstrap*/
+#else
+//CMCC DMP V4.0
+Options g_opt = { "深圳市大山智慧科技有限公司", /*brand*/
+ "Z12", /*model*/
+ "M100001028", /*appKey*/
+ "397fub217U67fmqz39a2938WG90d1857", /*pwd*/
+ "4.0.1", /*sdkVersion*/
+ "4.0.1", /*apiVersion*/
+ "SZDS2022", /*templatID*/
+ "3520990017614823", /* imei1 */
+ "", /* imei2 */
+ "460075551608160", /* imei2 */
+ 4, /*ip type,4/6*/
+#if 0
+ "m.fxltsbl.com", /*server address*/
+#else
+ "coap://b.fxltsbl.com", /*test server address*/
+#endif
+ 5683, /*server port*/
+ 86400, /*life time*/
+ 56831, /*local port*/
+ 0
+ }; /*bootstrap*/
+#endif
OptFuncs g_sdk_opt_funcs = {NULL};
}
-
+#if 0
+//CMCC DMP V2.0
int LWM2M_SDK_RUN_PARAM(int argc, char *argv[])
{
client_data_t data;
if (result != 0)
{
LOG_M( "lwm2m_step() failed: 0x%X\r\n", result);
- g_quit = 1;//é\80?å\87?
+ g_quit = 1;//�?�?
break;
//continue;
//return -1;
return 0;
}
+#else
+//CMCC DMP V4.0
+int LWM2M_SDK_RUN_PARAM(int argc, char *argv[])
+{
+ client_data_t data;
+ lwm2m_context_t * lwm2mH = NULL;
+ lwm2m_object_t * objArray[OBJ_COUNT];
+ char * server = "127.0.0.1";
+ char * serverPort = "5683";
+ char * localPort = "56830";
+ //char * initname = "testlwm2mclient";
+ char * name = "";
+ int lifetime=300;
+ int result=0;
+ char * multiVer="v2.0";
+ char imeiFlag[65];
+ //int opt;
+
+ memset(&data, 0, sizeof(client_data_t));
+
+ data.addressFamily = AF_INET6;
+ //localPort = argv[opt];
+ //param set by optional
+ //if (strlen(g_opt.szSrvIP)>=0)
+ server=g_opt.szSrvIP;
+ char szsrvport[10]= {0};
+ if (g_opt.nSrvPort > 80 ) {
+ sprintf(szsrvport,"%d",g_opt.nSrvPort);
+ serverPort = szsrvport;
+ }
+ if(g_opt.nAddressFamily==4) {
+ data.addressFamily = AF_INET;
+ }
+ if ( g_opt.nLifetime > 10 ) {
+ lifetime=g_opt.nLifetime ;
+ }
+ char szlocalport[10]= {0};
+ if (g_opt.nLocalPort > 49152 ) {
+ sprintf(szlocalport,"%d",g_opt.nLocalPort);
+ localPort = szlocalport;
+ }
+
+
+ char *szStars="****";
+ char epnametmp[256];
+ memset(epnametmp,0,sizeof(epnametmp));
+ memset(g_szEPI,0,sizeof(g_szEPI));
+ sprintf(epnametmp,"%s||%s||%s||%s||%s||I||%s||%s||%s||***||***||***",
+ g_opt.brand, g_opt.model, g_opt.appKey, g_opt.sdkVersion, g_opt.apiVersion,g_opt.templatID,
+ strlen(g_opt.szCMEI_IMEI) > 0 ? g_opt.szCMEI_IMEI : szStars,
+ strlen(g_opt.szCMEI_IMEI2) > 0 ? g_opt.szCMEI_IMEI2 : szStars);
+ sprintf(g_szEPI, "%s||%s||%s||%s||%s||I||%s||%s||%s||***||***||***",
+ g_opt.brand, g_opt.model, g_opt.appKey, g_opt.sdkVersion, g_opt.apiVersion,g_opt.templatID,
+ strlen(g_opt.szCMEI_IMEI) > 0 ? g_opt.szCMEI_IMEI : szStars,
+ strlen(g_opt.szCMEI_IMEI2) > 0 ? g_opt.szCMEI_IMEI2 : szStars);
+
+ //strcpy(epnametmp,"L@#@M+D2vyO9kk/IPVyzehd6Biypy8R69yTlHdaIQiTp6klbXqJmESZJ6QXoDlQkqOC8@#@M100000006");
+ LOG_M("epname=%s~\n", epnametmp);
+ name = epnametmp;
+
+ LOG_M("szEPI=%s~\n", g_szEPI);
+
+///////////////
+
+ /*
+ *This call an internal function that create an IPv6 socket on the port 5683.
+ */
+ LOG_M( "Trying to bind LWM2M Client to port %s\r\n", localPort);
+ data.sock = create_socket(localPort, data.addressFamily);
+ if (data.sock < 0) {
+ LOG_M("Failed to open socket: %d %s\r\n", errno, strerror(errno));
+ return -1;
+ }
+
+ char serverUri[50];
+ int serverId = 123;
+ sprintf (serverUri, "coap://%s:%s", server, serverPort);
+
+ //objArray[0] = get_security_object();
+ objArray[0] = get_security_object(serverId, serverUri);
+ if (NULL == objArray[0]) {
+ LOG_S( "Failed to create security object\r\n");
+ close(data.sock);
+ return -1;
+ }
+ data.securityObjP = objArray[0];
+
+ objArray[1] = get_server_object(serverId, lifetime);
+ if (NULL == objArray[1]) {
+ LOG_S( "Failed to create server object\r\n");
+ close(data.sock);
+ free_security_object(objArray[0]);
+ return -1;
+ }
+ dm_update_lifetime(lifetime);
+
+ objArray[2] = get_object_device();
+ if (NULL == objArray[2]) {
+ LOG_S("Failed to create Device object\r\n");
+ close(data.sock);
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ return -1;
+ }
+
+ objArray[3] = get_object_dmpWrite();
+ if (NULL == objArray[3]) {
+ LOG_S("Failed to create Device object\r\n");
+ close(data.sock);
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ free_object_device(objArray[2]);
+ return -1;
+ }
+
+ objArray[4] = get_object_dmpRead();
+ if (NULL == objArray[4]) {
+ LOG_S("Failed to create Device object\r\n");
+ close(data.sock);
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ free_object_device(objArray[2]);
+ free_object_dmpWrite(objArray[3]);
+ return -1;
+ }
+
+ lwm2mH = lwm2m_init(&data);
+ if (NULL == lwm2mH) {
+ LOG_S( "lwm2m_init() failed\r\n");
+ close(data.sock);
+
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ free_object_device(objArray[2]);
+ free_object_dmpWrite(objArray[3]);
+ free_object_dmpRead(objArray[4]);
+ return -1;
+ }
+
+ result = lwm2m_configure(lwm2mH, name, NULL, NULL, OBJ_COUNT, objArray);
+ if (result != 0) {
+ LOG_M( "lwm2m_configure() failed: 0x%X\r\n", result);
+ close(data.sock);
+ lwm2m_close(lwm2mH);
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ free_object_device(objArray[2]);
+ free_object_dmpWrite(objArray[3]);
+ free_object_dmpRead(objArray[4]);
+ return -1;
+ }
+
+
+ //signal(SIGINT, handle_sigint);
+ LOG_M("LWM2M Client \"%s\" started on port %s.\r\nUse Ctrl-C to exit.\r\n\n", name, localPort);
+ g_quit = 0;
+
+ /*
+ * We now enter in a while loop that will handle the communications from the server
+ */
+ while (0 == g_quit) {
+ struct timeval tv;
+ fd_set readfds;
+
+ tv.tv_sec = 60;
+ tv.tv_usec = 0;
+
+ FD_ZERO(&readfds);
+ FD_SET(data.sock, &readfds);
+ //FD_SET(g_pip_ios_fd[0],&readfds);
+
+ print_state(lwm2mH);
+ if (lwm2mH->state == STATE_READY) {
+ lwm2mH->serverList->lifetime = dm_get_lifetime();
+ LOG_M( "update lifetime: %d\r\n", dm_get_lifetime());
+ }
+
+ result = lwm2m_step(lwm2mH, (time_t *)&(tv.tv_sec));
+ if (result != 0) {
+ LOG_M( "lwm2m_step() failed: 0x%X\r\n", result);
+ g_quit = 1;//�?�?
+ break;
+ //continue;
+ //return -1;
+ }
+
+ /*
+ * This part wait for an event on the socket until "tv" timed out (set
+ * with the precedent function)
+ */
+ result = select(FD_SETSIZE, &readfds, NULL, NULL, &tv);
+ if (result < 0) {
+ if (errno != EINTR) {
+ LOG_M("Error in select(): %d %s\r\n", errno, strerror(errno));
+ }
+ } else if (result > 0) {
+ uint8_t buffer[MAX_PACKET_SIZE];
+ int numBytes;
+
+ /*
+ * If an event happens on the socket
+ */
+ if (FD_ISSET(data.sock, &readfds)) {
+ struct sockaddr_in addr;
+ memset(&addr,0,sizeof(struct sockaddr_in));
+ struct sockaddr_in6 addr6;
+ memset(&addr6,0,sizeof(struct sockaddr_in6));
+ socklen_t addrLen;
+
+ if(g_opt.nAddressFamily==4) {
+ addrLen = sizeof(addr);
+ } else {
+ addrLen = sizeof(addr6);
+ }
+
+ /*
+ * We retrieve the data received
+ */
+ if(g_opt.nAddressFamily==4) {
+ numBytes = recvfrom(data.sock, buffer, MAX_PACKET_SIZE, 0, (struct sockaddr *)&addr, &addrLen);
+ } else {
+ numBytes = recvfrom(data.sock, buffer, MAX_PACKET_SIZE, 0, (struct sockaddr *)&addr6, &addrLen);
+ }
+
+ if (0 > numBytes) {
+ LOG_M("Error in recvfrom(): %d %s\r\n", errno, strerror(errno));
+ } else if (0 < numBytes) {
+ connection_t * connP;
+
+ if(g_opt.nAddressFamily==4) {
+ connP = connection_find(data.connList, &addr, addrLen);
+ } else {
+ connP = connection_find6(data.connList, &addr6, addrLen);
+ }
+
+ if (connP != NULL) {
+ /*
+ * Let liblwm2m respond to the query depending on the context
+ */
+ lwm2m_handle_packet(lwm2mH, buffer, numBytes, connP);
+ } else {
+ /*
+ * This packet comes from an unknown peer
+ */
+ LOG_S( "received bytes ignored!\r\n");
+ }
+ }
+ }
+ /*
+ else if(FD_ISSET(g_pip_ios_fd[0], &readfds))
+ {
+ char c[2];
+ read(g_pip_ios_fd[0], c, 1);
+ g_quit = 1;
+ }
+ */
+ }
+ }
+
+ /*
+ * Finally when the loop is left, we unregister our client from it
+ */
+ lwm2m_close(lwm2mH);
+ lwm2m_sdk_notify_dereg_success(0,"dereg");
+ close(data.sock);
+ connection_free(data.connList);
+
+ free_security_object(objArray[0]);
+ free_server_object(objArray[1]);
+ free_object_device(objArray[2]);
+ free_object_dmpWrite(objArray[3]);
+ free_object_dmpRead(objArray[4]);
+
+ LOG_S( "loop func quit\r\n\n");
+
+ return 0;
+}
+#endif
void * runthreadfunc(void * arg)
{
int ret = LWM2M_SDK_RUN_PARAM(0,NULL);
LOG_S("is stopped");
return 0;
}
+#if 1
+ g_quit = -1;
+#endif
//ret = write(g_pip_ios_fd[1], "x", 1);
}
+#if 1
+void lwm2m_info_conf(const char *imei, const char *imsi, const char *appkey, const char *pwd)
+{
+#if 0
+//CMCC DMP V2.0
+ memcpy(g_opt.szCMEI_IMEI, imei, strlen(imei));
+ memcpy(g_opt.szIMSI, imsi, strlen(imsi));
+ memcpy(g_opt.szAppKey, appkey, strlen(appkey));
+ memcpy(g_opt.szPwd, pwd, strlen(pwd));
+#else
+//CMCC DMP V4.0
+ memset(g_opt.szCMEI_IMEI,0,64);
+ memcpy(g_opt.szCMEI_IMEI, imei, strlen(imei));
+ memset(g_opt.szIMSI,0,64);
+ memcpy(g_opt.szIMSI, imsi, strlen(imsi));
+ memset(g_opt.appKey,0,64);
+ memcpy(g_opt.appKey, appkey, strlen(appkey));
+ memset(g_opt.szPwd,0,64);
+ memcpy(g_opt.szPwd, pwd, strlen(pwd));
+ memset(g_opt.brand,0,32);
+ memcpy(g_opt.brand, REG_BRAND, strlen(REG_BRAND));
+ memset(g_opt.model,0,32);
+ memcpy(g_opt.model, KEY_MODEL, strlen(KEY_MODEL));
+ //memcpy(g_opt.templatID, );
+#endif
+}
+#endif
+
} OptFuncs;
-
+#if 0
+//CMCC DMP V2.0
typedef struct
{
char szCMEI_IMEI[64]; //CMEI/IMEI
int nBootstrap; //是否booststrap 0,not use; other n,use;
} Options;
+#else
+typedef struct
+{
+ char brand[32]; //brand
+ char model[32]; //model
+ char appKey[64]; //appKey
+ char szPwd[64]; //pwd秘钥
+ char sdkVersion[16]; //sdkVersion
+ char apiVersion[16]; //apiVersion
+ char templatID[32]; //templatID
+ char szCMEI_IMEI[64]; //CMEI/IMEI
+ char szCMEI_IMEI2[64]; //CMEI/IMEI2
+ char szIMSI[64]; //IMSI
+ int nAddressFamily; //4或6 ipv4,ipv6
+ char szSrvIP[32]; //127.0.0.1
+ int nSrvPort; //5683
+ int nLifetime; //300
+ int nLocalPort; //本地端口绑定,默认为56830
+ int nBootstrap; //是否booststrap 0,not use; other n,use;
+} Options;
+#endif
//初始化Options:参数,optfuncs:回调函数
int LWM2M_SDK_INIT(void);
#define RES_DM_NET_ACCT 6612
#define RES_DM_PHONE 6613
#define RES_DM_LOCATION 6614
+#define RES_DM_SCREENSIZE 6615
+#define RES_DM_RESOLUTION 6616
+#define RES_DM_IMSI 6617
+#define RES_DM_BATTERY_CAPACITY 6618
+#define RES_DM_WEARING_STATUS 6619
+#define RES_DM_BOARD 6620
+#define RES_DM_GPU 6621
+#define RES_DM_ROUTER_MAC 6622
+#define RES_DM_NETWORK_STATUS 6623
#define RES_VALUE_BUFF_LEN 512
do
{
- if((*dataArrayP)[i].id >=RES_DM_DEV_INFO && (*dataArrayP)[i].id <= RES_DM_LOCATION )
+ if((*dataArrayP)[i].id >=RES_DM_DEV_INFO && (*dataArrayP)[i].id <= RES_DM_NETWORK_STATUS )
{
//char sztmp[512];
char *outbuff = NULL;
--- /dev/null
+/*******************************************************************************/
+/*
+ * This object is single instance only, and provide dm info functionality.
+ * Object ID is 669.
+ * Object instance ID is 0.
+ */
+
+#include "dm_liblwm2m.h"
+#include "dm_internals.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+// Resource Id's:
+#define LWM2M_DM_DMPREAD_OBJECT 669
+
+#define RES_DM_DEV_INFO 6601
+#define RES_DM_APP_INFO 6602
+#define RES_DM_MAC 6603
+#define RES_DM_ROM 6604
+#define RES_DM_RAM 6605
+#define RES_DM_CPU 6606
+#define RES_DM_SYS_VERSION 6607
+#define RES_DM_FIRM_VERSION 6608
+#define RES_DM_FIRM_NAME 6609
+#define RES_DM_VOLTE 6610
+#define RES_DM_NET_TYPE 6611
+#define RES_DM_NET_ACCT 6612
+#define RES_DM_PHONE 6613
+#define RES_DM_LOCATION 6614
+#define RES_DM_SCREENSIZE 6615
+#define RES_DM_RESOLUTION 6616
+#define RES_DM_IMSI 6617
+#define RES_DM_BATTERY_CAPACITY 6618
+#define RES_DM_WEARING_STATUS 6619
+#define RES_DM_BOARD 6620
+#define RES_DM_GPU 6621
+#define RES_DM_ROUTER_MAC 6622
+#define RES_DM_NETWORK_STATUS 6623
+#define RES_DM_MAX (23)
+
+#define RES_DM_DEV_INFO_STR "devinfo"
+#define RES_DM_APP_INFO_STR "appinfo"
+#define RES_DM_MAC_STR "mac"
+#define RES_DM_ROM_STR "rom"
+#define RES_DM_RAM_STR "ram"
+#define RES_DM_CPU_STR "cpu"
+#define RES_DM_SYS_VERSION_STR "sysVersion"
+#define RES_DM_FIRM_VERSION_STR "softwareVer"
+#define RES_DM_FIRM_NAME_STR "softwareName"
+#define RES_DM_VOLTE_STR "volte"
+#define RES_DM_NET_TYPE_STR "netType"
+#define RES_DM_NET_ACCT_STR "netAcct"
+#define RES_DM_PHONE_STR "phoneNumber"
+#define RES_DM_LOCATION_STR "location"
+#define RES_DM_SCREENSIZE_STR "screenSize"
+#define RES_DM_RESOLUTION_STR "resolution"
+#define RES_DM_IMSI_STR "imsi"
+#define RES_DM_BATTERY_CAPACITY_STR "batteryCapacity"
+#define RES_DM_WEARING_STATUS_STR "wearingStatus"
+#define RES_DM_BOARD_STR "board"
+#define RES_DM_GPU_STR "gpu"
+#define RES_DM_ROUTER_MAC_STR "routerMac"
+#define RES_DM_NETWORK_STATUS_STR "networkStatus"
+
+#define RES_VALUE_BUFF_LEN 512
+
+typedef struct
+{
+ uint8_t state;
+ uint8_t result;
+
+ char dev_info[RES_VALUE_BUFF_LEN];
+ char app_info[RES_VALUE_BUFF_LEN];
+ char mac[RES_VALUE_BUFF_LEN];
+ char rom[RES_VALUE_BUFF_LEN];
+ char ram[RES_VALUE_BUFF_LEN];
+ char cpu[RES_VALUE_BUFF_LEN];
+ char sys_ver[RES_VALUE_BUFF_LEN];
+ char firm_ver[RES_VALUE_BUFF_LEN];
+ char firm_name[RES_VALUE_BUFF_LEN];
+ char volte[RES_VALUE_BUFF_LEN];
+
+ char net_type[RES_VALUE_BUFF_LEN];
+ char net_acct[RES_VALUE_BUFF_LEN];
+ char phone[RES_VALUE_BUFF_LEN];
+ char location[RES_VALUE_BUFF_LEN];
+
+} dmpread_data_t;
+
+extern int lwm2m_sdk_dm_get_devinfo(uint16_t resId,char **outbuff);
+
+int lwm2m_data_encode_json_buffer(int id, char *jsonOutBuff)
+{
+ char tmpBuff[64] = {0};
+ int len = 0;
+
+ memset(tmpBuff, 0x00, sizeof(tmpBuff));
+
+ if (id == RES_DM_DEV_INFO)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_DEV_INFO_STR);
+ else if (id == RES_DM_APP_INFO)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_APP_INFO_STR);
+ else if (id == RES_DM_MAC)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_MAC_STR);
+ else if (id == RES_DM_ROM)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_ROM_STR);
+ else if (id == RES_DM_RAM)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_RAM_STR);
+ else if (id == RES_DM_CPU)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_CPU_STR);
+ else if (id == RES_DM_SYS_VERSION)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_SYS_VERSION_STR);
+ else if (id == RES_DM_FIRM_VERSION)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_FIRM_VERSION_STR);
+ else if (id == RES_DM_FIRM_NAME)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_FIRM_NAME_STR);
+ else if (id == RES_DM_VOLTE)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_VOLTE_STR);
+ else if (id == RES_DM_NET_TYPE)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_NET_TYPE_STR);
+ else if (id == RES_DM_NET_ACCT)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_NET_ACCT_STR);
+ else if (id == RES_DM_PHONE)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_PHONE_STR);
+ else if (id == RES_DM_LOCATION)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_LOCATION_STR);
+ else if (id == RES_DM_SCREENSIZE)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_SCREENSIZE_STR);
+ else if (id == RES_DM_RESOLUTION)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_RESOLUTION_STR);
+ else if (id == RES_DM_IMSI)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_IMSI_STR);
+ else if (id == RES_DM_BATTERY_CAPACITY)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_BATTERY_CAPACITY_STR);
+ else if (id == RES_DM_WEARING_STATUS)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_WEARING_STATUS_STR);
+ else if (id == RES_DM_BOARD)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_BOARD_STR);
+ else if (id == RES_DM_GPU)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_GPU_STR);
+ else if (id == RES_DM_ROUTER_MAC)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_ROUTER_MAC_STR);
+ else if (id == RES_DM_NETWORK_STATUS)
+ len = snprintf(tmpBuff, sizeof(tmpBuff), "\"%s\":", RES_DM_NETWORK_STATUS_STR);
+ else
+ return -1;
+
+ memcpy(jsonOutBuff, tmpBuff, len);
+
+ return 0;
+}
+
+static uint8_t prv_dm_dmpRead(uint16_t instanceId,
+ int * numDataP,
+ lwm2m_data_t ** dataArrayP,
+ lwm2m_object_t * objectP)
+{
+ int i;
+ uint8_t result;
+ dmpread_data_t * data = (dmpread_data_t*)(objectP->userData);
+ char jsonOutBuff[1024] = {0};
+ char tmpBuff[64] = {0};
+
+ memset(jsonOutBuff, 0x00, sizeof(jsonOutBuff));
+ LOG_ARG("* numDataP=%d", *numDataP);
+
+ // this is a single instance object
+ if (instanceId != 0)
+ {
+ return COAP_404_NOT_FOUND;
+ }
+
+ int total_count = 1;
+ // is the server asking for the full object ?
+ if (*numDataP == 0)
+ {
+ *dataArrayP = lwm2m_data_new(total_count);
+ if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
+ *numDataP = total_count;
+ (*dataArrayP)[0].id = 1;
+ }
+
+ int iret = 0, len =0;
+
+ len += snprintf(jsonOutBuff + len, sizeof(jsonOutBuff) - len, "{");
+
+ for(i = 0; i < RES_DM_MAX; i++)
+ {
+ char *outbuff = NULL;
+
+ iret = lwm2m_sdk_dm_get_devinfo(6600+i+1, &outbuff);
+ if(iret!=0)
+ {
+ LOG_ARG("resId=%u,lwm2m_sdk_dm_get_devinfo,iret=%d",i ,iret);
+ result = COAP_404_NOT_FOUND;
+ }
+ else
+ {
+ memset(tmpBuff, 0x00, sizeof(tmpBuff));
+ lwm2m_data_encode_json_buffer(6600+i+1, tmpBuff);
+ //LOG_ARG("tmpBuff=%s", tmpBuff);
+ len += snprintf(jsonOutBuff + len, sizeof(jsonOutBuff) - len, "%s\"%s\",", tmpBuff, outbuff);
+ //LOG_ARG("len=%d, jsonOutBuff111=%s", len, jsonOutBuff);
+ result = COAP_205_CONTENT;
+ }
+ if(outbuff) free(outbuff);
+ }
+
+ len -= 1;
+ len += snprintf(jsonOutBuff + len, sizeof(jsonOutBuff) - len, "}");
+
+ LOG_ARG("len=%d, jsonOutBuff222=%s", len, jsonOutBuff);
+
+ lwm2m_data_encode_string(jsonOutBuff, *dataArrayP);
+
+ //LOG_ARG("jsonOutBuff333=%s", (*dataArrayP)->value.asBuffer.buffer);
+
+ return result;
+}
+
+lwm2m_object_t * get_object_dmpRead(void)
+{
+ lwm2m_object_t * firmwareObj;
+
+ firmwareObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t));
+
+ if (NULL != firmwareObj)
+ {
+ memset(firmwareObj, 0, sizeof(lwm2m_object_t));
+ firmwareObj->objID = LWM2M_DM_DMPREAD_OBJECT;
+
+ /*
+ * and its unique instance
+ *
+ */
+ firmwareObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t));
+ if (NULL != firmwareObj->instanceList)
+ {
+ memset(firmwareObj->instanceList, 0, sizeof(lwm2m_list_t));
+ }
+ else
+ {
+ lwm2m_free(firmwareObj);
+ return NULL;
+ }
+
+
+ firmwareObj->readFunc = prv_dm_dmpRead;
+ firmwareObj->writeFunc = 0;
+ firmwareObj->executeFunc = 0;
+ firmwareObj->userData = lwm2m_malloc(sizeof(dmpread_data_t));
+
+ /*
+ * Also some user data can be stored in the object with a private structure containing the needed variables
+ */
+ if (NULL != firmwareObj->userData)
+ {
+ dmpread_data_t *data = (dmpread_data_t*)(firmwareObj->userData);
+
+ data->state = 1;
+ data->result = 0;
+ strcpy(data->dev_info, "");
+ strcpy(data->app_info, "1.0");
+
+
+ }
+ else
+ {
+ lwm2m_free(firmwareObj);
+ firmwareObj = NULL;
+ }
+ }
+
+ return firmwareObj;
+}
+
+void free_object_dmpRead(lwm2m_object_t * objectP)
+{
+ if (NULL != objectP->userData)
+ {
+ lwm2m_free(objectP->userData);
+ objectP->userData = NULL;
+ }
+ if (NULL != objectP->instanceList)
+ {
+ lwm2m_free(objectP->instanceList);
+ objectP->instanceList = NULL;
+ }
+ lwm2m_free(objectP);
+}
+
--- /dev/null
+/*******************************************************************************/
+/*
+ * This object is single instance only, and provide dm info functionality.
+ * Object ID is 668.
+ * Object instance ID is 0.
+ */
+
+#include "dm_liblwm2m.h"
+#include "dm_internals.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+// Resource Id's:
+#define LWM2M_DM_DMPWRITE_OBJECT 668
+
+#define RES_VALUE_BUFF_LEN 512
+static unsigned int dmLifeTime = 0;
+
+void dm_update_lifetime(unsigned int lifetime)
+{
+ dmLifeTime = lifetime;
+
+ return;
+}
+
+unsigned int dm_get_lifetime(void)
+{
+ return dmLifeTime;
+}
+
+unsigned int dm_parser_heartBeatTime_buffer(unsigned char *buffer)
+{
+ char *pBuff = NULL;
+ char *tmp = NULL;
+ char data[4] = {0};
+ unsigned int heartBeatTime = 0;
+
+ if (buffer == NULL)
+ {
+ LOG("buffer is NULL");
+ return heartBeatTime;
+ }
+
+ pBuff = (char *)buffer;
+ tmp = strstr(pBuff, "heartBeatTime");
+ LOG_ARG("tmp=%s", tmp);
+ if (tmp)
+ {
+ while(*tmp++ != ',')
+ {
+ LOG_ARG("*tmp=%c", *tmp);
+ if (*tmp == ':')
+ {
+ tmp++;
+ if (*tmp >= '0' && *tmp <= '9')
+ {
+ data[0] = *tmp;
+ heartBeatTime = data[0] - '0';
+ }
+ //LOG_ARG("heartBeatTime111=%d", heartBeatTime);
+ tmp++;
+ if (*tmp >= '0' && *tmp <= '9')
+ {
+ data[1] = *tmp;
+ heartBeatTime = heartBeatTime * 10 + (data[1] - '0');
+ }
+ //LOG_ARG("heartBeatTime222=%d", heartBeatTime);
+ tmp++;
+ if (*tmp >= '0' && *tmp <= '9')
+ {
+ data[2] = *tmp;
+ heartBeatTime = heartBeatTime * 10 + (data[2] - '0');
+ }
+ //LOG_ARG("heartBeatTime333=%d", heartBeatTime);
+ tmp++;
+ if (*tmp >= '0' && *tmp <= '9')
+ {
+ data[3] = *tmp;
+ heartBeatTime = heartBeatTime * 10 + (data[3] - '0');
+ }
+ LOG_ARG("heartBeatTime444=%d", heartBeatTime);
+ break;
+ }
+ }
+ }
+
+ return heartBeatTime;
+}
+
+static uint8_t prv_dm_dmpwrite(uint16_t instanceId,
+ int numData,
+ lwm2m_data_t * dataArray,
+ lwm2m_object_t * objectP)
+{
+ unsigned char *buffer="{\"reportTime\":1440,\"heartBeatTime\":900,\"reportNum\":8,\"retryInterval\":10,\"retryNum\":1}";
+
+ unsigned int heartBeatTime = 0, i = 0 ;
+ LOG_ARG("instanceId=%u, numData=%d", instanceId, numData);
+
+ if (numData <= 0)
+ return COAP_231_CONTINUE;
+
+ if (numData >= 2)
+ {
+ if (dataArray[1].value.asBuffer.length > 0)
+ {
+ heartBeatTime = dm_parser_heartBeatTime_buffer(dataArray[1].value.asBuffer.buffer);
+ LOG_ARG("heartBeatTime=%d", heartBeatTime);
+ }
+ }
+
+ if (heartBeatTime > 0)
+ {
+ dm_update_lifetime(heartBeatTime*60); //heartBeatTime unit is minute
+ }
+
+ for (i = 0; i < numData; i++)
+ {
+ if (dataArray[i].value.asBuffer.length > 0)
+ {
+ LOG_ARG("i = %d, id=%u, dataArray->value.asBuffer.length=%d", i, dataArray[i].id, dataArray[i].value.asBuffer.length);
+
+ int printLen = 0;
+ unsigned char *buff = dataArray[i].value.asBuffer.buffer;
+
+ while (dataArray[i].value.asBuffer.length > 0)
+ {
+ if (dataArray[i].value.asBuffer.length > 128)
+ printLen = 128;
+ else
+ printLen = dataArray[i].value.asBuffer.length;
+
+ LOG_ARG("buffer=%.*s", printLen, buff);
+
+ buff += printLen;
+ dataArray[i].value.asBuffer.length -= printLen;
+ }
+ }
+ }
+
+ return COAP_204_CHANGED;
+}
+
+lwm2m_object_t * get_object_dmpWrite(void)
+{
+ lwm2m_object_t * firmwareObj;
+
+ firmwareObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t));
+
+ if (NULL != firmwareObj)
+ {
+ memset(firmwareObj, 0, sizeof(lwm2m_object_t));
+ firmwareObj->objID = LWM2M_DM_DMPWRITE_OBJECT;
+
+ /*
+ * and its unique instance
+ *
+ */
+ firmwareObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t));
+ if (NULL != firmwareObj->instanceList)
+ {
+ memset(firmwareObj->instanceList, 0, sizeof(lwm2m_list_t));
+ }
+ else
+ {
+ lwm2m_free(firmwareObj);
+ return NULL;
+ }
+
+
+ firmwareObj->readFunc = 0;
+ firmwareObj->writeFunc = prv_dm_dmpwrite;
+ firmwareObj->executeFunc = 0;
+#if 0
+ firmwareObj->userData = lwm2m_malloc(sizeof(dmread_data_t));
+
+ /*
+ * Also some user data can be stored in the object with a private structure containing the needed variables
+ */
+ if (NULL != firmwareObj->userData)
+ {
+ dmread_data_t *data = (dmread_data_t*)(firmwareObj->userData);
+
+ data->state = 1;
+ data->result = 0;
+ strcpy(data->dev_info, "");
+ strcpy(data->app_info, "1.0");
+
+
+ }
+ else
+ {
+ lwm2m_free(firmwareObj);
+ firmwareObj = NULL;
+ }
+#endif
+ }
+ return firmwareObj;
+}
+
+void free_object_dmpWrite(lwm2m_object_t * objectP)
+{
+ if (NULL != objectP->userData)
+ {
+ lwm2m_free(objectP->userData);
+ objectP->userData = NULL;
+ }
+ if (NULL != objectP->instanceList)
+ {
+ lwm2m_free(objectP->instanceList);
+ objectP->instanceList = NULL;
+ }
+ lwm2m_free(objectP);
+}
+
#include "diag_osif.h"
#include "osa.h"
#include "dm_liblwm2m.h"
-
+//#include "cJSON.h"
+#include "../../../../../alios/common/include/cJSON.h"
+#include "sdk_cmcc_register_info_def.h"
struct dmMsg
{
static int s_quit = 0;
static int s_state = 0;
+#if 1 //simware
+char g_DmRegisterInfor[512];
+int g_DmRegisterflag=-1;
+extern char * app_adaptor_get_model_id(void);
+extern char * app_adaptor_get_version(void);
+static void ccmc__package_data(void)
+{
+ printf("<dm>[%s,%d]\n", __func__, __LINE__);
+
+ cJSON *json = NULL;
+ char *cache_buf = NULL;
+ extern Options g_opt;
+
+ json = cJSON_CreateObject();
+ if(json == NULL) {
+ printf("[%s\n]%s",__func__,"create cjson object error!!!!");
+ return;
+ }
+ cJSON_AddItemToObject(json, "FIRMWARE VERSION", cJSON_CreateString(REG_FIRMWARE_VERSION));
+ cJSON_AddItemToObject(json, "Model", cJSON_CreateString(REG_FIRMWARE_NAME));
+ cJSON_AddItemToObject(json, "CMEI_IMEI", cJSON_CreateString(g_opt.szCMEI_IMEI));
+#if 0
+//CMCC DMP V2.0
+ app_adp_get_imsi_req(&g_opt.szIMSI);
+ cJSON_AddItemToObject(json, "IMSI", cJSON_CreateString(g_opt.szIMSI));
+#else
+//CMCC DMP V4.0
+ char imsi[32] = {0};
+ app_adp_get_imsi_req(imsi);
+ cJSON_AddItemToObject(json, "IMSI", cJSON_CreateString(imsi));
+#endif
+ cJSON_AddItemToObject(json, "APPINFOR", cJSON_CreateString(REG_APPINFO));
+ cJSON_AddItemToObject(json, "ROM", cJSON_CreateString(REG_ROM));
+ cJSON_AddItemToObject(json, "RAM", cJSON_CreateString(REG_RAM));
+ cJSON_AddItemToObject(json, "CPU", cJSON_CreateString(REG_CPU));
+ cJSON_AddItemToObject(json, "NetType", cJSON_CreateString(REG_NET_TYPE));
+#if 0
+//CMCC DMP V2.0
+ cJSON_AddItemToObject(json, "appkey", cJSON_CreateString(g_opt.szAppKey));
+#else
+//CMCC DMP V4.0
+ cJSON_AddItemToObject(json, "appkey", cJSON_CreateString(g_opt.appKey));
+#endif
+ cJSON_AddItemToObject(json, "pwd", cJSON_CreateString(g_opt.szPwd));
+ cache_buf = cJSON_Print(json);
+ cJSON_Delete(json);
+ memset(g_DmRegisterInfor,0,sizeof(g_DmRegisterInfor));
+ memcpy(g_DmRegisterInfor, cache_buf, (strlen(cache_buf) >= sizeof(g_DmRegisterInfor))? sizeof(g_DmRegisterInfor): (strlen(cache_buf)+1));
+}
+#endif
+
void handle_sig(int signum)
{
s_quit = 1;
if(optNotifyParam->notify_code == NOTIFY_CODE_OK )
{
s_state = 0;
+#if 1//simware
+ ccmc__package_data();
+#endif
}
else
{
if(optNotifyParam->notify_code == NOTIFY_CODE_OK )
{
s_state = 0;
+#if 1//simware
+ ccmc__package_data();
+#endif
}
else
{
default:
break;
}
+ g_DmRegisterflag = s_state;
}
memset(buff,0,sizeof(buff));
//snprintf(buff,buflen,"resval_%d",resId);
- switch (resId)
- {
- case 6601://devinfo
- snprintf(buff,buflen,"%s","ASR3601");
- break;
- case 6602://appinfo
- snprintf(buff,buflen,"ASR 3601\r\n");
- break;
- case 6603://mac
- snprintf(buff,buflen,"00:50:56:C0:00:01");
- break;
- case 6604://rom
- snprintf(buff,buflen,"16MB");
- break;
- case 6605://ram
- snprintf(buff,buflen,"16MB");
- break;
- case 6606://CPU
- snprintf(buff,buflen,"ARM");
- break;
- case 6607://SYS VERSION
- snprintf(buff,buflen,"ThreadX");
- break;
- case 6608://FIRMWARE VERSION
- snprintf(buff,buflen,"CRANE_CP_1.0XX.XXX");
- break;
- case 6609://FIRMWARE NAME
- snprintf(buff,buflen,"CRANE_CP");
- break;
- case 6610://Volte
- snprintf(buff,buflen,"0");
- break;
- case 6611://NetType
- snprintf(buff,buflen,"4G");
- break;
- case 6612://Net Account
- snprintf(buff,buflen,"Account");
- break;
- case 6613://PhoneNumber
- snprintf(buff,buflen,"13812345678");
- break;
- case 6614://Location
- snprintf(buff,buflen,"25.77701556036132,123.52958679200002,GPS");
- break;
+ switch (resId) {
+ case 6601://devinfo
+ snprintf(buff,buflen,"%s",REG_DEVINFO);
+ break;
+ case 6602://appinfo
+ snprintf(buff,buflen,"%s",REG_APPINFO);
+ break;
+ case 6603://mac
+ {
+ extern UINT64 Read_Crane_CPU_UID();
+ UINT64 cpuId = Read_Crane_CPU_UID();
+ char mac[6];
+ memset(mac,0,6);
+ mac[0] = cpuId & 0x00000000000000FF;
+ mac[1] = (cpuId>>8) & 0x00000000000000FF;
+ mac[2] = (cpuId>>16) & 0x00000000000000FF;
+ mac[3] = (cpuId>>24) & 0x00000000000000FF;
+ mac[4] = (cpuId>>32) & 0x00000000000000FF;
+ mac[5] = (cpuId>>40) & 0x00000000000000FF;
+ char mac_str[20];
+ memset(mac_str,0,20);
+ sprintf(mac_str,"%02x:%02x:%02x:%02x:%02x:%02x",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
+ snprintf(buff,strlen(mac_str),"%s",mac_str);
+ }
+ break;
+ case 6604://rom
+ snprintf(buff,buflen,"%s",REG_ROM);
+ break;
+ case 6605://ram
+ snprintf(buff,buflen,"%s",REG_RAM);
+ break;
+ case 6606://CPU
+ snprintf(buff,buflen,"%s",REG_CPU);
+ break;
+ case 6607://SYS VERSION
+ snprintf(buff,buflen,"%s",REG_SYS_VERSION);
+ break;
+ case 6608://FIRMWARE VERSION
+ snprintf(buff,buflen,"%s",cmcc_dm_get_version());
+ break;
+ case 6609://FIRMWARE NAME
+ snprintf(buff,buflen,"%s",REG_FIRMWARE_NAME);
+ break;
+ case 6610://Volte
+ snprintf(buff,buflen,"%s",MMI_Modem_Get_Volte_State_Req(watch_modem_get_sim_id())==1?"0":"1");
+ break;
+ case 6611://NetType
+ snprintf(buff,buflen,"%s",REG_NET_TYPE);
+ break;
+ case 6612://Net Account
+ snprintf(buff,buflen,"%s",REG_NET_ACCOUNT);
+ break;
+ case 6613://PhoneNumber
+ snprintf(buff,buflen,"%s",REG_LOCATION);//REG_PHONENUMBER
+ break;
+ case 6614://Location
+ snprintf(buff,buflen,"%s",REG_LOCATION);
+ break;
+#if 1//simware add beigin
+ case 6615://screenSize
+ snprintf(buff,buflen,REG_SCREENSIZE);
+ break;
+ case 6616://resolution
+ snprintf(buff,buflen,REG_RESOLUTION);
+ break;
+ case 6617://imsi
+ snprintf(buff,buflen,g_opt.szIMSI);
+ break;
+ case 6618://battery
+ snprintf(buff,buflen,REG_BATTERY);
+ break;
+ case 6619://wear state
+ snprintf(buff,buflen,"%s",app_adaptor_get_wear_state()==0?"unwear":"wear");
+ break;
+ case 6620://board version
+ snprintf(buff,buflen,REG_BOARD);
+ break;
+ case 6621://gpu
+ snprintf(buff,buflen,REG_GPU);
+ break;
+ case 6622://router mac
+ snprintf(buff,buflen,REG_ROUTER_MAC);
+ break;
+ case 6623://network status
+ snprintf(buff,buflen,REG_NETWORK_STATUS);
+ break;
+#endif //simware add end
default:
iret = -1;
OSA_STATUS osaStatus;
lwm2m_printf("[%s:%d]\n",__func__,__LINE__);
+#if 1
+ s_quit = 0;
+#endif
osaStatus = OSAMsgQSend(DMMsgQ, sizeof(apiMsg), (UINT8*)&apiMsg, OSA_NO_SUSPEND);
DIAG_ASSERT(osaStatus == OS_SUCCESS);
--- /dev/null
+#ifndef SDK_CMCC_REGISTER_INFO_DEF__H
+#define SDK_CMCC_REGISTER_INFO_DEF__H
+
+
+#define REG_DEVINFO "ASR3603"
+#define REG_APPINFO "ASR 3603\r\n"
+#define REG_MAC "***"
+#define REG_ROM "16MB"
+#define REG_RAM "16MB"
+#define REG_CPU "ASR3603"
+#define REG_SYS_VERSION "RTOS 5.0"
+#define REG_FIRMWARE_VERSION "***"
+#define REG_FIRMWARE_NAME "***"
+#define REG_VOLTE "1"
+#define REG_NET_TYPE "4G"
+#define REG_NET_ACCOUNT "Account"
+#define REG_PHONENUMBER "***"
+#define REG_LOCATION "LBS+WIFI"
+#define REG_BRAND "***"
+#define REG_GPU "None"
+#define REG_BOARD "***"
+#define REG_RESOLUTION "240x284"
+#define REG_SCREENSIZE "1.83"
+#define REG_BATTERY "800mAh"
+#define REG_ROUTER_MAC "None"
+#define REG_NETWORK_STATUS "LTE"
+
+#endif
+