⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix_devs.c

📁 含有完整TCP/IP PPP协议的嵌入式操作系统
💻 C
📖 第 1 页 / 共 3 页
字号:
                break;            default:                return -1;            }            break;        case UART_SETPARITY:            // 0 (none), 1 (odd) or 2 (even).            t.c_cflag &= ~(PARODD | PARENB);            switch (lv) {            case 0:                break;            case 1:                t.c_cflag |= PARENB | PARODD;                break;            case 2:                t.c_cflag |= PARENB;            default:                return -1;            }            break;        case UART_SETDATABITS:            t.c_cflag &= ~CSIZE;            switch (lv) {            case 5:                t.c_cflag |= CS5;                break;            case 6:                t.c_cflag |= CS6;                break;            case 7:                t.c_cflag |= CS7;                break;            case 8:                t.c_cflag |= CS8;                break;            default:                return -1;            }            break;        case UART_SETSTOPBITS:            switch (lv) {            case 1:                t.c_cflag &= ~CSTOPB;                break;            case 2:                t.c_cflag |= CSTOPB;                break;            default:                return -1;            }            break;        }        /* tcdrain fails on mac os x for some unknown reason -- work around */        while (tcdrain( dcb->dcb_fd ) < 0) {            // printf("UnixDevIOCTL: tcdrain failed: errno: %d\n\r", errno);            errno = 0;            usleep(1000);        }        if (tcsetattr( dcb->dcb_fd , TCSANOW, &t) < 0) {            printf("UnixDevIOCTL: tcsetattr failed: errno: %d\n\r", errno);            errno = 0;            return -1;        }        return 0;    case UART_GETSPEED:    case UART_GETFLOWCONTROL:    case UART_GETPARITY:    case UART_GETDATABITS:    case UART_GETSTOPBITS:        if ((dcb->dcb_fd <= STDERR_FILENO) || ( dcb->dcb_socket))        {            // default answers for sockets / stdio            switch (req){                case UART_GETSPEED:                    *lvp = 9600; return 0;                case UART_GETFLOWCONTROL:                    *lvp = 0; return 0;                case UART_GETPARITY:                    *lvp = 0; return 0;                case UART_GETDATABITS:                    *lvp = 8; return 0;                case UART_GETSTOPBITS:                    *lvp = 1; return 0;            }            return 0;        }                if (tcgetattr(dcb->dcb_fd, &t) != 0)            return -1;        switch (req) {        case UART_GETSPEED:            *lvp = convertToRealSpeed(cfgetospeed(&t));            break;        case UART_GETFLOWCONTROL:            if (t.c_cflag & CRTSCTS)                *lvp = UART_HS_RTSCTS;            else if (t.c_iflag & IXANY)                *lvp = UART_HS_SOFT;            else                *lvp = 0;            break;        case UART_GETPARITY:            if (t.c_cflag & PARENB) {                if (t.c_cflag & PARODD)                    *lvp = 1;                else                    *lvp = 2;            } else                *lvp = 0;            break;        case UART_GETDATABITS:            switch (t.c_cflag & CSIZE) {            case CS5:                *lvp = 5;                break;            case CS6:                *lvp = 6;                break;            case CS7:                *lvp = 7;                break;            case CS8:                *lvp = 8;                break;            default:                return -1;            }            break;        case UART_GETSTOPBITS:            if (t.c_cflag & CSTOPB)                *lvp = 2;            else                *lvp = 1;            break;        }        return 0;#ifdef UART_SETBLOCKREAD    case UART_SETBLOCKREAD:        if (lv)            dcb->dcb_modeflags |= USART_MF_BLOCKREAD;        else            dcb->dcb_modeflags &= ~USART_MF_BLOCKREAD;        return 0;    case UART_GETBLOCKREAD:        if ( dcb->dcb_modeflags & USART_MF_BLOCKREAD)            *lvp = 1;        else            *lvp = 0;        return 0;#endif    case UART_SETCOOKEDMODE:        if (*lvp == 0)            return 0;        else            return -1;                case UART_GETSTATUS:        *lvp = 0;        return 0;    case UART_SETTXBUFSIZ:    case UART_SETRXBUFSIZ:    case UART_SETTXBUFHWMARK:    case UART_SETRXBUFHWMARK:    case UART_SETTXBUFLWMARK:    case UART_SETRXBUFLWMARK:    case UART_SETSTATUS:        return 0;            default:        return -1;    }    return -1;}/* ======================= Devices ======================== *//*! * \brief USART0 device control block structure. */static UNIXDCB dcb_usart0 = {    0,                          /* dcb_modeflags */    0,                          /* dcb_statusflags */    0,                          /* dcb_rtimeout */    0,                          /* dcb_wtimeout */    0,                          /* dbc_last_eol */    0,                          /* dcb_fd */    0,                          /* dcb_rx_rdy *//*  xx,                            dcb_rx_mutex *//*  xx,                            dcb_rx_trigger */};/*! * \brief USART1 device control block structure. */static UNIXDCB dcb_usart1 = {    0,                          /* dcb_modeflags */    0,                          /* dcb_statusflags */    0,                          /* dcb_rtimeout */    0,                          /* dcb_wtimeout */    0,                          /* dbc_last_eol */    0,                          /* dcb_fd */    0,                          /* dcb_rx_rdy *//*  xx,                            dcb_rx_mutex *//*  xx,                            dcb_rx_trigger */};/*! * \brief USART1 device control block structure. */static UNIXDCB dcb_usart2 = {    0,                          /* dcb_modeflags */    0,                          /* dcb_statusflags */    0,                          /* dcb_rtimeout */    0,                          /* dcb_wtimeout */    0,                          /* dbc_last_eol */    0,                          /* dcb_fd */    0,                          /* dcb_rx_rdy *//*  xx,                            dcb_rx_mutex *//*  xx,                            dcb_rx_trigger */};/*! * \brief Debug device 0 information structure. */NUTDEVICE devDebug0 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '0', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart0,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief Debug device 1 information structure. */NUTDEVICE devDebug1 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '1', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart1,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief uart device 0 information structure. */NUTDEVICE devUart0 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '0', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart0,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief uart device 1 information structure. */NUTDEVICE devUart1 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '1', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart1,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief uart device 2 information structure. */NUTDEVICE devUart2 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '2', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart2,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief usartavr device 0 information structure. */NUTDEVICE devUsartAvr0 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '0', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart0,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief usartavr device 1 information structure. */NUTDEVICE devUsartAvr1 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '1', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart1,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*! * \brief usartavr device 2 information structure. */NUTDEVICE devUsartAvr2 = {    0,                          /*!< Pointer to next device. */    {'u', 'a', 'r', 't', '2', 0, 0, 0, 0}    ,                           /*!< Unique device name. */    0,                          /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    0,                          /*!< Interface control block. */    &dcb_usart2,                /*!< Driver control block. */    0,                          /*!< Driver initialization routine. */    UnixDevIOCTL,               /*!< Driver specific control function. */    UnixDevRead,    UnixDevWrite,    UnixDevOpen,    UnixDevClose,    0};/*@}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -