Exemplo n.º 1
0
int qmi_set_wms_send_from_memory_storage_request(struct qmi_msg *msg, struct qmi_wms_send_from_memory_storage_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0042);

    if (req->set.information) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.information.storage_type, 1);
        put_tlv_var(uint32_t, cpu_to_le32(req->data.information.memory_index), 4);
        put_tlv_var(uint8_t, req->data.information.message_mode, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x01, ofs, buf);
    }

    if (req->set.sms_on_ims) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.sms_on_ims, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x10, ofs, buf);
    }

    return 0;
}
Exemplo n.º 2
0
int qmi_set_wms_modify_tag_request(struct qmi_msg *msg, struct qmi_wms_modify_tag_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0023);

    if (req->set.message_tag) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.message_tag.storage_type, 1);
        put_tlv_var(uint32_t, cpu_to_le32(req->data.message_tag.memory_index), 4);
        put_tlv_var(uint8_t, req->data.message_tag.message_tag, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x01, ofs, buf);
    }

    if (req->set.message_mode) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.message_mode, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x10, ofs, buf);
    }

    return 0;
}
Exemplo n.º 3
0
int qmi_parse_wms_get_message_protocol_response(struct qmi_msg *msg, struct qmi_wms_get_message_protocol_response *res)
{
    void *tlv_buf = &msg->svc.tlv;
    int tlv_len = le16_to_cpu(msg->svc.tlv_len);
    struct tlv *tlv;
    int i;

    memset(res, 0, sizeof(*res));

    __qmi_alloc_reset();
    while ((tlv = tlv_get_next(&tlv_buf, &tlv_len)) != NULL) {
        unsigned int cur_tlv_len = le16_to_cpu(tlv->len);
        unsigned int ofs = 0;

        switch(tlv->type) {
        case 0x01:
            qmi_set(res, message_protocol, *(uint8_t *) get_next(1));
            break;

        default:
            break;
        }
    }

    return 0;

error_len:
    fprintf(stderr, "%s: Invalid TLV length in message, tlv=0x%02x, len=%d\n",
            __func__, tlv->type, le16_to_cpu(tlv->len));
    return QMI_ERROR_INVALID_DATA;
}
Exemplo n.º 4
0
int qmi_parse_wms_send_from_memory_storage_response(struct qmi_msg *msg, struct qmi_wms_send_from_memory_storage_response *res)
{
    void *tlv_buf = &msg->svc.tlv;
    int tlv_len = le16_to_cpu(msg->svc.tlv_len);
    struct tlv *tlv;
    int i;

    memset(res, 0, sizeof(*res));

    __qmi_alloc_reset();
    while ((tlv = tlv_get_next(&tlv_buf, &tlv_len)) != NULL) {
        unsigned int cur_tlv_len = le16_to_cpu(tlv->len);
        unsigned int ofs = 0;

        switch(tlv->type) {
        case 0x10:
            qmi_set(res, message_id, le16_to_cpu(*(uint16_t *) get_next(2)));
            break;

        case 0x11:
            qmi_set(res, cdma_cause_code, le16_to_cpu(*(uint16_t *) get_next(2)));
            break;

        case 0x12:
            qmi_set(res, cdma_error_class, *(uint8_t *) get_next(1));
            break;

        case 0x13:
            res->set.gsm_wcdma_cause_info = 1;
            res->data.gsm_wcdma_cause_info.rp_cause = le16_to_cpu(*(uint16_t *) get_next(2));
            res->data.gsm_wcdma_cause_info.tp_cause = *(uint8_t *) get_next(1);
            break;

        case 0x14:
            qmi_set(res, message_delivery_failure_type, *(uint8_t *) get_next(1));
            break;

        default:
            break;
        }
    }

    return 0;

error_len:
    fprintf(stderr, "%s: Invalid TLV length in message, tlv=0x%02x, len=%d\n",
            __func__, tlv->type, le16_to_cpu(tlv->len));
    return QMI_ERROR_INVALID_DATA;
}
Exemplo n.º 5
0
int qmi_set_wms_set_routes_request(struct qmi_msg *msg, struct qmi_wms_set_routes_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0032);

    if (req->data.route_list) {
        void *buf;
        int ofs;
        int i;

        __qmi_alloc_reset();
        put_tlv_var(uint16_t, cpu_to_le16(req->data.route_list_n), 2);
        for (i = 0; i < req->data.route_list_n; i++) {
            put_tlv_var(uint8_t, req->data.route_list[i].message_type, 1);
            put_tlv_var(uint8_t, req->data.route_list[i].message_class, 1);
            put_tlv_var(uint8_t, req->data.route_list[i].storage, 1);
            put_tlv_var(uint8_t, req->data.route_list[i].receipt_action, 1);
        }

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x01, ofs, buf);
    }

    if (req->set.transfer_status_report) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.transfer_status_report, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x10, ofs, buf);
    }

    return 0;
}
Exemplo n.º 6
0
int qmi_set_wms_set_event_report_request(struct qmi_msg *msg, struct qmi_wms_set_event_report_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0001);

    if (req->set.new_mt_message_indicator) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.new_mt_message_indicator.report, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x10, ofs, buf);
    }

    return 0;
}
Exemplo n.º 7
0
int qmi_set_pds_set_auto_tracking_state_request(struct qmi_msg *msg, struct qmi_pds_set_auto_tracking_state_request *req)
{
	qmi_init_request_message(msg, QMI_SERVICE_PDS);
	msg->svc.message = cpu_to_le16(0x0031);

	if (req->set.state) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.state.auto_tracking_state, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x01, ofs, buf);
	}

	return 0;
}
Exemplo n.º 8
0
int qmi_parse_wms_get_routes_response(struct qmi_msg *msg, struct qmi_wms_get_routes_response *res)
{
    void *tlv_buf = &msg->svc.tlv;
    int tlv_len = le16_to_cpu(msg->svc.tlv_len);
    struct tlv *tlv;
    int i;

    memset(res, 0, sizeof(*res));

    __qmi_alloc_reset();
    while ((tlv = tlv_get_next(&tlv_buf, &tlv_len)) != NULL) {
        unsigned int cur_tlv_len = le16_to_cpu(tlv->len);
        unsigned int ofs = 0;

        switch(tlv->type) {
        case 0x01:
            i = le16_to_cpu(*(uint16_t *) get_next(2));
            res->data.route_list = __qmi_alloc_static(i);
            while(i-- > 0) {
                res->data.route_list[res->data.route_list_n].message_type = *(uint8_t *) get_next(1);
                res->data.route_list[res->data.route_list_n].message_class = *(uint8_t *) get_next(1);
                res->data.route_list[res->data.route_list_n].storage = *(uint8_t *) get_next(1);
                res->data.route_list[res->data.route_list_n].receipt_action = *(uint8_t *) get_next(1);
                res->data.route_list_n++;
            }

            break;

        case 0x10:
            qmi_set(res, transfer_status_report, *(uint8_t *) get_next(1));
            break;

        default:
            break;
        }
    }

    return 0;

error_len:
    fprintf(stderr, "%s: Invalid TLV length in message, tlv=0x%02x, len=%d\n",
            __func__, tlv->type, le16_to_cpu(tlv->len));
    return QMI_ERROR_INVALID_DATA;
}
Exemplo n.º 9
0
int qmi_parse_wms_raw_read_response(struct qmi_msg *msg, struct qmi_wms_raw_read_response *res)
{
    void *tlv_buf = &msg->svc.tlv;
    int tlv_len = le16_to_cpu(msg->svc.tlv_len);
    struct tlv *tlv;
    int i;

    memset(res, 0, sizeof(*res));

    __qmi_alloc_reset();
    while ((tlv = tlv_get_next(&tlv_buf, &tlv_len)) != NULL) {
        unsigned int cur_tlv_len = le16_to_cpu(tlv->len);
        unsigned int ofs = 0;

        switch(tlv->type) {
        case 0x01:
            res->set.raw_message_data = 1;
            res->data.raw_message_data.message_tag = *(uint8_t *) get_next(1);
            res->data.raw_message_data.format = *(uint8_t *) get_next(1);
            i = le16_to_cpu(*(uint16_t *) get_next(2));
            res->data.raw_message_data.raw_data = __qmi_alloc_static(i);
            while(i-- > 0) {
                res->data.raw_message_data.raw_data[res->data.raw_message_data.raw_data_n] = *(uint8_t *) get_next(1);
                res->data.raw_message_data.raw_data_n++;
            }
            break;

        default:
            break;
        }
    }

    return 0;

error_len:
    fprintf(stderr, "%s: Invalid TLV length in message, tlv=0x%02x, len=%d\n",
            __func__, tlv->type, le16_to_cpu(tlv->len));
    return QMI_ERROR_INVALID_DATA;
}
Exemplo n.º 10
0
int qmi_parse_pds_get_gps_service_state_response(struct qmi_msg *msg, struct qmi_pds_get_gps_service_state_response *res)
{
	void *tlv_buf = &msg->svc.tlv;
	unsigned int tlv_len = le16_to_cpu(msg->svc.tlv_len);
	struct tlv *tlv;
	int i;
	uint32_t found[1] = {};

	memset(res, 0, sizeof(*res));

	__qmi_alloc_reset();
	while ((tlv = tlv_get_next(&tlv_buf, &tlv_len)) != NULL) {
		unsigned int cur_tlv_len = le16_to_cpu(tlv->len);
		unsigned int ofs = 0;

		switch(tlv->type) {
		case 0x01:
			if (found[0] & (1 << 1))
				break;

			found[0] |= (1 << 1);
			res->set.state = 1;
			res->data.state.gps_service_state = *(uint8_t *) get_next(1);
			res->data.state.tracking_session_state = *(uint8_t *) get_next(1);
			break;

		default:
			break;
		}
	}

	return 0;

error_len:
	fprintf(stderr, "%s: Invalid TLV length in message, tlv=0x%02x, len=%d\n",
	        __func__, tlv->type, le16_to_cpu(tlv->len));
	return QMI_ERROR_INVALID_DATA;
}
Exemplo n.º 11
0
int qmi_set_wms_raw_write_request(struct qmi_msg *msg, struct qmi_wms_raw_write_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0021);

    if (req->set.raw_message_data) {
        void *buf;
        int ofs;
        int i;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.raw_message_data.storage_type, 1);
        put_tlv_var(uint8_t, req->data.raw_message_data.format, 1);
        put_tlv_var(uint16_t, cpu_to_le16(req->data.raw_message_data.raw_data_n), 2);
        for (i = 0; i < req->data.raw_message_data.raw_data_n; i++) {
            put_tlv_var(uint8_t, req->data.raw_message_data.raw_data[i], 1);
        }

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x01, ofs, buf);
    }

    return 0;
}
Exemplo n.º 12
0
int qmi_set_wms_raw_send_request(struct qmi_msg *msg, struct qmi_wms_raw_send_request *req)
{
    qmi_init_request_message(msg, QMI_SERVICE_WMS);
    msg->svc.message = cpu_to_le16(0x0020);

    if (req->set.raw_message_data) {
        void *buf;
        int ofs;
        int i;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.raw_message_data.format, 1);
        put_tlv_var(uint16_t, cpu_to_le16(req->data.raw_message_data.raw_data_n), 2);
        for (i = 0; i < req->data.raw_message_data.raw_data_n; i++) {
            put_tlv_var(uint8_t, req->data.raw_message_data.raw_data[i], 1);
        }

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x01, ofs, buf);
    }

    if (req->set.cdma_force_on_dc) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.cdma_force_on_dc.force, 1);
        put_tlv_var(uint8_t, req->data.cdma_force_on_dc.service_option, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x10, ofs, buf);
    }

    if (req->set.cdma_follow_on_dc) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.cdma_follow_on_dc.follow, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x11, ofs, buf);
    }

    if (req->set.gsm_wcdma_link_timer) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.gsm_wcdma_link_timer, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x12, ofs, buf);
    }

    if (req->set.sms_on_ims) {
        void *buf;
        int ofs;

        __qmi_alloc_reset();
        put_tlv_var(uint8_t, req->data.sms_on_ims, 1);

        buf = __qmi_get_buf(&ofs);
        tlv_new(msg, 0x13, ofs, buf);
    }

    return 0;
}
Exemplo n.º 13
0
int qmi_set_pds_set_event_report_request(struct qmi_msg *msg, struct qmi_pds_set_event_report_request *req)
{
	qmi_init_request_message(msg, QMI_SERVICE_PDS);
	msg->svc.message = cpu_to_le16(0x0001);

	if (req->set.nmea_position_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.nmea_position_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x10, ofs, buf);
	}

	if (req->set.extended_nmea_position_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.extended_nmea_position_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x11, ofs, buf);
	}

	if (req->set.parsed_position_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.parsed_position_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x12, ofs, buf);
	}

	if (req->set.external_xtra_data_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.external_xtra_data_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x13, ofs, buf);
	}

	if (req->set.external_time_injection_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.external_time_injection_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x14, ofs, buf);
	}

	if (req->set.external_wifi_position_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.external_wifi_position_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x15, ofs, buf);
	}

	if (req->set.satellite_information_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.satellite_information_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x16, ofs, buf);
	}

	if (req->set.vx_network_initiated_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.vx_network_initiated_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x17, ofs, buf);
	}

	if (req->set.supl_network_initiated_prompt_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.supl_network_initiated_prompt_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x18, ofs, buf);
	}

	if (req->set.umts_cp_network_initiated_prompt_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.umts_cp_network_initiated_prompt_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x19, ofs, buf);
	}

	if (req->set.pds_comm_event_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.pds_comm_event_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1A, ofs, buf);
	}

	if (req->set.accelerometer_data_streaming_ready_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.accelerometer_data_streaming_ready_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1B, ofs, buf);
	}

	if (req->set.gyro_data_streaming_ready_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.gyro_data_streaming_ready_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1C, ofs, buf);
	}

	if (req->set.time_sync_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.time_sync_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1D, ofs, buf);
	}

	if (req->set.position_reliability_indicator_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.position_reliability_indicator_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1E, ofs, buf);
	}

	if (req->set.sensor_data_usage_indicator_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.sensor_data_usage_indicator_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x1F, ofs, buf);
	}

	if (req->set.time_source_information_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.time_source_information_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x20, ofs, buf);
	}

	if (req->set.heading_uncertainty_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.heading_uncertainty_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x21, ofs, buf);
	}

	if (req->set.nmea_debug_strings_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.nmea_debug_strings_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x22, ofs, buf);
	}

	if (req->set.extended_external_xtra_data_request_reporting) {
		void *buf;
		unsigned int ofs;

		__qmi_alloc_reset();
		put_tlv_var(uint8_t, req->data.extended_external_xtra_data_request_reporting, 1);

		buf = __qmi_get_buf(&ofs);
		tlv_new(msg, 0x23, ofs, buf);
	}

	return 0;
}