# Copyright (c) 2016 DENX Software Engineering GmbH
# Heiko Schocher <hs@denx.de>
#
# SPDX-License-Identifier:	GPL-2.0+
#

install tbot on your PC (linux only tested):
============================================

- get the source code:

$ git clone https://github.com/hsdenx/tbot.git
[...]
$

  cd into the tbot directory.

- you need the for running tbot the python paramiko module, see:
  http://www.paramiko.org/installing.html

  paramiko is used for handling ssh sessions, and open filedescriptors
  on a ssh connection. Tbot open a ssh connection to a "lab PC" and
  opens on that connection 2 filehandles, one for control functions
  and one for the connection to the boards console. May it is worth
  to think about to open more filehandles and use them in tbot, but
  thats a point in the Todo list ...

  See [1] for more infos about tbot principles.

- prepare a directory for storing the logfiles
  and pass it with the commandline option "-l"
  to tbot. Default is the directory "log" in the tbot
  root (don;t forget to create it, if you want to use it)

- If your VL is not yet in tbot source, integrate it
  (This task has only to be done once for your VL):

  A VL has, as described in [2] "necessary tasks for a Lab PC" explained,
  3 tasks:

  a) power on/off the board
  b) get power state of the board
  c) connect to the boards console

  As tbot sends only shell commands (also to the Lab PC)
  this tasks must be executable through shell commands on your
  Lab PC:

  Task a) power on/off board:
    default TC for this task is:
    https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_power.py

    - now copy this file to for example
      cp src/tc/tc_lab_denx_power.py src/tc/tc_lab_denx_power_XXX.py
      (replace XXX to a proper value)
      and adapt the "remote_power" command from the denx lab to your needs.

      As this TC powers on the board for all your boards in your VL,
      you can differ between the boards through the tbot class
      variable "tb.boardlabpowername" (which is in the default case the
      same as "tb.boardname"), but you may need to name the power target
      with an other name than boardname, so you can configure this case.
      The power state "tb.power_state" which the TC has to set
      is "on" for power on, or "off" for power off.

      If switching on the power is successful, call "tb.end_tc(True)"
      else "tb.end_tc(False)"

    - set in your board config file:
      self.tc_lab_denx_power_tc = 'tc_lab_denx_power_XXX.py'

  Task b) power on/off board:
    default TC for this task is:
    https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_get_power_state.py

    - now copy this file to for example
      (replace XXX to a proper value)
      cp src/tc/tc_lab_denx_get_power_state.py src/tc/tc_lab_denx_get_power_state_XXX.py
      and adapt the commands to your needs.

      If the power of the board is on, call "tb.end_tc(True)"
      else "tb.end_tc(False)"

    - set in your board config file:
      self.tc_lab_denx_get_power_state_tc = 'tc_lab_denx_get_power_state_XXX.py'

  Task c) connect to the boards console:
    default TC for this task is:
    https://github.com/hsdenx/tbot/blob/master/src/tc/tc_lab_denx_connect_to_board.py

    - now copy this file to for example
      (replace XXX to a proper value)
      cp src/tc/tc_lab_denx_connect_to_board.py src/tc/tc_lab_denx_connect_to_board_XXX.py
      and adapt the commands to your needs.

      If connect fails end this TC with "tb.end_tc(False)"
      else call "tb.end_tc(True)"

      If you want to use kermit for connecting to the boards console, you
      can use:

      https://github.com/hsdenx/tbot/blob/master/src/tc/tc_workfd_connect_with_kermit.py

      Example for such a board in the VL from denx:
      self.tc_lab_denx_connect_to_board_tc = 'tc_workfd_connect_with_kermit.py'
      https://github.com/hsdenx/tbot/blob/master/tbot_dxr2.cfg#L24

      Hopefully this works for you too.

    - set in your board config file:
      self.tc_lab_denx_connect_to_board_tc = 'tc_lab_denx_connect_to_board_XXX.py'

  remarks while writting this:
  - Currently there is only the denx VL. Original idea was to include
    other VL through a seperate class/file in
    https://github.com/hsdenx/tbot/tree/master/src/lab_api
    but it turned out, that if we say "ssh" is the standard way to connect
    to a VL, we can integrate the VL specific tasks through testcases, see
    above, so we should do:
    - rename the "denx" API to a more general name.
      This is a point on my ToDo list ... done, renamed to 'ssh_std'

  - the VL specific configuration may moved from the board config files
    and should be collected in VL specific config files, which boards
    config file simple include.

