From 785a493911695eb9b6e346458d509df64ed22788 Mon Sep 17 00:00:00 2001
From: Matthias Ringwald <matthias@ringwald.ch>
Date: Fri, 11 Mar 2016 15:48:04 +0100
Subject: [PATCH] migration: first pass over examples/embedded

---
 tool/conversion_to_1.0.cocci                 |  23 ----
 tool/conversion_to_1.0.sh                    |  54 --------
 tool/conversion_to_v1.0/conversion_to_1.0.sh |  32 +++++
 tool/conversion_to_v1.0/convert.cocci        |  69 ++++++++++
 tool/conversion_to_v1.0/convert.sed          | 135 +++++++++++++++++++
 tool/conversion_to_v1.0/convert.sh           |   1 +
 6 files changed, 237 insertions(+), 77 deletions(-)
 delete mode 100644 tool/conversion_to_1.0.cocci
 delete mode 100644 tool/conversion_to_1.0.sh
 create mode 100755 tool/conversion_to_v1.0/conversion_to_1.0.sh
 create mode 100644 tool/conversion_to_v1.0/convert.cocci
 create mode 100644 tool/conversion_to_v1.0/convert.sed
 create mode 100755 tool/conversion_to_v1.0/convert.sh

diff --git a/tool/conversion_to_1.0.cocci b/tool/conversion_to_1.0.cocci
deleted file mode 100644
index 139788633..000000000
--- a/tool/conversion_to_1.0.cocci
+++ /dev/null
@@ -1,23 +0,0 @@
-@@
-expression dest, src;
-@@
-- bt_flip_addr(dest,src)
-+ reverse_bd_addr(src, dest)
-
-@@
-expression handle;
-@@
-- hci_remote_eSCO_supported(handle)
-+ hci_remote_esco_supported(handle)
-
-@@
-expression event, cmd;
-@@
-- COMMAND_COMPLETE_EVENT(event,cmd) 
-+ HCI_EVENT_IS_COMMAND_COMPLETE(event,cmd) 
-
-@@
-expression event, cmd;
-@@
-- COMMAND_STATUS_EVENT(event,cmd) 
-+ HCI_EVENT_IS_COMMAND_STATUS(event,cmd) 
diff --git a/tool/conversion_to_1.0.sh b/tool/conversion_to_1.0.sh
deleted file mode 100644
index 82bc21552..000000000
--- a/tool/conversion_to_1.0.sh
+++ /dev/null
@@ -1,54 +0,0 @@
--e 's/SDP_EVENT_QUERY_COMPLETE/SDP_EVENT_QUERY_COMPLETE/g'
--e 's/SDP_EVENT_QUERY_RFCOMM_SERVICE/SDP_EVENT_QUERY_RFCOMM_SERVICE/g'
--e 's/SDP_EVENT_QUERY_ATTRIBUTE_BYTE/SDP_EVENT_QUERY_ATTRIBUTE_BYTE/g'
--e 's/SDP_EVENT_QUERY_ATTRIBUTE_VALUE/SDP_EVENT_QUERY_ATTRIBUTE_VALUE/g'
--e 's/SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE/SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE/g'
--e 's/GATT_EVENT_QUERY_COMPLETE/GATT_EVENT_QUERY_COMPLETE/g'
--e 's/GATT_EVENT_SERVICE_QUERY_RESULT/GATT_EVENT_SERVICE_QUERY_RESULT/g'
--e 's/GATT_EVENT_CHARACTERISTIC_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_QUERY_RESULT/g'
--e 's/GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT/GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT/g'
--e 's/GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT/GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT/g'
--e 's/GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT/g'
--e 's/GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT/GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT/g'
--e 's/GATT_EVENT_NOTIFICATION/GATT_EVENT_NOTIFICATION/g'
--e 's/GATT_EVENT_INDICATION/GATT_EVENT_INDICATION/g'
--e 's/GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/g'
--e 's/GATT_EVENT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/GATT_EVENT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/g'
--e 's/GATT_EVENT_MTU/GATT_EVENT_MTU/g'
--e 's/ATT_EVENT_MTU_EXCHANGE_COMPLETE/ATT_EVENT_MTU_EXCHANGE_COMPLETE/g'
--e 's/ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE/ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE/g'
--e 's/SM_EVENT_JUST_WORKS_REQUEST/SM_EVENT_JUST_WORKS_REQUEST/g'
--e 's/SM_EVENT_JUST_WORKS_CANCEL/SM_EVENT_JUST_WORKS_CANCEL/g'
--e 's/SM_EVENT_PASSKEY_DISPLAY_NUMBER/SM_EVENT_PASSKEY_DISPLAY_NUMBER/g'
--e 's/SM_EVENT_PASSKEY_DISPLAY_CANCEL/SM_EVENT_PASSKEY_DISPLAY_CANCEL/g'
--e 's/SM_EVENT_PASSKEY_INPUT_NUMBER/SM_EVENT_PASSKEY_INPUT_NUMBER/g'
--e 's/SM_EVENT_PASSKEY_INPUT_CANCEL/SM_EVENT_PASSKEY_INPUT_CANCEL/g'
--e 's/SM_EVENT_IDENTITY_RESOLVING_STARTED/SM_EVENT_IDENTITY_RESOLVING_STARTED/g'
--e 's/SM_EVENT_IDENTITY_RESOLVING_FAILED/SM_EVENT_IDENTITY_RESOLVING_FAILED/g'
--e 's/SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED/SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED/g'
--e 's/SM_EVENT_AUTHORIZATION_REQUEST/SM_EVENT_AUTHORIZATION_REQUEST/g'
--e 's/SM_EVENT_AUTHORIZATION_RESULT/SM_EVENT_AUTHORIZATION_RESULT/g'
--e 's/GAP_EVENT_SECURITY_LEVEL/GAP_EVENT_SECURITY_LEVEL/g'
--e 's/GAP_EVENT_DEDICATED_BONDING_COMPLETED/GAP_EVENT_DEDICATED_BONDING_COMPLETED/g'
--e 's/GAP_EVENT_ADVERTISING_REPORT/GAP_EVENT_ADVERTISING_REPORT/g'
--e 's/ANCS_EVENT_CLIENT_CONNECTED/ANCS_EVENT_CLIENT_CONNECTED/g'
--e 's/ANCS_EVENT_CLIENT_NOTIFICATION/ANCS_EVENT_CLIENT_NOTIFICATION/g'
--e 's/ANCS_EVENT_CLIENT_DISCONNECTED/ANCS_EVENT_CLIENT_DISCONNECTED/g'
-
-
---
-#define READ_BT_16( buffer, pos) ( ((uint16_t) buffer[pos]) | (((uint16_t)buffer[(pos)+1]) << 8))
-#define READ_BT_24( buffer, pos) ( ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16))
-#define READ_BT_32( buffer, pos) ( ((uint32_t) buffer[pos]) | (((uint32_t)buffer[(pos)+1]) << 8) | (((uint32_t)buffer[(pos)+2]) << 16) | (((uint32_t) buffer[(pos)+3])) << 24)
-#define READ_NET_16( buffer, pos) ( ((uint16_t) buffer[(pos)+1]) | (((uint16_t)buffer[ pos   ]) << 8))
-#define READ_NET_32( buffer, pos) ( ((uint32_t) buffer[(pos)+3]) | (((uint32_t)buffer[(pos)+2]) << 8) | (((uint32_t)buffer[(pos)+1]) << 16) | (((uint32_t) buffer[pos])) << 24)
-#define READ_L2CAP_LENGTH(buffer)     ( READ_BT_16(buffer, 4))
-#define READ_L2CAP_CHANNEL_ID(buffer) ( READ_BT_16(buffer, 6))
-void bt_store_16(uint8_t *buffer, uint16_t pos, uint16_t value);
-void bt_store_32(uint8_t *buffer, uint16_t pos, uint32_t value);
-void net_store_16(uint8_t *buffer, uint16_t pos, uint16_t value);
-void net_store_32(uint8_t *buffer, uint16_t pos, uint32_t value);
-
-find . -type f -print0 | xargs -0 sed -i -e 's/READ_BT_16/little_endian_read_16/g' -e 's/READ_BT_24/little_endian_read_24/g' -e 's/READ_BT_32/little_endian_read_32/g' -e 's/READ_NET_16/big_endian_read_16/g' -e 's/READ_NET_32/big_endian_read_32/g' -e 's/bt_store_16/little_endian_store_16/g' -e 's/bt_store_32/little_endian_store_32/g' -e 's/net_store_16/big_endian_store_16/g' -e 's/net_store_32/big_endian_store_32/g' 
-
-
diff --git a/tool/conversion_to_v1.0/conversion_to_1.0.sh b/tool/conversion_to_v1.0/conversion_to_1.0.sh
new file mode 100755
index 000000000..e42d3806d
--- /dev/null
+++ b/tool/conversion_to_v1.0/conversion_to_1.0.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -e
+set -u
+
+USAGE="Usage: conversion_to_1.0.sh src-path dest-path"
+
+echo "BTstack conversion to v1.0 helper"
+echo "BlueKitchen GmbH, 2016"
+echo
+
+# command line checks, bash
+if [ $# -ne 2 ]; then
+        echo ${USAGE}
+        exit 0
+fi
+SRC=$1
+DEST=$2
+
+echo "Creating copy of $SRC at $DEST"
+cp -r $SRC/ $DEST
+
+echo "Updating function calls"
+
+# simple function rename
+find $DEST -type f -print0 | xargs -0 sed -i -f convert.sed
+
+# complext function rename using coccinelle
+command -v spatch >/dev/null 2>&1 || { echo >&2 "spatch from cocinelle required but not installed. Aborting."; exit 1; }
+spatch --sp-file convert.cocci --in-place  --dir $DEST > /dev/null # 2>&1
+echo "Done. Good luck!"
+
+
diff --git a/tool/conversion_to_v1.0/convert.cocci b/tool/conversion_to_v1.0/convert.cocci
new file mode 100644
index 000000000..6f465ef69
--- /dev/null
+++ b/tool/conversion_to_v1.0/convert.cocci
@@ -0,0 +1,69 @@
+@@
+expression dest, src;
+@@
+- bt_flip_addr(dest,src)
++ reverse_bd_addr(src, dest)
+
+@@
+expression handle;
+@@
+- hci_remote_eSCO_supported(handle)
++ hci_remote_esco_supported(handle)
+
+@@
+expression packet_handler;
+@@
+- hci_register_packet_handler(packet_handler);
++ static btstack_packet_callback_registration_t callback_registration;
++ callback_registration.callback = packet_handler;
++ hci_add_event_handler(&callback_registration);
+
+@@
+typedef uint8_t, uint16_t;
+identifier fn, packet_type, packet, size;
+@@
+- void fn(uint8_t packet_type, uint8_t * packet, uint16_t size)
++ void fn(uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t size)
+{ ... }
+
+@@
+// typedef uint8_t, uint16_t;
+identifier fn, connection, packet_type, channel, packet, size;
+@@
+- void fn(void * connection, uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t size)
++ void fn(uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t size)
+{ ... }
+
+@@
+expression handle;
+@@
+- hci_can_send_sco_packet_now(handle)
++ hci_can_send_sco_packet_now()
+
+@@
+expression uuid;
+@@
+- printUUID128(uuid)
++ printf("%s", uuid128_to_str(uuid))
+
+@@
+expression addr;
+@@
+- print_bd_addr(addr)
++ printf("%s", bd_addr_to_str(addr))
+
+@@
+expression str, addr;
+typedef bd_addr_t;
+@@
+- sscan_bd_addr((uint8_t*)str, addr)
++ sscanf_bd_addr(str, addr)
+
+@@
+typedef timer;
+typedef btstack_timer_source_t;
+identifier fn, ts;
+@@
+- fn(struct timer * ts)
++ fn(btstack_timer_source_t * ts)
+{ ... }
diff --git a/tool/conversion_to_v1.0/convert.sed b/tool/conversion_to_v1.0/convert.sed
new file mode 100644
index 000000000..41a3cb823
--- /dev/null
+++ b/tool/conversion_to_v1.0/convert.sed
@@ -0,0 +1,135 @@
+# sed script
+
+# DEFINES
+s/ANCS_CLIENT_CONNECTED/ANCS_EVENT_CLIENT_CONNECTED/g
+s/ANCS_CLIENT_DISCONNECTED/ANCS_EVENT_CLIENT_DISCONNECTED/g
+s/ANCS_CLIENT_NOTIFICATION/ANCS_EVENT_CLIENT_NOTIFICATION/g
+s/ATT_HANDLE_VALUE_INDICATION_COMPLETE/ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE/g
+s/ATT_MTU_EXCHANGE_COMPLETE/ATT_EVENT_MTU_EXCHANGE_COMPLETE/g
+s/COMMAND_COMPLETE_EVENT/HCI_EVENT_IS_COMMAND_COMPLETE/g
+s/COMMAND_STATUS_EVENT/HCI_EVENT_IS_COMMAND_STATUS/g
+s/GAP_LE_ADVERTISING_REPORT/GAP_EVENT_ADVERTISING_REPORT/g
+s/GAP_DEDICATED_BONDING_COMPLETED/GAP_EVENT_DEDICATED_BONDING_COMPLETED/g
+s/GAP_SECURITY_LEVEL/GAP_EVENT_SECURITY_LEVEL/g
+s/GATT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT/GATT_EVENT_ALL_CHARACTERISTIC_DESCRIPTORS_QUERY_RESULT/g
+s/GATT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/g
+s/GATT_CHARACTERISTIC_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_QUERY_RESULT/g
+s/GATT_CHARACTERISTIC_VALUE_QUERY_RESULT/GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT/g
+s/GATT_INCLUDED_SERVICE_QUERY_RESULT/GATT_EVENT_INCLUDED_SERVICE_QUERY_RESULT/g
+s/GATT_INDICATION/GATT_EVENT_INDICATION/g
+s/GATT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/GATT_EVENT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT/g
+s/GATT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT/GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT/g
+s/GATT_MTU/GATT_EVENT_MTU/g
+s/GATT_NOTIFICATION/GATT_EVENT_NOTIFICATION/g
+s/DAEMON_EVENT_HCI_PACKET_SENT/HCI_EVENT_TRANSPORT_PACKET_SENT/g
+s/GATT_QUERY_COMPLETE/GATT_EVENT_QUERY_COMPLETE/g
+s/GATT_SERVICE_QUERY_RESULT/GATT_EVENT_SERVICE_QUERY_RESULT/g
+s/SDP_EVENT_QUERY_ATTRIBUTE_BYTE/SDP_EVENT_QUERY_ATTRIBUTE_BYTE/g
+s/SDP_EVENT_QUERY_ATTRIBUTE_VALUE/SDP_EVENT_QUERY_ATTRIBUTE_VALUE/g
+s/SDP_EVENT_QUERY_COMPLETE/SDP_EVENT_QUERY_COMPLETE/g
+s/SDP_EVENT_QUERY_RFCOMM_SERVICE/SDP_EVENT_QUERY_RFCOMM_SERVICE/g
+s/SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE/SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE/g
+s/SM_EVENT_AUTHORIZATION_REQUEST/SM_EVENT_AUTHORIZATION_REQUEST/g
+s/SM_EVENT_AUTHORIZATION_RESULT/SM_EVENT_AUTHORIZATION_RESULT/g
+s/SM_EVENT_IDENTITY_RESOLVING_FAILED/SM_EVENT_IDENTITY_RESOLVING_FAILED/g
+s/SM_EVENT_IDENTITY_RESOLVING_STARTED/SM_EVENT_IDENTITY_RESOLVING_STARTED/g
+s/SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED/SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED/g
+s/SM_EVENT_JUST_WORKS_CANCEL/SM_EVENT_JUST_WORKS_CANCEL/g
+s/SM_EVENT_JUST_WORKS_REQUEST/SM_EVENT_JUST_WORKS_REQUEST/g
+s/SM_EVENT_PASSKEY_DISPLAY_CANCEL/SM_EVENT_PASSKEY_DISPLAY_CANCEL/g
+s/SM_EVENT_PASSKEY_DISPLAY_NUMBER/SM_EVENT_PASSKEY_DISPLAY_NUMBER/g
+s/SM_EVENT_PASSKEY_INPUT_CANCEL/SM_EVENT_PASSKEY_INPUT_CANCEL/g
+s/SM_EVENT_PASSKEY_INPUT_NUMBER/SM_EVENT_PASSKEY_INPUT_NUMBER/g
+s/BTSTACK_EVENT_REMOTE_NAME_CACHED/DAEMON_EVENT_REMOTE_NAME_CACHED/g
+
+# Functions/Macros
+s/att_server_can_send/att_server_can_send_packet_now/g
+s/BD_ADDR_CMP/bd_addr_cmp/g
+s/bt_store_16/little_endian_store_16/g
+s/bt_store_24/little_endian_store_24/g
+s/bt_store_32/little_endian_store_32/g
+s/hci_discoverable_control/gap_discoverable_control/g
+s/le_central_connect/gap_connect/g
+s/le_central_connect_cancel/gap_connect_cancel/g
+s/le_central_set_scan_parameters/gap_set_scan_parameters/g
+s/le_central_start_scan/gap_start_scan/g
+s/le_central_stop_scan/gap_stop_scan/g
+s/net_store_16/big_endian_store_16/g
+s/net_store_24/big_endian_store_24/g
+s/net_store_32/big_endian_store_32/g
+s/READ_BT_16/little_endian_read_16/g
+s/READ_BT_24/little_endian_read_24/g
+s/READ_BT_32/little_endian_read_32/g
+s/READ_NET_16/big_endian_read_16/g
+s/READ_NET_24/big_endian_read_24/g
+s/READ_NET_32/big_endian_read_32/g
+s/rfcomm_accept_connection_internal/rfcomm_accept_connection/g
+s/rfcomm_register_service_internal/rfcomm_register_service/g
+s/rfcomm_send_internal/rfcomm_send/g
+s/rfcomm_disconnect_internal/rfcomm_disconnect/g
+s/run_loop_add_timer/btstack_run_loop_add_timer/g
+s/run_loop_get_time_ms/btstack_run_loop_get_time_ms/g
+s/run_loop_set_timer/btstack_run_loop_set_timer/g
+s/sdp_register_service_internal/sdp_register_service/g
+s/swap32/reverse_32/g
+s/swap48/reverse_48/g
+s/swap64/reverse_64/g
+s/swap128/reverse_128/g
+s/hci_ssp_set_io_capability/gap_ssp_set_io_capability/g
+
+# Folder structure
+s|/example/embedded|/example|g
+s|/ble/compile-gatt.py|/tool/compile-gatt.py|g
+
+# type renames
+s/le_service_t/gatt_client_service_t/g
+s/le_characteristic_t/gatt_client_characteristic_t/g
+
+# header changes
+s|"att.h"|"att_db.h"|g
+s|"bnep.h"|"classic/bnep.h"|g
+s|"gap_le.h"|"gap.h"|g
+s|"hfp_ag.h"|"classic/hfp_ag.h"|g
+s|"hfp_hf.h"|"classic/hfp_hf.h"|g
+s|"hsp_ag.h"|"classic/hsp_ag.h"|g
+s|"hsp_hs.h"|"classic/hsp_hs.h"|g
+s|"pan.h"|"classic/pan.h"|g
+s|"rfcomm.h"|"classic/rfcomm.h"|g
+s|"sdp.h"|"classic/sdp_server.h"|g
+s|"sdp_client.h"|"classic/sdp_client.h"|g
+s|"sdp_parser.h"|"classic/sdp_client.h"|g
+s|"sdp_query_rfcomm.h"|"classic/sdp_query_rfcomm.h"|g
+s|#include "sdp_query_util.h"|// sdp_query_util doens not exist anymore|g
+s|<btstack/hal_led.h>|"hal_led.h"|g
+s|<btstack/hci_cmds.h>|"hci_cmd.h"|g
+s|<btstack/run_loop.h>|"btstack_run_loop.h"|g
+s|<btstack/sdp_util.h>|"classic/sdp_util.h"|g
+s|<btstack/utils.h>|"btstack_util.h"|g
+
+# File renames
+s|debug.h|btstack_debug.h|g
+s|btstack-config.h|btstack_config.h|g
+s|hci_cmds\.c|hci_cmd\.c|g
+s|linked_list|btstack_linked_list|g
+s|memory_pool|btstack_memory_pool|g
+s|remote_device_db_memory|btstack_link_key_db_memory|g
+s|run_loop\.c|btstack_run_loop\.c|g
+s|timer_source_t|btstack_timer_source_t|g
+s|sdp\.c|sdp_server\.c|g
+s|utils|btstack_util|g
+s|att\.c|att_db\.c|g
+s|ancs_client_lib|ancs_client|g
+s|sdp_parser.[c|o]||g
+s|sdp_query_util.[c|o]||g
+
+# Makefile hacks: fix path to src/ble
+s|/ble|/src/ble|g
+
+## might not work, due to very precise matching rules, or BTSTACK_ROOT not being used
+
+# Makefile hacks: add VPATH to src/classic
+s|VPATH += ${BTSTACK_ROOT}/src$|VPATH += ${BTSTACK_ROOT}/src\nVPATH += ${BTSTACK_ROOT}/src/classic|g
+
+# Disable ancs_client BTstack examples
+s|${CC} $(filter-out ancs_client.h,$^) ${CFLAGS} ${LDFLAGS} -o $@|echo ANCS Client target disabled by converstion script|g
+
diff --git a/tool/conversion_to_v1.0/convert.sh b/tool/conversion_to_v1.0/convert.sh
new file mode 100755
index 000000000..cfb81671e
--- /dev/null
+++ b/tool/conversion_to_v1.0/convert.sh
@@ -0,0 +1 @@
+./conversion_to_1.0.sh /Projects/btstack-master/example/embedded/ /Projects/btstack/example