Commit Graph

454 Commits

Author SHA1 Message Date
Norman Feske
c0b93190d0 sculpt: browse depot index files in '+' menu
This commit turns the '+' menu into a tool for the following tasks:

- Selecting and downloading of depot index files
- Browsing of the hierarchical depot index files
- Installation of packages found in the index files
- Interactive routing configuration of a selected package
- Deployment of configured component
2019-02-28 11:34:07 +01:00
Norman Feske
b7f5aae64a sculpt: don't constrain '+' menu to avail space
Sculpt used to restrict the size of leitzentrale windows to the screen
area that is not obstructed by the menu and log. This is useful for the
runtime view and the inspect window. However, the menu should be allowed
to use the entire screen because it overlays the other content.

Before this patch, the menu wouldn't be displayed completely on small
resolutions (e.g., 1024x768 when using the VESA driver) because the log
at the bottom of the screen imposed the size constraint on the menu.
With the patch, the menu is able to overlay the log window.
2019-02-28 11:34:07 +01:00
Norman Feske
2163ce25f6 sculpt: show TCB dependencies of selection
This patch enhances the runtime view such that not only immediate
dependencies but also all transitive dependencies of the selected
component are displayed. This way, the graph nicely reveals the
trusted computing base of the selection.
2019-02-28 11:34:07 +01:00
Norman Feske
21968d35bb sculpt: display parent roles in graph 2019-02-28 11:34:07 +01:00
Norman Feske
d0e1ddb8c2 sculpt: cache runtime-config info for GUI
Instead of parsing the runtime's configuration each time when generating
the graph dialog (e.g., when changing the hover state), extract the
relevant information only on configuration changes.
2019-02-28 11:34:06 +01:00
Norman Feske
010caa6236 sculpt: omit the sculpt helpers from the graph
The runtime view, launcher query, and depot query increase the
complexity of the graph without providing a tangible value to the user.
This patch omits those components from the runtime view to make the
graph less confusing.
2019-02-28 11:34:06 +01:00
Norman Feske
e9f40e9d68 sculpt: let depot/public_rw depend on update state
By running those components only when needed, the graph stays simpler in
the normal state.
2019-02-28 11:34:06 +01:00
Norman Feske
1afec11dfc sculpt: append "..." to non-immediate buttons
Append "..." to button labels whenever the button does not perform an
immediate action but merely toggles user-interface elements. This
tells the user that the button can be pressed without risk.
2019-02-28 11:34:06 +01:00
Norman Feske
852c319399 sculpt: use radio button for APs and launchers 2019-02-28 11:34:06 +01:00
Norman Feske
6110e6561c sculpt: show message when network is needed
Whenever Sculpt needs to download depot content but no network
connectivity is provided, a message is displayed in the "Diagnostics"
part of menu.
2019-02-28 11:34:06 +01:00
Norman Feske
ac68073ffc depot_download: support downloading index files
With this commit, the 'installation' input of the depot-download
subsystem accepts <index> nodes in addition to <archive> nodes. Each
index node refers to one index file specified via the 'path' attribute.

This commit also improves the tracking of failure states. Once an
installation job failed (due to a download of verification error),
it won't get re-scheduled. In the past, such failure states were not kept
across subsequent import iterations, which could result in infinite
re-attempts when an installation contained archives from multiple users.
The the progress of the download process is now reflected by the
"progress" attribute on the download manager's state report, which
allows the final report to contain the list of installed/failed archives
along with the overall progress/completed state. The detection of the
latter is important for the sculpt manager for reattempting the
deployment of the completed packages.

The patch enhances the depot_download.run script to stress the new
abilities. In particular, the scenario downloads a mix of index files
(one present, one missing) and archives, from two different depot users
(genodelabs and nfeske).

Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
de26d3c099 sculpt: show '+' button only when partition 'used'
This prevents the situation where the user has booted the system, has
not yet selected a storage target to "use" for Sculpt, yet clicks on the
'+' menu. Such clicks show no immediate response because Sculpt cannot
know where to deploy the selected package. But since the user is not
guided towards resolving this prerequisite, it's better to not present
the menu in the first place. The '+' appears as soon as a storage target
is selected for "use".
2019-02-28 11:34:06 +01:00
Norman Feske
edef2df21b depot_query: scan depot for users 2019-02-28 11:34:06 +01:00
Norman Feske
c25fbc010d depot_query: support for querying index files
Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
90709fc4d3 menu_view: remove "failed to construct" message
This error message may occur during the startup of a multi-component
application when the very first dialog is generated just after the menu
view is ready. It is not an error.
2019-02-28 11:34:06 +01:00
Norman Feske
74c31c60c6 menu_view: improved buffer alloc and view update
This patch improves the consistency of the view size with the dialog
size for situations where the dialog shrinks.
2019-02-28 11:34:06 +01:00
Norman Feske
cb163bfbe1 menu_view: prevent superfluous relinking 2019-02-28 11:34:06 +01:00
Norman Feske
40b986bcc4 menu_view: button and frame styles for sculpt
This commit adds the following styles:

button/enter    - for entering a sub menu
button/back     - for returning from a sub menu
button/radio    - for picking one item of a list
button/checkbox - for making a selection
frame/transient - for temporary GUI elements
2019-02-28 11:34:06 +01:00
Christian Prochaska
ee423e5bf1 qt5: remove deprecated APIs
Issue #3162
2019-02-26 14:38:03 +01:00
Norman Feske
b3727a9b46 Add missing override annotations
Issue #3159
2019-02-19 11:12:11 +01:00
Alexander Senier
5ccae43552 Rename Ada runtime to SPARK runtime
The minimal-footprint Ada runtime for implementing library-like
functionality in SPARK is now called "spark" runtime.

The full Ada runtime for entire components written in Ada and using the
libc as glue to the underlying system will move to the world repository
as "ada" runtime.

Issue #3144
2019-02-19 11:08:17 +01:00
Norman Feske
ba2b0b8360 gems: remove the use of deprecated APIs
This patch also updates os/slave.h because the app/launcher cannot be
reasonably updated without it.

Issue #1987
Issue #3125
2019-01-30 13:49:54 +01:00
Martin Stein
ffd4e231d7 run/depot_autopilot: less interactive mode
In less interactive mode, the run script doesn't give up on missing test
archives but instead removes the corresponding tests and marks them "missing".
This mode avoids total failure of a platform in automated test infrastructures
when only a few archives are missing.

Fixes #3120
2019-01-30 13:35:29 +01:00
Norman Feske
3bd4197951 gems: enable strict warnings for more components
Issue #465
2019-01-30 13:35:28 +01:00
Norman Feske
81fb10daaa Consistently name block components
This patch replaces abbreviations like "blk", "cli", and "srv" by their
full forms "block", "client", and "server".

Fixes #1258
2019-01-14 12:34:39 +01:00
Norman Feske
97bfc13237 sculpt: slight visual improvements of leitzentrale
This patch improves the appearance of the leitzentrale by eliminating
the (hardly visible) decorations from the GUI and graph views, and by
animating the motion of the graph position. The latter is meant to
remove the stuttering effect when the graph's size changes (and
re-centered).
2019-01-07 12:38:46 +01:00
Norman Feske
7c79bfc903 motif decorator: visual feedback to mouse clicks
Issue #3097
2019-01-07 12:38:46 +01:00
Norman Feske
49e0036471 window layouter: avoid superfluous layout updates 2019-01-07 12:38:45 +01:00
Norman Feske
9efb957059 window_layouter: propagate pressed window controls
This patch supplements the dragging state of window controls to the
window layout so that decorators become able to visually reflect this
state, i.e., pressing the title bar while moving a window.

Issue #3097
2019-01-07 12:38:45 +01:00
Norman Feske
2d95c4dc1c themed_decorator: new 'motion' policy attribute
This commit adds the optional 'motion=<number>' attribute to the
decorator's <policy> nodes. The default value is 0. If a value higher
than 0 is specified, window-geometry changes are applied as an animation
where the <number> denotes the number of animation steps.

Issue #3096
2019-01-07 12:38:45 +01:00
Norman Feske
a3bbef5f21 themed_decorator: optionally disable decorations
This patch adds the boolean policy attribute "decoration", which
controls whether window decorations are presented or not. It is enabled
by default. By setting the attribute to "no", matching windows appear
without any border, which is desireable for Sculpt's component graph.

Issue #3096
2019-01-07 12:33:57 +01:00
Norman Feske
296a409a29 gems: make menu_view's animated_geomerty.h public
This commit moves menu_view's utility for animating rectangles available
at 'include/gems/animated_geometry.h'.