- prepare password.py file:
  This file contains all passwords tbot needs (for example for
  linux login on the boards)
  tbot searches this file in the tbot root directory.
  It is a simple python file, for example:

  # passwords for the lab
  if (board == 'lab'):
      if (user == 'hs'):
          password = 'passwordforuserhs'
      if (user == 'root'):
          password = 'passwordforrootuser'
  # passwords for the boards
  elif (board == 'mcx'):
      if (user == 'root'):
          password = 'passwordformcxrootfs'
  else:
      if (user == 'root'):
          password = ''

- prepare board config file
  Each board which is found in the VL needs a tbot configuration file
  pass the config file name with the option '-c' to tbot, tbot searches
  in the root dir for them.

  board Example (dxr2 board):
  https://github.com/hsdenx/tbot/blob/master/tbot_dxr2.cfg

  Necessary variables:

  line  3: boardname, here it is the "etamin" board
             no default value, must be set.
  line  4: boardlabname: name used for connecting to the board
             may differ from tb.boardname, default tb.boardname
  line  5: boardlabpowername: name used for power on/off
             may differ from tb.boardname, default tb.boardname
  line  6: tftpboardname: name used for tftp subdir (from where
             U-Boot loads images for example).
             may differ from tb.boardname, default tb.boardname
  line  7: labprompt: linux prompt tbot sets
             no defaultvalue, must be set (maybe we should introduce
             "ttbott" as default ...
  line  8: debug: If True, adds debug output on the tbot shell
  line  9: debugstatus: enable status debug output on the shell
  line 10: ip: Where tbot finds the Lab PC
  line 11: user: As which user does tbot logs into the Lab PC
  line 12: accept_all: passed to paramiko, accept all connections
  line 13: keepalivetimout: passed to paramiko, timeout for sending
             keepalive message.
  line 14: channel_timeout: passed to paramiko
  line 15: loglevel: tbots loglevel for adding entries into the logfile.
  line 17: wdt_timeout: timeout in seconds for tbots watchdog.
             Watchdog gets triggered if prompt get read.
  line 24: tc_lab_denx_connect_to_board_tc: Which TC is used for
             connecting to the boards console the TC, here:
             https://github.com/hsdenx/tbot/blob/master/src/tc/tc_workfd_connect_with_kermit.py
  line 27: uboot_prompt: boards U-Boot prompt
  line 28: linux_prompt: boards linux prompt

  Now comes a list of variables TC needs, this vary from which TC
  you start on the board.

Thats it ... you now can call tbot and hopefully, it works ;-)
Find an example log [3] for calling simple U-Boot TC for setting
an U-Boot Environmentvariable.

If you have problems in setting tbot up, please contact me
(and may give me ssh access to your Lab PC ;-)

If you have running your first TC [3], you may want to write now your own
TC (and hopefully share them), so continue with:
u-boot:tools/tbot/README.create_a_new_testcase

Heiko Schocher <hs@denx.de>
v2 2016.04.26

--------------

[1] tbot Dokumentation:
    [2] u-boot:/tools/tbot/README
    https://github.com/hsdenx/tbot/blob/master/README.md
    tbot-devel@googlegroups.com

[3] Example for a first U-Boot TC which should always work:
    (with commandline option "-v" for verbose output):
hs@localhost:tbot  [event-devel] $ python2.7 src/common/tbot.py -c tbot_dxr2.cfg -t tc_ub_setenv.py -v -l log/tbot.log
**** option cfg: tbot_dxr2.cfg log: log/tbot.log tc: tc_ub_setenv.py v 1
('CUR WORK PATH: ', '/home/hs/data/Entwicklung/tbot')
('CFGFILE ', 'tbot_dxr2.cfg')
('LOGFILE ', '/home/hs/data/Entwicklung/tbot/log/tbot.log')
tb_ctrl: Last login: Mon Apr 25 14:52:42 2016 from 87.97.29.27
*************************************************************
BDI2000 Assignment:    (last updated:  2015-11-20 12:30 MET)
bdi1  => techem     bdi2  => cetec_mx25   bdi3  => lpc3250
bdi4  => -          bdi5  => --Rev.B!--   bdi6  => tqm5200s
bdi7  => [stefano]  bdi8  => smartweb     bdi9  => sigmatek-nand
bdi10 => pcm052     bdi11 => socrates     bdi12 => aristainetos
bdi13 => imx53      bdi14 => ib8315       bdi15 => cairo
bdi16 => g2c1       bdi17 => lwe090       bdi18 => symphony
bdi19 => dxr2       bdi20 => ima3-mx6     bdi21 => sama5d3
bdi98 => -          bdi99 => -            bdi0  => -
Please power off unused systems when you leave!   Thanks, wd.
*************************************************************
tb_ctrl: pollux:~ hs $
tb_ctrl: export PS1=ttbott
ttbott
tb_ctrl: stty cols 200
ttbott
tb_ctrl: export TERM=vt200
ttbott
tb_ctrl: echo $COLUMNS
200
ttbott
tb_con: Last login: Tue Apr 26 06:28:59 2016 from 87.97.29.27
*************************************************************
BDI2000 Assignment:    (last updated:  2015-11-20 12:30 MET)
bdi1  => techem     bdi2  => cetec_mx25   bdi3  => lpc3250
bdi4  => -          bdi5  => --Rev.B!--   bdi6  => tqm5200s
bdi7  => [stefano]  bdi8  => smartweb     bdi9  => sigmatek-nand
bdi10 => pcm052     bdi11 => socrates     bdi12 => aristainetos
bdi13 => imx53      bdi14 => ib8315       bdi15 => cairo
bdi16 => g2c1       bdi17 => lwe090       bdi18 => symphony
bdi19 => dxr2       bdi20 => ima3-mx6     bdi21 => sama5d3
bdi98 => -          bdi99 => -            bdi0  => -
Please power off unused systems when you leave!   Thanks, wd.
*************************************************************
tb_con: pollux:~ hs $
tb_con: export PS1=ttbot
tb_con: t
ttbott
tb_con: stty cols 200
ttbott
tb_con: export TERM=vt200
ttbott
tb_con: echo $COLUMNS
200
ttbott
tb_con: ssh hs@lena
tb_con: hs@lena's password:
tb_con:
tb_con: Last login: Mon Apr 25 07:03:29 2016 from 192.168.1.1
tb_con: [hs@lena ~]$
tb_con: export PS1=ttbott
ttbott
tb_con: stty cols 200
ttbott
tb_con: export TERM=vt200
ttbott
tb_con: echo $COLUMNS
200
ttbott
tb_con: kermit
C-Kermit 8.0.211, 10 Apr 2004, for Linux
 Copyright (C) 1985, 2004,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/hs/) C-Kermit>
tb_con: set line /dev/ttyUSB0
(/home/hs/) C-Kermit>
tb_con: set speed 115200
/dev/ttyUSB0, 115200 bps
(/home/hs/) C-Kermit>
tb_con: set flow-control none
(/home/hs/) C-Kermit>
tb_con: set carrier-watch off
(/home/hs/) C-Kermit>
tb_con: connect
Connecting to /dev/ttyUSB0, speed 115200
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
tb_con: <INTERRUPT>
U-Boot#
tb_con: U-Boot#
U-Boot#
tb_con: setenv Heiko Schocher
U-Boot#
tb_con: printenv Heiko
Heiko=Schocher
U-Boot#
[('tc_workfd_ssh.py', 1, 0), ('tc_workfd_connect_with_kermit.py', 1, 0), ('tc_ub_setenv.py', 1, 0)]
End of TBOT: success
hs@localhost:tbot  [event-devel] $
