Re: tty.cdl

Ilija Kocho <[email protected]>
Newsgroups gmane.os.ecos.devel
Message-ID <[email protected]>
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 (text/plain, 5.4 KB)
# ====================================================================
#
#      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."
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.