PFCMD PY

From DIDEAS Wiki
Jump to: navigation, search

PF Users Navigation:

Edit

These commands typically live in "support_scripts", as of late 2010 are in trunk\H22\support_scripts.

keys.py

Writes to the keys registry on the robot. Note, there is an issue writing to 32 bit keys on the command line - thus the script file must be used.

keys.py -p xx <options>

 -p COM port / or IP address port
 -b baudrate
 -i <name or IP address> : IP address of the SWIFI
 -r read keys by name that follow (multiple keys allowed)
 -w write key values by name, value that follow (multiple key values are allowed) (N
 -S process script file
 -D generation keys.h wiki documentation file
 -l log file name
 -v verify : after writing ALL values, will go back and verify them. (def=TRUE)
 -V verify table : will read the init tables and verify hashs and CRCs. (def = False


example: keys.py -p 26 -V -r serial_number run_level -w run_level 22 -r run_level example to read a script file and set all the keys : keys.py -p 18 -S keys_baudrate_script.txt

example: set baudrate to 833333: keys.py -p xx [-b 833333] -S keys_baudrate_script.txt

Baudrate script example:

keys_baudrate_script.txt
# parse rules:
# '#' start a comment 
# to write a key :   <key> = <value>   
# to read a key : <key>
# to verify a key : <key> == <value>
#
#

SC_FUP_BAUDRATE      =  833333
#SC_FUP_BAUDRATE      =  115200

do_command.py

Usage: do_command.py [options]

Options:
  -h, --help            show this help message and exit
  -i IP_ADDRESS, --ip_address=IP_ADDRESS
                        make a TCP connection to the specified IP (instead of
                        using serial)
  -P PORT, --port=PORT  port number for TCP connections.
  -c COM_PORT, -p COM_PORT, --com_port=COM_PORT
                        COM PORT number for serial port connection
  -b BAUDRATE, --baud_rate=BAUDRATE
                        baurdrate when using serial port (default is 115200)
  -g GET_TYPE           get IO channels : options are [ai, di, ao, do]
  --suffix=SPECIAL_COMMAND_SUFFIX
                        suffix for special commands (thus variations on the
                        special commands can be used.)
  -D REPEAT_DELAY, --delay=REPEAT_DELAY
                        special command repeat delay in milliseconds
  -v GET_VERSION, --version=GET_VERSION
                        execute the version command on each of the specified
                        platforms.  Eg -v smi does all platforms.
  -n REPEAT_COUNT, --repeat_count=REPEAT_COUNT
                        number of times to repeat the supplied special
                        command(s)
  -T, --set_time        use the PC time to set the robot clock
  -t TIMEOUT, --timeout=TIMEOUT
                        serial or TCP communcations timeout (sec)
  -X, --hex_mode        display the special command results in hex
  -F, --float_mode      interpret the data from the special command as
                        floating point numbers
  -f LOG_FILE_NAME, --file_name=LOG_FILE_NAME
                        log the results to a file.
  -S STRUCT_STRING, --struct_string=STRUCT_STRING
                        use struct.unpack(STRUT_STRING, data) to process the
                        result of the special command.  Eg -S =10L
  -R READ_ADDRESS, --read_address=READ_ADDRESS
                        read memory from address (int or hex)
  -W WRITE_ADDRESS, --write_address=WRITE_ADDRESS
                        write data to address (int or hex)
  -d DATA_FILENAME, --data_filename=DATA_FILENAME
                        text file source for data that is written. file should
                        contain numbers (UINT8_T) separated with a char from
                        [,;:= ].  these numbers will be turned into a
                        bytestream for use with memory write.
  -L READ_LENGTH, --read_length=READ_LENGTH
                        length of memory buffer to read
  -M MEMORY_TYPE, --memory_type=MEMORY_TYPE
                        numeric code to specify the memory type and platform
                        for read and write.  Use -H for a list.
  -s, --special         -s N [arg1, ... ] issue special command N with
                        arguments.  Args may be negative, and multiple
                        commands may be issued by repeating the -s
  -V, --write_data      list of SPACE separated values available for memory
                        write command.  Eg -V 1 2 3
  -H, --memory_type_help
                        list the ID numbers for various robot memory types.
 HOSTCMD_SC_RAM_MEM_TYPE              1   
 HOSTCMD_SC_FLASH_MEM_TYPE            2
 HOSTCMD_SC_MFG_EEPROM_MEM_TYPE       3
 HOSTCMD_SC_USR_EEPROM_MEM_TYPE       4
 HOSTCMD_MC_RAM_MEM_TYPE              5   
 HOSTCMD_MC_FLASH_MEM_TYPE            6
 HOSTCMD_IMU_RAM_MEM_TYPE             11
 HOSTCMD_IMU_FLASH_MEM_TYPE           12
 HOSTCMD_IMU_MFG_EEPROM_MEM_TYPE      13
 HOSTCMD_IMU_USR_EEPROM_MEM_TYPE      14

examples

  • Using two special commands, each 10 times to read the SC and MC state:

do_command.py -p <COM PORT> -n 10 -s 104 -s 1420

  • Read IMU data and display as a float:

do_command.py -p <COM PORT> -F -s 2025

  • Read IMU and run through a strut string to produce 4 ints, 4 longs, and 4 floats (length = 40)

do_command.py -p <COM PORT> -S =4h4L4F -s 2030

  • Read 512 bytes of IMU FLASH memory at address 4096:

do_command.py -p <COM PORT> -L 0x200 -R 0x1000 -M 12

  • Write 3 bytes ('A','B','C') to SC USR EEPROM at address 0xff0, then read it back

do_command.py -p <COM PORT> -W 0xff0 -V 65 66 67 -M 4 -R 0xff0

  • Write a list of numbers from a file to SC USR_EEPROM

do_command.py -p <COM PORT> -W 0xff0 -d eeprom_data.txt -M 4 -R 0xff0

robo_config.py

robo_config is used to read / write / modify tables on the robot.

Usage: robo_config.py [options]

Options:
  -h, --help            show this help message and exit
  -i IP_ADDRESS, --ip_address=IP_ADDRESS
                        Connect to robo via TCP to specified address or DNS
                        name
  -p COM_PORT, -c COM_PORT, --com_port=COM_PORT
                        communcation port for serial communcation
  -P TCP_PORT, --tcp_port=TCP_PORT
                        TCP port to use when using an IP address connection
  -b BAUD_RATE, --baud_rate=BAUD_RATE
                        baudrate for serial communcation.  default is
                        115.2kbaud
  --debug=DEBUG_LEVEL   set debug level, not necessarly consistently
                        implmented or used
  -Q, --quiet           not necessarly used.
  --dump_table          read header string table from robot, decode it and
                        save it to text file dump_table.txt
  -l, --list            List available shared variables and their addresses
                        from robot
  -Z TARGET_DEVICE, --target_device=TARGET_DEVICE
                        Which processor is the target of the application.
                        OPTIONS = SC, MC, IMU  (or the first letter of)
  -T TABLE_FILE_LIST, --table_file=TABLE_FILE_LIST
                        specify the table file used with the -W and -M options
  -M MODIFY_TABLE_LIST, --modify_table=MODIFY_TABLE_LIST
                        specify which tables from calibration file may be
                        modified.
  -W WRITE_TABLE_LIST, --write_table=WRITE_TABLE_LIST
                        specify which tables from calibration file may be
                        written.
  --WA, --write_all     (under development) if specified, then all sections in
                        the KVF are written
  -s, --stdout          when reading tables to a file, output will be to
                        screen.
  -O OUTPUT_FILE_LIST, --output_file=OUTPUT_FILE_LIST
                        when reading table, they can be written to the file
                        specified here.
  -A, --read_all        read all tables in the robot
  -R READ_TABLE_LIST, --read_table=READ_TABLE_LIST
                        read specific tables from the robot.

examples

  • list tables on robo with SWIFI at IP ...192
robo_config.py -i 192.168.192.192 -l
  • list IMU tables :
robo_config.py -p 10 -Z IMU -l
  • read the boot_status table
robo_config.py -p 10 -s -R boot_status_obj
  • read all tables, and save to file
robo_config.py -p 10 -l -s --read_all -O output_file_kvf.txt
  • write all the sections in the KVF file:
robo_config.py -p 10 -T calb_params_kvf.txt --write_all
  • write a specific section from the KVF file, and read it back:
robo_config.py -p 10 -l -T calb_params_kvf_.txt -W EE_state_calb_param -s -R EE_state_calb_param
  • write and verify a section : (UNDER DEVELOPMENT)
robo_config.py -p 10 -l -T calb_params_kvf_.txt -V EE_state_calb_param 


Coming options:

  • The -s option will only be required to display a table only if the -O option is present.
  • The -Q option will be used to suppress automatic table display.
  • The -V option will write and verify a section
  • All table names can be expressed as a number from the list.
  • The -M option will perform at read, modify, write, verify cycle. This will allow certain the modification of only some values of a table.

Issues

  • Tables read back aren't tested to be valid WRT to its CRC or magic number.
  • Typos can cause the program to fail in unexpected / or unobvious ways.
  • Using a non-existant section name crashs the problem
  • In a KVF file, using an unknown field name outputs a message that will never be seen.

robo_update.py

robo_update is a robo_config like application that allows the direct editing of table values


robo_update.py [options] table.variable=value <table.variable=value>
Options:
  -h, --help            show this help message and exit
  -i IP_ADDRESS, --ip_address=IP_ADDRESS
                        Connect to robo via TCP to specified address or DNS
                        name
  -p COM_PORT, -c COM_PORT, --com_port=COM_PORT
                        communication port for serial communication
  -P TCP_PORT, --tcp_port=TCP_PORT
                        TCP port to use when using an IP address connection
  -b BAUD_RATE, --baud_rate=BAUD_RATE
                        baudrate for serial communication.  default is
                        115.2kbaud
  -R READ_TABLE_LIST, --read_table=READ_TABLE_LIST
                        read specific tables from the robot.
  -l, --list            List available shared variables and their addresses
                        from robot
  -Z TARGET_DEVICE, --target_device=TARGET_DEVICE
                        Which processor is the target of the application.
                        OPTIONS = SC, MC, IMU  (or the first letter of)
  -D DEBUG_LEVEL, --debug=DEBUG_LEVEL
                        set debug level, not necessarily consistently
                        implemented or used

examples

  • to use the program to update two values in the table EE_state_fixed_param:

robo_update.py -p 40 EE_state_fixed_param.low_voltage_shutdown_mv=19500 EE_state_fixed_param.BSE_serial_number=71


update_firmware.py

This script analyzes the firmware, then adds source code to the project that facilitate the sharing of data structures between the robot and the PC. It is run by the MPLAB compiler as part of a pre-build script.

At present there are two files created:

  • pygen_header_bzip2_str.h : The file declares a const that contains the source code (compressed) for 'interesting' data structures. This 'string' can be read from the robot and is used to decipher the data structures.
  • pygen_shared_object_hash_codes.h : For each of the 'interesting' data structures from the source code, a HASH is made of the typedef source code. These hashes are used to link data in an EEPROM table with the source code data structure.
Usage: update_firmware.py [options]

Options:
  -h, --help            show this help message and exit
  -p FIRMWARE_PATH, --path=FIRMWARE_PATH
                        path to the firmware directory
  -O FILENAME_SHARED_OBJ, --shared_object=FILENAME_SHARED_OBJ
                        filename in the SC subpath that contains the shared
                        object decleration.  (default = pyshared.c)
  -H HEADER_FILE_LIST, --header_file=HEADER_FILE_LIST
                        header file to parse.  Can repeat the -H.

key_value_file.py

Module used to read - write key value files. Can be used as a command line tool to test a file.

Usage: key_value_file.py [options]
Options:
  -h, --help            show this help message and exit
  -p FILENAME_PATH, --path=FILENAME_PATH
                        path to append to file names
  -f FILENAME, --filename=FILENAME
                        KVF files to read, repeat option to read a list of
                        files.
  -w WRITE_FILENAME, --write_filename=WRITE_FILENAME
                        name of the KVF file to write.
  -d, --display         

dashboard

This is the compiled version of the H2dashboard program.

download/install

Download the package at : http://web.media.mit.edu/~cbarn/dashboard_2010b/

When run, it will extract the MCRInstaller.exe (matlab run time library. Install that and afterward logout or restart the machine to allow windows to make us of the DLL.

using

The command format is:

dashboard.exe robo_id   weight_lbs   filename
  • robo_id is "H2_001" or "H2_005"
  • weight of subject in lbs (eg 200)
  • wifi_fast log file
    • known to work with the .txt file
    • may also work with the .zip