Add special keys to allow triggering power and fastboot key presses from
the cdba client. There is an option to send a short key "pulse" (press
followed by release after 100ms) or to press/release keys separately:
- ctrl+a -> o: Send power key pulse
- ctrl+a -> O: Toggle power key (first use: press, next use: release)
- ctrl+a -> f: Send fastboot key pulse
- ctrl+a -> F: Toggle fastboot key (first use: press, next use: release)
In most cases you want to send the "pulse" (short key press), so it's
helpful to have this mapped to a single key. This avoids forgetting to
release the key again after pressing it.
The protocol between CDBA client and server is:
(MSG_KEY_PRESS <key:u8, state:u8>)
where key is either DEVICE_KEY_FASTBOOT (0) or DEVICE_KEY_POWER (1)
and state is either KEY_PRESS_RELEASE (0), KEY_PRESS_PRESS (1) or
KEY_PRESS_PULSE (2).
The reason for implementing the "pulse" on the server side is that it's
hard to guarantee the timing on the client side. We don't know exactly when
the packets will arrive on the server. Also, "state" is a full byte anyway,
so might as well use some of the extra bits. :-)
Create new function calling fastboot_open so that device_open doesn't
have dependency on the fastboot_ops or udev.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Replace all license headers with the SPDX-License-Identitier headers to
follow the current recommendations.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Add cdba-server side support for "fastboot continue" which allows
fastboot to continue its default boot process.
I find it useful to setup my boards with an additional SD card which I
frequently use the default image on eMMC to chroot to and populate
modules, rebooting into fastboot and subsequently booting via fastboot
a rootfs on the SD card.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Granted all possible issues with SSH, especially in the remote and/or
proxied labs, and possible issues with the board being present but
failing to power up, it is useful to have a banner message once CDBA was
started. This gives user a clear picture that the connection is fine and
the server is trying to power up the board.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
We use the CDBA_USER value as a way to pass info from cdba-shell to
cdba-server. However if it is not provide (e.g. because the cdba-server
is started directly by shell) add a fallback to the system's USER
variable. And if that's also not set, provide a safe default of
'nobody'.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
The MSG_STATUS_UPDATE message when sent from the client to the server,
has until now indicated a request for a single status update. This was
suitable when the update was for human consumption on occasional basis.
But with the transition to producing status messages for programatical
consumption it makes more sense to just keep the stream on, without the
client having to poll the server for updates. This can in particular
keep the external "status command" mechanism simpler.
Just enabling the stream of status updates would spam the console with
status updates for those users that hasn't updated their clients, so the
client needs to opt-in to the status stream.
Repurpose the status update message (sent from the client) to indicate
that the streaming of status updates should be enabled.
Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
If we got to device_close(), the parent SSH might have been exited,
making standard file descriptors unusable. Rebind them to /dev/null, so
that any output during device_close (both from the cdba server and the
helpers) doesn't cause SIGPIPE.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Instad of hand-coding message sending, create a single wrapper that
sends messages to the client.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Limit access control to the boards according to the passed username. If
the user has no access, the board becoms completely invisible: it is not
listed, it is not possible to fetch board description, etc.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Don't count the timers, as it's not used anywhere. Clang is unhappy with that:
cdba-server.c:307:6: warning: variable 'count' set but not used [-Wunused-but-set-variable]
int count = 0;
Signed-off-by: Konrad Dybcio <konradybcio@kernel.org>
Pointer arithmetic should not be done on void pointers.
cdba-server.c:146:21: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
146 | memcpy(newp + fastboot_size, data, len);
| ^
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Notify users of cdba-server when fastboot connection is opened to ease
remote debugging of issues.
Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
In the case that we quit without actually having opened a device this
would dereference a NULL pointer, so check the device before doing so.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
As cdba-server exits it turns off power, which used to cut VBUS as well,
but since the refactoring only cuts power. Reintroduce the VBUS toggle
to ensure the device doesn't stay powered through USB after use.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Squash the power_on and power_off into a single "power" function, to
harmonize the code wrt the USB handling.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>