From 28ca2b4607e125f45dc135e6777e2b6822e52f41 Mon Sep 17 00:00:00 2001 From: "mila@ringwald.ch" Date: Thu, 5 Jan 2012 22:24:51 +0000 Subject: [PATCH] add casts for btstack_memory gets, use getter/setter for enumerated flags to allow compilation with C++ --- project.xcodeproj/project.pbxproj | 1 - src/hci.c | 17 ++++++++++++---- src/l2cap.c | 33 ++++++++++++++++++++----------- test/Makefile | 1 - 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/project.xcodeproj/project.pbxproj b/project.xcodeproj/project.pbxproj index eaf7eb98f..5a1c17ff2 100644 --- a/project.xcodeproj/project.pbxproj +++ b/project.xcodeproj/project.pbxproj @@ -428,7 +428,6 @@ isa = PBXProject; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "project" */; compatibilityVersion = "Xcode 3.1"; - developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, diff --git a/src/hci.c b/src/hci.c index 37d92381e..1ba3868c3 100644 --- a/src/hci.c +++ b/src/hci.c @@ -82,7 +82,7 @@ hci_connection_t * connection_for_handle(hci_con_handle_t con_handle){ } static void hci_connection_timeout_handler(timer_source_t *timer){ - hci_connection_t * connection = linked_item_get_user(&timer->item); + hci_connection_t * connection = (hci_connection_t *) linked_item_get_user(&timer->item); #ifdef HAVE_TIME struct timeval tv; gettimeofday(&tv, NULL); @@ -116,7 +116,7 @@ static void hci_connection_timestamp(hci_connection_t *connection){ * @return connection OR NULL, if no memory left */ static hci_connection_t * create_connection_for_addr(bd_addr_t addr){ - hci_connection_t * conn = btstack_memory_hci_connection_get(); + hci_connection_t * conn = (hci_connection_t *) btstack_memory_hci_connection_get(); if (!conn) return NULL; BD_ADDR_COPY(conn->address, addr); conn->con_handle = 0xffff; @@ -146,6 +146,15 @@ static hci_connection_t * connection_for_address(bd_addr_t address){ return NULL; } +inline static void connectionSetAuthenticationFlags(hci_connection_t * conn, hci_authentication_flags_t flags){ + conn->authentication_flags = (hci_authentication_flags_t)(conn->authentication_flags | flags); +} + +inline static void connectionClearAuthenticationFlags(hci_connection_t * conn, hci_authentication_flags_t flags){ + conn->authentication_flags = (hci_authentication_flags_t)(conn->authentication_flags & ~flags); +} + + /** * add authentication flags and reset timer */ @@ -154,7 +163,7 @@ static void hci_add_connection_flags_for_flipped_bd_addr(uint8_t *bd_addr, hci_a bt_flip_addr(addr, *(bd_addr_t *) bd_addr); hci_connection_t * conn = connection_for_address(addr); if (conn) { - conn->authentication_flags |= flags; + connectionSetAuthenticationFlags(conn, flags); hci_connection_timestamp(conn); } } @@ -1052,7 +1061,7 @@ void hci_run(){ } else { hci_send_cmd(&hci_link_key_request_negative_reply, connection->address); } - connection->authentication_flags &= ~HANDLE_LINK_KEY_REQUEST; + connectionClearAuthenticationFlags(connection, HANDLE_LINK_KEY_REQUEST); } } diff --git a/src/l2cap.c b/src/l2cap.c index 5a46ade06..e4bee0762 100644 --- a/src/l2cap.c +++ b/src/l2cap.c @@ -297,6 +297,15 @@ int l2cap_send_internal(uint16_t local_cid, uint8_t *data, uint16_t len){ return l2cap_send_prepared(local_cid, len); } +static inline void channelStateVarSetFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){ + channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var | flag); +} + +static inline void channelStateVarClearFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){ + channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var & ~flag); +} + + // MARK: L2CAP_RUN // process outstanding signaling tasks @@ -374,7 +383,7 @@ void l2cap_run(void){ case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: channel->state = L2CAP_STATE_CONFIG; - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ; + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); l2cap_send_signaling_packet(channel->handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 0, 0); break; @@ -387,13 +396,13 @@ void l2cap_run(void){ case L2CAP_STATE_CONFIG: if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){ - channel->state_var &= ~L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP; - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP; + channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); l2cap_send_signaling_packet(channel->handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, 0, 0, 0, NULL); } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){ - channel->state_var &= ~L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ; - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ; + channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ); channel->local_sig_id = l2cap_next_sig_id(); config_options[0] = 1; // MTU config_options[1] = 2; // len param @@ -432,7 +441,7 @@ void l2cap_create_channel_internal(void * connection, btstack_packet_handler_t p bd_addr_t address, uint16_t psm, uint16_t mtu){ // alloc structure - l2cap_channel_t * chan = btstack_memory_l2cap_channel_get(); + l2cap_channel_t * chan = (l2cap_channel_t*) btstack_memory_l2cap_channel_get(); if (!chan) { // emit error event l2cap_channel_t dummy_channel; @@ -641,7 +650,7 @@ static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig } // alloc structure // log_info("l2cap_handle_connection_request register channel\n"); - l2cap_channel_t * channel = btstack_memory_l2cap_channel_get(); + l2cap_channel_t * channel = (l2cap_channel_t*) btstack_memory_l2cap_channel_get(); if (!channel){ // 0x0004 No resources available l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, 0x0004); @@ -765,7 +774,7 @@ void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command) // successful connection channel->remote_cid = READ_BT_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); channel->state = L2CAP_STATE_CONFIG; - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ; + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); break; case 1: // connection pending. get some coffee @@ -798,12 +807,12 @@ void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command) case L2CAP_STATE_CONFIG: switch (code) { case CONFIGURE_REQUEST: - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ; - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP; + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ); + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); l2cap_signaling_handle_configure_request(channel, command); break; case CONFIGURE_RESPONSE: - channel->state_var |= L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP; + channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP); break; default: break; @@ -982,7 +991,7 @@ void l2cap_register_service_internal(void *connection, btstack_packet_handler_t // alloc structure // TODO: emit error event - service = btstack_memory_l2cap_service_get(); + service = (l2cap_service_t *) btstack_memory_l2cap_service_get(); if (!service) { log_error("l2cap_register_service_internal: no memory for l2cap_service_t\n"); l2cap_emit_service_registered(connection, BTSTACK_MEMORY_ALLOC_FAILED, psm); diff --git a/test/Makefile b/test/Makefile index a7dfe50db..cd702cb26 100644 --- a/test/Makefile +++ b/test/Makefile @@ -5,7 +5,6 @@ LD_LIBRARIES = -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt VPATH=../src -DEPS = remote_device_db_memory.h OBJ = memory_pool.o remote_device_db_memory_test.o remote_device_db_memory.o btstack_memory.o linked_list.o remote-memory: $(OBJ)