counter: use symbolic names for input pins, wait conditions, annotation rows Replace magic numbers by symbolic references to (fixed and optional) decoder input signals, .wait() conditions, as well as annotation rows. Move some empty lines, to better reflect which code lines form groups of similar activity ("blocks" that logically belong together).
counter: explicit option text to .wait() edge mapping The previous implementation used the fact that libsigrok's internal API happens to use the first letter of the user visible English option text. Two locations mapped edge choices to API literals in different ways. Unify them, introduce an explicit option text to literal value mapping. (Many if not all decoder implementations do that. More adjustment to use common code could be beneficial.)
Add a trivial "counter" decoder This decoder just counts the number of falling and/or rising edges. This is especially useful for diagnosing protocols with a clock signal or a fixed number of transitions per bit, e.g. pulse length coded. It also provides a divider, which can be used to e.g. count the number of words in I²C or SPI transfers.