util.h: use functions instead of static inline/macros. sscan_bd_addr -> sscanf_bd_addr

This commit is contained in:
Matthias Ringwald 2016-02-11 14:19:26 +01:00
parent cbabbca4a7
commit 73988a59ce
9 changed files with 101 additions and 43 deletions

View File

@ -195,7 +195,7 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
int main (int argc, const char * argv[]){
// handle remote addr
if (argc > 1){
if (sscan_bd_addr((uint8_t *)argv[1], addr)){
if (sscanf_bd_addr((uint8_t *)argv[1], addr)){
serverMode = 0;
prepare_packet();
}

View File

@ -138,7 +138,7 @@ int main (int argc, const char * argv[]){
while (arg < argc) {
if(!strcmp(argv[arg], "-a") || !strcmp(argv[arg], "--address")){
arg++;
if(arg >= argc || !sscan_bd_addr((uint8_t *)argv[arg], addr)){
if(arg >= argc || !sscanf_bd_addr((uint8_t *)argv[arg], addr)){
usage(argv[0]);
return 1;
}

View File

@ -297,7 +297,7 @@ int btstack_main(int argc, const char * argv[]){
while (arg < argc) {
if(!strcmp(argv[arg], "-a") || !strcmp(argv[arg], "--address")){
arg++;
cmdline_addr_found = sscan_bd_addr((uint8_t *)argv[arg], cmdline_addr);
cmdline_addr_found = sscanf_bd_addr((uint8_t *)argv[arg], cmdline_addr);
arg++;
continue;
}

View File

@ -315,7 +315,7 @@ int btstack_main(int argc, const char * argv[]){
while (arg < argc) {
if(!strcmp(argv[arg], "-a") || !strcmp(argv[arg], "--address")){
arg++;
cmdline_addr_found = sscan_bd_addr((uint8_t *)argv[arg], cmdline_addr);
cmdline_addr_found = sscanf_bd_addr((uint8_t *)argv[arg], cmdline_addr);
arg++;
continue;
}

View File

@ -58,7 +58,7 @@ static const hci_transport_config_uart_t hci_transport_config_uart = {
extern int btstack_main(void);
static int main_sscan_bd_addr(const char * addr_string, bd_addr_t addr){
static int main_sscanf_bd_addr(const char * addr_string, bd_addr_t addr){
unsigned int bd_addr_buffer[BD_ADDR_LEN]; //for sscanf, integer needed
// reset result buffer
memset(bd_addr_buffer, 0, sizeof(bd_addr_buffer));
@ -99,7 +99,7 @@ void application_start(void){
// use WIFI Mac address + 1 for Bluetooth
bd_addr_t dummy = { 1,2,3,4,5,6};
main_sscan_bd_addr(&wifi_mac_address[8], dummy);
main_sscanf_bd_addr(&wifi_mac_address[8], dummy);
dummy[5]++;
hci_set_bd_addr(dummy);

View File

@ -49,6 +49,36 @@
#include <string.h>
#include "btstack_debug.h"
/**
* @brief Compare two Bluetooth addresses
* @param a
* @param b
* @return true if equal
*/
int bd_addr_cmp(bd_addr_t a, bd_addr_t b){
return memcmp(a,b, BD_ADDR_LEN);
}
/**
* @brief Copy Bluetooth address
* @param dest
* @param src
*/
void bd_addr_copy(bd_addr_t dest, bd_addr_t src){
memcpy(dest,src,BD_ADDR_LEN);
}
uint16_t little_endian_read_16(const uint8_t * buffer, int pos){
return ((uint16_t) buffer[pos]) | (((uint16_t)buffer[(pos)+1]) << 8);
}
uint32_t little_endian_read_24(const uint8_t * buffer, int pos){
return ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16);
}
uint32_t little_endian_read_32(const uint8_t * buffer, int pos){
return ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16) | (((uint32_t) buffer[(pos)+3]) << 24);
}
void little_endian_store_16(uint8_t *buffer, uint16_t pos, uint16_t value){
buffer[pos++] = value;
buffer[pos++] = value >> 8;
@ -61,6 +91,14 @@ void little_endian_store_32(uint8_t *buffer, uint16_t pos, uint32_t value){
buffer[pos++] = value >> 24;
}
uint32_t big_endian_read_16( const uint8_t * buffer, int pos) {
return ((uint16_t) buffer[(pos)+1]) | (((uint16_t)buffer[ pos ]) << 8);
}
uint32_t big_endian_read_32( const uint8_t * buffer, int pos) {
return ((uint32_t) buffer[(pos)+3]) | (((uint32_t)buffer[(pos)+2]) << 8) | (((uint32_t)buffer[(pos)+1]) << 16) | (((uint32_t) buffer[pos]) << 24);
}
void big_endian_store_16(uint8_t *buffer, uint16_t pos, uint16_t value){
buffer[pos++] = value >> 8;
buffer[pos++] = value;
@ -73,6 +111,7 @@ void big_endian_store_32(uint8_t *buffer, uint16_t pos, uint32_t value){
buffer[pos++] = value;
}
void bt_flip_addr(bd_addr_t dest, bd_addr_t src){
dest[0] = src[5];
dest[1] = src[4];
@ -222,7 +261,7 @@ char * bd_addr_to_str(bd_addr_t addr){
return (char *) bd_addr_to_str_buffer;
}
int sscan_bd_addr(uint8_t * addr_string, bd_addr_t addr){
int sscanf_bd_addr(uint8_t * addr_string, bd_addr_t addr){
unsigned int bd_addr_buffer[BD_ADDR_LEN]; //for sscanf, integer needed
// reset result buffer
memset(bd_addr_buffer, 0, sizeof(bd_addr_buffer));

View File

@ -58,6 +58,11 @@ extern "C" {
#include "btstack_defines.h"
#include "btstack_linked_list.h"
// hack: compilation with the android ndk causes an error as there's a swap64 macro
#ifdef swap64
#undef swap64
#endif
// will be moved to daemon/btstack_device_name_db.h
/**
@ -65,37 +70,46 @@ extern "C" {
*/
#define DEVICE_NAME_LEN 248
typedef uint8_t device_name_t[DEVICE_NAME_LEN+1];
// helper for little endian format
static inline uint16_t little_endian_read_16(const uint8_t * buffer, int pos){
return ((uint16_t) buffer[pos]) | (((uint16_t)buffer[(pos)+1]) << 8);
}
static inline uint32_t little_endian_read_24(const uint8_t * buffer, int pos){
return ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16);
}
static inline uint32_t little_endian_read_32(const uint8_t * buffer, int pos){
return ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16) | (((uint32_t) buffer[(pos)+3]) << 24);
}
void little_endian_store_16(uint8_t *buffer, uint16_t pos, uint16_t value);
void little_endian_store_32(uint8_t *buffer, uint16_t pos, uint32_t value);
/**
* @brief Read 16/24/32 bit little endian value from buffer
* @param buffer
* @param position in buffer
* @return value
*/
uint16_t little_endian_read_16(const uint8_t * buffer, int position);
uint32_t little_endian_read_24(const uint8_t * buffer, int position);
uint32_t little_endian_read_32(const uint8_t * buffer, int position);
// helper for big endian format
static inline uint32_t big_endian_read_16( const uint8_t * buffer, int pos) {
return ((uint16_t) buffer[(pos)+1]) | (((uint16_t)buffer[ pos ]) << 8);
}
/**
* @brief Write 16/32 bit little endian value into buffer
* @param buffer
* @param position in buffer
* @param value
*/
void little_endian_store_16(uint8_t *buffer, uint16_t position, uint16_t value);
void little_endian_store_32(uint8_t *buffer, uint16_t position, uint32_t value);
static inline uint32_t big_endian_read_32( const uint8_t * buffer, int pos) {
return ((uint32_t) buffer[(pos)+3]) | (((uint32_t)buffer[(pos)+2]) << 8) | (((uint32_t)buffer[(pos)+1]) << 16) | (((uint32_t) buffer[pos]) << 24);
}
/**
* @brief Read 16/24/32 bit big endian value from buffer
* @param buffer
* @param position in buffer
* @return value
*/
uint32_t big_endian_read_16( const uint8_t * buffer, int pos);
uint32_t big_endian_read_32( const uint8_t * buffer, int pos);
/**
* @brief Write 16/32 bit big endian value into buffer
* @param buffer
* @param position in buffer
* @param value
*/
void big_endian_store_16(uint8_t *buffer, uint16_t pos, uint16_t value);
void big_endian_store_32(uint8_t *buffer, uint16_t pos, uint32_t value);
// hack: compilation with the android ndk causes an error as there's a swap64 macro
#ifdef swap64
#undef swap64
#endif
/**
* @brief Copy from source to destination and reverse byte order
*/
@ -105,7 +119,6 @@ void swap48 (const uint8_t *src, uint8_t * dst);
void swap56 (const uint8_t *src, uint8_t * dst);
void swap64 (const uint8_t *src, uint8_t * dst);
void swap128(const uint8_t *src, uint8_t * dst);
void bt_flip_addr(bd_addr_t dest, bd_addr_t src);
/**
@ -120,18 +133,14 @@ char char_for_nibble(int nibble);
* @param b
* @return true if equal
*/
static inline int bd_addr_cmp(bd_addr_t a, bd_addr_t b){
return memcmp(a,b, BD_ADDR_LEN);
}
int bd_addr_cmp(bd_addr_t a, bd_addr_t b);
/**
* @brief Copy Bluetooth address
s * @param dest
* @param dest
* @param src
*/
static inline void bd_addr_copy(bd_addr_t dest, bd_addr_t src){
memcpy(dest,src,BD_ADDR_LEN);
}
void bd_addr_copy(bd_addr_t dest, bd_addr_t src);
/**
* @brief Use printf to write hexdump as single line of data
@ -166,10 +175,20 @@ char * bd_addr_to_str(bd_addr_t addr);
* @param buffer for parsed address
* @return 1 if string was parsed successfully
*/
int sscan_bd_addr(uint8_t * addr_string, bd_addr_t addr);
int sscanf_bd_addr(uint8_t * addr_string, bd_addr_t addr);
/**
* @brief Constructs UUID128 from 16 or 32 bit UUID using Bluetooth base UUID
* @param uuid128 output buffer
* @param short_uuid
*/
void uuid_add_bluetooth_prefix(uint8_t * uuid128, uint32_t short_uuid);
void uuid_add_bluetooth_prefix(uint8_t *uuid, uint32_t shortUUID);
/**
* @brief Checks if UUID128 has Bluetooth base UUID prefix
* @param uui128 to test
* @return 1 if it can be expressed as UUID32
*/
int uuid_has_bluetooth_prefix(uint8_t * uuid128);
#if defined __cplusplus

View File

@ -684,7 +684,7 @@ static bnep_channel_t * bnep_channel_create_for_addr(bd_addr_t addr)
channel->state = BNEP_CHANNEL_STATE_CLOSED;
channel->max_frame_size = bnep_max_frame_size_for_l2cap_mtu(l2cap_max_mtu());
bd_addr_copy(&channel->remote_addr, addr);
bd_addr_copy(channel->remote_addr, addr);
hci_local_bd_addr(channel->local_addr);
channel->net_filter_count = 0;

View File

@ -253,7 +253,7 @@ static rfcomm_multiplexer_t * rfcomm_multiplexer_create_for_addr(bd_addr_t addr)
// fill in
rfcomm_multiplexer_initialize(multiplexer);
bd_addr_copy(&multiplexer->remote_addr, addr);
bd_addr_copy(multiplexer->remote_addr, addr);
// add to services list
btstack_linked_list_add(&rfcomm_multiplexers, (btstack_linked_item_t *) multiplexer);