diff options
| author | Amaury Pouly <amaury.pouly@gmail.com> | 2016-02-07 21:46:58 +0000 |
|---|---|---|
| committer | Amaury Pouly <amaury.pouly@gmail.com> | 2016-04-08 19:38:18 +0200 |
| commit | f6c61eb11a13f7a5141a980f56b9a14b3309c449 (patch) | |
| tree | d1c4a4d992f88e40eacb65d5e046b595fdcb512a /utils/hwstub/tools/lua/help.lua | |
| parent | a2f4c5201d78b9f351834b0512623eeac622280f (diff) | |
| download | rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.zip rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.tar.gz rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.tar.bz2 rockbox-f6c61eb11a13f7a5141a980f56b9a14b3309c449.tar.xz | |
hwstub: port hwstub_shell to the new library
Also use this opportunity to cleanup support for multiple devices: the shell
now supports dynamic changes in the device and will call init() everytime
a new device is selected, to prepare a new environment. The shell now
honors register width on register read/write. The shell also provides access
to variants as follows by creating a subtable under the register using the
variant type in UPPER case and having the same layout as a register.
For example if register HW.GPIO.DIR has variants "set" and "clr", those can
be used like this:
HW.GPIO.DIR.SET.write(0xff)
HW.GPIO.DIR.CLR.write(0xff00)
Change-Id: I943947fa98bce875de0cba4338e8b7196a4c1165
Diffstat (limited to 'utils/hwstub/tools/lua/help.lua')
| -rw-r--r-- | utils/hwstub/tools/lua/help.lua | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/utils/hwstub/tools/lua/help.lua b/utils/hwstub/tools/lua/help.lua new file mode 100644 index 0000000..280382e --- /dev/null +++ b/utils/hwstub/tools/lua/help.lua @@ -0,0 +1,60 @@ +-- +-- HELP +-- +HELP = hwstub.help + +function HELP:create_topic(name) + self[name] = { create_topic = HELP.create_topic, add = HELP.add, get_topic = HELP.get_topic } + return self[name] +end + +function HELP:get_topic(name) + return self[name] +end + +function HELP:add(text) + table.insert(self, text) +end + +do + local h = HELP:create_topic("hwstub") + h:add("This tool uses a number of well-defined namespaces (tables) to organise its features.") + h:add("The hwstub table contains a number of information and functions related to the tool itself.") + h:add("Of particular interest are") + h:add("* hwstub.host which holds host specific information.") + h:add("* hwstub.dev which holds device specific information. See DEV") + h:add("* hwstub.help (aka HELP) which holds the help. See HELP."); + h:add("* hwstub.soc which holds soc specific information. See HW"); + + h = HELP:create_topic("HELP"); + h:add("This variable redirects to hwstub.help and provides access to the help system."); + h:add("You can enhance the help using the following methods on any topic (including HELP itself)."); + h:add("* t:create_topic(s) to create a new subtopic named s under topic t"); + h:add("* t:add(s) to add a help line to topic t"); + h:add("* t:get_topic(s) to get the subtopic s under topic t"); + + h = HELP:create_topic("DEV"); + h:add("This variable redirects to hwstub.dev and provides direct access to the device."); + h:add("It contains some information about the device and the following methods."); + h:add("* read8/16/32(a) reads a 8/16/32-bit integer at address a atomically"); + h:add("* write8/16/32(a, v) writes the 8/16/32-bit integer v at address a atomically"); + h:add("* jump(a) jump to specified address"); + h:add("* call(a) call function at specified address and return to hwstub"); + h:add("* print_log() prints the device log"); + + h = HELP:create_topic("HW"); + h:add("This variable redirects to the current soc under hwstub.soc and should be changed by calling hwstub:soc:select only."); + h:add("The complete register tree can be found under HW in a well organised fashion."); + h:add("* HW.dev points to device dev"); + h:add("* HW.dev[i] points to device devi if there are several copies of the device at different addresses."); + h:add("* HW.dev.reg points to the register reg under dev"); + h:add("* HW.dev.reg[i] points to the register regi if there are several copies."); + h:add("* HW.dev.reg.f points to the field f under register reg."); + h:add("* HW.dev.reg.f.v gives the value of named value v of field f."); + h:add("* All registers can be read using HW.dev.reg.read() and written using HW.dev.reg.write(v)."); + h:add("* Register with a SCT variant also implement HW.dev.reg.set/clr/tog(v)."); + h:add("* All register field can be read using HW.dev.reg.f.read() and written using HW.dev.reg.f.write(v)."); + h:add("* Field writes can either give a integer or a named value to write(v)."); + h:add("* Register with a SCT variant also implement HW.dev.reg.f.set/clr/tog(v) with the same properties."); + h:add("* All devices, registers and fields also have descriptions available such as addresses."); +end |