From a8fb4a0032db58633914c3c2e3150aef28146a0b Mon Sep 17 00:00:00 2001 From: Pawit Pornkitprasan Date: Sun, 24 Jul 2011 16:42:11 +0700 Subject: Enable proper bluetooth MAC address on aries devices (1/5) The approach here is to used bdaddr_read.c to read the MAC address (it's in a different format than ro.bt.bdaddr_path accepts) at /efs/imei/bt.txt and write it to /data/bdaddr and set ro.bt.bdaddr_path there. This approach was used with device/lge/thunderg and bdaddr_read.c was adapted from there. Change-Id: Ide75a0d6074506cc93b9c11af667f62e7460faa2 --- bdaddr_read/Android.mk | 28 ++++++++++++++++++++++++ bdaddr_read/bdaddr_read.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 bdaddr_read/Android.mk create mode 100644 bdaddr_read/bdaddr_read.c (limited to 'bdaddr_read') diff --git a/bdaddr_read/Android.mk b/bdaddr_read/Android.mk new file mode 100644 index 0000000..46f95cd --- /dev/null +++ b/bdaddr_read/Android.mk @@ -0,0 +1,28 @@ +# Copyright (C) 2010 Ricardo Cerqueira +# Copyright (C) 2011 Pawit Pornkitprasan +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := bdaddr_read.c + +LOCAL_SHARED_LIBRARIES := libcutils + +LOCAL_MODULE := bdaddr_read + +include $(BUILD_EXECUTABLE) + diff --git a/bdaddr_read/bdaddr_read.c b/bdaddr_read/bdaddr_read.c new file mode 100644 index 0000000..c6e08c9 --- /dev/null +++ b/bdaddr_read/bdaddr_read.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#define LOG_TAG "bdaddr" +#define SAMSUNG_BDADDR_PATH "/efs/imei/bt.txt" +#define BDADDR_PATH "/data/bdaddr" + +/* Read bluetooth MAC from SAMSUNG_BDADDR_PATH (different format), + * write it to BDADDR_PATH, and set ro.bt.bdaddr_path to BDADDR_PATH + * + * Adapted from bdaddr_read.c of thunderg + */ + +int main() { + char tmpbdaddr[23]; // bt_macaddr:xxxxxxxxxxxx + char bdaddr[18]; + int count; + int fd; + + fd = open(SAMSUNG_BDADDR_PATH, O_RDONLY); + if(fd < 0) { + fprintf(stderr, "open(%s) failed\n", SAMSUNG_BDADDR_PATH); + LOGE("Can't open %s\n", SAMSUNG_BDADDR_PATH); + return -1; + } + + count = read(fd, tmpbdaddr, sizeof(tmpbdaddr)); + if (count < 0) { + fprintf(stderr, "read(%s) failed\n", SAMSUNG_BDADDR_PATH); + LOGE("Can't read %s\n", SAMSUNG_BDADDR_PATH); + return -1; + } + else if (count != sizeof(tmpbdaddr)) { + fprintf(stderr, "read(%s) unexpected size %d\n", SAMSUNG_BDADDR_PATH, count); + LOGE("Error reading %s (unexpected size %d)\n", SAMSUNG_BDADDR_PATH, count); + return -1; + } + + count = sprintf(bdaddr, "%2.2s:%2.2s:%2.2s:%2.2s:%2.2s:%2.2s\0", + tmpbdaddr+11,tmpbdaddr+13,tmpbdaddr+15,tmpbdaddr+17,tmpbdaddr+19,tmpbdaddr+21); + + fd = open(BDADDR_PATH, O_WRONLY|O_CREAT|O_TRUNC, 00600|00060|00006); + if (fd < 0) { + fprintf(stderr, "open(%s) failed\n", BDADDR_PATH); + LOGE("Can't open %s\n", BDADDR_PATH); + return -2; + } + write(fd, bdaddr, 18); + close(fd); + property_set("ro.bt.bdaddr_path", BDADDR_PATH); + return 0; +} -- cgit v1.1