static void handle_start_scanning_evt(struct cfw_message *msg) { ss_sensor_scan_event_t *p_evt = (ss_sensor_scan_event_t *)msg; ss_on_board_scan_data_t on_board_data = p_evt->on_board_data; uint8_t sensor_type = p_evt->sensor_type; p_evt->handle = GET_SENSOR_HANDLE(sensor_type, on_board_data.ch_id); uint8_t data_type = ACCEL_DATA; switch (sensor_type) { case SENSOR_PATTERN_MATCHING_GESTURE: ss_sensor_subscribe_data(sensor_client, NULL, p_evt->handle, &data_type, 1, 100, 10); break; case SENSOR_ABS_TAPPING: ss_sensor_subscribe_data(sensor_client, NULL, p_evt->handle, &data_type, 1, 100, 0); break; case SENSOR_ABS_STEPCOUNTER: ss_sensor_subscribe_data(sensor_client, NULL, p_evt->handle, &data_type, 1, 33, 0); break; case SENSOR_ACCELEROMETER: ss_sensor_subscribe_data(sensor_client, NULL, p_evt->handle, &data_type, 1, 1, 1000); break; case SENSOR_GYROSCOPE: ss_sensor_subscribe_data(sensor_client, NULL, p_evt->handle, &data_type, 1, 1, 1000); break; } }
static void handle_start_scanning_evt(struct cfw_message *msg) { sensor_service_scan_event_t *p_evt = (sensor_service_scan_event_t *)msg; sensor_service_on_board_scan_data_t on_board_data = p_evt->on_board_data; uint8_t sensor_type = p_evt->sensor_type; /* Sensor exists; save its handle for further subscription */ pr_info(LOG_MODULE_MAIN, "Detected cadence sensor"); accel_handle = GET_SENSOR_HANDLE(sensor_type, on_board_data.ch_id); }
void ss_sc_resp_msg_handler(sc_rsp_t *p_msg) { switch(p_msg->msg_id) { case RESP_GET_SENSOR_LIST: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct sensor_list *list = (struct sensor_list*)cmd->param; if(list->count == 0){ SS_PRINT_LOG("Resplist->count=%d,NO sensor list ,break",list->count); break; } int i = 0; int old_sensor_type = -1; for(i=0; i<(list->count); i++){ #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("Resp list->count=%d,sensor_type=%d,dev_id=%d", \ list->count,list->sensor_list[i].sensor_type, \ list->sensor_list[i].dev_id); #endif ss_on_board_scan_data_t scan_data; scan_data.ch_id = list->sensor_list[i].dev_id; /*First, send a rsp msg to service.Rsp msg is a very important symbol to judge the sensor status*/ if( old_sensor_type != list->sensor_list[i].sensor_type) ss_send_scan_rsp_msg_to_clients(1 << (list->sensor_list[i].sensor_type), SS_STATUS_SUCCESS); /*Second, we can send the scan data*/ ss_send_scan_data_to_clients(list->sensor_list[i].sensor_type, &scan_data); old_sensor_type = list->sensor_list[i].sensor_type; } break; } case RESP_START_SENSOR: { #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct return_value *ret_v = (struct return_value*)cmd->param; ss_send_scan_rsp_msg_to_clients(1 << (ret_v->sensor.sensor_type), ret_v->ret); SS_PRINT_LOG("[RSP_START_SENSOR]: sensor_type: %d, sensor_id: %d, status: %d", ret_v->sensor.sensor_type, ret_v->sensor.dev_id, ret_v->ret); #endif break; } case RESP_STOP_SENSOR: { #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct return_value *ret_v = (struct return_value*)cmd->param; SS_PRINT_LOG("[RSP_STOP_SENSOR]: sensor_type: %d, sensor_id: %d, status: %d", ret_v->sensor.sensor_type, ret_v->sensor.dev_id, ret_v->ret); #endif break; } case RESP_SUBSCRIBE_SENSOR_DATA: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct return_value *ret_v = (struct return_value*)cmd->param; ss_send_subscribing_rsp_msg_to_clients(GET_SENSOR_HANDLE(ret_v->sensor.sensor_type, ret_v->sensor.dev_id), ret_v->ret); #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("[RSP_SUBCRIBE_DATA]: sensor_type: %d, sensor_id: %d, status: %d", ret_v->sensor.sensor_type, ret_v->sensor.dev_id, ret_v->ret); #endif break; } case RESP_UNSUBSCRIBE_SENSOR_DATA: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct return_value *ret_v = (struct return_value*)cmd->param; #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("[RSP_USUBCRIBE_DATA]: sensor_type: %d, sensor_id: %d, status: %d", ret_v->sensor.sensor_type, ret_v->sensor.dev_id, ret_v->ret); #endif ss_send_unsubscribing_rsp_msg_to_clients(GET_SENSOR_HANDLE(ret_v->sensor.sensor_type, ret_v->sensor.dev_id), ret_v->ret); break; } case RESP_CALIBRATION: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct resp_calibration *resp_clb = (struct resp_calibration*)cmd->param; if(resp_clb->ret.ret) SS_PRINT_LOG("clb_cmd :%d, clb_type:%d,type: %d, id: %d, status: %d", \ resp_clb->clb_cmd, resp_clb->calibration_type, \ resp_clb->ret.sensor.sensor_type, \ resp_clb->ret.sensor.dev_id, resp_clb->ret.ret); /*Service should ignore this clb_cmd*/ if(resp_clb->clb_cmd == REBOOT_AUTO_CALIBRATION_CMD) break; /*This func will check the data and len*/ ss_send_cal_rsp_and_data_to_clients(GET_SENSOR_HANDLE(resp_clb->ret.sensor.sensor_type, resp_clb->ret.sensor.dev_id), resp_clb->calibration_type, resp_clb->length, resp_clb->calib_params,resp_clb->ret.ret); /*When get the cal data, we should write it into flash.It belongs a coarse tuning *Maybe users will use SET_CALIBRATION_CMD to set a fine tuning*/ if( resp_clb->clb_cmd == GET_CALIBRATION_CMD ){ sensor_clb_write_flash( resp_clb->ret.sensor.sensor_type, resp_clb->ret.sensor.dev_id, resp_clb->calib_params, resp_clb->length); } break; } case RESP_GET_PROPERTY: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct resp_get_property *resp= (struct resp_get_property*)cmd->param; //return rsp and evt ss_send_get_property_data_to_clients(GET_SENSOR_HANDLE(resp->ret.sensor.sensor_type, resp->ret.sensor.dev_id), resp->length, resp->property_params, resp->ret.ret); #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("[RSP_PROP]: sensor_type: %d, sensor_id: %d, status: %d", resp->ret.sensor.sensor_type, resp->ret.sensor.dev_id, resp->ret.ret); #endif break; } case RESP_SET_PROPERTY: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct return_value *ret_v = (struct return_value*)cmd->param; #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("[RSP_PROP]: sensor_type: %d, sensor_id: %d, status: %d", ret_v->sensor.sensor_type, ret_v->sensor.dev_id, ret_v->ret); #endif ss_send_set_property_rsp_to_clients(GET_SENSOR_HANDLE(ret_v->sensor.sensor_type, ret_v->sensor.dev_id), ret_v->ret); break; } case RESP_DEBUG: { break; } case SENSOR_DATA: { struct ia_cmd *cmd = (struct ia_cmd*)p_msg->param; struct sensor_data *data = (struct sensor_data*)cmd->param; #if defined(SENSOR_SERVICE_DEBUG) && (SENSOR_SERVICE_DEBUG == 1) SS_PRINT_LOG("[SENSOR_DATA]: sensor_type: %d, sensor_id: %d, data_len: %d", data->sensor.sensor_type, data->sensor.dev_id, data->data_length); #endif ss_send_subscribing_evt_msg_to_clients(GET_SENSOR_HANDLE(data->sensor.sensor_type, data->sensor.dev_id), 0, data->timestamp, (void*)data->data, data->data_length); break; }default: break; } }