/******************************************************************************* ** ** Function userial_ioctl_init_bt_wake ** ** Description helper function to set the open state of the bt_wake if ioctl ** is used. it should not hurt in the rfkill case but it might ** be better to compile it out. ** ** Returns none ** *******************************************************************************/ void userial_ioctl_init_bt_wake(int fd) { uint32_t bt_wake_state; /* assert BT_WAKE through ioctl */ ioctl(fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); ioctl(fd, USERIAL_IOCTL_BT_WAKE_GET_ST, &bt_wake_state); VNDUSERIALDBG("userial_ioctl_init_bt_wake read back BT_WAKE state=%i", \ bt_wake_state); }
/******************************************************************************* ** ** Function userial_vendor_ioctl ** ** Description ioctl inteface ** ** Returns None ** *******************************************************************************/ int userial_vendor_ioctl(userial_vendor_ioctl_op_t op, int *p_data) { int err = -1; switch(op) { #if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) case USERIAL_OP_ASSERT_BT_WAKE: VNDUSERIALDBG("## userial_vendor_ioctl: Asserting BT_Wake ##"); err = ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); break; case USERIAL_OP_DEASSERT_BT_WAKE: VNDUSERIALDBG("## userial_vendor_ioctl: De-asserting BT_Wake ##"); err = ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_DEASSERT, NULL); break; case USERIAL_OP_GET_BT_WAKE_STATE: err = ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_GET_ST, p_data); break; #endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) case USERIAL_OP_FLOW_ON: ALOGI("## userial_vendor_ioctl: UART Flow On "); *p_data |=TIOCM_RTS; err = ioctl(vnd_userial.fd, TIOCMSET, p_data); break; case USERIAL_OP_FLOW_OFF: ALOGI("## userial_vendor_ioctl: UART Flow Off "); ioctl(vnd_userial.fd, TIOCMGET, p_data); *p_data &= ~TIOCM_RTS; err = ioctl(vnd_userial.fd, TIOCMSET, p_data); break; default: break; } return err; }
/******************************************************************************* ** ** Function userial_vendor_set_baud ** ** Description Set new baud rate ** ** Returns None ** *******************************************************************************/ void userial_vendor_set_baud(uint8_t userial_baud) { uint32_t tcio_baud; VNDUSERIALDBG("## userial_vendor_set_baud: %d", userial_baud); userial_to_tcio_baud(userial_baud, &tcio_baud); cfsetospeed(&vnd_userial.termios, tcio_baud); cfsetispeed(&vnd_userial.termios, tcio_baud); tcsetattr(vnd_userial.fd, TCSADRAIN, &vnd_userial.termios); /* don't change speed until last write done */ // tcflush(vnd_userial.fd, TCIOFLUSH); }
/******************************************************************************* ** ** Function userial_ioctl_init_bt_wake ** ** Description helper function to set the open state of the bt_wake if ioctl ** is used. it should not hurt in the rfkill case but it might ** be better to compile it out. ** ** Returns none ** *******************************************************************************/ void userial_ioctl_init_bt_wake(int fd) { uint32_t bt_wake_state; #if (BT_WAKE_USERIAL_LDISC==TRUE) int ldisc = N_BRCM_HCI; /* brcm sleep mode support line discipline */ /* attempt to load enable discipline driver */ if (ioctl(vnd_userial.fd, TIOCSETD, &ldisc) < 0) { VNDUSERIALDBG("USERIAL_Open():fd %d, TIOCSETD failed: error %d for ldisc: %d", fd, errno, ldisc); } #endif /* assert BT_WAKE through ioctl */ ioctl(fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); ioctl(fd, USERIAL_IOCTL_BT_WAKE_GET_ST, &bt_wake_state); VNDUSERIALDBG("userial_ioctl_init_bt_wake read back BT_WAKE state=%i", \ bt_wake_state); }
/******************************************************************************* ** ** Function userial_vendor_ioctl ** ** Description ioctl inteface ** ** Returns None ** *******************************************************************************/ void userial_vendor_ioctl(userial_vendor_ioctl_op_t op, void *p_data) { switch(op) { #if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) case USERIAL_OP_ASSERT_BT_WAKE: VNDUSERIALDBG("## userial_vendor_ioctl: Asserting BT_Wake ##"); ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_ASSERT, NULL); break; case USERIAL_OP_DEASSERT_BT_WAKE: VNDUSERIALDBG("## userial_vendor_ioctl: De-asserting BT_Wake ##"); ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_DEASSERT, NULL); break; case USERIAL_OP_GET_BT_WAKE_STATE: ioctl(vnd_userial.fd, USERIAL_IOCTL_BT_WAKE_GET_ST, p_data); break; #endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) default: break; } }