Issue #3096
2019-01-07 12:33:57 +01:00
Norman Feske
56cb1885bb decorator: make window-layout updates more robust
This patch improves the window decorators in the following respects:

* Strict warnings are enabled now.
* The use of the 'List_model' makes the application of window-
  layout changes more robust. This is particularly the case for
  the restacking of windows.
* Display-mode changes are now supported by both decorators.

Issue #3094
2019-01-07 12:33:57 +01:00
Martin Stein
f0842a27c5 depot_autopilot: provide repeat mode
Adds an config attribute to the Depot Autopilot component:

:<config repeat>:

  Can be one of

    "false"         - process the given test list only once,
    "until_forever" - endlessly repeat processing the given test list,
    "until_failed"  - repeat processing the given test list until it fails.

Adds an environment variable to the Depot Autopilot Run script:

:TEST_REPEAT:

  Same as the <config repeat> attribute of the Depot Autopilot.

This is useful when having to debug very sporadic errors during one test
or a series of tests.
2019-01-07 12:33:56 +01:00
Stefan Kalkowski
6fb9c802d3 depot: enable package building for armv6
* Allow depot_autopilot to be run on top of arm_v6 too (Ref #3027)
2019-01-07 12:25:43 +01:00
Norman Feske
4b4247f412 window layouter: limit maximized size to client
This patch constraints the window size of the generated layout to the
minimum of the client's real window size and the wanted window size
(both may differ when resizing or maximizing windows).
2018-11-29 11:54:31 +01:00
Norman Feske
08bb689ae7 window layouter: bring unknown windows to front
This patch improves the handing of new appearing windows for which only
a wildcard assignment - but no exact assignment - rule exists. In the
prior version, an interactively raised window would stay in front of
such a window, which is unintuitive. The new version applies the
to-front mechanism to unknown new windows. For known new windows (with
an exact assignment rule) their original stacking position is preserved.
2018-11-29 11:54:30 +01:00
Norman Feske
4145417f67 window_layouter: improve window-resize handling
This patch solves an off-by-one problem in the window-size calculation,
which resulted in sporadic artificial resize requests. In Sculpt, this
glitch caused flickering artifacts in VirtualBox windows caused by
superfluous guest desktop-resize handling.

Furthermore, the patch introduces the dropping of resize requests with
unchanged content.
2018-11-29 11:54:30 +01:00
Norman Feske
6c70a51d28 sculpt_manager: improved popup toggling
In a corner case, the toggling of the popup menu entered a state
where the menu could not be opened anymore by the user. Specifically
the following input sequence triggered this problem.

1. The user opens the menu
2. The user clicks on the menu and holds the button
3. While holding the button, the user moves the pointer to the
   outside of the popup (e.g., to the '+' button)
4. The user releases the button.

In this situation, the popup is closed but the hover information for the
popup contains still the original clicked-on item. Hence, all subsequent
clicks on the '+' appear as both a click on the '+' (opening the popup)
and a click on the "hovered" popup entry (closing the popup).

The patch explicitely clears the popup's hover information when closing
the popup.
2018-11-29 11:46:02 +01:00
Emery Hemingway
7a11384177 Merge pthread into libc library
The pthread API is considered a standard feature of libc so better to
simply merge it with the libc. Pthreads are in fact already a part of
the libc in the form of weak symbols. This merger is also a prerequisite
for better integrating pthreads with the libc I/O task.

Fix #3054
2018-11-29 11:46:01 +01:00
Martin Stein
789d908cee depot_autopilot: show result statistic
Print a line like "succeeded: 35 failed: 11 skipped: 2" below the list of test
results. Adds further attributes to <previous-results> to communicate also the
previous statistics.
2018-11-27 11:36:36 +01:00
Martin Stein
2d041ac0fc depot_autopilot: evaluate sets of test packages 2018-11-16 15:07:53 +01:00
Emery Hemingway
6c8f1c8796 Add Terminal provider rules to depot deploy and depot autopilot
Support the '<terminal/>' tag in the depot package runtime '<provides/>'
declaration.

Fix #3034
2018-11-16 15:07:52 +01:00
Norman Feske
c60604062c decorator: improve robustness of window restacking
This patch improves the detection of new appearing top-most windows.
Such a window should prompt the decorator to bring the corresponding
nitpicker view(s) to the front of the view stack. The original
implementation relied on hints provided by the layouter (the 'topped'
attribute). With the patch, the decorator tracks the top-most window by
itself, which improves the robustness.

As a second improvement, the patch defers the destruction of windows to
the point when all other window operations are completed. This hides
intermediate states when replacing one window by another in one step,
which is typical for console-like scenarios. Hence, this patch should
eliminate flickering artifacts when switching from one virtual console
to another.

Issue #3031
2018-11-16 14:53:26 +01:00
Norman Feske
a973d9902b gems: flexible window layouter
This commit replaces the former floating_window_layouter with a new
window_layouter component that supports the subdivision of screen space
into columns and rows, the concept of layers, and the principle ability
to store window layout information across reboots. The latter is
accomplished by reflecting the component's internal state as a 'rules'
report to the outside.

Fixes #3031
2018-11-16 14:53:20 +01:00
Norman Feske
7d641d5f1f base: add Reconstructible::conditional method
The new 'conditional' method simplifies the typical use case for
'Constructible' objects where the constructed/destructed state depends
on a configuration parameter. The method alleviates the need to
re-implement the logic again and again.

The patch also removes the 'Reconstructible' constructor arguments
because they are unused.

Fixes #3006
2018-10-29 09:36:21 +01:00
Josef Söntgen
337184fbc6 sculpt_manager: handle WIFI connecting state
Issue #2988.
2018-09-20 09:06:18 +02:00
Roman Iten
e382f68e48 sculpt: support display resolutions up to 4K UHD
Issue #2987
2018-09-17 16:23:52 +02:00
Norman Feske
f4c55aa4db sculpt: interactive deployment
This patch introduces the distinction of the manually managed
config/deploy from the managed config/managed/deploy. The latter
incorporates interactive changes of the system by the user. There are
two user interactions supported.

First, by clicking on the '+' button at the top-left of the runtime
view, the user can select a component to launch. All launchers at
config/launcher/ are listed in the popup menu. Each launcher can be
lauched only once. While running, is not available in the popup
menu.

Second, when selecting a node that corresponds to a start node in
config/deploy or that was interactively launched, the detailed view
shows a 'remove' button, which can be used to exclude the component
from the deployment.

The result of the interactive manipulation is always available at
config/managed/deploy. Hence, the current situation can be made
persistent by using it as config/deploy.

Fixes #2986
2018-09-17 14:12:20 +02:00
Alexander Boettcher
f01464ef9e driver_manager: disable ohci when inside vbox
Fixes #2963
2018-09-05 11:08:54 +02:00
Norman Feske
9c377906cf sculpt: increase runtime-view RAM/caps on demand
This patch unifies the handling of on-demand resource upgrades among
ram_fs and depot_rom, and applies the new pattern to the runtime view.
This way, runtime view becomes able to accommodate more complex
scenarios.
2018-09-05 11:04:23 +02:00
Emery Hemingway
e2215768a2 Add regulatory.db to Sculpt wifi_drv ROMs 2018-08-28 17:10:57 +02:00
Norman Feske
cbe6ef210f sculpt: basic interaction with runtime view
This patch enables the user to click on a component in the runtime view
to reveal more information such as the used/assigned RAM/caps and
secondary dependencies.
2018-08-28 17:10:56 +02:00
Norman Feske
cdef4c2548 sculpt: runtime view
This patch adds a graph of the current runtime state to the
leitzentrale. The topology of the graph depends on the first routing
rule of each component. For this reason, the patch re-orders routing
policies to make the most important route the first in the list.

The user can switch between the runtime view and the inspect window
by clicking on the corresponding menu dialogs. E.g., a click on the
storage dialog reveals the inspect window.
2018-08-28 17:10:55 +02:00
Norman Feske
25ee872703 sculpt: separate launchers from deploy config
The most important route of each launcher is at the top of routes and
will be used to layout the graph topology of the runtime view.

By caching the state reports generated by the runtime init, the sculpt
manager becomes able to quickly check for the presence of components. So
we can apply routing-dependency checks not only prior starting
components but also while components are running.

Fixes #2938
Fixes #2912
2018-08-28 17:10:55 +02:00
Norman Feske
b4f596b197 Tool for querying information from file system
Issue #2936
2018-08-28 17:10:53 +02:00
Josef Söntgen
4bb5046e1f sculpt_manager: adapt to new wifi_drv front end 2018-08-28 16:45:22 +02:00
Josef Söntgen
4a47b7cb41 sculpt_manager: update wifi_drv fw ROM rules 2018-08-28 16:18:33 +02:00
Pirmin Duss
5a182651db sculpt_manager: add missing parent routes to runtime
In the generated runtime file the parent provides routes for IO_MEM,
IO_PORT and IRQ are needed to run acpica as a child of runtime.

Issue #2909
2018-08-02 14:36:41 +02:00
Alexander Boettcher
32a6d10de8 gems: support ohci in driver_manager 2018-08-02 14:36:40 +02:00
Norman Feske
4c96d697d5 sculpt_manager: reduce compile time
This little tweak reduces the compile time of the component to the half
by avoiding the repeated parsing of header files.
2018-08-02 14:36:40 +02:00
Norman Feske
a2dc07056e sculpt: use cached_fs_rom as depot_rom
Fixes #2904
2018-08-02 14:36:40 +02:00
Norman Feske
ae028d89cf driver_manager/sculpt: hook for manual USB policy
This patch adds the /config/usb file to Sculpt, which allows then user
to manually define rules for assigning USB devices to clients. The
content is incorporated by the driver manager into the USB driver
configuration. Note that this mechanism does not work for HID devices
because these devices are claimed by the USB driver's built-in HID
support.

Issue #2890
2018-08-02 14:36:36 +02:00
Pirmin Duss
0ac9d1ee31 floating_window_layouter: handle config updates
update the internal representation of the config if it changes.

issue #2893
2018-08-02 14:36:34 +02:00
Norman Feske
6c6b19b198 sculpt: yield focus when switching away from Wifi
When first selecting an access point to connect to, and then - while the
passphrase entry field is displayed - switching to wired networking, the
keyboard focus was still referring to the passphrase entry field instead
of yieling the focus to the inspect window. This commit fixes the
problem by adding the wifi NIC target as additional condition.
2018-07-03 09:39:33 +02:00
Martin Stein
49a3a0e0d0 nic_router: multiple uplinks
Introduce the uplink tag:

! <config>
!    <uplink label="wifi"  domain="uplink">
!    <uplink label="wired" domain="wired_bridge">
!    <uplink               domain="wired_bridge">
! <config/>

For each uplink tag, the NIC router requests a NIC session with the
corresponding label or an empty label if there is no label attribute.
These NIC sessions get attached to the domain that is set in their
uplink tag as soon as the domain appears. This means their lifetime is
not bound to the domain. Uplink NIC sessions can be safely moved from
one domain to another without being closed by reconfiguring the
corresponding domain attribute.

Attention: This may render previously valid NIC router configurations
useless. A domain named "uplink" doesn't automatically request a NIC
session anymore. To fix these configurations, just add

! <uplink domain="uplink"/>

or

! <uplink label="[LABEL]" domain="uplink"/>

as direct subtag of the <config> tag.

Issue #2840
2018-06-29 10:44:53 +02:00
Norman Feske
347d82bdc6 sculpt: handle removal of "used" storage target 2018-06-12 12:11:50 +02:00
Norman Feske
fca3e59e26 sculpt: increase RAM quota of USB block driver
Thanks Sebatian Sumpf for testing!
2018-06-12 12:11:49 +02:00
Norman Feske
3372c1a7b2 sculpt: manage leitzentrale window layout
With this patch, the sculpt manager takes over the role the window
layouter of the leitzentrale, which eliminates the need to manually
position and size the inspect window.
2018-06-12 12:11:49 +02:00
Norman Feske
a3999c93f4 sculpt: sanitize deployment, diagnostic feedback
This patch suppresses the start of components that cannot run because
obvious runtime dependencies (used servers) are missing in the runtime.
In this situation, the sculpt manager gives diagnostic feedback to the
user in the runtime dialog.
2018-06-12 12:11:44 +02:00
Norman Feske
ff1d3425b1 sculpt: more robust discovery intervention
Sculpt's discovery of the default storage target can be intercepted by
user input (i.e., pointer movements) at boot time. The patch makes this
intervention mechanism robust for the case where nitpicker's first hover
report arrives after all storage devices were already scanned.
2018-06-12 12:11:43 +02:00
Norman Feske
9334f6c05d sculpt: track both manual and managed NIC target
By tracking the states for an interactive selected NIC target (managed)
and a manual-defined NIC target (config/nic_router) separately, the
sculpt manager becames able to present the user with the ability to
interactively disable and re-enable a manually-managed network
configuration.
2018-06-12 12:11:43 +02:00
Norman Feske
ae55187a68 sculpt: increase ram-fs caps on demand 2018-06-12 12:11:42 +02:00
Norman Feske
3ec96ab080 sculpt: avoid excess quota for sculpt manager
The sculpt manager wrongly paid for the nitpicker session of the fader
out of its own pocket. This patch reduces the quota transfer to the
amount provided the fader.
2018-06-12 12:11:42 +02:00
Josef Söntgen
5727da0c75 sculpt_manager: preserve hybrid MBR when expanding 2018-06-12 12:11:41 +02:00
Josef Söntgen
268b8205a1 gpt_write: add flag to preserve hybrid
When updating the GPT to match the underlying block device, the
protective MBR will normally also be updated. In case a hybrid MBR is
used, as is done if 'image/disk' is specified, setting the
'preserve_hybrid' flag will prevent the component from overriding the
MBR.
2018-06-12 12:11:41 +02:00
Norman Feske
d4408beeaf sculpt: show wifi button only if wifi card present 2018-06-12 12:11:39 +02:00
Norman Feske
fc800ef9e5 sculpt: let inspect window use vimrc from /config 2018-06-12 12:11:39 +02:00
Christian Helmuth
4bfc32789e sculpt: manager depends on x86 (currently)
The sculpt manager uses the platform-session interface which is not
defined for other platforms currently.
2018-06-12 12:11:38 +02:00
Norman Feske
3dd81b0d32 Sculpt for The Curious (TC)
This commit updates Early-Adopters (EA) version of Sculpt to the version
for The Curious (TC). Most importantly, it contains the new interactive
sculpt-manager component that automates many system management and
configuration tasks.
2018-05-31 14:02:20 +02:00
Norman Feske
5b8a2af979 depot_query: reflect query version in reports 2018-05-31 12:28:14 +02:00
Norman Feske
6f0a727aee depot_deploy: support lazy pkg installation
This patch enhances the 'Child' interface with the ability to retry the
deployment after an initial attempt failed. This way, packages can be
installed on demand based on the error feedback of deployment attempts.
2018-05-31 12:28:14 +02:00
Norman Feske
a4b94dad41 depot_download: limit fetchurl download attempts 2018-05-31 12:28:14 +02:00
Norman Feske
c21e5863b9 depot_download: produce 'state' report
The state report reflects the progress of downloading, verifying, and
extracting archives. For the download step, it includes the progress
as reported by fetchurl.
2018-05-31 12:28:14 +02:00
Norman Feske
64810bb138 menu_view: make root-widget size configurable
The config attributes 'width' and 'height' allow one to explicly specify
the menu-view's size instead of using the min size.
2018-05-31 12:28:13 +02:00
Norman Feske
d65a2c7cab menu_view: avoid initial animation of float widget 2018-05-31 12:28:13 +02:00
Norman Feske
5958fe0a69 menu_view: change voffset of button immediately
This patch changes the button widget to apply the vertical offset to its
child widgets at draw time, not at the layout phase. This way, the
visual feedback on button press/release changes is more direct because
it sidesteps the geometry animation.
2018-05-31 12:28:13 +02:00
Norman Feske
bf52f73d03 menu_view: improved box and float layouts
This patch enhances the box layout such that child widgets are
equally stretched to the available size whenever the box layout's
size is larger than its min size. Furthermore, it corrects the
mixed-up use of the terms east and west in the float widget.
2018-05-30 13:36:18 +02:00
Norman Feske
2a9b0a163e depot_deploy: make child-state tracking reusable 2018-05-30 13:36:18 +02:00
Norman Feske
9fd2ab1aaf depot_download: forward fetchurl progress reports
This patch enables the observation of the download progress from the
outside of the depot-download subsystem.
2018-05-30 13:36:17 +02:00
Norman Feske
e314edb736 depot_download: respond to 'installation' changes
This patch enables the 'depot_download' subsystem to trigger downloads
whenever there is a new version of the 'installation' ROM.
2018-05-30 13:36:17 +02:00
Josef Söntgen
ab77f94348 gems: add tool to write a GPT to a Block device
This component creates a GPT on a Block device. It supports the common
actions, as in adding, deleting and modifying entries in the GPT, while
considering alignment constraints. If needed it will round the length of
a partition down to meet those constraints. The component will not
perform layout checking, i.e., it does not care about overlapping
partitions. Only when apping a partition it will make sure that the
partition will fit.

Please read _repos/gems/src/app/gpt_write/README_ for more detailed
information on how to use the component and feel free to check out
_repos/gems/run/gpt_write.run_.

Fixes #2814.
2018-05-30 13:36:16 +02:00
Norman Feske
3065cceb73 menu_view: defer geometry animation to layout step
The box-layout widget used to trigger the geometry animation of its
children immediately when updating the widget from the XML model (by
calling 'child->Widget::geometry'). This caused layout inconsistencies
in situations where the box layout is defined not by the constraints of
the child widgets but from the outside (the parent calls Widget::size).
Since the final layout is not known before the parent defines the actual
size, this patch moves the trigger point for the geometry animation to
'Widget::size'.
2018-05-30 13:36:16 +02:00
Norman Feske
05b0010281 menu_view: optional 'version' widget attribute
The new 'version' attribute can be used to explicitly distinguish
widgets that have the same name. E.g., if one widget is removed and
another with the same name is created somewhere else at the same time,
the menu view would normally interpret this change as a movement.
By attaching a distinct 'version' the new instance, menu view won't
attempt perform a smooth transition between the old and new widgets.
2018-05-30 13:36:16 +02:00
Christian Prochaska
f347cb90f1 depot: qt5 recipes
Fixes #2792
2018-05-30 12:26:19 +02:00
Emery Hemingway
e2661c58dc Convert static VFS library to dynamic library
Fix #2759
2018-05-30 12:26:19 +02:00
Josef Söntgen
dd562f84fa driver_manager: add NVMe block driver
Issue #2794.
2018-05-03 15:32:00 +02:00
Norman Feske
afcad2a968 os: new Input::Event representation
This commit changes the 'Input::Event' type to be more safe and to
deliver symbolic character information along with press events.

Issue #2761
Fixes #2786
2018-05-03 15:31:25 +02:00
Martin Stein
e8d17af1d0 depot_download_mgr: raise chroot quota for sel4
Give chroot 32K more to satisfy Sel4 on x86 64-bit.

Issue #2781
2018-05-03 15:31:22 +02:00
Norman Feske
26a2591896 menu_view: VFS-based font handling
Fixes #2773
2018-05-03 15:31:18 +02:00
Emery Hemingway
fde056506e depot_query: catch exceptions for missing directories
Ref #2742
2018-04-19 12:38:27 +02:00
Norman Feske
3778558608 os: reworked nitpicker_gfx/text_painter.h
This patch improves the `Text_painter` utility that is commonly used by
native Genode components to render text:

- Support for subpixel positioning
- Generic interface for accessing font data
- Basic UTF-8 support

Since the change decouples the font format from the 'Text_painter' and
changes the API to use the sub-pixel accurate 'Text_painter::Position'
type, all users of the utility require an adaptation.

Fixes #2716
2018-04-10 11:09:18 +02:00
Norman Feske
4c0f70fbcb gems: enable strict warnings for depot_query 2018-04-10 11:09:18 +02:00
Emery Hemingway
f27953c48d Standalone POSIX pipe utility
Pipe between files using POSIX stdio. This facilitates raw transfers
between arbitrary resources exposed by the VFS library.

Fix #2708
2018-03-08 15:22:12 +01:00
Norman Feske
3887ba8a21 menu_view: fix hover reporting
The 'Widget::hovered' method discarded the result of the traversal of
the widget tree.
2018-03-08 12:05:10 +01:00
Josef Söntgen
cd7cb5fbf4 depot_deploy: update blueprint pkg path
We need to update the blueprint pkg path as well in case the start node
is changed. Otherwise the query tool will keep using the initially
configured pkg path.
2018-02-28 11:05:05 +01:00
Christian Helmuth
ddd5e8abb4 Provide /dev/random in runtime for fetchurl
libcrypto transparently opens /dev/random to seed its PRNG or logs an
error if this fails.
2018-02-28 11:05:04 +01:00
Norman Feske
76b82020d4 depot_query: handle missing user info gracefully
This patch handles the case where the pubkey or download location for a
queries depot user is missing.
2018-02-28 11:04:59 +01:00
Norman Feske
03574e4a79 Adaptation to lxIP-based fetchurl 2018-02-28 11:01:32 +01:00
Norman Feske
eabe83d4f2 Adaptation to chroot 'writeable' attribute
Issue #2643
2018-02-19 20:50:48 +01:00
Norman Feske
5286456e48 depot_deploy: graceful handling of missing content
This patch improves the error handling for the case where the depot
lacks the content of the to-be-deployed pkg. Instead of infinitely
reattempting to obtain blueprints for such content, the deploy tool
prints a single message.
2018-02-16 08:42:29 +01:00
Norman Feske
cc8b03ae4f depot_deploy: customization hooks for start nodes
This patch enables the manual customization of 'ram', 'caps', and
'version' attributes of start nodes.
2018-02-15 10:27:00 +01:00
Norman Feske
5d9eb55274 driver manager: policy for 'default' block device
If only a single AHCI device is present, the block service provided by
the drivers subsystem allows the client to refer to this block device
via the label 'default'.

Issue #2676
2018-02-15 10:22:10 +01:00
Norman Feske
d7522defde depot_deploy: support multiple runtimes
This patch changes the 'depot_deploy' tool to spawn any number of
runtimes. In contrast to the original version, which merely consumed a
blueprint generated by a pre-configured 'depot_query' instance, the new
version actively generates queries as needed. So there is a feedback
loop between 'depot_deploy' and 'depot_query'. The instantiation of
subsystems is controlled by the '<start>' nodes of the 'depot_deploy'
configuration. For each start node, the tool tries to determine the
ingredients (provided by the depot) by asking the 'depot_query' tool.
Once the information is complete, a corresponding start node of the
dynamic init instance is generated.
2018-02-14 20:41:03 +01:00
Norman Feske
3149506963 depot_query: refined <runtime> node structure
This patch introduces the subnodes <provides>, <requires>, and
<content> to the <runtime> node. All <rom> sessions that are
expected from the depot appear within the <content> node, which
sets them nicely apart from <rom> sessions that may be required
as runtime arguments.

Note that the <requires> and <provides> nodes do not appear in the
patch because the existing depot_deploy tool does not interpret this
information (the pkg/test-fs_report runtime does not provide any
service, and the timer session is provided as a common route).
2018-02-14 20:41:03 +01:00
Norman Feske
a57dd46aff depot_query: obtain query from separate ROM
This patch adds the config attribute 'query'. If set to the value "rom",
the query information is obtained from a ROM session labeled "query".
Otherwise, the query information is expected to be part of the config.

This enables us to use the component in two different scenarios. In
one scenario, 'depot_query' is embedded in a managed dynamic init.
Here, taking the query from the config is easy. In the other scenario,
'depot_query' is running as a daemon with a once-configured VFS but
varying queries. The queries originate from a component that does not
control the 'depot_query' config.
2018-02-14 20:41:03 +01:00
Norman Feske
fefeb29d5f Depot-download subsystem 2018-02-09 14:04:17 +01:00
Norman Feske
10f1616c28 base: add util/list_model.h
The new 'List_model' utility helps with the implementation of
component-internal data models created and updated from XML.

Fixes #2653
2018-02-09 13:34:17 +01:00
Norman Feske
cde8163770 os: make 'Buffered_xml' util publicly available
The 'Buffered_xml' utility is used by three components and a fourth is
on the way. To avoid another duplication of the code, this patch makes
it publicly available at 'os/buffered_xml.h'.
2018-02-09 13:34:17 +01:00
Norman Feske
e6b87e9d20 depot_query.run: use label_last 2018-02-09 13:34:15 +01:00
Norman Feske
eff67d3131 depot_query: support nested pkgs and raw content 2018-02-09 13:34:15 +01:00
Norman Feske
5641ebcd1b depot_query: 'binary' and 'config' as attributes
By specifying the 'config' of a '<runtime>' as an attribute, we can
distinguish the case where the config is obtained from a ROM session
from the case where the config is specified inline as a '<config>' node.
2018-02-09 13:34:15 +01:00
Norman Feske
a36def9a10 depot_query: respond to config updates 2018-01-17 12:14:39 +01:00
Norman Feske
9e0dafbd93 depot_query: move 'Archive' utils to include/depot
This enables other depot tools to use the same utilities.
2018-01-17 12:14:38 +01:00
Norman Feske
9a671cf8bc depot_query: support to query <dependencies>
The '<dependencies>' attribute 'path' refers to a depot archive.
Depending on the attributes 'source="no"' and 'binary="no" (defaults
shown), the depot_query component determines the source/binary
dependencies of the given archive. The result has the form of a report
with a sequence of <missing> and <present> nodes, each equipped with the
'path' of the dependency.
2018-01-17 12:14:38 +01:00
Norman Feske
b0abfc2dcd depot_query: rename <query> to <blueprint> node
Since the <query> node results in the generation of a "blueprint"
report, it should better be named <blueprint>. This also clears the way
for adding further query types such as <dependencies>, following the
same pattern of generating a report of the corresponding query name.
2018-01-17 12:14:38 +01:00
Norman Feske
6552313098 depot_query: query user information
The new '<user name"...">' node allows for querying the download
location and public key of the specified name.
2018-01-17 12:14:38 +01:00
Norman Feske
5d6f97cc1d drivers_managed-pc: simplification
This patch removes the former use of ram_fs, fs_rom, and fs_report from
the subsystem and uses a report_rom instead. The fs-based reporting was
introduced to accommodate automatically instantiated usb_block drivers,
which turned out to be impractical for the sculpt scenario.
2018-01-17 12:14:37 +01:00
Norman Feske
366bba0227 Exclude higher-level repos from strict warnings
This is a follow-up commit to "Increase default warning level", which
overrides Genode's new default warning level for targets contained in
higher-level repositories. By explicitly whitelisting all those targets,
we can selectively adjust them to the new strictness over time - by
looking out for 'CC_CXX_WARN_STRICT' in the target description files.

