Beispiel #1
0
unsigned char BTUartLinuxShutdown(void)
{
    bt_prompt_trace(MOD_BT, "[UART] Close UART port : %d", commPort);
    if(commPort >= 0)
    {
        bt_android_log("[UART] Close UART port : %d", commPort);
        if( close(commPort) < 0 ) {
            bt_prompt_trace(MOD_BT, "[UART] Close UART port failed : %d, %s", errno, strerror(errno));
            bt_android_log("[UART][ERR] Close UART port failed : %d, %s", errno, strerror(errno));
        }
        commPort = -1;
    }
    return 0x00;
}
Beispiel #2
0
U32 bt_dbg_manual_dump_req_hdlr(ilm_struct *ilm_ptr){
    U32 *ptr = (U32*)1;
    bt_prompt_trace(MOD_BT, "Request manual dump");
    bt_android_log("Make mtkbt crash to get coredump");
    usleep(200000);
    *ptr= 0;
    return *ptr;
}
Beispiel #3
0
static BtStatus GORM_Init(void)
{
#if !defined(__ANDROID_EMULATOR__)
    BtStatus status = BT_STATUS_FAILED;
    void *lib_handle;
    SET_UART_SETUP SetUartSetup = NULL;
    INIT mtk = NULL;

    bt_android_log("[BT] + GORM_Init");
    
    /* load BT driver */
    lib_handle = getDriverHandle();    
    if (!lib_handle) 
    {
        bt_prompt_trace(MOD_BT, "[UART][ERR] dlopen failed : %s\n", dlerror());
        return BT_STATUS_FAILED;
    }    

    mtk = dlsym(lib_handle, "mtk");
#ifdef __MTK_STP_SUPPORTED__
    if (!mtk) 
#else
    SetUartSetup = dlsym(lib_handle, "SetUartSetup");
    if ((!mtk) || (!SetUartSetup)) 
#endif
    {
        bt_prompt_trace(MOD_BT, "[UART][ERR] Can not find functions %s\n", dlerror());
        bt_android_log("[BT][ERR] GORM_Init : Can not find functions %s", dlerror());
        dlclose(lib_handle);
        return BT_STATUS_FAILED;
    }
#ifdef __MTK_STP_SUPPORTED__
    bt_android_log("[BT] + call mtk");
    if(!mtk(commPort, NULL, NULL))
    {
        bt_prompt_trace(MOD_BT, "[UART] mtk call return success\n");
        status = BT_STATUS_SUCCESS;
    }
    else
    {
        bt_prompt_trace(MOD_BT, "[UART][ERR] mtk call return failed\n");
        bt_android_log("[BT][ERR] mtk call return failed");
        status = BT_STATUS_FAILED;
    }
    bt_android_log("[BT] - call mtk : status=%d", status);
#else
    /* Start init  */
    SetUartSetup(setup_uart_param);
    if(commPort >= 0)
    {
        struct uart_t u;
        struct termios ti;
        memset(&u, 0, sizeof(u));
        u.flags &= ~FLOW_CTL_MASK;
        u.flags |=  FLOW_CTL_SW;
        u.speed = 3250000;
        //u.speed = 115200;
        
        if (tcgetattr(commPort, &ti) < 0) 
        {
            bt_prompt_trace(MOD_BT, "[UART][ERR] Can't get port settings");
        }
        else
        {
            bt_prompt_trace(MOD_BT, "[UART] Call mtk function\n");
            bt_android_log("[BT] + call mtk");
            if(!mtk(commPort, &u, &ti))
            {
                int val;
                bt_prompt_trace(MOD_BT, "[UART] mtk call return success\n");
                /* uart handle is opened as blocking, change it to non-blocking */
                if ( setUartBlockMode(commPort, 0) < 0 ) {
                    bt_android_log("[BT][ERR] setUartBlockMode return failed");
                    status = BT_STATUS_FAILED;
                }else {
                    status = BT_STATUS_SUCCESS;
                    unmaskEint();
                }
            }
            else
            {
                bt_prompt_trace(MOD_BT, "[UART][ERR] mtk call return failed\n");
                bt_android_log("[BT][ERR] mtk call return failed");
                status = BT_STATUS_FAILED;
            }
            bt_android_log("[BT] - call mtk : status=%d", status);
        }                
    }
    else
    {
        bt_prompt_trace(MOD_BT, "[UART][ERR] commPort is not opened yet\n");
    }
#endif
    /* Close lib_handler */
    dlclose(lib_handle);
    bt_android_log("[BT] - GORM_Init : ret=%d", status);
    return status;
#else /* !defined(__ANDROID_EMULATOR__) */
    return BT_STATUS_SUCCESS;
#endif
}
Beispiel #4
0
int openComm(void)
{
#if 1
    struct termios ti;
    char *device = CUST_BT_SERIAL_PORT;

    bt_prompt_trace(MOD_BT, "[UART] openComm");
    bt_android_log("[UART] openComm");
    if (commPort >= 0)  //modified by autumn
    {
        bt_prompt_trace(MOD_BT, "[UART] openComm already opened");
        bt_android_log("[UART][ERR] commPort=%d already opened.", commPort);
        bt_android_log("[BT][UART] + close uart=%d", commPort);
        close(commPort);
        bt_android_log("[BT][UART] - close uart");
    }
    bt_android_log("[BT][UART] + open uart");
    commPort = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK);    // Modified by SH
    bt_android_log("[BT][UART] - open uart");
    if (commPort < 0) {
        bt_prompt_trace(MOD_BT, "[UART]Can't open serial port: %s (%d)\n", strerror(errno), errno);
        bt_android_log("[UART][ERR] Can't open serial port: %s (%d)\n", strerror(errno), errno);
        return -1;
    }

