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; }
/* * 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; }