Beispiel #1
0
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;

	}
}
Beispiel #2
0
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;
        }
}