Enable proper bluetooth MAC address on c1 devices

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.
This commit is contained in:
Pawit Pornkitprasan 2011-07-24 14:51:54 +02:00 committed by codeworkx
parent 7ccedad350
commit d9414ffb28
4 changed files with 93 additions and 1 deletions

28
bdaddr_read/Android.mk Normal file
View File

@ -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)

54
bdaddr_read/bdaddr_read.c Normal file
View File

@ -0,0 +1,54 @@
#include <fcntl.h>
#include <string.h>
#include <cutils/properties.h>
#include <cutils/log.h>
#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;
}

View File

@ -49,7 +49,8 @@ PRODUCT_PACKAGES := \
libstagefrighthw \
libexifa \
libjpega \
com.android.future.usb.accessory
com.android.future.usb.accessory \
bdaddr_read
# These are the hardware-specific configuration files
PRODUCT_COPY_FILES := \

View File

@ -681,6 +681,15 @@ service bluetoothd /system/bin/bluetoothd -n
group bluetooth net_bt_admin misc
disabled
# bluetooth mac address
service bdaddr /system/bin/bdaddr_read
user root
disabled
oneshot
on property:init.svc.bootanim=running
start bdaddr
service installd /system/bin/installd
socket installd stream 600 system system