This is the mail archive of the ecos-devel@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: tty.cdl


On Sun, 27 Mar 2011, Ilija Kocho wrote:

> On 26.03.2011 19:32, Sergei Gavrikov wrote:
> > On Sat, 26 Mar 2011, Ilija Kocho wrote:
> >
> >> Hello colleagues
> >>
> >> I need to extend tty.cdl in order to accommodate more than 4 serial
> >> ports, currently I need 6. I can simply add 2 port entries but i would
> >> prefer something like the snippet below. Either case I am ready to post
> >> to Bugzilla.
> >> Note: Similar case is with termios.cdl
> >>
> >> Please advise.
> >  
> > Hi Ilija,
> >
> > It seems your issue cannot be solved by editing the config files *only*.
> > There are a couple of hardwired conditional definitions for device table
> > entries there, take a look at
> >
> >   $ECOS_REPOSITORY/io/serial/<version>/src/common/tty.c
> >   $ECOS_REPOSITORY/io/serial/<version>/src/common/termiostty.c
> >
> >
> > Sergei
> Hi Sergei
> 
> Thanks for the notes. I tried to extend this concept to tty.c, please
> see attached CDL. Here are my questions.
> 
> 1. The proc output is in io-serial.h and is protected to instantiate in
> only file that defines __CYGSEM_FILE_IS_IO_SERIAL_COMMON_TTY_C (tty.c)
> I would ask if it is possible to redirect puts to other file?
 
Hi Ilija,

I get it (about your attempting to build the in-lines using CDL), but, I
would keep things simpler, i.e. just would add two absent entries for
TTY4, TTY5, TTYx in tty.c. Those are conditional definitions depend on

cdl_component CYGPKG_IO_SERIAL_TTY_TTYx {
    user_value 1
};

such things define itself if user enables TTYx

pkgconf/io_serial.h:
#define CYGPKG_IO_SERIAL_TTY_TTYx 1
#define CYGDAT_IO_SERIAL_TTY_TTYx_DEV "/dev/serX"

otherwise auto-generated io_serial.h header has no such definitions.
Right?

I dislike a complicated Tcl programming in eCos config files (however,
this is mine).

I tried such thing in config file

  if {! [info exist ::env(ECOS_MAX_TTY_DEVS)]} {;# check env variable
      set ::max_tty_devs 4
  } {
      set ::max_tty_devs $::env(ECOS_MAX_TTY_DEVS)
  }

  for { set ::device 0 } { $::device < $::max_tty_devs } { incr ::device } {
      cdl_component CYGPKG_IO_SERIAL_TTY_TTY[set ::device] {
          display       "TTY mode channel #[set ::device]"
          flavor        bool
          default_value 0
          ...

and if I've configured eCos as

% env ECOS_MAX_TTY_DEVS=6 ecosconfig new <target>
% env ECOS_MAX_TTY_DEVS=6 ecosconfig tree

I got 6 definitions for TTYs in eCos config. So, it was needed to add 2
new entries in tty.c *only* (just c&p) to get things spin.

Well, I tried

% export ECOS_MAX_TTY_DEVS=6
configtool

and, I've seen in CT

  -[*]  TTY mode serial device drivers
   ...
   + [ ] TTY mode for channel #0
   ...
   + [ ] TTY mode for channel #5
   + [ ] TTY mode for channel #6

However, I have nothing against hardwired iterators in {,termios}tty.cdl
For six? eight ports?

  for { set ::device 0 } { $::device < 6 } { incr ::device } {
      ...

In any cases user should enable the Nth serial port for TTY/TERMIOS to
get the record in pkgconf/io_serial.h and this header is included in
tty.c and termiostty.c sources.


Sergei


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]