eCos - Gestores de dispositivos • gestores de dispositivos (“device drivers”) • interface aplicacional (API) • gestor de linha série – raw serial driver – tty driver SC -- cra eCos - device driver - user API cyg_io_lookup - obter identificador a partir de nome cyg_io_write - operações de escrita cyg_io_read - operações de leitura cyg_io_get_config - obter informação de configuração cyg_io_set_config - especificar configuração SC -- cra 1 Obter identificador (“handle”) a partir de nome Cyg_ErrNo cyg_io_lookup( const char cyg_io_handle_t *name, *handle ) Exemplo de nome: “/dev/ser0” SC -- cra Escrever dados no dispositivo Cyg_ErrNo cyg_io_write( cyg_io_handle_t const void cyg_uint32 buf len handle, *buf, *len ) - dados a enviar para o dispositivo - dimensão dos dados a escrever / escritos SC -- cra 2 Ler dados do dispositivo Cyg_ErrNo cyg_io_read( cyg_io_handle_t void cyg_uint32 buf len handle, *buf, *len ) - vector para receber dados do dispositivo - dimensão dos dados a ler / lidos SC -- cra Obter configuração do dispositivo Cyg_ErrNo cyg_io_get_config( cyg_io_handle_t cyg_uint32 void cyg_uint32 key buf len handle, key, *buf, *len ) - tipo de informação a obter - estrutura onde colocar a informação (depende de key) - dimensão da informação a obter / obtida SC -- cra 3 Modificar configuração do dispositivo Cyg_ErrNo cyg_io_set_config( cyg_io_handle_t cyg_uint32 const void cyg_uint32 key buf len handle, key, *buf, *len ) - tipo de parâmetros a modificar - novos valores dos parâmetros (depende de key) - dimensão ocupada pelos novos parâmetros SC -- cra Estruturas de dados associadas ao dispositivo série typedef struct { cyg_serial_baud_rate_t cyg_serial_stop_bits_t cyg_serial_parity_t cyg_serial_word_length_t cyg_uint32 baud; stop; parity; word_length; flags; } cyg_serial_info_t; SC -- cra 4 word_length -- número de bits por caracter CYGNUM_SERIAL_WORD_LENGTH_5 CYGNUM_SERIAL_WORD_LENGTH_6 CYGNUM_SERIAL_WORD_LENGTH_7 CYGNUM_SERIAL_WORD_LENGTH_8 baud -- baud rate CYGNUM_SERIAL_BAUD_50 ... CYGNUM_SERIAL_BAUD_9600 CYGNUM_SERIAL_BAUD_14400 CYGNUM_SERIAL_BAUD_19200 CYGNUM_SERIAL_BAUD_38400 CYGNUM_SERIAL_BAUD_57600 CYGNUM_SERIAL_BAUD_115200 CYGNUM_SERIAL_BAUD_234000 SC -- cra stop -- número de stop bits CYGNUM_SERIAL_STOP_1 CYGNUM_SERIAL_STOP_1_5 CYGNUM_SERIAL_STOP_2 parity -- paridade CYGNUM_SERIAL_PARITY_NONE CYGNUM_SERIAL_PARITY_EVEN CYGNUM_SERIAL_PARITY_ODD CYGNUM_SERIAL_PARITY_MARK CYGNUM_SERIAL_PARITY_SPACE SC -- cra 5 flags -- máscara de bits que controla o comportamento do gestor de dispositivo série CYG_SERIAL_FLAGS_xxx: #define CYG_SERIAL_FLAGS_RTSCTS 0x0001 Se este bit estiver activo, a porta série é colocada no modo “hardware handshake”. Neste modo, os pinos CTS e RTS controlam quando é que os dados podem ser enviados / recebidos. Este bit é ignorado caso o hardware não suporte este modo de funcionamento. SC -- cra typedef struct { cyg_int32 cyg_int32 cyg_int32 cyg_int32 rx_bufsize; rx_count; tx_bufsize; tx_count; } cyg_serial_buf_info_t; rx_bufsize rx_count tx_bufsize tx_count -- tamanho do “buffer” de recepção -- número corrente de bytes no “buffer” de recepção -- tamanho do “buffer” de transmissão -- número corrente de bytes no “buffer” de transmissão Todos estes valores são colocados a zero no caso do dispositivo não suportar armazenamento (“buffering”) (i.e. dispositivo acedido por “polling”). SC -- cra 6 Valores de key e tipo de informação CYG_IO_GET_CONFIG_SERIAL_INFO Buf type: cyg_serial_info_t Função: This function retrieves the current state of the driver and hardware. This information contains fields for hardware baud rate, number of stop bits, and parity mode. It also includes a set of flags that control the port, such as hardware flow control. SC -- cra CYG_IO_GET_CONFIG_SERIAL_BUFFER_INFO Buf type: cyg_serial_buf_info_t Function: This function retrieves the current state of the software buffers in the serial drivers. For both receive and transmit buffers it returns the total buffer size and the current number of bytes occupied in the buffer. It does not take into account any buffering such as FIFOs or holding registers that the serial device itself may have. SC -- cra 7 CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN Buf type: void * Function: This function waits for any buffered output to complete. This function only completes when there is no more data remaining to be sent to the device. SC -- cra CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH Buf type: void * Function: This function discards any buffered output for the device. SC -- cra 8 CYG_IO_GET_CONFIG_SERIAL_INPUT_DRAIN Buf type: void * Function: This function discards any buffered input for the device. SC -- cra CYG_IO_GET_CONFIG_SERIAL_ABORT Buf type: void* Function: This function will cause any pending read or write calls on this device to return with -EABORT. SC -- cra 9 CYG_IO_GET_CONFIG_SERIAL_READ_BLOCKING Buf type: cyg_uint32 (values 0 or 1) Function: This function will read back the blocking-mode setting for read calls on this device. This call is only available if the configuration option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING is enabled. SC -- cra CYG_IO_GET_CONFIG_SERIAL_WRITE_BLOCKING Buf type: cyg_uint32 (values 0 or 1) Function: This function will read back the blocking-mode setting for write calls on this device. This call is only available if the configuration option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING is enabled. SC -- cra 10 CYG_IO_SET_CONFIG_SERIAL_INFO Buf type: cyg_serial_info_t Function: This function updates the information for the driver and hardware. The information contains fields for hardware baud rate, number of stop bits, and parity mode. It also includes a set of flags that control the port, such as hardware flow control. SC -- cra CYG_IO_SET_CONFIG_SERIAL_READ_BLOCKING Buf type: cyg_uint32 (values 0 or 1) Function: This function will set the blocking-mode for read calls on this device. This call is only available if the configuration option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING is enabled. SC -- cra 11 CYG_IO_SET_CONFIG_SERIAL_WRITE_BLOCKING Buf type: cyg_uint32 (values 0 or 1) Function: This function will set the blocking-mode for write calls on this device. This call is only available if the configuration option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING is enabled. SC -- cra Exemplo #include #include #include #include #include #include <cyg/kernel/kapi.h> <cyg/error/codes.h> <cyg/io/io.h> <cyg/io/serialio.h> <cyg/io/config_keys.h> <stdio.h> int main(void) { Cyg_ErrNo err; cyg_io_handle_t serH; char c; char bufr[10]; char bufw[10]="123456789"; int n; printf("OLA, eCos world!\n"); err = cyg_io_lookup("/dev/ser0", &serH); printf("lookup err=%x\n", err); while(1){ c = getchar(); if (c=='l') { n = 10; err = cyg_io_read(serH, bufr, &n); printf("io_read err=%x, n=%d buf=%s\n", err, n, bufr); } if (c=='w') { n = 10; err = cyg_io_write(serH, bufw, &n); printf("io_write err=%x, n=%d buf=%s\n", err, n, bufw); } } return 0; } SC -- cra 12