# Wavegen -- Waveform generator in Python

Wavegen is a python3 tool to read waveform descriptions in hjson and
generate svg pictures of the waveform.

The source is a json representation of the waveform using the wavejson
format defined for Wavedrom. This is sort of described at
https://github.com/drom/wavedrom/wiki/WaveJSON

Note that the same wavejson could be embedded in a webpage and
wavedrom javascript used to render it directly in the browser. An
online editor for wavejson can be found at https://wavedrom.com/

The example commands assume $REPO_TOP is set to the toplevel directory
of the repo.

### Setup

If packages have not previously been installed you will need to set a
few things up. First use `pip3` to install some required packages:
```
$ pip3 install --user hjson
```

### Examples using standalone wavetool

Normally for documentation the docgen tool will automatically use
wavegen when it encounters a code block labeled for wavejson. See the
examples in the docgen module.

The wavetool provides a standalone way to run wavegen.

The basic test mode can be invoked with -T. In this case a builtin
wavejson string is used as the source and is instantiated twice (it
should look the same but the second svg will not include the defines
that can be accessed by id from the first).

```
$ cd $REPO_TOP/util
$ ./wavetool.py -T > /tmp/out.html
```

The examples directory contains the example wavejson from the
[Tutorial](https://wavedrom.com/tutorial.html). These can be formed in
to a webpage to allow comparison with the tutorial output.

```
$ cd $REPO_TOP/util
$ ./wavetool.py -v wavegen/examples/* > /tmp/out.html
```

## WaveJSON format and extension

The tool includes an extension to the wavejson format. In addition to
data: being used to label fields that are of type '=2345' the
alternative cdata can be used to label all active data cycles
'01=2345ud' (for example this allows the start and stop bits to be
labeled for the uart in the -T test).


### The signal object

The main object in the WaveJSON is the 'signal'. This consists of a
list of signal values or groups.

```
{ "signal" : [
    value1,
    value2,
    ...
]}
```
The value is either:

* A group. This is a list with the group name as a string as the first
  element, and values for the other elements. `[ "Group name", {
  value1 }, { value2 }]` Groups may be nested, the code allows for
  three deep nesting without the name area being made larger.

* A gap. This element with no waveform generates a gap. `{}` There may
  be a `node:` element in a gap to add markers and allow labeling of
  cycles (see examples).

* A real signal! This is a comma separated list of key/value pairs:
  * `name:` the name that the signal will be labeled with
  * `wave:` a string describing the waveform using characters listed below.
  * `data:` an array of comma separated labels (or a string of space
    separated lables). The labels will be added to any of the value
    types (see below) in the waveform, four or five characters is the
    maximum that will fit for hscale=1, period=1.
  * `cdata:` **Extension to wavedrom** an array of comma separated
    labels (or a string of space separated lables). The labels will be
    added to any of the cycle types (see below) in the waveform, four
    or five characters is the maximum that will fit for hscale=1,
    period=1.
  * `period:` A positive integer that specifies the period for this signal
  * `phase:` A half-integer (integer or integer.5) specifing the phase
    shift of the signal. Positive values cause the start of the wave
    field to be discarded. Typically 0.5 to shift things back a
    half-cycle which causes the first half of the first character in
    wave to be skipped in the drawing.
  * `node:` A string specifying where timing markers should be
    placed. The string mirrors the wave string. If the node string
    contains a `.` then no marker is inserted. If it contains a
    lower-case letter then a marker with that name will be inserted
    and the letter shown on the waveform. If it contains an upper-case
    letter then a marker will be inserted but no letter shown in the
    waveform. The markers are used to add arrows in the edge
    directive.

Other than signal the top-level keys are:

* `config:` A list of key/value pairs the only one used is hscale
  which is an integer that sets the horizontal scale (1= normal,
  2=twice width etc). `config: { hscale: 2 }` **Note: skins in the
  config are not currently implemented.**

* `head:` Details of the header. This contains:
  * `text:` the string to put in the header. May also be a list with
    first element 'tspan' to add attributes/formatiing. The tspan list
    can be a three element list where the second item in `{` to `}` is
    a comma separated list of key:value pairs that will become
    `key="value"` arguments of the svg tspan and the third item is
    another string/tspan. Or the tspan list is a list of string/tspan.
  * `tick:` integer, optional. Add cycle labels and lines on rising
    egdes. The first edge is numbered with the integer given and
    subsequent edges with incrementing integers.
  * `tock:` integer, optional. Add cycle labels and lines on falling
    egdes. The first edge is numbered with the integer given and
    subsequent edges with incrementing integers.

* `tail:` As head but text and labels go below

* `edge:` An array of strings containing details of edge arrows to be
  drawn on the waveforms.


### wave characters

Characters in the wave= element describe the waveform. There are more
in the wavedrom tutorial than in the WaveJSON description. Listing the
supported ones here.

These generate a sharp square wave edge into the new state.

- `p` - (usually first in string) creates a cycle of a positive edged clock
- `n` - (usually first in string) creates a cycle of a negative edged clock
- `P` - same as p but with arrow
- `N` - same as n but with arrow
- `l` - low level
- `h` - high level
- `L` - low level with an arrow
- `H` - high level with an arrow

These generate a soft edge into the state. The data: list can be used
to labal any of the ones marked "value". Extending WaveJSON the cdata:
list can be used to label any of these. Note that a label will be
centered on the cycle and subsequent '.' extensions.

- `0` - low level
- `1` - high level
- `=` - value (default color 2)
- `2` - value with color 2
- `3` - value with color 3
- `4` - value with color 4
- `5` - value with color 5
- `x` - undefined value (crosshatch)
- `z` - high-impedance state
- `u` - pull-up (weak 1)
- `d` - pull-down (weak 0)

These generate extensions of the previous cycle:
- `.` - extends previous cycle
- `|` - extends previous cycle and draw discontinuity gap on top of it

### edge arrows

Each element in the `edge:` array is a single string that describes
an arrow or line and the label that is associated with the arrow/line.

```
{ ...
  "edge"   : ["a->b edge 1", "b-~>c My Second Edge"]
}
```

The string may contain multiple words separated by spaces. The first
word defines the from and to points and the arrow shape. The rest of
the text (after first space gap) will be placed as the label on the
line. The first and last characters in the arrow text select the
markers (defined in a node string) used as the endpoints for a line
(if these are upper case letters then no text is shown for the marker
but the line will be drawn to the corresponding point). The central
characters define the line shape. If the first shape character is a
`<` an arrowhead is inserted pointing to the start marker. If the last
character in the shape is a `>` an arrowhead is inserted pointing to
the end marker. (Note the original wavedrom may not support only
having an arrow to the start marker.) The remaining characters define
the arrow to be used:

* `-` a straight line between the markers, label centered on line
* `~ ` a curved line between the markers, label centered on line
* `-~` a curved line between the markers biased to end, label closer
  to end marker
* `~-` a curved line between the markers biased to start, label closer
  to start marker
* `-|` a straight line horizontally from the start then vertically to
  end, label closer to the end
* `|-` a straight line vertically from the start then horizontally to
  end, label closer to the start
* `-|-` a straight line horizontally from the start to the horizontal
  mid-point, then vertically, then horizontal to the end, label
  centered

See examples for how the different sorts of arrows actually look.
