Add functions for converting bluetooth addresses
This commit is contained in:
parent
efd47cd9a1
commit
becaf02ab6
@ -24,6 +24,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h> // malloc, free
|
#include <stdlib.h> // malloc, free
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
@ -223,6 +224,54 @@ error:
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char *
|
||||||
|
dc_bluetooth_addr2str(dc_bluetooth_address_t address, char *str, size_t size)
|
||||||
|
{
|
||||||
|
if (str == NULL || size < DC_BLUETOOTH_SIZE)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
int n = snprintf(str, size, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||||
|
(unsigned char)((address >> 40) & 0xFF),
|
||||||
|
(unsigned char)((address >> 32) & 0xFF),
|
||||||
|
(unsigned char)((address >> 24) & 0xFF),
|
||||||
|
(unsigned char)((address >> 16) & 0xFF),
|
||||||
|
(unsigned char)((address >> 8) & 0xFF),
|
||||||
|
(unsigned char)((address >> 0) & 0xFF));
|
||||||
|
if (n < 0 || (size_t) n >= size)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
dc_bluetooth_address_t
|
||||||
|
dc_bluetooth_str2addr(const char *str)
|
||||||
|
{
|
||||||
|
dc_bluetooth_address_t address = 0;
|
||||||
|
|
||||||
|
if (str == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
unsigned char c = 0;
|
||||||
|
while ((c = *str++) != '\0') {
|
||||||
|
if (c == ':') {
|
||||||
|
continue;
|
||||||
|
} else if (c >= '0' && c <= '9') {
|
||||||
|
c -= '0';
|
||||||
|
} else if (c >= 'A' && c <= 'F') {
|
||||||
|
c -= 'A' - 10;
|
||||||
|
} else if (c >= 'a' && c <= 'f') {
|
||||||
|
c -= 'a' - 10;
|
||||||
|
} else {
|
||||||
|
return 0; /* Invalid character! */
|
||||||
|
}
|
||||||
|
|
||||||
|
address <<= 4;
|
||||||
|
address |= c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
dc_bluetooth_address_t
|
dc_bluetooth_address_t
|
||||||
dc_bluetooth_device_get_address (dc_bluetooth_device_t *device)
|
dc_bluetooth_device_get_address (dc_bluetooth_device_t *device)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,6 +32,12 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum number of bytes (including the terminating null byte) for
|
||||||
|
* formatting a bluetooth address as a string.
|
||||||
|
*/
|
||||||
|
#define DC_BLUETOOTH_SIZE 18
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bluetooth address (48 bits).
|
* Bluetooth address (48 bits).
|
||||||
*/
|
*/
|
||||||
@ -41,6 +47,34 @@ typedef unsigned __int64 dc_bluetooth_address_t;
|
|||||||
typedef unsigned long long dc_bluetooth_address_t;
|
typedef unsigned long long dc_bluetooth_address_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a bluetooth address to a string.
|
||||||
|
*
|
||||||
|
* The bluetooth address is formatted as XX:XX:XX:XX:XX:XX, where each
|
||||||
|
* XX is a hexadecimal number specifying an octet of the 48-bit address.
|
||||||
|
* The minimum size for the buffer is #DC_BLUETOOTH_SIZE bytes.
|
||||||
|
*
|
||||||
|
* @param[in] address A bluetooth address.
|
||||||
|
* @param[in] str The memory buffer to store the result.
|
||||||
|
* @param[in] size The size of the memory buffer.
|
||||||
|
* @returns The null-terminated string on success, or NULL on failure.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
dc_bluetooth_addr2str(dc_bluetooth_address_t address, char *str, size_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a string to a bluetooth address.
|
||||||
|
*
|
||||||
|
* The string is expected to be in the format XX:XX:XX:XX:XX:XX, where
|
||||||
|
* each XX is a hexadecimal number specifying an octet of the 48-bit
|
||||||
|
* address.
|
||||||
|
*
|
||||||
|
* @param[in] address A null-terminated string.
|
||||||
|
* @returns The bluetooth address on success, or zero on failure.
|
||||||
|
*/
|
||||||
|
dc_bluetooth_address_t
|
||||||
|
dc_bluetooth_str2addr(const char *address);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opaque object representing a bluetooth device.
|
* Opaque object representing a bluetooth device.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user