#ifndef __MTK_STP_SUPPORTED__
    //fcntl(commPort, F_SETFL, FASYNC); // Added by SH
    tcflush(commPort, TCIOFLUSH);

    if (tcgetattr(commPort, &ti) < 0) {
        bt_prompt_trace(MOD_BT, "[UART]Can't get port settings: %s (%d)\n", strerror(errno), errno);
        bt_android_log("[UART][ERR] Can't get port settings: %s (%d)\n", strerror(errno), errno);
        bt_android_log("[UART][ERR] Close commPort");
        close(commPort);
        commPort = -1;
        return -1;
    }

    cfmakeraw(&ti);

    ti.c_cflag |= CLOCAL;
    ti.c_cflag &= ~CRTSCTS;
    #if !defined(__ANDROID_EMULATOR__)
    /* Emulator does not support flow control */
    ti.c_iflag &= ~(IXON | IXOFF | IXANY | 0x80000000);
    #endif
	      
    if (tcsetattr(commPort, TCSANOW, &ti) < 0) {
        bt_prompt_trace(MOD_BT, "[UART] Can't change port settings: %s (%d)\n", strerror(errno), errno);
        bt_android_log("[UART][ERR] Can't change port settings: %s (%d)\n", strerror(errno), errno);
        bt_android_log("[UART][ERR] Close commPort");
        close(commPort);
        commPort = -1;
        return -1;
    }
        
    if( set_speed(commPort, &ti, 115200) < 0){
        bt_android_log("[UART][ERR] set_speed failed");
        close(commPort);
        commPort = -1;
        return -1;
    }

    tcflush(commPort, TCIOFLUSH);
#endif /* ifndef __MTK_STP_SUPPORTED__ */
    bt_prompt_trace(MOD_BT, "[UART] Opening UART successfully : %d", commPort);
    bt_android_log("[UART] Opening UART successfully : %d", commPort);
    return 0;
#else
    
    char portName[20];
    
    sprintf(portName, "/dev/ttyS%d", 2/*readUartSetting()*/);

    bt_prompt_trace(MOD_BT, "Opening UART port : %s", portName);
    
    /* Open UART port */
    if (-1 == (commPort = open(portName, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) ) 
    {
        bt_prompt_trace(MOD_BT, "[Failed] Opening UART port ");
        return 0;
    } 
    else
    {
        struct termios options;

        //fcntl(commPort, F_SETOWN, getpid());
        fcntl(commPort, F_SETFL, FASYNC);

        /* Get default com port setting */
        if( -1 == tcgetattr(commPort, &options) )
        {
            bt_prompt_trace(MOD_BT, "[Failed] tcgetattr UART port failed");
            close(commPort);
            return 0;
        }

        /* Set baud rate to 115200 */
        cfsetispeed(&options, B115200);
        cfsetospeed(&options, B115200);

        options.c_cflag |= (CLOCAL | CREAD);

        options.c_cflag &= ~PARENB;  /* No parity */
        options.c_cflag &= ~CSTOPB;  /* 1 stop bit */
        options.c_cflag &= ~CSIZE;   /* Mask the character size bits */
        options.c_cflag |= CS8;         /* Select 8 data bits */
        /* Disable RTS & CTS */
        options.c_cflag &= ~CRTSCTS;

        tcflush(commPort, TCIFLUSH);
        /* Set new com port setting */

        if( -1 == tcsetattr(commPort, TCSANOW, &options) )
        {
            bt_prompt_trace(MOD_BT, "[Failed] tcsetattr UART port failed");
            close(commPort);
            return 0;
        }

        return 1;
    }
#endif
}