Issue #465
2018-01-17 12:14:36 +01:00
Norman Feske
eba9c15746 Follow practices suggested by "Effective C++"
The patch adjust the code of the base, base-<kernel>, and os repository.
To adapt existing components to fix violations of the best practices
suggested by "Effective C++" as reported by the -Weffc++ compiler
argument. The changes follow the patterns outlined below:

* A class with virtual functions can no longer publicly inherit base
  classed without a vtable. The inherited object may either be moved
  to a member variable, or inherited privately. The latter would be
  used for classes that inherit 'List::Element' or 'Avl_node'. In order
  to enable the 'List' and 'Avl_tree' to access the meta data, the
  'List' must become a friend.

* Instead of adding a virtual destructor to abstract base classes,
  we inherit the new 'Interface' class, which contains a virtual
  destructor. This way, single-line abstract base classes can stay
  as compact as they are now. The 'Interface' utility resides in
  base/include/util/interface.h.

* With the new warnings enabled, all member variables must be explicitly
  initialized. Basic types may be initialized with '='. All other types
  are initialized with braces '{ ... }' or as class initializers. If
  basic types and non-basic types appear in a row, it is nice to only
  use the brace syntax (also for basic types) and align the braces.

* If a class contains pointers as members, it must now also provide a
  copy constructor and assignment operator. In the most cases, one
  would make them private, effectively disallowing the objects to be
  copied. Unfortunately, this warning cannot be fixed be inheriting
  our existing 'Noncopyable' class (the compiler fails to detect that
  the inheriting class cannot be copied and still gives the error).
  For now, we have to manually add declarations for both the copy
  constructor and assignment operator as private class members. Those
  declarations should be prepended with a comment like this:

        /*
         * Noncopyable
         */
        Thread(Thread const &);
        Thread &operator = (Thread const &);

  In the future, we should revisit these places and try to replace
  the pointers with references. In the presence of at least one
  reference member, the compiler would no longer implicitly generate
  a copy constructor. So we could remove the manual declaration.

