[ECOS] Serial driver
Tathagata Das
tathagata@alumnux.com
Mon Aug 14 08:43:00 GMT 2006
Hi Andrew,
Thank you very much for your reply.
For my problem 1 :
You are right. I want to echo that character. Please tell me how can I
enable echo.
I am not using any tty layer.
I am sending you DEVTAB_ENTRY for your reference.
DEVTAB_ENTRY( test_serial_iol,
/dev/ser0,
0,
&cyg_io_serial_devio,
test_serial_init,
test_serial_lookup, // Serial driver may need
initializing
&test_serial_channel
);
I only use this single entry. Hope , i do not need two entries (one for
RX and one for TX). Single entry should be good enough.
Also CYGDAT_IO_SERIAL_TTY_CONSOLE = /dev/ser0
Please tell me how can I use tty layer so that I get the echo support.
For my problem 2 :
Yes you are again right. It tries to read a block. But why ?
My scanf is like this ---- scanf("%c", &c); SO it should try to read
single character.
But i have noticed that size = 256 in "while (size< *len) {".
Please tell me why the control does not come out and why I am not able
to print the value of variable 'c'.
Thanks in advance
Regards,
Tatha
Andrew Lunn wrote:
>On Mon, Aug 14, 2006 at 11:35:32AM +0530, Tathagata Das wrote:
>
>
>>Hi ,
>> I am using two different IRQ number for RX and TX in serial driver.
>>
>>My init function of serial driver looks like this ---
>>
>>static bool test_serial_init(struct cyg_devtab_entry *tab)
>>{
>> serial_channel *chan = (serial_channel *)tab->priv;
>> (chan->callbacks->serial_init)(chan); // Really only required
>>for interrupt driven devices
>>
>> /* Allocate the IRQs */
>> if (chan->out_cbuf.len != 0) {
>> /* TX interrupt */
>> cyg_drv_interrupt_create(TX_IRQ,
>> 0,
>>// IRQ priority
>> (cyg_addrword_t)chan,
>>// Data item passed to interrupt handler
>> &test_tx_serial_ISR,
>> &test_tx_serial_DSR,
>> &tx_serial_interrupt_handle,
>> &tx_serial_interrupt);
>> cyg_drv_interrupt_attach(tx_serial_interrupt_handle);
>> cyg_drv_interrupt_unmask(TX_IRQ);
>> }
>> if (chan->in_cbuf.len != 0) {
>> /* RX interrupt */
>> cyg_drv_interrupt_create(RX_IRQ,
>> 0,
>>// IRQ priority
>> (cyg_addrword_t)chan,
>>// Data item passed to interrupt handler
>> &test_rx_serial_ISR,
>> &test_rx_serial_DSR,
>> &rx_serial_interrupt_handle,
>> &rx_serial_interrupt);
>> cyg_drv_interrupt_attach(rx_serial_interrupt_handle);
>> cyg_drv_interrupt_unmask(RX_IRQ);
>> }
>>
>> return true;
>>}
>>
>>My problems are :
>>
>> 1. when I press any key from keyboard test_rx_serial_ISR and
>>test_rx_serial_DSR are called one by one.
>> But that charcter is not displayed.
>>
>>
>
>You mean there is no echo? Do you have echo'ing enabled? Are you even
>using the tty layer in eCos which provides echo support?
>
>
>
>> 2. In scanf function --- control is stuck into " while (size
>>< *len) {" this loop in serial_read function.
>>
>>
>
>So this layer is trying to read a block of charactors, not a single
>charactor read. Nothing wrong here.
>
>You might want to read more of
>http://ecos.sourceware.org/docs-latest/ref/io-serial-driver-details.html
>
>It sounds like you want to use the tty driver.
>
> Andrew
>
>
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list