#include <stdio.h> 
 | 
#include <stdlib.h> 
 | 
#include <time.h> 
 | 
#include <unistd.h> 
 | 
#include <errno.h> 
 | 
#include <fcntl.h> 
 | 
#include <sys/ioctl.h> 
 | 
#include <sys/socket.h> 
 | 
#include <sys/types.h> 
 | 
#include <sys/stat.h> 
 | 
#include <sys/poll.h> 
 | 
#include <sys/time.h> 
 | 
  
 | 
#include <cutils/log.h> 
 | 
#include <cutils/properties.h> 
 | 
#include "common.h" 
 | 
#include "language.h" 
 | 
#include "test_case.h" 
 | 
  
 | 
#define BLUETOOTH_TTY_TEST 
 | 
//#define SOFIA3GR_PCBA 
 | 
//#define BLUEDROID_TEST 
 | 
  
 | 
#ifdef BLUEDROID_TEST 
 | 
#include "libbluetooth/bluetooth/bluetooth.h" 
 | 
#include "libbluetooth/bluetooth/hci.h" 
 | 
#include "libbluetooth/bluetooth/hci_lib.h" 
 | 
  
 | 
#ifndef HCI_DEV_ID 
 | 
#define HCI_DEV_ID 0 
 | 
#endif 
 | 
  
 | 
#define HCID_START_DELAY_SEC   3 
 | 
#define HCID_STOP_DELAY_USEC 500000 
 | 
  
 | 
#define TAG    "[PCBA,BT]: " 
 | 
#define LOG(x...)    printf(TAG x) 
 | 
  
 | 
#define MIN(x,y) (((x)<(y))?(x):(y)) 
 | 
  
 | 
#if 0 
 | 
#define BTHWCTL_DEV_NAME             "/dev/bthwctl" 
 | 
#define BTHWCTL_IOC_MAGIC            0xf6 
 | 
#define BTHWCTL_IOCTL_SET_POWER      _IOWR(BTHWCTL_IOC_MAGIC, 0, uint32_t) 
 | 
  
 | 
#define TCC_BT_DEVICE_PATH                      "/dev/tcc_bt_dev" 
 | 
#define BT_DEV_MAJOR_NUM                        234 
 | 
#define IOCTL_BT_DEV_POWER              _IO(BT_DEV_MAJOR_NUM, 100) 
 | 
  
 | 
enum WIFI_CHIP_TYPE_LIST{ 
 | 
    BT_UNKNOWN = -1, 
 | 
    BCM4329 = 0, 
 | 
    RTL8188CU, 
 | 
    RTL8188EU, 
 | 
    BCM4330, 
 | 
    RK901, 
 | 
    RK903, 
 | 
    MT6620, 
 | 
    RT5370, 
 | 
    MT5931, 
 | 
    RDA587x, 
 | 
    RDA5990, 
 | 
    RTK8723AS, 
 | 
    RTK8723BS, 
 | 
    RTK8723AU, 
 | 
    RTK8723BU, 
 | 
    BK3515, 
 | 
    SOFIA_3GR, 
 | 
}; 
 | 
  
 | 
static int rfkill_id = -1; 
 | 
static char *rfkill_state_path = NULL; 
 | 
static int bluetooth_power_status = 0; 
 | 
static int chip_type; 
 | 
  
 | 
#define WIFI_CHIP_TYPE_PATH "/sys/class/rkwifi/chip" 
 | 