Issue #465
2018-01-17 12:14:35 +01:00
Josef Söntgen
93e42bf5b9 driver_manager: increase intel_fb_drv CAP quota 2017-12-21 15:01:49 +01:00
Norman Feske
a52541de18 depot: move versions to subdirectory
This patch changes the depot layout such that each archive is
represented as a directory that contains the versions of the archive as
subdirectories.

Issue #2610
2017-12-21 15:01:45 +01:00
Alexander Boettcher
0b09cc8cf6 driver_manager: improve fb-driver selection
This is a follup-up commit for "driver_manager: add fb_boot_drv
support". It refines the heuristics for selecting the most suitable
framebuffer driver be prevent boot_fb_drv from being preferred over
the VESA driver when running in Qemu.
2017-11-30 11:23:13 +01:00
Norman Feske
c05ab9c310 drivers_managed-pc: propagate keyboard LEDs
This patch supplements the drivers subsystem with the ability to
propagate the global capslock and numlock states to PS/2 and USB HID
keyboards.
2017-11-30 11:23:12 +01:00
Emery Hemingway
0b60b8954b app/backdrop: use 'with_libc'
Fix #2577
2017-11-30 11:23:04 +01:00
Stefan Kalkowski
593fe2a571 driver_manager: hand out USB serial sessions too 2017-11-09 12:18:42 +01:00
Alexander Boettcher
aec97b7da0 driver_manager: add fb_boot_drv support 2017-11-09 12:18:41 +01:00
Norman Feske
2b632760b6 driver manager: increase RAM quota for usb_drv
Without this patch, usb_drv would issue a resource request when
assigning a USB device to a VM in the sculpt scenario.

