int svc_send_calibration_cmd_to_core(ss_sensor_calibration_req_t *req)
{
    struct ia_cmd *cmd = NULL;
    uint8_t sensor_type = GET_SENSOR_TYPE(req->sensor);
    uint8_t sensor_id = GET_SENSOR_ID(req->sensor);

    uint16_t length = sizeof(struct ia_cmd)+sizeof(struct calibration)+req->data_length;
    cmd = (struct ia_cmd*)balloc(length,NULL);
    struct calibration *ia_param = (struct calibration*)cmd->param;
    ia_param->sensor.sensor_type = sensor_type;
    ia_param->sensor.dev_id = sensor_id;
    ia_param->calibration_type= req->calibration_type;
    ia_param->clb_cmd= req->clb_cmd;
    cmd->cmd_id = CMD_CALIBRATION;
    if((req->clb_cmd) == SET_CALIBRATION_CMD || (req->clb_cmd == REBOOT_AUTO_CALIBRATION_CMD)){
        ia_param->data_length = req->data_length;
        memcpy(ia_param->calib_params, req->value, ia_param->data_length);
        /*write the clb data to falsh*/
        if(ia_param->clb_cmd == SET_CALIBRATION_CMD)
            sensor_clb_write_flash(sensor_type, sensor_id, ia_param->calib_params, ia_param->data_length);
    }else{
        ia_param->data_length = 0;
    }
    return ipc_2core_send(cmd);
}
Ejemplo n.º 2
0
void sensor_core_svc_rsp_handle(struct cfw_message *p_msg, void *p_param)
{
	switch (CFW_MESSAGE_ID(p_msg)) {
	case MSG_ID_CFW_OPEN_SERVICE_RSP:
	{
		cfw_open_conn_rsp_msg_t *cnf = (cfw_open_conn_rsp_msg_t *)p_msg;
		p_sc_service_conn = (cfw_service_conn_t *)cnf->service_conn;
		if (NULL == p_sc_service_conn) {
			SS_PRINT_ERR("Opening Score_svc failed");
			return;
		}
		SS_PRINT_LOG("Opening Score_svc successful");
		if (core_connected_cb) {
			core_connected_cb(core_connected_cb_data);
		}
	} break;
	case MSG_ID_CFW_REGISTER_EVT_RSP:
	{
		SS_PRINT_LOG("Register evt!!");
	} break;
	case MSG_ID_CFW_REGISTER_SVC_AVAIL_EVT_RSP:
		break;
	case MSG_ID_CFW_SVC_AVAIL_EVT:
	{
		uint16_t service_id =
			((cfw_svc_available_evt_msg_t *)p_msg)->service_id;
		SS_PRINT_LOG("AVAIL_EVT: %d", service_id);
		if (ARC_SC_SVC_ID == service_id) {
			cfw_open_service_conn(p_client, ARC_SC_SVC_ID, NULL);
		} else {
			SS_PRINT_LOG("AVAIL_EVT:service_id is error");
		}
	} break;
	case MSG_ID_SENSOR_SERVICE_START_SCANNING_RSP:
	{
		SS_PRINT_LOG("[%s]Scanning rsp", __func__);
	} break;
	case MSG_ID_SENSOR_SERVICE_START_SCANNING_EVT:
	{
		sensor_service_scan_event_t *p_evt =
			(sensor_service_scan_event_t *)p_msg;
		uint8_t sensor_type = (uint8_t)(((uint32_t)p_evt->handle) >> 8);
		uint8_t sensor_id = (uint8_t)(((uint32_t)p_evt->handle) & 0xff);

		send_scan_evt_message_to_clients(sensor_type, sensor_id);
		SS_PRINT_LOG("[%s]Scanning evt", __func__);
	} break;
	case MSG_ID_SENSOR_SERVICE_STOP_SCANNING_RSP:
	{
		SS_PRINT_LOG("[%s]Stop SCANNING RSP", __func__);
	} break;
	case MSG_ID_SENSOR_SERVICE_PAIR_RSP:
	{
		SS_PRINT_LOG("[%s]PAIR RSP", __func__);
	} break;
	case MSG_ID_SENSOR_SERVICE_SUBSCRIBE_DATA_RSP:
	{
		sensor_service_message_general_rsp_t *p_rsp =
			(sensor_service_message_general_rsp_t *)p_msg;
		uint8_t sensor_type = (uint8_t)(((uint32_t)p_rsp->handle) >> 8);
		uint8_t sensor_id = (uint8_t)(((uint32_t)p_rsp->handle) & 0xff);
		SS_PRINT_LOG("SUBSCRIBE_DATA_RSP:type=%d,id=%d,status=%d]", \
			     sensor_type, sensor_id, \
			     p_rsp->status);
		send_sensor_subscribing_rsp_message_to_clients(sensor_type,
							       sensor_id,
							       p_rsp->status);
	} break;
	case MSG_ID_SENSOR_SERVICE_SUBSCRIBE_DATA_EVT:
	{
		sensor_service_subscribe_data_event_t *p_evt =
			(sensor_service_subscribe_data_event_t *)p_msg;
		sensor_service_sensor_data_header_t *p_data_header =
			&p_evt->sensor_data_header;
		uint8_t sensor_type = (uint8_t)(((uint32_t)p_evt->handle) >> 8);
		uint8_t sensor_id = (uint8_t)(((uint32_t)p_evt->handle) & 0xff);
		send_sensor_subscribing_evt_message_to_clients(
			sensor_type, sensor_id, 0,  \
			p_data_header->
			timestamp, \
			(void *)
			p_data_header->data, \
			p_data_header->
			data_length);
	} break;
	case MSG_ID_SENSOR_SERVICE_UNSUBSCRIBE_DATA_RSP:
	{
		SS_PRINT_LOG("[%s]UNSUBSCRIBED RSP", __func__);
		ss_sensor_unsubscribe_data_rsp_t *p_rsp =
			(ss_sensor_unsubscribe_data_rsp_t *)p_msg;
		uint8_t sensor_type = GET_SENSOR_TYPE(p_rsp->handle);
		uint8_t sensor_id = GET_SENSOR_ID(p_rsp->handle);
		send_sensor_unsubscribing_rsp_message_to_clients(sensor_type,
								 sensor_id,
								 p_rsp->status);
	} break;
	case MSG_ID_SENSOR_SERVICE_UNPAIR_RSP:
		break;
	case MSG_ID_SS_SENSOR_UNLINK_EVT:
		break;
	default:
		SS_PRINT_ERR("[%s]unhandled msg %d", __func__,
			     CFW_MESSAGE_ID(p_msg));
		break;
	}
	cfw_msg_free(p_msg);
}