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?
2. This may be question for John.
CYGOPT_IO_SERIAL_PROC_INCREMENTER interface is used as a stealth
container for define_proc.
I guess this is not a typical usage of cdl_interface. Could it cause a
trouble?
Note: I haven't tested compilation yet, only header generation. If this
approach is considered acceptable I would produce required changes in
tty.c and post a bug on Bugzilla.
Regards
Ilija
# ====================================================================
#
# tty.cdl
#
# eCos serial TTY configuration data
#
# ====================================================================
## ####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later
## version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License
## along with eCos; if not, write to the Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##
## As a special exception, if other files instantiate templates or use
## macros or inline functions from this file, or you compile this file
## and link it with other works to produce a work based on this file,
## this file does not by itself cause the resulting work to be covered by
## the GNU General Public License. However the source code for this file
## must still be made available in accordance with section (3) of the GNU
## General Public License v2.
##
## This exception does not invalidate any other reasons why a work based
## on this file might be covered by the GNU General Public License.
## -------------------------------------------
## ####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jskov
# Original data: gthomas
# Contributors: ilijak
# Date: 1999-07-07
#
#####DESCRIPTIONEND####
#
# ====================================================================
#define_header "tty_defices.inl"
cdl_component CYGPKG_IO_SERIAL_HALDIAG {
display "HAL/diag serial device driver"
flavor bool
default_value 1
description "
This option enables the use of the HAL diagnostic channel
via the standard I/O drivers."
compile -library=libextras.a common/haldiag.c
}
cdl_option CYGDAT_IO_SERIAL_TTY_CONSOLE {
display "Console device name"
flavor data
default_value {"\"/dev/ttydiag\""}
description "
This option selects the TTY device to use for the console."
}
cdl_component CYGPKG_IO_SERIAL_TTY_TTYDIAG {
display "TTY mode HAL/diag channel"
flavor bool
default_value 1
description "
This option causes '/dev/ttydiag' to be included in the standard
drivers."
}
# Proc index
set proc_i 0
# Workarround to prevent configtool crash
set __dev "_DEV"
for { set ::channel 0 } { $::channel < 6 } { incr ::channel } {
cdl_interface CYGINT_IO_SERIAL_TTY_TTY[set ::channel] {
}
cdl_component CYGPKG_IO_SERIAL_TTY_TTY[set ::channel] {
display "TTY mode channel #[set ::channel]"
# active_if CYGINT_IO_SERIAL_TTY_TTY[set ::channel]
flavor bool
default_value 0
define_proc {
puts $::cdl_header ""
puts $::cdl_header "#ifdef __CYGSEM_FILE_IS_IO_SERIAL_COMMON_TTY_C"
puts $::cdl_header "static struct tty_private_info
tty_private_info$proc_i;"
puts $::cdl_header "DEVTAB_ENTRY(tty_io$proc_i,"
puts $::cdl_header " \"/dev/tty$proc_i\","
puts $::cdl_header " CYGDAT_IO_SERIAL_TTY_TTY$proc_i$__dev,"
puts $::cdl_header " &tty_devio,"
puts $::cdl_header " tty_init,"
puts $::cdl_header " tty_lookup,"
puts $::cdl_header " &tty_private_info$proc_i);"
puts $::cdl_header "#endif //
__CYGSEM_FILE_IS_IO_SERIAL_COMMON_TTY_C"
puts $::cdl_header ""
}
description "
This option causes '/dev/tty[set ::channel]' to be included in the
standard
drivers."
cdl_option CYGDAT_IO_SERIAL_TTY_TTY[set ::channel]_DEV {
display "TTY mode channel #[set ::channel] device"
flavor data
default_value [ format { "\"/dev/ser%d\"" } $::channel ]
description "
This option selects the physical device to use for
'/dev/tty[set ::channel]'."
}
}
cdl_interface CYGOPT_IO_SERIAL_PROC_INCREMENTER[set ::channel] {
no_define
define_proc {
incr proc_i
}
description "Increment proc_i for every tty - active or inactive."
}
}
cdl_interface CYGOPT_IO_SERIAL_PROC_ZERO {
no_define
define_proc {
set proc_i 0
}
description "Reset proc_i for next save."
}