Furthermore, the patch adjusts the intel_fb quota to enable it on
devices where the driver allocates the framebuffer in many 4K pieces.
2017-11-09 12:18:41 +01:00
Norman Feske
6bfd4f4276 gems: driver-manager subsystem for PC platforms
This is a drivers subsystem that starts the most fundamental
(framebuffer, input, block) device drivers dynamically, depending on the
runtime-detected devices. The discovered block devices are reported
as a "block_devices" report.
2017-10-05 17:40:00 +02:00
Norman Feske
e99f2d0595 window layouter: fix initial window positioning
This patch fixes the positioning of windows according to configured
policies. Thanks to Alexander Senier for reporting the issue!
2017-10-05 17:39:54 +02:00
Norman Feske
063413ca1f menu_view: animate geometric changes 2017-08-28 16:49:41 +02:00
Norman Feske
bb52181bc5 menu_view: fix frame dropping after sleep
When idle, menu_view de-schedules timer events to save processing time.
Once reactivated by a dialog update, it computes the passed time and
applies the result to the animator. However, the animation was most likely
started by the update not during the sleep. So the passed time must not
be applied to the animation in this case. Otherwise, many animation steps
are computed at once within a single visible frame.

Furthermore, the patch adjusts the REDRAW_PERIOD to 2, which is a better
value for geometric movements as opposed to mere color-blending effects
where the frame rate does not matter so much.

It also refines the nitpicker-buffer relocation in a way that extends
the buffer but does not shrink it. This lowers the interaction with
nitpicker in situations where the dialog size changes a lot.
2017-08-28 16:49:41 +02:00
Norman Feske
cdebd0a994 menu_view: depgraph widget
The new <depgraph> widget arranges child widgets in the form of a
dependency graph.
2017-08-28 16:49:41 +02:00
Norman Feske
f073c51b49 menu_view: support labels with no background
By applying the text output to the alpha buffer in addition to the pixel
buffer, labels can now appear without the need for an underlying frame
or button.
2017-08-28 16:49:40 +02:00
Norman Feske
4ca493b762 menu_view: use list_model_from_xml.h 2017-08-28 16:49:40 +02:00
Norman Feske
c601052c8c menu_view: generalized data-model-update utility
The utility simplifies the synchronization of a list-based data model
from an XML structure.
2017-08-28 16:49:40 +02:00
Norman Feske
13e9f6728d menu_view: split implementation into several files 2017-08-28 16:49:40 +02:00
Norman Feske
80324d9f54 menu_view: handle disppearing child widgets 2017-08-28 16:49:40 +02:00
Norman Feske
569741faf2 menu_view: add '<float>' widget
The new widget allows one to align a child widget within a larger parent
widget by specifying the boolean attributes 'north', 'south', 'east',
and 'west'. If none is specified, the child is centered. If opposite
attributes are specified, the child is stretched.
2017-08-28 16:49:40 +02:00
Norman Feske
8312950e2f gems: app/depot_query 2017-08-28 16:49:38 +02:00
Norman Feske
a9eb25f07f gems: fix cap quotas of launcher.run scenario
The launcher.run scenario was last updated mid-may of the recently
developed cap-quota accounting (before all cap types were covered).
Hence, the quotas used in the scenario are too low. This patch adjusts
the values such that the scenario can be started on NOVA on Qemu. It
also fixes a warning about a deprecated way of configuring the
report_rom component.

