On Sun, Jun 03, 2018 at 04:34:12PM -0400, Steffen Görtz wrote: > Changes in v2: > - Remove stray 1 > > Changes in v1: > - Fix coding style issues > > Add a new category "stimulate" to host commands that > act upon high-level devices associated with machines/boards. > > This is patch is part of an effort to add support for BBC:microbit > educational computer to QEMU. > > The microbit board, as many other microcontroller boards, > contains typical trivial (digital) input and output options such as buttons > and LEDs, > but also more sophiscated possibilities such as analog inputs and > complex dedicated sensor ICs that are connected to the microbit machine > by means of inter-ic bus (i2c). > These devices interact with peripheral devices of the microcontroller > in use, for example with the GPIO peripheral of the used NRF51. > > One aim of our efforts is to create a user interface that models the > look and feel of the physical microbit board and lets the user interact > with its inputs and provide feedback on its outsputs. > > For this it is necessary to transmit user inputs such as the pressing of a > button to the machine. > In return, when the state of an output is changed on the machine, this > change needs to be reflected in the user interface. > > At the moment, there are only a few QMP commands that provide user input to > the > machine, eg. send-keys, input-button. These commands require very
QMP command names (from qapi/ui.json): send-key and input-send-event. > high-level concepts, which are not really suitable for applications that > microcontrollers are typically used in in. I agree that existing commands aren't suitable. They are tied to QemuConsole, which makes sense for graphics + keyboard/mouse input devices but doesn't exist for microcontrollers. I have CCed Gerd Hoffmann, the ui/ maintainer, to see if he agrees. > This RFC is meant to start a discussion on how to provide stimuli to > low-complex inputs and outputs typically found in embedded > microcontroller applications. To the best of my knowledge, there are > currently no examples of how to provide such stimuli to either SoC > device peripheral or machine level concepts like pushbuttons and LEDs. > > To my understanding, the following concepts/apis are needed: > - QMP commands to send stimuli to machine level concepts like > pushbuttons > - Machine level devices that receive these stimuli and act as an adapter > to manipulate the associated SoC peripheral devices The QEMU Object Model offers "interfaces". Many object-oriented programming languages have similar concepts (interfaces, virtual base classes, etc). Interfaces could be used to connect board-specific devices with the monitor command. But this is an implementation detail, we first need to agree on the API design. > - For outputs, machine level devices are needed that observe changes in > SoC peripherals and emit QMP events that clients can receive > > This patch adds a new qmp command "buttons-set-state" to update the > push-down state of arbitrarily identified buttons (string identifier). Can you list the types of devices that can consume events? * Pushbutton * GPIO input pin * Analog-to-digital converter * Temperature sensor * Accelerometer * Magnetometer * LED voltage decay light sensing * ? And list the types of devices that can produce events? * LED states * GPIO output pin * Digital-to-analog converter * ? Many of these inputs/outputs can be tied to an external UI. A degree of timing precision is required so that the UI is responsive, although cycle-accurate timing is not what I'd expect from QMP. Stefan
signature.asc
Description: PGP signature