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
Download

eCos - Gestores de dispositivos