Thanks to Jörg-Christian Böhme for reporting!
2017-08-17 11:04:23 +02:00
Emery Hemingway
32d16c1792 app/launcher: <configfile name="..."/> support
Fix #2404
2017-05-31 17:50:28 +02:00
Christian Prochaska
99937a6267 qt5: update to version 5.8.0
Fixes #2424
2017-05-31 13:16:23 +02:00
Stefan Kalkowski
632ef28463 os: removal of deprecated os/config.h (fix #2431) 2017-05-31 13:16:22 +02:00
Christian Prochaska
a507928cde qt5: fix deprecated warnings
Fixes #2427
2017-05-31 13:16:19 +02:00
Norman Feske
0167d5af50 Integrate core's RAM service into the PD service
Fixes #2407
2017-05-31 13:16:14 +02:00
Norman Feske
4d442bca30 Streamline exception types
This patch reduces the number of exception types by facilitating
globally defined exceptions for common usage patterns shared by most
services. In particular, RPC functions that demand a session-resource
upgrade not longer reflect this condition via a session-specific
exception but via the 'Out_of_ram' or 'Out_of_caps' types.

Furthermore, the 'Parent::Service_denied', 'Parent::Unavailable',
'Root::Invalid_args', 'Root::Unavailable', 'Service::Invalid_args',
'Service::Unavailable', and 'Local_service::Factory::Denied' types have
been replaced by the single 'Service_denied' exception type defined in
'session/session.h'.

This consolidation eases the error handling (there are fewer exceptions
to handle), alleviates the need to convert exceptions along the
session-creation call chain, and avoids possible aliasing problems
(catching the wrong type with the same name but living in a different
scope).
2017-05-31 13:16:07 +02:00
Norman Feske
1f4f119b1e Capability quota accounting and trading
This patch mirrors the accounting and trading scheme that Genode employs
for physical memory to the accounting of capability allocations.

Capability quotas must now be explicitly assigned to subsystems by
specifying a 'caps=<amount>' attribute to init's start nodes.
Analogously to RAM quotas, cap quotas can be traded between clients and
servers as part of the session protocol. The capability budget of each
component is maintained by the component's corresponding PD session at
core.

At the current stage, the accounting is applied to RPC capabilities,
signal-context capabilities, and dataspace capabilities. Capabilities
that are dynamically allocated via core's CPU and TRACE service are not
yet covered. Also, the capabilities allocated by resource multiplexers
outside of core (like nitpicker) must be accounted by the respective
servers, which is not covered yet.

If a component runs out of capabilities, core's PD service prints a
warning to the log. To observe the consumption of capabilities per
component in detail, the PD service is equipped with a diagnostic
mode, which can be enabled via the 'diag' attribute in the target
node of init's routing rules. E.g., the following route enables the
diagnostic mode for the PD session of the "timer" component:

  <default-route>
    <service name="PD" unscoped_label="timer">
      <parent diag="yes"/>
    </service>
    ...
  </default-route>

For subsystems based on a sub-init instance, init can be configured
to report the capability-quota information of its subsystems by
adding the attribute 'child_caps="yes"' to init's '<report>'
config node. Init's own capability quota can be reported by adding
the attribute 'init_caps="yes"'.

Fixes #2398
2017-05-31 13:16:06 +02:00
Norman Feske
3670f7735d base: use 'Quota_transfer::Account' for 'Service'
This patch makes use of the new 'Quota_transfer::Account' by the service
types in base/service.h and uses 'Quota_transfer' objects in
base/child.cc and init/server.cc.

Furthermore, it decouples the notion of an 'Async_service' from
'Child_service'. Init's 'Routed_service' is no longer a 'Child_service'
but is based on the new 'Async_service' instead.

With this patch in place, quota transfers do no longer implicitly use
'Ram_session_client' objects. So transfers can in principle originate
from component-local 'Ram_session_component' objects, e.g., as used by
noux. Therefore, this patch removes a strumbling block for turning noux
into a single threaded component in the future.

Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
58f44d39c5 base: use 'Ram_quota' in 'Ram_session' args
This patch replaces the former use of size_t with the use of the
'Ram_quota' type to improve type safety (in particular to avoid
accidentally mixing up RAM quotas with cap quotas).

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
93b78573bd Remove superfluous 'cxx' from LIBS in target.mk 2017-05-02 15:28:53 +02:00
Christian Helmuth
88db3c0df7 Fix some deprecated warnings
Issue #1987
2017-03-24 16:20:03 +01:00
Martin Stein
9b8fcb5fd0 nano3d: get rid of env() calls
Issue #1987
2017-02-28 13:00:42 +01:00
Norman Feske
29b8d609c9 Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
Josef Söntgen
e266e3cf1d floating_window_layouter: remove deprecated env()
Issue #2280.
2017-02-28 12:59:21 +01:00
Norman Feske
e17811fb7a cli_monitor: API transition
Issue #1987
2017-02-28 12:59:20 +01:00
Norman Feske
19868de69a launcher: API transition (deprecated warnings)
Issue #1987
2017-02-27 15:37:49 +01:00
Emery Hemingway
48150a706b update Reporter constructors
The Reporter utility needs a reference to the environment at
construction to establish Report connections.

Ref #1987
Fix #2232
2017-02-07 19:20:29 +01:00
Norman Feske
f8349b5bc7 os/slave.h: Remove use of global allocator
This patch eliminates the need for a global allocator by passing the
parent-service registry as argument to the 'Slave::Policy' constructor.

Fixes #2269
2017-02-07 11:12:28 +01:00
Norman Feske
cd3a5852d6 Warn about the use of deprecated headers
This commit enables compile-time warnings displayed whenever a deprecated
API header is included, and adjusts the existing #include directives
accordingly.

Issue #1987
2017-01-31 12:01:18 +01:00
Norman Feske
eb869ab2dc backdrop: API transition (fix deprecated warnings)
Issue #1987
2017-01-31 12:01:13 +01:00
Norman Feske
645cd88a8b gems/menu_view: adaptation to new libc/vfs config
Issue #2217
2017-01-23 16:46:04 +01:00
Norman Feske
703d68c7c1 themed_decorator: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
7180851b2f menu_view: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
81862a41e1 decorator: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Emery Hemingway
745eb89237 lib/component: pass extended Libc::Env
Libc::Env is the Genode::Env interface extended to cover access
to the XML content of the 'config' ROM and a VFS instance. This
deduplicates the burden of components to attain and manage
these resources.

Fix #2217
Ref #1987
2017-01-13 13:07:01 +01:00
Norman Feske
e91170a49c app/cli_monitor: API transition
Besides updating CLI monitor to the new API, the patch removes
Fiasco.OC-specific extensions that remained unused for a long time.

Ref #1987
2017-01-13 13:07:00 +01:00
Emery Hemingway
2b7fcf5cae app/floating_window_layouter: API transition
Ref #1987
2017-01-13 13:06:58 +01:00
Emery Hemingway
8ab932a8d0 app/backdrop: API transition
Ref #1987
2017-01-13 13:06:57 +01:00
Norman Feske
3315294f2d Deprecate Genode::config()
Issue #1959
2017-01-13 13:06:54 +01:00
Norman Feske
4da52517c1 Simpify startup of dynamically linked binaries
This patch removes the component_entry_point library, which used to
proved a hook for the libc to intercept the call of the
'Component::construct' function. The mechansim has several shortcomings
(see the discussion in the associated issue) and was complex. So we
eventually discarded the approach in favor of the explicit handling of
the startup.

A regular Genode component provides a 'Component::construct' function,
which is determined by the dynamic linker via a symbol lookup.
For the time being, the dynamic linker falls back to looking up a 'main'
function if no 'Component::construct' function could be found.

The libc provides an implementation of 'Component::construct', which
sets up the libc's task handling and finally call the function
'Libc::Component::construct' from the context of the appllication task.
This function is expected to be provided by the libc-using application.
Consequently, Genode components that use the libc have to implement the
'Libc::Component::construct' function.

The new 'posix' library provides an implementation of
'Libc::Component::construct' that calls a main function. Hence, POSIX
programs that merely use the POSIX API merely have to add 'posix' to the
'LIBS' declaration in their 'target.mk' file. Their execution starts at
'main'.

Issue #2199
2017-01-13 13:06:52 +01:00
Norman Feske
ccffbb0dfc Build dynamically linked executables by default
Fixes #2184
2016-12-14 11:22:27 +01:00
Norman Feske
25a7ea3d40 base: rename 'Volatile_object' to 'Reconstructible'
Fixes #2151
2016-12-01 17:46:50 +01:00
Norman Feske
5a1cef6381 Make label prefixing more strict
This patch unconditionally applies the labeling of sessions and thereby
removes the most common use case of 'Child_policy::filter_session_args'.
Furthermore, the patch removes an ambiguity of the session labels of
sessions created by the parent of behalf of its child, e.g., the PD
session created as part of 'Child' now has the label "<child-name>"
whereas an unlabeled PD-session request originating from the child
has the label "<child-name> -> ". This way, the routing-policy of
'Child_policy::resolve_session_request' can differentiate both cases.

As a consequence, the stricter labeling must now be considered wherever
a precise label was specified as a key for a session route or a server-
side policy selection. The simplest way to adapt those cases is to use a
'label_prefix' instead of the 'label' attribute. Alternatively, the
'label' attribute may used by appending " -> " (note the whitespace).

Fixes #2171
2016-11-30 13:37:07 +01:00
Norman Feske
c0f1d99d7a Adapt decorator to component API
Issue #1987
2016-11-30 13:37:04 +01:00
Norman Feske
eb90d92009 Adapt themed decorator to component API
Issue #1987
2016-11-30 13:37:04 +01:00
Norman Feske
b44f0554bd Adapt high-level components to new parent API
This patch adjusts the various users of the 'Child' API to the changes
on the account of the new non-blocking parent interface. It also removes
the use of the no-longer-available 'Connection::KEEP_OPEN' feature.

With the adjustment, we took the opportunity to redesign several
components to fit the non-blocking execution model much better, in
particular the demo applications.

Issue #2120
2016-11-30 13:37:03 +01:00
Norman Feske
8bafb9d41b Adapt low-level components to new parent interface
This patch adjusts the components of the os repository as well as device
drivers to the new parent interface.

Issue #2120
2016-11-25 16:06:42 +01:00
Norman Feske
6dd695f788 update report_rom configs to fix warning
Several run scripts still used the outdated '<rom>' sub node in the
report_rom configuration.
2016-11-08 15:26:33 +01:00
Emery Hemingway
71f0757a30 transition Input infrastructure to new base API
* Supply Env to Input::Session_component
* Attach input event dataspace at Input::Client
* Process input events by lambda rather than pointer
* Supply Env and a label to Input::Connection

* Wm serves valid input_session to decorator
* Per-source signal handling at input_merger
* Base API update for dummy_input_drv, test_input
* Input API update for launcher, menu_view, terminal,
  mupdf, sdl, seoul, virtualbox

Ref #1987
2016-10-21 12:39:29 +02:00
Norman Feske
e370e08e01 Define Genode::size_t as unsigned long
Fixes #2105
2016-10-21 12:39:29 +02:00
Norman Feske
17c79a9e23 base: avoid use of deprecated base/printf.h
Besides adapting the components to the use of base/log.h, the patch
cleans up a few base headers, i.e., it removes unused includes from
root/component.h, specifically base/heap.h and
ram_session/ram_session.h. Hence, components that relied on the implicit
inclusion of those headers have to manually include those headers now.

While adjusting the log messages, I repeatedly stumbled over the problem
that printing char * arguments is ambiguous. It is unclear whether to
print the argument as pointer or null-terminated string. To overcome
this problem, the patch introduces a new type 'Cstring' that allows the
caller to express that the argument should be handled as null-terminated
string. As a nice side effect, with this type in place, the optional len
argument of the 'String' class could be removed. Instead of supplying a
pair of (char const *, size_t), the constructor accepts a 'Cstring'.
This, in turn, clears the way let the 'String' constructor use the new
output mechanism to assemble a string from multiple arguments (and
thereby getting rid of snprintf within Genode in the near future).

To enforce the explicit resolution of the char * ambiguity, the 'char *'
overload of the 'print' function is marked as deleted.

Issue #1987
2016-08-29 17:27:10 +02:00
Emery Hemingway
f8337b511b Move Session_label from os to base
Session_label constructor now takes a bare string rather than a
serialized argument buffer.
Replace all instances of previous constructor with 'label_from_args'
function.

Issue #1787
2016-07-11 13:09:24 +02:00
Emery Hemingway
8ae2f65da8 uniform XML boolean attribute access
Replace 'attribute(...).has_value("yes")`
with 'attribute_value(..., false)'.

This allows for boolean configuration to be set with values such as
"true", "false", "yes", "no", or "1", "0".

Fixes #2002
2016-06-22 12:21:42 +02:00
Norman Feske
807be83b1b Remove inconsistent use of 'is_' prefix
Fixes #1963
2016-05-23 15:52:39 +02:00
Norman Feske
f19b269360 window layouter: use Attached_rom_dataspace::xml
Issue #1959
2016-05-23 15:52:37 +02:00
Norman Feske
fd401bdf53 Thread API cleanup
This patch cleans up the thread API and comes with the following
noteworthy changes:

- Introduced Cpu_session::Weight type that replaces a formerly used
  plain integer value to prevent the accidental mix-up of
  arguments.
- The enum definition of Cpu_session::DEFAULT_WEIGHT moved to
  Cpu_session::Weight::DEFAULT_WEIGHT
- New Thread constructor that takes a 'Env &' as first argument.
  The original constructors are now marked as deprecated. For the
  common use case where the default 'Weight' and 'Affinity' are
  used, a shortcut is provided. In the long term, those two
  constructors should be the only ones to remain.
- The former 'Thread<>' class template has been renamed to
  'Thread_deprecated'.
- The former 'Thread_base' class is now called 'Thread'.
- The new 'name()' accessor returns the thread's name as 'Name'
  object as centrally defined via 'Cpu_session::Name'. It is meant to
  replace the old-fashioned 'name' method that takes a buffer and size
  as arguments.
- Adaptation of the thread test to the new API

Issue #1954
2016-05-23 15:49:55 +02:00
Norman Feske
3bceefc9cf Omit superfluous use of "CAP"/"SIGNAL" services
The functionality of the former "CAP" and "SIGNAL" services is now
provided by core's "PD" service.
2016-05-09 13:24:51 +02:00
Norman Feske
7274ca997d Remove Genode::Process from API
This patch makes the former 'Process' class private to the 'Child'
class and changes the constructor of the 'Child' in a way that
principally enables the implementation of single-threaded runtime
environments that virtualize the CPU, PD, and RAM services. The
new interfaces has become free from side effects. I.e., instead
of implicitly using Genode::env()->rm_session(), it takes the reference
to the local region map as argument. Also, the handling of the dynamic
linker via global variables is gone. Now, the linker binary must be
provided as constructor argument.

Fixes #1949
2016-05-09 13:10:52 +02:00
Emery Hemingway
f46a504bb6 use Arg_string::set_arg_string to set session labels
Issue #1861
2016-03-07 16:10:32 +01:00
Norman Feske
55506f432e window layouter: small documentation fix 2016-02-26 12:20:57 +01:00
Norman Feske
3680a79f38 window layouter: omit superfluous resize request
This patch removes a superfluous resize request at the creation time of
a new window, which resulted from _requested_size being initialized with
zero whereas the _geometry was initialized with the actual window
geometry. In some cases, this inconsistency led to the report of a new
resize request for the size 0x0, which is obviously wrong. I.e., it
leads clients to believe that the user has closed the window.
2016-02-10 16:15:53 +01:00
Norman Feske
56d98824e3 window layouter: reset drag state when finalized
This patch resets the part of the window state that is responsible the
dragging of window controls once the drag operation is finalized.
Without it, the window was wrongly positioned when leaving the maximized
state after a previous resize operation.
2016-02-10 15:41:52 +01:00
Norman Feske
d198f07890 window layouter: keyboard actions
This patch adds support for manipulating the window layout with keyboard
actions. It supports the toggling of fullscreen (aka maximize), the
raising of the currently focused window, and the focusing the next/previous
window.
2016-02-09 16:06:40 +01:00
Norman Feske
2a916b143d window layouter: key sequence handling
This patch adds the mechanics for detecting key sequences to the window
layouter. Sequences for layouter actions can be expressed in the
layouter configuration. They cannot trigger any real action yet.
2016-02-09 16:06:40 +01:00
Norman Feske
44e6870e4e window layouter: respond to decorator margins 2016-02-09 15:38:34 +01:00
Norman Feske
54045771c7 window decorator: report decorator margins 2016-02-09 15:28:47 +01:00
Norman Feske
752ddc153e window layouter: respond to nitpicker mode changes 2016-02-09 14:30:28 +01:00
Norman Feske
37044eaad8 window layouter: internal restructuring
This patch splits the implementation of the window layouter into several
headers to ease the upcoming addition of new functionality.
2016-02-09 14:30:28 +01:00
Norman Feske
ff8d790f93 themed_decorator: cope with missing pointer info 2016-02-09 14:29:01 +01:00
Norman Feske
e34f211dc1 themed_decorator: allow skipping of decorations
This patch weakens the themed decorator's demands with respect to the
supplied theme data. It no longer strictly requires the specification of
the '<closer>', '<title>', and '<maximizer>' nodes and the accompanied
png/tff data. Furthermore, the default.png can be left out if both decor
and aura have a size of zero.
2016-02-09 14:28:43 +01:00
Norman Feske
27b71a0876 window layouter: label-dependent window policies
This patch enhances the layouter to apply a label-dependent policy
for the placement of new windows. The policy may contain the
attributes 'xpos', 'ypos', and 'maximized'. If the latter is set
to "yes", the matching window will appear in maximized state.
2016-02-09 14:28:40 +01:00
Christian Helmuth
20c9b02326 Mark Server::Entrypoint noncopyable 2016-02-05 10:47:45 +01:00
Josef Söntgen
72823eeddb mixer_gui_qt: write config instead of using report
* Also change the way how mute is handled. Only send the
  changed signal if the user has clicked on the mute checkbox

* Always check channels_rom is valid

* Add <default> handling

* Increase verbosity

Fixes #1795.
2015-11-29 18:17:08 +01:00
Norman Feske
4b9e1f1060 Window decorator that can be styled 2015-11-27 12:18:54 +01:00
Norman Feske
2dde77f62c gems: add Nitpicker_buffer and Dither_painter
The two utilities gems/nitpicker_buffer.h and gems/dither_painter.h were
formerly private to the menu_view component.
2015-11-27 12:18:54 +01:00
Norman Feske
c63bea825d decorator: fix warning 2015-11-27 12:18:54 +01:00
Norman Feske
e4678a4dc1 decorator: do not defer stacking changes
This patch changes the decorator to always apply stacking-order changes
immediately instead of deferring the re-stacking of the nitpicker views
to the next call of 'update_nitpicker_views'. The deferred application
did not always work when more then one windows changed their stacking
position at once because the cached '_neighbor' values interfered with
each other.

The eager re-stacking should not have negative effects on the user
experience because, in contrast to re-positioning, re-stacking a rare
operation.
2015-11-27 12:18:53 +01:00
Norman Feske
c26d30dffc decorator: use server API 2015-11-27 12:18:53 +01:00
Norman Feske
acb0ddd9ef decorator: generalize include/decorator/window.h
This change makes it possible to reuse the generic window decorator
classes in include/decorator/ for decorators of a different structure.
E.g., instead of painting decorations on a single nitpicker session,
each window may paint its decorations into additional window-specific
nitpicker sessions.
2015-11-27 12:18:53 +01:00
Josef Söntgen
5f2d92f916 gems: add experimental mixer_gui based on Qt
Issue #1770.
2015-11-18 12:22:07 +01:00
Christian Prochaska
759b9ed1ad floating window layouter: bring focused window to front 2015-11-04 14:09:30 +01:00
Christian Prochaska
9aff45ae8c floating window layouter: fix padding 2015-11-04 14:09:30 +01:00
Christian Prochaska
220d143e44 decorator: fix detection of hovered window control 2015-11-04 14:09:29 +01:00
Norman Feske
755d2cce05 gems: turn launcher into a panel-like application 2015-11-04 14:09:29 +01:00
Norman Feske
519eb334e9 menu view: add hbox layout, support widget reorder
This patch, complements the existing vbox layout with a hbox layout and
improves the response to dynamic dialog updates. The new version support
disappearing widgets and the reordering of widgets. Furthermore, this
patch ensures that the 'Widget::_layout' functions are executed after
updating a new version of the dialog.
2015-11-04 14:09:29 +01:00
Norman Feske
5456175d07 menu view: change style to be less obtrusive 2015-11-04 14:09:29 +01:00
Norman Feske
3726cafb28 window layouter: no focus update on hover reset 2015-11-04 14:09:28 +01:00
Norman Feske
57ce50a3d4 window layouter: handle maximize/unmaximize 2015-10-06 12:18:56 +02:00
Norman Feske
a8cca8e1b3 window layouter: respond to window closer 2015-10-06 12:18:56 +02:00
Norman Feske
dcc4b8c313 wm/layouter/decorator: propagate window controls 2015-10-06 12:18:55 +02:00
Norman Feske
e27ebd0368 wm/layouter: respond to external focus requests 2015-10-06 12:18:55 +02:00
Norman Feske
cdb87a7c4f window layouter: handle hidden windows 2015-10-06 12:18:55 +02:00
Norman Feske
afac1e86bb decorator: window colors and controls
This patch improves the decorator in two ways. First, it enables the
assignment of window colors depending on the window labels. This
configuration can be changed dynamically. Second, it adds the handling
of window controls for closing, maximizing, minimizing windows.

Issue #1689
Fixes #1688
2015-10-06 12:18:54 +02:00
Norman Feske
20f961cbd8 cli_monitor, launcher: handle exiting subsystems
Until now, the CLI monitor and the laucher allowed the user to explitly
kill subsystems but both used to ignore gracefully exiting subsystems.
It was the user's job to remove the remains of those subsystems. The
patch takes the burden of manually killing exited subsystems from the
user.

Fixes #1685
2015-09-30 15:48:12 +02:00
Adrian-Ken Rueegsegger
c2ff0ae9d4 Minor cleanup fixes
- Fix spelling errors
- Remove extra semicolons
- Remove extra spaces

Fixes #1650
2015-08-21 11:00:59 +02:00
Norman Feske
785cac7168 decorator: consider partially transparent windows
This patch changes the window manager, the decorator, and the
floating window layouter to propagate the usage of an alpha channel from
the client application to the decorator. This way, the decorator can
paint the decoration elements behind the affected windows, which would
otherwise be skipped.
2015-07-07 19:48:06 +02:00
Norman Feske
caa809e593 CPU load display application 2015-07-07 19:48:05 +02:00
Norman Feske
259b127f96 Polygon drawing and rudimentary 3D routines
This patch adds two new painters located at gems/include/polygon_gfx.
Both painters draw convex polygons with an arbirary number of points.
The shaded-polygon painter interpolates the color and alpha values
whereas the textured-polygon painter applies a texture to the polygon.
The painters are accompanied by simplistic 3D routines located at
gems/include/nano3d/ and a corresponding example (gems/run/nano3d.run).
2015-07-07 19:48:04 +02:00
Norman Feske
c74a4fbbe2 wm: decouple decorator and layouter from wm 2015-07-06 12:22:28 +02:00
Norman Feske
a3d78d3779 window layouter: let focus follow the pointer 2015-07-06 12:22:28 +02:00
Norman Feske
d7256c60a0 window decorator: limit update rate to 50 fps 2015-07-06 12:22:27 +02:00
Norman Feske
69da1fa1ed wm/layouter: Raise window on click 2015-07-06 12:22:27 +02:00
Norman Feske
a3d287f23d decorator: update hover report on layout change
Fixes #1590
2015-06-22 14:43:39 +02:00
Alexander Boettcher
c76de84f0a gems: let run decorator-stress on 64bit
Fixes #1247
2015-03-27 11:53:12 +01:00
Norman Feske
ff422ccc6e backdrop: respond to config changes
Fixes #1376
2015-01-26 12:28:42 +01:00
Norman Feske
6244c6ec97 gems: launcher application 2014-10-13 15:21:55 +02:00
Norman Feske
cc303c4671 gems: new menu-view application
The menu view generates a simple dialog of widgets and reports the
hovered element. It is meant to be embedded into applications that
require simple GUIs but don't want to deal with the pecularities of
a full-blown widget set.
2014-10-13 15:21:54 +02:00
Norman Feske
ec565c1ded gems: add include/gems/animator.h
The utility for animating GUI elements was formerly private to
'app/decorator'.
2014-10-13 15:21:54 +02:00
Norman Feske
c48a4ebce8 os: add texture_rgb888.h and texture_rgb565.h
The headers 'texture_rgb565.h' and 'texture_rgb888' contain
template specializations needed for using the 'Texture::rgba' function
for the respective pixel formats. The specializations were formerly
contained in application-local code.
2014-10-13 15:21:53 +02:00