int getChipType(void) { 
 | 
      int wififd; 
 | 
      char buf[64]; 
 | 
      int chip_type = RTL8188EU; 
 | 
  
 | 
      wififd = open(WIFI_CHIP_TYPE_PATH, O_RDONLY); 
 | 
      if( wififd < 0 ){ 
 | 
              printf("Can't open %s, errno = %d\n", WIFI_CHIP_TYPE_PATH, errno); 
 | 
              goto done; 
 | 
      } 
 | 
  
 | 
      memset(buf, 0, 64); 
 | 
      if( 0 == read(wififd, buf, 10) ){ 
 | 
              printf("read failed\n"); 
 | 
              close(wififd); 
 | 
              goto done; 
 | 
      } 
 | 
      close(wififd); 
 | 
  
 | 
      if(0 == strncmp(buf, "BCM4329", strlen("BCM4329")) ) { 
 | 
              chip_type = BCM4329; 
 | 
              printf("Read wifi chip type OK ! chip_type = BCM4329\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "RTL8188CU", strlen("RTL8188CU")) ) { 
 | 
              chip_type = RTL8188CU; 
 | 
              printf("Read wifi chip type OK ! chip_type = RTL8188CU\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "RTL8188EU", strlen("RTL8188EU")) ) { 
 | 
              chip_type = RTL8188EU; 
 | 
              printf("Read wifi chip type OK ! chip_type = RTL8188EU\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "BCM4330", strlen("BCM4330")) ) { 
 | 
              chip_type = BCM4330; 
 | 
              printf("Read wifi chip type OK ! chip_type = BCM4330\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "RK901", strlen("RK901")) ) { 
 | 
              chip_type = RK901; 
 | 
              printf("Read wifi chip type OK ! chip_type = RK901\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "RK903", strlen("RK903")) ) { 
 | 
              chip_type = RK903; 
 | 
              printf("Read wifi chip type OK ! chip_type = RK903\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "MT6620", strlen("MT6620")) ) { 
 | 
              chip_type = MT6620; 
 | 
              printf("Read wifi chip type OK ! chip_type = MT6620\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "RT5370", strlen("RT5370")) ) { 
 | 
              chip_type = RT5370; 
 | 
              printf("Read wifi chip type OK ! chip_type = RT5370\n"); 
 | 
      } 
 | 
      else if (0 == strncmp(buf, "MT5931", strlen("MT5931")) ) { 
 | 
              chip_type = MT5931; 
 | 
              printf("Read wifi chip type OK ! chip_type = MT5931\n"); 
 | 
      } 
 | 
  
 | 
done: 
 | 
      return chip_type; 
 | 
} 
 | 
  
 | 
static int init_rfkill() { 
 | 
    char path[64]; 
 | 
    char buf[16]; 
 | 
    int fd; 
 | 
    int sz; 
 | 
    int id; 
 | 
    for (id = 0; ; id++) { 
 | 
        snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id); 
 | 
        fd = open(path, O_RDONLY); 
 | 
        if (fd < 0) { 
 | 
            LOGW("open(%s) failed: %s (%d)\n", path, strerror(errno), errno); 
 | 
            return -1; 
 | 
        } 
 | 
        sz = read(fd, &buf, sizeof(buf)); 
 | 
        close(fd); 
 | 
        if (sz >= 9 && memcmp(buf, "bluetooth", 9) == 0) { 
 | 
            rfkill_id = id; 
 | 
            break; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    asprintf(&rfkill_state_path, "/sys/class/rfkill/rfkill%d/state", rfkill_id); 
 | 
    return 0; 
 | 
} 
 | 
  
 | 
static int broadcom_set_bluetooth_power(int on) { 
 | 
    int sz; 
 | 
    int fd = -1; 
 | 
    int ret = -1; 
 | 
    const char buffer = (on ? '1' : '0'); 
 | 
  
 | 
    if (rfkill_id == -1) { 
 | 
        if (init_rfkill()) goto out; 
 | 
    } 
 | 
  
 | 
    fd = open(rfkill_state_path, O_WRONLY); 
 | 
    if (fd < 0) { 
 | 
        printf("open(%s) for write failed: %s (%d)\n", rfkill_state_path, 
 | 
             strerror(errno), errno); 
 | 
        goto out; 
 | 
    } 
 | 
    sz = write(fd, &buffer, 1); 
 | 
    if (sz < 0) { 
 | 
        printf("write(%s) failed: %s (%d)\n", rfkill_state_path, strerror(errno), 
 | 
             errno); 
 | 
        goto out; 
 | 
    } 
 | 
    ret = 0; 
 | 
  
 | 
out: 
 | 
    if (fd >= 0) close(fd); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
static int mtk_set_bluetooth_power(int on) { 
 | 
    int sz; 
 | 
    int fd = -1; 
 | 
    int ret = -1; 
 | 
    const uint32_t buf = (on ? 1 : 0); 
 | 
  
 | 
    fd = open(BTHWCTL_DEV_NAME, O_RDWR); 
 | 
    if (fd < 0) { 
 | 
        LOGE("Open %s to set BT power fails: %s(%d)", BTHWCTL_DEV_NAME, 
 | 
             strerror(errno), errno); 
 | 
        goto out1; 
 | 
    } 
 | 
  
 | 
    ret = ioctl(fd, BTHWCTL_IOCTL_SET_POWER, &buf); 
 | 
    if(ret < 0) { 
 | 
        LOGE("Set BT power %d fails: %s(%d)\n", buf, 
 | 
             strerror(errno), errno); 
 | 
        goto out1; 
 | 
    } 
 | 
  
 | 
    bluetooth_power_status = on ? 1 : 0; 
 | 
  
 | 
out1: 
 | 
    if (fd >= 0) close(fd); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
static int rda587x_set_bluetooth_power(int on) { 
 | 
    int fd = -1; 
 | 
    int bt_on_off = -1; 
 | 
  
 | 
    fd = open(TCC_BT_DEVICE_PATH, O_RDWR); 
 | 
    if( fd < 0 ) 
 | 
    { 
 | 
        printf("[###### TCC BT #######] [%s] open error[%d]\n", TCC_BT_DEVICE_PATH, fd); 
 | 
        return -1; 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
        bt_on_off = 0; 
 | 
        ioctl(fd, IOCTL_BT_DEV_POWER, &bt_on_off);//make sure bt is disabled 
 | 
        printf("[##### TCC BT #####] set_bluetooth_power [%d]\n", bt_on_off); 
 | 
        bt_on_off = 1; 
 | 
        ioctl(fd, IOCTL_BT_DEV_POWER, &bt_on_off); 
 | 
        printf("[##### TCC BT #####] set_bluetooth_power [%d]\n", bt_on_off); 
 | 
        close(fd); 
 | 
        return 0; 
 | 
    } 
 | 
} 
 | 
  
 | 
static int rda5990_set_bluetooth_power(int on) { 
 | 
    return 0; 
 | 
} 
 | 
  
 | 
static int set_bluetooth_power(int on) { 
 | 
    if(chip_type == MT5931) { 
 | 
        return mtk_set_bluetooth_power(on); 
 | 
    } else if(chip_type == RDA587x) { 
 | 
        return rda587x_set_bluetooth_power(on); 
 | 
    } else if(chip_type == RDA5990) { 
 | 
        return rda5990_set_bluetooth_power(on); 
 | 
    } else { 
 | 
        return broadcom_set_bluetooth_power(on); 
 | 
    } 
 | 
} 
 | 
  
 | 
/** 
 | 
@ret: 
 | 
  >=0 , socket created ok; 
 | 
  <0, socket created fail; 
 | 
*/ 
 | 
static inline int bt_test_create_sock() { 
 | 
    int sock = 0; 
 | 
    sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); 
 | 
    if (sock < 0) { 
 | 
        printf("bluetooth_test Failed to create bluetooth hci socket: %s (%d)\n", 
 | 
             strerror(errno), errno); 
 | 
        return -1; 
 | 
    } 
 | 
    return sock; 
 | 
} 
 | 
  
 | 
#if 1 
 | 
static int start_hciattach() { 
 | 
    int ret; 
 | 
    if(chip_type == MT5931) { 
 | 
      ret = __system("/system/bin/hciattach_mtk -n -t 10 -s 115200 /dev/ttyS0 mtk 1500000 noflow &"); 
 | 
    } else if(chip_type == RDA587x) { 
 | 
      ret = __system("/system/bin/hciattach_5876 -n -s 115200 /dev/ttyS0 rda 1500000 noflow &"); 
 | 
    } else if(chip_type == RDA5990) { 
 | 
      ret = __system("/system/bin/hciattach_5990 -n -s 115200 /dev/ttyS0 rda 921600 noflow &"); 
 | 
    } else if(chip_type == RTK8723AS) { 
 | 
      ret = __system("/system/bin/hciattach_8723 -n -s 115200  /dev/ttyS0 rtk_h5 &"); 
 | 
    } else if(chip_type == RTK8723AU) { 
 | 
      ret = __system("insmod /res/rtk_btusb.ko"); 
 | 
    } else { 
 | 
        ret = __system("/system/bin/brcm_patchram_plus --patchram bychip --baudrate 1500000 --enable_lpm --enable_hci /dev/ttyS0 &"); 
 | 
    } 
 | 
    return ret; 
 | 
} 
 | 
#else 
 | 
static int start_hciattach() { 
 | 
    int ret; 
 | 
    char service_name[32]; 
 | 
  
 | 
    if(chip_type == MT5931) { 
 | 
        strcpy(service_name, "hciattach_mtk"); 
 | 
    } else if(chip_type == RDA587x) { 
 | 
      strcpy(service_name, "hciattach_587x"); 
 | 
    } else if(chip_type == RDA5990) { 
 | 
      strcpy(service_name, "hciattach_5990"); 
 | 
    } else { 
 | 
        strcpy(service_name, "hciattach_brm"); 
 | 
    } 
 | 
  
 | 
    if (property_set("ctl.start", service_name) < 0) { 
 | 
        printf("bluetooth_test Failed to start %s\n", service_name); 
 | 
        return -1; 
 | 
    } 
 | 
  
 | 
    return ret; 
 | 
} 
 | 
#endif 
 | 
  
 | 
static int bt_test_enable() { 
 | 
    int ret = -1; 
 | 
    int hci_sock = -1; 
 | 
    int attempt; 
 | 
  
 | 
    if (set_bluetooth_power(1) < 0) goto out; 
 | 
  
 | 
    printf("Starting hciattach daemon\n"); 
 | 
    if (start_hciattach() != 0) { 
 | 
        printf("Failed to start hciattach\n"); 
 | 
        set_bluetooth_power(0); 
 | 
        goto out; 
 | 
    } 
 | 
  
 | 
    // Try for 10 seconds, this can only succeed once hciattach has sent the 
 | 
    // firmware and then turned on hci device via HCIUARTSETPROTO ioctl 
 | 
    printf("Waiting for HCI device present...\n"); 
 | 
    for (attempt = 50; attempt > 0;  attempt--) { 
 | 
        printf("..%d..\n", attempt); 
 | 
        hci_sock = bt_test_create_sock(); 
 | 
        if (hci_sock < 0) goto out; 
 | 
  
 | 
        ret = ioctl(hci_sock, HCIDEVUP, HCI_DEV_ID); 
 | 
  
 | 
        if (!ret) { 
 | 
            break; 
 | 
        } else if (errno == EALREADY) { 
 | 
            printf("Bluetoothd already started, unexpectedly!\n"); 
 | 
            break; 
 | 
        } 
 | 
  
 | 
        close(hci_sock); 
 | 
        usleep(200000);  // 200 ms retry delay 
 | 
    } 
 | 
    if (attempt == 0) { 
 | 
        printf("%s: Timeout waiting for HCI device to come up, ret=%d\n", 
 | 
            __FUNCTION__, ret); 
 | 
        set_bluetooth_power(0); 
 | 
        goto out; 
 | 
    } 
 | 
  
 | 
        printf("bt_enable success.\n"); 
 | 
    ret = 0; 
 | 
  
 | 
out: 
 | 
    if (hci_sock >= 0) close(hci_sock); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
static int my_ba2str(const bdaddr_t *ba, char *str) { 
 | 
    return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 
 | 
                ba->b[5], ba->b[4], ba->b[3], ba->b[2], ba->b[1], ba->b[0]); 
 | 
} 
 | 
  
 | 
int bt_get_chipname(char* name, int len) 
 | 
{ 
 | 
    int ret = -1; 
 | 
    int fd = -1; 
 | 
    int sz = 0; 
 | 
    char* rfkill_name_path = NULL; 
 | 
  
 | 
    if (rfkill_id == -1) { 
 | 
        if (init_rfkill()) goto out; 
 | 
    } 
 | 
  
 | 
    asprintf(&rfkill_name_path, "/sys/class/rfkill/rfkill%d/name", rfkill_id); 
 | 
  
 | 
    fd = open(rfkill_name_path, O_RDONLY); 
 | 
    if (fd < 0) { 
 | 
        printf("open(%s) failed: %s (%d)", rfkill_name_path, strerror(errno), 
 | 
             errno); 
 | 
        goto out; 
 | 
    } 
 | 
  
 | 
    sz = read(fd, name, len); 
 | 
    if (sz < 0) { 
 | 
        printf("read(%s) failed: %s (%d)", rfkill_name_path, strerror(errno), 
 | 
             errno); 
 | 
        goto out; 
 | 
    } 
 | 
    name[sz] = '\0'; 
 | 
    if (name[sz-1]=='\n') 
 | 
        name[sz-1] = '\0'; 
 | 
  
 | 
    ret = 0; 
 | 
  
 | 
out: 
 | 
    if (fd >= 0) close(fd); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
int check_bluedroid_test() 
 | 
{ 
 | 
    FILE *fp; 
 | 
  
 | 
    fp = fopen("/data/bt_success.txt", "r"); 
 | 
    if(fp != NULL) { 
 | 
        printf("check_bluedroid_test: success.\n"); 
 | 
        fclose(fp); 
 | 
        fp = NULL; 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    //fp = fopen("/data/bt_fail.txt", "r"); 
 | 
    //if(fp != NULL) { 
 | 
    //    printf("check_bluedroid_test: fail.\n"); 
 | 
    //    fclose(fp); 
 | 
    //    fp = NULL; 
 | 
    //    return -1; 
 | 
    //} 
 | 
  
 | 
    return 0; // wait 
 | 
} 
 | 
  
 | 
int bluedroid_test() 
 | 
{ 
 | 
    int ret, counts = 10; 
 | 
  
 | 
    if (chmod(BTHWCTL_DEV_NAME, 0660) < 0) { 
 | 
        printf("Error changing permissions of %s to 0660: %s", 
 | 
                BTHWCTL_DEV_NAME, strerror(errno)); 
 | 
        unlink(BTHWCTL_DEV_NAME); 
 | 
    } 
 | 
  
 | 
    if (chmod("/sys/class/rfkill/rfkill0/state", 0775) < 0) { 
 | 
        printf("Error changing permissions of %s to 0660: %s", 
 | 
                "/sys/class/rfkill/rfkill0/state", strerror(errno)); 
 | 
        unlink("/sys/class/rfkill/rfkill0/state"); 
 | 
    } 
 | 
  
 | 
    if (chmod("/sys/class/rfkill/rfkill0/type", 0775) < 0) { 
 | 
        printf("Error changing permissions of %s to 0660: %s", 
 | 
                "/sys/class/rfkill/rfkill0/type", strerror(errno)); 
 | 
        unlink("/sys/class/rfkill/rfkill0/type"); 
 | 
    } 
 | 
  
 | 
    if (chmod("/data", 0775) < 0) { 
 | 
        printf("Error changing permissions of %s to 0660: %s", 
 | 
                "/data", strerror(errno)); 
 | 
        unlink("/data"); 
 | 
    } 
 | 
  
 | 
    if (chmod("/dev/ttyS0", 0775) < 0) { 
 | 
        printf("Error changing permissions of %s to 0775 %s", 
 | 
                "/dev/ttyS0", strerror(errno)); 
 | 
    } 
 | 
  
 | 
    printf("bluedroid_test: start bdt test:\n"); 
 | 
  
 | 
    ret = __system("/system/bin/bdt &"); 
 | 
    if(ret != 0) { 
 | 
        printf("bluedroid_test: start bdt failed.\n"); 
 | 
        return -1; 
 | 
    } 
 | 
  
 | 
    while(counts-- > 0) { 
 | 
        ret = check_bluedroid_test(); 
 | 
        if(ret == 1) { 
 | 
            break; 
 | 
        } 
 | 
        usleep(1000000); 
 | 
    } 
 | 
    if (counts == 0) { 
 | 
        printf("bluedroid_test: waitting for bt test ready timeout!\n"); 
 | 
        ret = -1; 
 | 
    } 
 | 
  
 | 
    return ret; 
 | 
} 
 | 
  
 | 
static char bt_chip[64] = ""; 
 | 
  
 | 
int bt_test_bluez() 
 | 
{ 
 | 
    int dev_id = 0; 
 | 
    int sock = 0; 
 | 
    int i = 0; 
 | 
    int ret = 0; 
 | 
    char dt[32] = {0}; 
 | 
    chip_type = RK903; 
 | 
    if(script_fetch("bluetooth", "chip_type", (int *)dt, 8) == 0) { 
 | 
        printf("script_fetch chip_type = %s.\n", dt); 
 | 
    } 
 | 
    if(strcmp(dt, "rk903") == 0) { 
 | 
        chip_type = RK903; 
 | 
    } else if(strcmp(dt, "mt6622") == 0) { 
 | 
        chip_type = MT5931; 
 | 
    } else if(strcmp(dt, "rda587x") == 0) { 
 | 
        chip_type = RDA587x; 
 | 
    } else if(strcmp(dt, "rda5990") == 0) { 
 | 
        chip_type = RDA5990; 
 | 
    } else if(strcmp(dt, "rtk8723as") == 0) { 
 | 
        chip_type = RTK8723AS; 
 | 
    } else if(strcmp(dt, "rtk8723bs") == 0) { 
 | 
        chip_type = RTK8723BS; 
 | 
    } else if(strcmp(dt, "rtk8723au") == 0) { 
 | 
        chip_type = RTK8723AU; 
 | 
    } else if(strcmp(dt, "rtk8723bu") == 0) { 
 | 
        chip_type = RTK8723BU; 
 | 
    } else if(strcmp(dt, "bk3515") == 0) { 
 | 
        chip_type = BK3515; 
 | 
        sleep(5); 
 | 
    } else { 
 | 
        if (bt_get_chipname(bt_chip, 63) != 0) { 
 | 
  
 | 
            printf("Can't read BT chip name\n"); 
 | 
            goto fail; 
 | 
        } 
 | 
  
 | 
        if (!strcmp(bt_chip, "rk903_26M")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "rk903")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6210")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6330")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6476")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6493")) 
 | 
            chip_type = RK903; 
 | 
        else { 
 | 
            printf("Not support BT chip, skip bt test.\n"); 
 | 
            goto fail; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    printf("bluetooth_test main function started: chip_type = %d\n", chip_type); 
 | 
  
 | 
    if(chip_type == RTK8723BS || chip_type == BK3515) { 
 | 
        ret = bluedroid_test(); 
 | 
        if(ret == 1) { 
 | 
            printf("bluetooth_test success.\n"); 
 | 
            goto success; 
 | 
        } else { 
 | 
            printf("bluetooth_test fail.\n"); 
 | 
            goto fail; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if(chip_type == RTK8723AU || chip_type == RTK8723BU) { 
 | 
        int ret; 
 | 
        ret = __system("busybox dmesg | busybox grep 'hci_register_dev success'"); 
 | 
        printf("a:ret = %d.\n", ret); 
 | 
        if (ret != 0) { 
 | 
            ret = __system("insmod /res/rtk_btusb.ko"); 
 | 
            ret = __system("busybox dmesg | busybox grep 'hci_register_dev success'"); 
 | 
        } 
 | 
        printf("b:ret = %d.\n", ret); 
 | 
        if(ret != 0) { 
 | 
            printf("bluetooth_test fail.\n"); 
 | 
            goto fail; 
 | 
        } 
 | 
        printf("bluetooth_test success.\n"); 
 | 
        goto success; 
 | 
    } 
 | 
  
 | 
    ret = bt_test_enable(); 
 | 
    if(ret < 0){ 
 | 
        printf("bluetooth_test main function fail to enable \n"); 
 | 
        goto fail; 
 | 
    } 
 | 
  
 | 
    dev_id = hci_get_route(NULL); 
 | 
  
 | 
    if(dev_id < 0){ 
 | 
        printf("bluetooth_test main function fail to get dev id\n"); 
 | 
        goto fail; 
 | 
    } 
 | 
  
 | 
    printf("bluetooth_test main function hci_get_route dev_id=%d\n",dev_id); 
 | 
  
 | 
    sock = hci_open_dev( dev_id ); 
 | 
    if(sock < 0){ 
 | 
        printf("bluetooth_test main function fail to open bluetooth sock\n"); 
 | 
        goto fail; 
 | 
    } 
 | 
  
 | 
    printf("bluetooth_test main function hci_open_dev ok\n"); 
 | 
  
 | 
    if(sock >= 0){ 
 | 
        close( sock ); 
 | 
    } 
 | 
  
 | 
    /*ret = bt_test_disable(); 
 | 
    if(ret < 0){ 
 | 
        printf("bluetooth_test main function fail to disable\n"); 
 | 
        ui_print_xy_rgba(0,tc_info->y,255,0,0,255,"bluetooth test error\n"); 
 | 
        return 0; 
 | 
    }*/ 
 | 
  
 | 
success: 
 | 
    printf("bluetooth_test main function end\n"); 
 | 
    return 0; 
 | 
  
 | 
fail: 
 | 
    printf("bluetooth_test main function end\n"); 
 | 
    return -1; 
 | 
} 
 | 
  
 | 
#define LOG(x...)   printf("[BT_TEST] "x) 
 | 
  
 | 
static int get_chip_type() 
 | 
{ 
 | 
    char dt[32] = {0}; 
 | 
    chip_type = RK903; 
 | 
    if(script_fetch("bluetooth", "chip_type", (int *)dt, 8) == 0) { 
 | 
        LOG("script_fetch chip_type = %s.\n", dt); 
 | 
    } 
 | 
    if(strcmp(dt, "rk903") == 0) { 
 | 
        chip_type = RK903; 
 | 
    } else if(strcmp(dt, "mt6622") == 0) { 
 | 
        chip_type = MT5931; 
 | 
    } else if(strcmp(dt, "rda587x") == 0) { 
 | 
        chip_type = RDA587x; 
 | 
    } else if(strcmp(dt, "rda5990") == 0) { 
 | 
        chip_type = RDA5990; 
 | 
    } else if(strcmp(dt, "rtk8723as") == 0) { 
 | 
        chip_type = RTK8723AS; 
 | 
    } else if(strcmp(dt, "rtk8723bs") == 0) { 
 | 
        chip_type = RTK8723BS; 
 | 
    } else if(strcmp(dt, "rtk8723au") == 0) { 
 | 
        chip_type = RTK8723AU; 
 | 
    } else if(strcmp(dt, "rtk8723bu") == 0) { 
 | 
        chip_type = RTK8723BU; 
 | 
    } else if(strcmp(dt, "bk3515") == 0) { 
 | 
        chip_type = BK3515; 
 | 
    } else if(strcmp(dt, "Sofia-3gr") == 0) { 
 | 
        chip_type = SOFIA_3GR; 
 | 
    } else { 
 | 
        if (bt_get_chipname(bt_chip, 63) != 0) { 
 | 
            LOG("Can't read BT chip name\n"); 
 | 
            chip_type = BT_UNKNOWN; 
 | 
        } 
 | 
  
 | 
        if (!strcmp(bt_chip, "rk903_26M")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "rk903")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6210")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6330")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6476")) 
 | 
            chip_type = RK903; 
 | 
        else if (!strcmp(bt_chip, "ap6493")) 
 | 
            chip_type = RK903; 
 | 
        else { 
 | 
            LOG("Not support BT chip, skip bt test.\n"); 
 | 
            chip_type = BT_UNKNOWN; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    LOG("chip type is: %d\n", chip_type); 
 | 
  
 | 
    return chip_type; 
 | 
} 
 | 
  
 | 
static void change_mode() 
 | 
{ 
 | 
    if (chmod(BTHWCTL_DEV_NAME, 0660) < 0) { 
 | 
        LOG("Error changing permissions of %s to 0660: %s\n", 
 | 
                BTHWCTL_DEV_NAME, strerror(errno)); 
 | 
        unlink(BTHWCTL_DEV_NAME); 
 | 
    } 
 | 
  
 | 
    if (chmod("/sys/class/rfkill/rfkill0/state", 0775) < 0) { 
 | 
        LOG("Error changing permissions of %s to 0660: %s\n", 
 | 
                "/sys/class/rfkill/rfkill0/state", strerror(errno)); 
 | 
        unlink("/sys/class/rfkill/rfkill0/state"); 
 | 
    } 
 | 
  
 | 
    if (chmod("/sys/class/rfkill/rfkill0/type", 0775) < 0) { 
 | 
        LOG("Error changing permissions of %s to 0660: %s\n", 
 | 
                "/sys/class/rfkill/rfkill0/type", strerror(errno)); 
 | 
        unlink("/sys/class/rfkill/rfkill0/type"); 
 | 
    } 
 | 
  
 | 
    if (chmod("/dev/rtk_btusb", 0775) < 0) { 
 | 
        LOG("Error changing permissions of %s to 0660: %s\n", 
 | 
                "/dev/rtk_btusb", strerror(errno)); 
 | 
    } 
 | 
  
 | 
    if (chmod("/dev/ttyS0", 0775) < 0) { 
 | 
        LOG("Error changing permissions of %s to 0775 %s\n", 
 | 
                "/dev/ttyS0", strerror(errno)); 
 | 
    } 
 | 
  
 | 
    LOG("Change mode finish\n"); 
 | 
  
 | 
} 
 | 
  
 | 
static int bt_test_bluedroid() 
 | 
{ 
 | 
    int ret = -1; 
 | 
    FILE *fp=NULL; 
 | 
    int try = 20, bytes_for_second = 10*1024; 
 | 
    char *result_buf, *buf; 
 | 
    int result_size = try * bytes_for_second; 
 | 
  
 | 
    result_buf = malloc(result_size); 
 | 
    if (result_buf == NULL) { 
 | 
        LOG("malloc result_buf fail\n"); 
 | 
        return ret; 
 | 
    } 
 | 
    buf = result_buf; 
 | 
  
 | 
    change_mode(); 
 | 
  
 | 
    fp = popen("echo \"enable\" | bdt", "r"); 
 | 
    if (fp != NULL) { 
 | 
        int fd = fileno(fp); 
 | 
        int flags = fcntl(fd, F_GETFL, 0); 
 | 
        int len = 0; 
 | 
        fcntl(fd, F_SETFL, flags|O_NONBLOCK); 
 | 
  
 | 
        LOG("running bdt for bluetooth test...\n"); 
 | 
        while (try-->0) { 
 | 
            buf += len; 
 | 
            len = fread(buf, sizeof(char), bytes_for_second, fp); 
 | 
            if (len) { 
 | 
                //LOG("read: %s\n", buf); 
 | 
                if (strstr(result_buf, "ADAPTER STATE UPDATED : ON")) { 
 | 
                    LOG("bt test success!\n"); 
 | 
                    ret = 0; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
            LOG("wait %d\n", try); 
 | 
            sleep(1); 
 | 
        } 
 | 
        pclose(fp); 
 | 
        if (try<=0) 
 | 
            LOG("bt test timeout!\n"); 
 | 
    } else 
 | 
        LOG("run bdt fail!\n"); 
 | 
  
 | 
    free(result_buf); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
#elif defined(SOFIA3GR_PCBA) 
 | 
int check_Sofia3gr_bluedroid_test()//add by wjh 
 | 
{ 
 | 
    LOG("Sofia3gr_bluedroid_test: start check bdt test result.\n"); 
 | 
  
 | 
    int ret = -1; 
 | 
    FILE *fp=NULL; 
 | 
    int try = 10, bytes_for_second = 10*1024; 
 | 
    char *result_buf, *buf; 
 | 
    int result_size = try * bytes_for_second; 
 | 
  
 | 
    result_buf = malloc(result_size); 
 | 
    if (result_buf == NULL) { 
 | 
        LOG("malloc result_buf fail\n"); 
 | 
        return ret; 
 | 
    } 
 | 
    buf = result_buf; 
 | 
  
 | 
    fp = popen("echo \"enable\" | bdt", "r"); 
 | 
    if (fp != NULL) { 
 | 
        int fd = fileno(fp); 
 | 
        int flags = fcntl(fd, F_GETFL, 0); 
 | 
        int len = 0; 
 | 
        fcntl(fd, F_SETFL, flags|O_NONBLOCK); 
 | 
  
 | 
        LOG("running bdt for bluetooth test...\n"); 
 | 
        while (try-->0) { 
 | 
            buf += len; 
 | 
            len = fread(buf, sizeof(char), bytes_for_second, fp); 
 | 
            if (len) { 
 | 
                //LOG("read: %s\n", buf); 
 | 
                if (strstr(result_buf, "ADAPTER STATE UPDATED : ON")) { 
 | 
                    LOG("bt test success!\n"); 
 | 
                    ret = 0; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
            LOG("wait %d\n", try); 
 | 
            sleep(1); 
 | 
        } 
 | 
        pclose(fp); 
 | 
        if (try<=0) 
 | 
            LOG("bt test timeout!\n"); 
 | 
    } else 
 | 
        LOG("run bdt fail!\n"); 
 | 
  
 | 
    free(result_buf); 
 | 
    popen("echo \"quite\" | bdt", "r"); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
  
 | 
int Sofia3gr_bluedroid_test()//add by wjh 
 | 
{ 
 | 
    int ret, counts = 3; 
 | 
  
 | 
    LOG("Sofia3gr_bluedroid_test: start bdt.\n"); 
 | 
    while(counts-- > 0) 
 | 
    { 
 | 
        ret = check_Sofia3gr_bluedroid_test(); 
 | 
        if(ret == 0) 
 | 
        { 
 | 
            break; 
 | 
        } 
 | 
    } 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
#else 
 | 
int uart_fd = -1; 
 | 
struct termios termios; 
 | 
unsigned char  buffer[1024]; 
 | 
int ttytestResult= -1; 
 | 
unsigned char hci_reset[] = { 0x01, 0x03, 0x0c, 0x00 }; 
 | 
unsigned char hci_rtksyc[] = { 0xc0, 0x00, 0x2f, 0x00,0xd0, 0x01,0x7e,0xc0}; 
 | 
  
 | 
  
 | 
void 
 | 
init_uart_brcm() 
 | 
{ 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    int n = tcgetattr(uart_fd, &termios); 
 | 
    printf("tcgetattr %d\n",n); 
 | 
  
 | 
#ifndef __CYGWIN__ 
 | 
    cfmakeraw(&termios); 
 | 
#else 
 | 
    termios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP 
 | 
                | INLCR | IGNCR | ICRNL | IXON); 
 | 
    termios.c_oflag &= ~OPOST; 
 | 
    termios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); 
 | 
    termios.c_cflag &= ~(CSIZE | PARENB); 
 | 
    termios.c_cflag |= CS8; 
 | 
#endif 
 | 
  
 | 
    //termios.c_cflag |= CRTSCTS; 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    cfsetospeed(&termios, B115200); 
 | 
    cfsetispeed(&termios, B115200); 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
} 
 | 
  
 | 
  
 | 
void 
 | 
init_uart_rtk() 
 | 
{ 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    int n = tcgetattr(uart_fd, &termios); 
 | 
    printf("tcgetattr %d\n",n); 
 | 
  
 | 
#ifndef __CYGWIN__ 
 | 
    cfmakeraw(&termios); 
 | 
#else 
 | 
    termios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP 
 | 
                | INLCR | IGNCR | ICRNL | IXON); 
 | 
    termios.c_oflag &= ~OPOST; 
 | 
    termios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); 
 | 
    termios.c_cflag &= ~(CSIZE | PARENB); 
 | 
    termios.c_cflag |= CS8; 
 | 
#endif 
 | 
        termios.c_cflag &= ~CRTSCTS; 
 | 
  
 | 
    termios.c_cflag |= PARENB; 
 | 
  
 | 
    //termios.c_cflag |= CRTSCTS; 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    tcflush(uart_fd, TCIOFLUSH); 
 | 
    cfsetospeed(&termios, B115200); 
 | 
    cfsetispeed(&termios, B115200); 
 | 
    tcsetattr(uart_fd, TCSANOW, &termios); 
 | 
} 
 | 
  
 | 
void 
 | 
dump(unsigned char *out, int len) 
 | 
{ 
 | 
    int i; 
 | 
  
 | 
    for (i = 0; i < len; i++) { 
 | 
        if (i && !(i % 16)) { 
 | 
            printf("\n"); 
 | 
        } 
 | 
  
 | 
        printf("%02x ", out[i]); 
 | 
    } 
 | 
  
 | 
    printf("\n"); 
 | 
} 
 | 
  
 | 
  
 | 
#define READTTY_TIMEOUT  30//3s 
 | 
int readttyLen(int fd,unsigned char *buffer,int len) 
 | 
{ 
 | 
    int count; 
 | 
    int i= 0; 
 | 
    int timeout=0; 
 | 
    while(len){ 
 | 
        count = read(fd,&buffer[i],1); 
 | 
        if(count == 1){ 
 | 
            i += count; 
 | 
            len -= count; 
 | 
        } 
 | 
        else{ 
 | 
            usleep(100000);//100ms 
 | 
            timeout ++; 
 | 
            //printf("timeout %d\n", timeout); 
 | 
            if(timeout >= READTTY_TIMEOUT) 
 | 
                return -1; 
 | 
        } 
 | 
    } 
 | 
    return i; 
 | 
} 
 | 
void readBrcmTty(int fd, unsigned char  *buffer) 
 | 
{ 
 | 
    int i=0; 
 | 
    int count; 
 | 
    int len; 
 | 
    count = readttyLen(fd,buffer,3); 
 | 
    printf("readBrcmTty count11 %d\n", count); 
 | 
    if(count < 3) 
 | 
        return; 
 | 
    i += count; 
 | 
    len = buffer[2]; 
 | 
  
 | 
    count = readttyLen(fd,&buffer[i],len); 
 | 
    if(count<len) 
 | 
        return; 
 | 
    i += count; 
 | 
  
 | 
    //if (debug) 
 | 
    { 
 | 
  
 | 
        printf("readBrcmTty received %d\n", i); 
 | 
        dump(buffer, i); 
 | 
    } 
 | 
  
 | 
    ttytestResult = 0; 
 | 
    printf("bt ttytest read_event succ\n"); 
 | 
} 
 | 
  
 | 
void readRtkTty(int fd, unsigned char  *buffer) 
 | 
{ 
 | 
    int i=0; 
 | 
    int count; 
 | 
    int len; 
 | 
  
 | 
    count = readttyLen(fd,buffer,16); 
 | 
    if(count < 16) 
 | 
        return; 
 | 
    i += count; 
 | 
  
 | 
    //if (debug) 
 | 
    { 
 | 
  
 | 
        printf("received %d\n", i); 
 | 
        dump(buffer, i); 
 | 
    } 
 | 
  
 | 
    ttytestResult = 0; 
 | 
    printf("bt ttytest read_event succ\n"); 
 | 
} 
 | 
  
 | 
  
 | 
void 
 | 
hci_send_cmd(unsigned char *buf, int len) 
 | 
{ 
 | 
    //if (debug) 
 | 
    { 
 | 
        printf("writing\n"); 
 | 
        dump(buf, len); 
 | 
    } 
 | 
  
 | 
    int writelen=write(uart_fd, buf, len); 
 | 
    printf("writelen %d\n",writelen); 
 | 
} 
 | 
  
 | 
  
 | 
void 
 | 
expired(int sig) 
 | 
{ 
 | 
    ttytestResult = -1; 
 | 
    printf("bt ttytest expired\n"); 
 | 
} 
 | 
  
 | 
void 
 | 
proc_reset() 
 | 
{ 
 | 
    signal(SIGALRM, expired); 
 | 
  
 | 
    printf( "proc_reset"); 
 | 
    alarm(8); 
 | 
  
 | 
    hci_send_buf(hci_reset, sizeof(hci_reset)); 
 | 
  
 | 
    read_event(uart_fd, buffer); 
 | 
  
 | 
    alarm(0); 
 | 
} 
 | 
  
 | 
#define CONF_COMMENT '#' 
 | 
#define CONF_DELIMITERS " =\n\r\t" 
 | 
#define CONF_VALUES_DELIMITERS "=\n\r\t" 
 | 
#define CONF_MAX_LINE_LEN 255 
 | 
void get_tty_conf(const char *p_path,char *ttyPort) 
 | 
{ 
 | 
    FILE    *p_file; 
 | 
    char    *p_name; 
 | 
    char    *p_value; 
 | 
    char    line[CONF_MAX_LINE_LEN+1]; /* add 1 for \0 char */ 
 | 
  
 | 
    printf( "Attempt to load conf from %s", p_path); 
 | 
  
 | 
    if ((p_file = fopen(p_path, "r")) != NULL) 
 | 
    { 
 | 
        /* read line by line */ 
 | 
        while (fgets(line, CONF_MAX_LINE_LEN+1, p_file) != NULL) 
 | 
        { 
 | 
            if (line[0] == CONF_COMMENT) 
 | 
                continue; 
 | 
  
 | 
            p_name = strtok(line, CONF_DELIMITERS); 
 | 
  
 | 
            if (NULL == p_name) 
 | 
            { 
 | 
                continue; 
 | 
            } 
 | 
  
 | 
            p_value = strtok(NULL, CONF_DELIMITERS); 
 | 
  
 | 
            if (NULL == p_value) 
 | 
            { 
 | 
                printf( "vnd_load_conf: missing value for name: %s", p_name); 
 | 
                continue; 
 | 
            } 
 | 
  
 | 
            if (strcmp("UartPort", (const char *)p_name) == 0){ 
 | 
                printf("get ttyPort %s", p_value); 
 | 
                strcpy(ttyPort,p_value); 
 | 
                fclose(p_file); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
        } 
 | 
  
 | 
        fclose(p_file); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
        printf( "vnd_load_conf file >%s< not found", p_path); 
 | 
    } 
 | 
    strcpy(ttyPort,"/dev/ttyS0"); 
 | 
} 
 | 
  
 | 
int test_rtktty() 
 | 
{ 
 | 
    init_uart_rtk(); 
 | 
    hci_send_cmd(hci_rtksyc, sizeof(hci_rtksyc)); 
 | 
    readRtkTty(uart_fd, buffer); 
 | 
    return ttytestResult; 
 | 
} 
 | 
int test_brcmtty() 
 | 
{ 
 | 
    init_uart_brcm(); 
 | 
    hci_send_cmd(hci_reset, sizeof(hci_reset)); 
 | 
    readBrcmTty(uart_fd, buffer); 
 | 
    return ttytestResult; 
 | 
} 
 | 
  
 | 
static void ttytestThread(void *param) 
 | 
{ 
 | 
    char ttyPort[30]={0}; 
 | 
    __system("echo 1 > /sys/class/rfkill/rfkill0/state"); 
 | 
    sleep(1); 
 | 
    get_tty_conf("/vendor/etc/bluetooth/bt_vendor.conf",ttyPort); 
 | 
    if ((uart_fd = open(ttyPort, O_RDWR | O_NOCTTY | O_NONBLOCK)) == -1) { 
 | 
        printf( "port could not be opened, error %d\n", errno); 
 | 
    } 
 | 
  
 | 
    int i; 
 | 
    for(i=0;i<3;i++){ 
 | 
     if(test_brcmtty()>=0) 
 | 
         return; 
 | 
     if(test_rtktty()>=0) 
 | 
         return; 
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
int bluetoothtty_test() 
 | 
{ 
 | 
    int i; 
 | 
  
 | 
    pthread_t thread_id; 
 | 
    pthread_create(&thread_id, NULL,(void*)ttytestThread, NULL); 
 | 
    for(i=10;i>0;i--){ 
 | 
        sleep(1); 
 | 
        if(ttytestResult == 0) 
 | 
            return 0; 
 | 
    } 
 | 
    return -1; 
 | 
  
 | 
} 
 | 
#endif 
 | 
  
 | 
#endif 
 | 
  
 | 
void *bt_test(void *argv) 
 | 
{ 
 | 
    struct testcase_info *tc_info = (struct testcase_info *)argv; 
 | 
    int ret = 0; 
 | 
  
 | 
    /*remind ddr test*/ 
 | 
    if(tc_info->y <= 0) 
 | 
        tc_info->y  = get_cur_print_y(); 
 | 
  
 | 
    ui_print_xy_rgba(0,tc_info->y,255,255,0,255,"%s:[%s..] \n", 
 | 
                    PCBA_BLUETOOTH,PCBA_TESTING); 
 | 
  
 | 
#if 0    //Android pcba test 
 | 
#if defined(SOFIA3GR_PCBA) 
 | 
       ret = Sofia3gr_bluedroid_test(); 
 | 
#elif defined (BLUETOOTH_TTY_TEST) 
 | 
    ret = bluetoothtty_test(); 
 | 
#else 
 | 
    switch (get_chip_type()) { 
 | 
    case RK903: 
 | 
    case RTK8723BS: 
 | 
    case BK3515: 
 | 
        ret = bt_test_bluedroid(); 
 | 
        break; 
 | 
    /*case SOFIA_3GR: 
 | 
        ret = Sofia3gr_bluedroid_test(); 
 | 
        break;*/ 
 | 
    default: 
 | 
        ret = bt_test_bluedroid();//bt_test_bluez(); 
 | 
        break; 
 | 
    } 
 | 
#endif 
 | 
#else  //Linux pcba test 
 | 
    int rst; 
 | 
    char result_filename[100] = {0}; 
 | 
  
 | 
    printf("======================start bt test=============================\n"); 
 | 
    rst = run_test_item_cmd("echo_auto_test echo_bt_test"); 
 | 
  
 | 
    if(rst == 0) { 
 | 
        snprintf(result_filename, sizeof(result_filename), 
 | 
                "%s/echo_bt_test_result", "/tmp"); 
 | 
        ret = parse_test_result(result_filename, "bt_test", NULL); 
 | 
  
 | 
    }else  { 
 | 
        return NULL; 
 | 
    } 
 | 
  
 | 
#endif 
 | 
  
 | 
    if (ret==0) { 
 | 
        ui_print_xy_rgba(0,tc_info->y,0,255,0,255,"%s:[%s]\n", 
 | 
                        PCBA_BLUETOOTH,PCBA_SECCESS); 
 | 
        tc_info->result = 0; 
 | 
    } 
 | 
    else { 
 | 
        ui_print_xy_rgba(0,tc_info->y,255,0,0,255,"%s:[%s]\n", 
 | 
                        PCBA_BLUETOOTH,PCBA_FAILED); 
 | 
        tc_info->result = -1; 
 | 
    } 
 | 
    return 0; 
 | 
} 
 |