int ss_sensor_subscribe_data(cfw_service_conn_t *p_service_conn, void *p_priv, ss_sensor_t sensor,
                             uint8_t *data_type, uint8_t data_type_nr, uint16_t sampling_interval,
                             uint16_t reporting_interval)
{
    ss_sensor_subscribe_data_req_t *p_msg;

    if (data_type_nr == 0) {
        return -1;
    }
    /* Allocate sensor subscribing data request message */
    p_msg = (ss_sensor_subscribe_data_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_SUBSCRIBE_DATA_REQ, (sizeof(*p_msg) + (data_type_nr - 1) *
                                                          sizeof(uint8_t)), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor = sensor;
    p_msg->data_type_nr = data_type_nr;
    p_msg->sampling_interval = sampling_interval;
    p_msg->reporting_interval = reporting_interval;

    /* Fill Request Parameter */
    memcpy(p_msg->data_type ,data_type ,sizeof(uint8_t) * data_type_nr);

    /* Send the message */
    return cfw_send_message(p_msg);
}
Beispiel #2
0
void sensor_service_set_calibration(cfw_service_conn_t *p_service_conn,
				    void *p_priv,
				    sensor_service_t sensor,
				    uint8_t calibration_type, uint8_t len,
				    uint8_t *value)
{
	ss_sensor_calibration_req_t *p_msg;

	/* Allocate sensor setting calibration request message */
	p_msg = (ss_sensor_calibration_req_t *)cfw_alloc_message_for_service(
		p_service_conn,
		MSG_ID_SS_SENSOR_CALIBRATION_REQ,
		sizeof(*p_msg) + len, p_priv);
	if (p_msg == NULL) {
		return;
	}
	p_msg->sensor = sensor;
	p_msg->calibration_type = calibration_type;
	p_msg->clb_cmd = SET_CALIBRATION_CMD;
	p_msg->data_length = len;
	/* Fill cal param*/
	memcpy(p_msg->value, value, len);

	/* Send the message */
	cfw_send_message(p_msg);
}
Beispiel #3
0
int ss_send_sensor_cmd(cfw_service_conn_t *p_service_conn, void *p_priv,
		       sensor_service_t sensor, uint32_t cmd_id,
		       cmd_parameter_t parameter)
{
	ss_send_sensor_cmd_req_t *p_msg;

	int msg_size = parameter.length + sizeof(*p_msg) +
		       sizeof(parameter.length);

	/* Allocate sending sensor cmd request message */
	p_msg = (ss_send_sensor_cmd_req_t *)cfw_alloc_message_for_service(
		p_service_conn,
		MSG_ID_SS_SEND_SENSOR_CMD_REQ,
		msg_size, p_priv);
	if (p_msg == NULL) {
		return -1;
	}
	/* Fill Request Parameter */
	p_msg->sensor = sensor;
	p_msg->cmd_id = cmd_id;
	p_msg->parameter = parameter;

	/* Send the message */
	return cfw_send_message(p_msg);
}
int ble_gatts_add_descriptor(svc_client_handle_t * p_svc_handle,
			     const struct ble_gatts_descriptor * p_desc,
			     ble_gatts_add_desc_cback_t cback,
			     void * p_priv)
{
	struct ble_gatts_add_desc_req_msg *req;
	uint8_t * p;
	int data_len = sizeof(struct ble_gatts_add_desc_req_msg);

	/* Sanity check */
	if (!p_desc || !p_desc->length || !p_desc->p_value || !p_desc->p_uuid)
		return E_OS_ERR;

	// compute the variable length part of the message
	data_len += ble_sizeof_bt_uuid(p_desc->p_uuid);
	data_len += p_desc->length;

	req = (struct ble_gatts_add_desc_req_msg *)
	    cfw_alloc_message_for_service(p_svc_handle,
			    MSG_ID_BLE_GATTS_ADD_DESCRIPTOR_REQ,
			    data_len, p_priv);
	req->cback = cback;
	p = req->data;
	p = ble_encode_bt_uuid(p_desc->p_uuid, p);
	req->length = p_desc->length;
	req->perms = p_desc->perms;
	memcpy(p, p_desc->p_value, p_desc->length);

	return cfw_send_message(req);
}
Beispiel #5
0
void sensor_service_unsubscribe_data(cfw_service_conn_t *	p_service_conn,
				     void *			p_priv,
				     sensor_service_t		sensor,
				     uint8_t *			data_type,
				     uint8_t			data_type_nr)
{
	ss_sensor_unsubscribe_data_req_t *p_msg;


	if (data_type_nr == 0) {
		return;
	}
	/* Allocate sensor unsubscribing data request message */
	p_msg =
		(ss_sensor_unsubscribe_data_req_t *)
		cfw_alloc_message_for_service(
			p_service_conn,
			MSG_ID_SS_SENSOR_UNSUBSCRIBE_DATA_REQ,
			sizeof(*p_msg) + (data_type_nr - 1) * sizeof(uint8_t),
			p_priv);
	if (p_msg == NULL) {
		return;
	}
	/* Fill Request Parameter */
	p_msg->sensor = sensor;
	p_msg->data_type_nr = data_type_nr;
	/* Fill Request Parammeter */
	memcpy(p_msg->data_type, data_type, sizeof(uint8_t) * data_type_nr);

	/* Send the message */
	cfw_send_message(p_msg);
}
int ble_gatts_remove_service(svc_client_handle_t * p_svc_handle,
			     uint16_t svc_handle,
			     void *p_priv)
{
	struct cfw_message *msg = cfw_alloc_message_for_service(p_svc_handle,
								MSG_ID_BLE_GATTS_REMOVE_SERVICE_REQ,
								sizeof(*msg),
								p_priv);
	return cfw_send_message(msg);
}
int ble_gatts_read_conn_attributes(svc_client_handle_t * p_svc_handle,
				   uint16_t conn_handle,
				   void *p_priv)
{
	struct cfw_message *msg = cfw_alloc_message_for_service(p_svc_handle,
								MSG_ID_BLE_GATTS_RD_CONN_ATTRIBUTES_REQ,
								sizeof(*msg),
								p_priv);
	return cfw_send_message(msg);
}
int ble_gatts_add_included_svc(svc_client_handle_t * p_svc_handle,
			       uint16_t svc_handle,
			       uint16_t svc_handle_to_include,
			       void *p_priv)
{
	struct cfw_message *msg = cfw_alloc_message_for_service(p_svc_handle,
								MSG_ID_BLE_GATTS_ADD_INCL_SVC_REQ,
								sizeof(*msg),
								p_priv);
	return cfw_send_message(msg);
}
int ble_gatts_send_svc_changed(svc_client_handle_t * p_svc_handle,
			       uint16_t conn_handle,
			       uint16_t start_handle,
			       uint16_t end_handle,
			       void *p_priv)
{
	struct cfw_message *msg = cfw_alloc_message_for_service(p_svc_handle,
								MSG_ID_BLE_GATTS_INDICATE_SERVICE_CHANGE_REQ,
								sizeof(*msg),
								p_priv);
	return cfw_send_message(msg);
}
int ble_gatts_get_attribute_value(svc_client_handle_t * p_svc_handle,
				 uint16_t value_handle,
				 uint16_t len,
				 uint16_t offset,
				 void *p_priv)
{
	struct cfw_message *msg =  cfw_alloc_message_for_service(p_svc_handle,
			MSG_ID_BLE_GATTS_GET_ATTRIBUTE_VALUE_REQ, sizeof(*msg),
			p_priv);

	return cfw_send_message(msg);
}
int ss_sensor_get_property(cfw_service_conn_t *p_service_conn, void *p_priv,
                            ss_sensor_t sensor)
{
    ss_sensor_get_property_req_t *p_msg;

    /* Allocate sensor setting calibration request message */
    p_msg = (ss_sensor_get_property_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_GET_PROPERTY_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    p_msg->sensor = sensor;
    /* Send the message */
    return cfw_send_message(p_msg);
}
int ble_gatts_add_characteristic(svc_client_handle_t * p_svc_handle,
				 uint16_t svc_handle,
				 const struct ble_gatts_characteristic * p_char,
				 ble_gatts_add_char_cback_t cback,
				 void *p_priv)
{
	struct ble_gatts_add_char_req_msg *msg;
	int data_len = sizeof(struct ble_gatts_add_char_req_msg);
	uint8_t * p;

	// Sanity check
	if (!p_char || !p_char->p_uuid)
		return E_OS_ERR;

	// compute the variable length part of the message
	data_len += ble_sizeof_bt_uuid(p_char->p_uuid);
	data_len += p_char->init_len;
	if (p_char->p_user_desc)
		data_len += p_char->p_user_desc->len;
	if (p_char->p_char_pf_desc)
		data_len += sizeof(struct ble_gatt_pf_desc);

	msg = (struct ble_gatts_add_char_req_msg *)
	    cfw_alloc_message_for_service(p_svc_handle,
					  MSG_ID_BLE_GATTS_ADD_CHARACTERISTIC_REQ,
					  data_len, p_priv);
	msg->cback = cback;
	p = msg->data;
	p = ble_encode_bt_uuid(p_char->p_uuid, p);
	msg->svc_handle = svc_handle;
	msg->perms = p_char->perms;
	msg->props = p_char->props;
	msg->max_len = p_char->max_len;
	msg->init_len = p_char->init_len;
	memcpy(p, p_char->p_value, p_char->init_len);
	p += p_char->init_len;
	if (p_char->p_user_desc) {
		msg->ud_len = p_char->p_user_desc->len;
		memcpy(p, p_char->p_user_desc->buffer, p_char->p_user_desc->len);
		p += p_char->p_user_desc->len;
	}
	if (p_char->p_char_pf_desc) {
		msg->pf_len = sizeof(struct ble_gatt_pf_desc);
		memcpy(p, p_char->p_char_pf_desc, msg->pf_len);
		p += msg->pf_len;
	}
	return cfw_send_message(msg);
}
int ss_stop_sensor_scanning(cfw_service_conn_t *p_service_conn, void *p_priv, uint32_t sensor_type_bit_map)
{
    ss_stop_sensor_scanning_req_t *p_msg;

    /* Allocate stopping sensor scanning request message */
    p_msg = (ss_stop_sensor_scanning_req_t *) cfw_alloc_message_for_service(p_service_conn,
                                MSG_ID_SS_STOP_SENSOR_SCANNING_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor_type_bit_map = sensor_type_bit_map;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_stop(cfw_service_conn_t *p_service_conn, void *p_priv, ss_sensor_t sensor)
{
    ss_sensor_stop_req_t *p_msg;

    /* Allocate sensor stopping request message */
    p_msg = (ss_sensor_stop_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_STOP_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor = sensor;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_pair(cfw_service_conn_t *p_service_conn, void *p_priv, ss_pair_param_t *p_pair_param)
{
    ss_sensor_pair_req_t *p_msg;

    /* Allocate sensor pairing request message */
    p_msg = (ss_sensor_pair_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_PAIR_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->pair_param = *p_pair_param;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_get_product_id(cfw_service_conn_t *p_service_conn, void *p_priv,
                                            ss_sensor_t sensor)
{
    ss_sensor_get_product_id_req_t *p_msg;

    /* Allocate sensor getting product id request message */
    p_msg = (ss_sensor_get_product_id_req_t *) cfw_alloc_message_for_service(p_service_conn,
                                MSG_ID_SS_SENSOR_GET_PRODUCT_ID_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor= sensor;
    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_set_mode(cfw_service_conn_t *p_service_conn, void *p_priv, uint8_t tether_mode)
{
    ss_set_mode_req_t *p_msg;

    /* Allocate sensor setting calibration request message */
    p_msg = (ss_set_mode_req_t *) cfw_alloc_message_for_service(p_service_conn,
            MSG_ID_SS_SET_MODE_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->tether_mode = tether_mode;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_get_serial_number(cfw_service_conn_t *p_service_conn, void *p_priv,
                                        ss_sensor_t sensor)
{
    ss_sensor_get_serial_number_req_t *p_msg;

    /* Allocate sensor getting serial number request message */
    p_msg = (ss_sensor_get_serial_number_req_t *) cfw_alloc_message_for_service(p_service_conn,
                                MSG_ID_SS_SENSOR_GET_SERIAL_NUMBER_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor= sensor;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_get_hw_version(cfw_service_conn_t *p_service_conn, void *p_priv,
                                        ss_sensor_t sensor)
{
    ss_sensor_get_hw_version_req_t *p_msg;

    /* Allocate sensor getting hardware version request message */
    p_msg = (ss_sensor_get_hw_version_req_t *) cfw_alloc_message_for_service(p_service_conn,
                                MSG_ID_SS_SENSOR_GET_HW_VERSION_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor= sensor;

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ble_gatts_add_service(svc_client_handle_t * p_svc_handle,
			  const struct bt_uuid * p_uuid,
			  uint8_t type,
			  ble_gatts_add_svc_cback_t cback,
			  void *p_priv)
{
	struct ble_gatts_add_service_req_msg *msg =
	    (struct ble_gatts_add_service_req_msg *)
	    cfw_alloc_message_for_service(p_svc_handle,
					  MSG_ID_BLE_GATTS_ADD_SERVICE_REQ,
					  sizeof(*msg) + ble_sizeof_bt_uuid(p_uuid),
					  p_priv);
	msg->cback = cback;
	msg->type = type;
	uint8_t *p = (uint8_t *)&msg->data;
	ble_encode_bt_uuid(p_uuid, p);
	return cfw_send_message(msg);
}
int ss_sensor_opt_calibration(cfw_service_conn_t *p_service_conn, void *p_priv,
                                    ss_sensor_t sensor, uint8_t clb_cmd, uint8_t calibration_type)
{
    ss_sensor_calibration_req_t *p_msg;

    /* Allocate sensor getting calibration capability request message */
    p_msg = (ss_sensor_calibration_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_CALIBRATION_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor = sensor;
    p_msg->clb_cmd= clb_cmd;
    p_msg->calibration_type = calibration_type;
    /* Send the message */
    return cfw_send_message(p_msg);
}
int ss_sensor_unsubscribe_status(cfw_service_conn_t *p_service_conn, void *p_priv,
                                            ss_sensor_t sensor, uint8_t status_type)
{
    ss_sensor_unsubscribe_status_req_t *p_msg;

    /* Allocate sensor unsubscribing status request message */
    p_msg = (ss_sensor_unsubscribe_status_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_UNSUBSCRIBE_STATUS_REQ, sizeof(*p_msg), p_priv);
    if (p_msg == NULL) {
        return -1;
    }
    /* Fill Request Parameter */
    p_msg->sensor = sensor;
    p_msg->status_type = status_type;

    /* Send the message */
    return cfw_send_message(p_msg);
}
Beispiel #23
0
int ss_release_sensor(cfw_service_conn_t *p_service_conn, void *p_priv,
		      sensor_service_t sensor)
{
	ss_release_sensor_req_t *p_msg;

	/* Allocate releasing sensor request message */
	p_msg = (ss_release_sensor_req_t *)cfw_alloc_message_for_service(
		p_service_conn,
		MSG_ID_SS_RELEASE_SENSOR_REQ,
		sizeof(*p_msg), p_priv);
	if (p_msg == NULL) {
		return -1;
	}
	/* Fill Request Parameter */
	p_msg->sensor = sensor;

	/* Send the message */
	return cfw_send_message(p_msg);
}
int ss_sensor_set_property(cfw_service_conn_t *p_service_conn, void *p_priv,
                            ss_sensor_t sensor,  uint8_t len, uint8_t *value)
{
    ss_sensor_set_property_req_t *p_msg;

    /* Allocate sensor setting calibration request message */
    p_msg = (ss_sensor_set_property_req_t *) cfw_alloc_message_for_service(p_service_conn,
                    MSG_ID_SS_SENSOR_SET_PROPERTY_REQ, sizeof(*p_msg)+len, p_priv);
    if ((p_msg == NULL) || (value == NULL) || (len == 0)) {
        return -1;
    }
    p_msg->sensor = sensor;
    p_msg->data_length= len;
    /* Fill cal param*/
    memcpy(p_msg->value, value, len);

    /* Send the message */
    return cfw_send_message(p_msg);
}
int ble_gatts_send_ind(svc_client_handle_t * p_svc_handle,
			     uint16_t conn_handle,
			     const ble_gatts_ind_params_t * p_params,
			     ble_gatts_notif_ind_cback_t cback,
			     void *p_priv)
{
	struct ble_gatts_send_notif_ind_msg *msg =
			(struct ble_gatts_send_notif_ind_msg *)
			cfw_alloc_message_for_service(p_svc_handle,
					MSG_ID_BLE_GATTS_SEND_IND_REQ,
					sizeof(*msg) + p_params->len,
					p_priv);

	msg->cback = cback;
	msg->params.conn_handle = conn_handle;
	msg->params.val_handle = p_params->val_handle;
	msg->params.len = p_params->len;
	msg->params.offset = p_params->offset;
	memcpy(msg->params.data, p_params->p_data, msg->params.len);
	return cfw_send_message(msg);
}
Beispiel #26
0
static void quark_svc_sensor_subscribe_req_handler(
	ss_sensor_subscribe_data_req_t *p_req,
	void *				param)
{
	ss_sensor_subscribe_data_req_t *p_msg;

	p_msg = (ss_sensor_subscribe_data_req_t *)cfw_alloc_message_for_service(
		p_sc_service_conn,
		MSG_ID_SS_SENSOR_SUBSCRIBE_DATA_REQ,
		sizeof(*p_msg), NULL);
	if (p_msg == NULL) {
		SS_PRINT_ERR("err p_req msg");
		force_panic();
	}
	/* Fill Request Parameter */
	p_msg->sensor = p_req->sensor;
	p_msg->data_type = p_req->data_type;
	p_msg->sampling_interval = p_req->sampling_interval;
	p_msg->reporting_interval = p_req->reporting_interval;
	/* Send the message */
	cfw_send_message(p_msg);
}
int ble_gatts_set_attribute_value(svc_client_handle_t * p_svc_handle,
				 uint16_t value_handle,
				 uint16_t len,
				 const uint8_t * p_value,
				 uint16_t offset,
				 void *p_priv)
{
	int i;
	struct ble_gatts_set_attribute_value_msg *msg =
	    (struct ble_gatts_set_attribute_value_msg *)
	    cfw_alloc_message_for_service(p_svc_handle,
					  MSG_ID_BLE_GATTS_SET_ATTRIBUTE_VALUE_REQ,
					  sizeof(*msg)+len,
					  p_priv);
	msg->value_handle = value_handle;
	msg->len = len;
	msg->offset = offset;

	for (i = 0; i < len; i++)
		msg->data[i] = p_value[i];
	return cfw_send_message(msg);
}