###############################################################################
## Copyright (c) 2000-2018 Ericsson Telecom AB
## All rights reserved. This program and the accompanying materials
## are made available under the terms of the Eclipse Public License v2.0
## which accompanies this distribution, and is available at
## http:##www.eclipse.org#legal#epl-v10.html
##
## Contributors:
##   Gyorgy Rethy
##  version R2A
###############################################################################
[MODULE_PARAMETERS]
#GPIO pin number to which the LED is connected to
#       GPIO ground	      GPIOx	      GPIO 5V
#	  O		       O		O
#	  |                    |		|
#	+------------------------+            ____  ^^
#	| 9                    1 |            \  / //
#	|	ULN 2803A        |             \/
#       |                     18 |            ----
#       +------------------------+             |
#                              |              -+-
#                              |             |   |
#                              |             |   | 220 Ohm
#                              |              -+-
#                              |               |
#                              +---------------+

GPIOdemo_Led_Button.pinLED :=21
#GPIO pin number to which the button is connected
GPIOdemo_Led_Button.pinButton := 26

[LOGGING]
# In this section you can specify the name of the log file and the classes of events
# you want to log into the file or display on console (standard error).

LogFile := "logs/%e.%h-%r.%s"
FileMask := LOG_ALL | DEBUG | MATCHING
ConsoleMask := ERROR | WARNING | TESTCASE | STATISTICS | PORTEVENT | DEBUG
LogSourceInfo := Yes
AppendFile := No
TimeStampFormat := DateTime
LogEventTypes := Yes
SourceInfoFormat := Single
LogEntityName := Yes

[TESTPORT_PARAMETERS]
#*.*.debug := "YES" //default is "NO"

[DEFINE]
# In this section you can create macro definitions,
# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE].

[INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.

[ORDERED_INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.

[EXTERNAL_COMMANDS]
# This section can define external commands (shell scripts) to be executed by the ETS
# whenever a control part or test case is started or terminated.

#BeginTestCase := ""
#EndTestCase := ""
#BeginControlPart := ""
#EndControlPart := ""

[EXECUTE]
# In this section you can specify what parts of your test suite you want to execute.
GPIOdemo_Led_Button.TC_LEDon
GPIOdemo_Led_Button.TC_button

[GROUPS]
# In this section you can specify groups of hosts. These groups can be used inside the
# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts.

[COMPONENTS]
# This section consists of rules restricting the location of created PTCs.

[MAIN_CONTROLLER]
# The options herein control the behavior of MC.

TCPPort := 0
KillTimer := 10.0
NumHCs := 1
# LocalAddress :=
