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; }
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; }
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 }
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 }