Ejemplo n.º 1
0
Archivo: osc_mem.c Proyecto: CNMAT/libo
t_osc_err osc_mem_encodeByteorder(unsigned char typetag, char *data, char **out)
{
	size_t size = osc_sizeof(typetag, data);
	if(!osc_mem_shouldByteswap(typetag)){
		memcpy(*out, data, size);
		return OSC_ERR_NONE;
	}
	char tmp[size];
	switch(size){
	case 1:
		break;
	case 2:
		*((uint16_t *)tmp) = hton16(*((uint16_t *)data));
		break;
	case 4:
		*((uint32_t *)tmp) = hton32(*((uint32_t *)data));
		break;
	case 8:
		*((uint64_t *)tmp) = hton64(*((uint64_t *)data));
		break;	
	case 16:
		*((uint128_t *)tmp) = hton128(*((uint128_t *)data));
		break;
	}
	memcpy(*out, tmp, size);
	return OSC_ERR_NONE;
}
Ejemplo n.º 2
0
/*
 * convert the UUID to string, copying a maximum of n characters.
 */
int bt_uuid_to_string(const bt_uuid_t *uuid, char *str, size_t n)
{
	if (!uuid) {
		snprintf(str, n, "NULL");
		return -EINVAL;
	}

	switch (uuid->type) {
	case BT_UUID16:
		snprintf(str, n, "%.4x", uuid->value.u16);
		break;
	case BT_UUID32:
		snprintf(str, n, "%.8x", uuid->value.u32);
		break;
	case BT_UUID128: {
		unsigned int   data0;
		unsigned short data1;
		unsigned short data2;
		unsigned short data3;
		unsigned int   data4;
		unsigned short data5;

		uint128_t nvalue;
		const uint8_t *data = (uint8_t *) &nvalue;

		hton128(&uuid->value.u128, &nvalue);

		memcpy(&data0, &data[0], 4);
		memcpy(&data1, &data[4], 2);
		memcpy(&data2, &data[6], 2);
		memcpy(&data3, &data[8], 2);
		memcpy(&data4, &data[10], 4);
		memcpy(&data5, &data[14], 2);

		snprintf(str, n, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x",
				ntohl(data0), ntohs(data1),
				ntohs(data2), ntohs(data3),
				ntohl(data4), ntohs(data5));
		}
		break;
	default:
		snprintf(str, n, "Type of UUID (%x) unknown.", uuid->type);
		return -EINVAL;	/* Enum type of UUID not set */
	}

	return 0;
}