<config>
	<parent-provides>
		<service name="ROM"/>
		<service name="IRQ"/>
		<service name="IO_MEM"/>
		<service name="IO_PORT"/>
		<service name="PD"/>
		<service name="RM"/>
		<service name="CPU"/>
		<service name="LOG"/>
	</parent-provides>
	<default-route>
		<any-service> <parent/> <any-child/> </any-service>
	</default-route>
	<default caps="100"/>

	<start name="timer">
		<resource name="RAM" quantum="1M"/>
		<provides><service name="Timer"/></provides>
	</start>

	<start name="drivers" caps="1500" managing_system="yes">
		<resource name="RAM" quantum="64M"/>
		<binary name="init"/>
		<route>
			<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
			<service name="Timer">   <child name="timer"/> </service>
			<service name="Capture"> <child name="nitpicker"/> </service>
			<service name="Event">   <child name="nitpicker"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>

	<start name="report_rom">
		<resource name="RAM" quantum="1M"/>
		<provides> <service name="Report"/> <service name="ROM"/> </provides>
		<config verbose="no">
			<policy label="status_bar -> focus"          report="nitpicker -> focus"/>
			<policy label="nitpicker_config -> xray"     report="global_keys_handler -> xray"/>
			<policy label="global_keys_handler -> hover" report="nitpicker -> hover"/>
			<policy label="nit_focus -> clicked"         report="nitpicker -> clicked"/>
			<policy label="nitpicker -> focus"           report="nit_focus -> focus"/>
		</config>
	</start>
	<start name="virtdev_rom">
		<resource name="RAM" quantum="640K"/>
		<provides> <service name="ROM"/> </provides>
		<route> <any-service> <parent/> </any-service> </route>
	</start>
	
	<start name="platform_drv" managing_system="yes">
		<resource name="RAM" quantum="2M"/>
		<provides> <service name="Platform"/> </provides>
		<route>
			<service name="ROM" label="devices">
			        <child name="virtdev_rom"/>
			</service>
			<any-service> <parent/> </any-service>
		</route>
		<config>
			<policy label_prefix="virtio_fb_drv" info="yes">
				<device name="gpu0"/>
			</policy>
			<policy label_prefix="virtio_keyboard_drv" info="yes">
				<device name="input0"/>
			</policy>
			<policy label_prefix="virtio_mouse_drv" info="yes">
				<device name="input1"/>
			</policy>
		</config>
	</start>

	<start name="event_filter" caps="90">
		<resource name="RAM" quantum="1280K"/>
		<provides> <service name="Event"/> </provides>
		<route>
			<service name="ROM" label="config">
				<parent label="event_filter.config"/>
			</service>
			<service name="ROM">   <parent/> </service>
			<service name="PD">    <parent/> </service>
			<service name="CPU">   <parent/> </service>
			<service name="LOG">   <parent/> </service>
			<service name="Timer"> <parent/> </service>
			<service name="Event"> <parent/> </service>
		</route>
	</start>

	<start name="virtio_keyboard_drv" caps="70">
		<binary name="virtio_mmio_input_drv"/>
		<resource name="RAM" quantum="1M"/>
		<config match_product="keyboard"/>
		<route>
			<service name="Platform"> <child name="platform_drv"/> </service>
			<service name="Event">    <child name="event_filter" label="keyboard"/> </service>
			<service name="CPU">    <parent/> </service>
			<service name="PD">     <parent/> </service>
			<service name="LOG">    <parent/> </service>
			<service name="ROM">    <parent/> </service>
		</route>
	</start>

	<start name="virtio_mouse_drv" caps="80">
		<binary name="virtio_mmio_input_drv"/>
		<resource name="RAM" quantum="1M"/>
		<config match_product="mouse"/>
		<route>
			<service name="Platform"> <child name="platform_drv"/> </service>
			<service name="Event">    <child name="event_filter" label="mouse"/> </service>
			<service name="CPU">    <parent/> </service>
			<service name="PD">     <parent/> </service>
			<service name="LOG">    <parent/> </service>
			<service name="ROM">    <parent/> </service>
		</route>
	</start>

	<start name="virtio_fb_drv" caps="120">
		<binary name="virtio_mmio_fb_drv"/>
		<resource name="RAM" quantum="50M"/>
		<route>
			<service name="Platform"> <child name="platform_drv"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>
	
<!-- toggle key mappings depending on the numlock state -->
	<start name="numlock_remap_rom">
		<binary name="rom_filter"/>
		<resource name="RAM" quantum="1M"/>
		<provides> <service name="ROM"/> </provides>
		<route>
			<service name="ROM" label="config">  <parent label="numlock_remap.config"/> </service>
			<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>

	<start name="event_filter" caps="90">
		<resource name="RAM" quantum="2M"/>
		<provides> <service name="Event"/> </provides>
		<route>
			<service name="ROM" label="config">        <parent label="event_filter.config"/> </service>
			<service name="ROM" label="numlock.remap"> <child name="numlock_remap_rom"/> </service>
			<service name="ROM" label="capslock">      <parent label="capslock"/> </service>
			<service name="ROM">   <parent/> </service>
			<service name="PD">    <parent/> </service>
			<service name="CPU">   <parent/> </service>
			<service name="LOG">   <parent/> </service>
			<service name="Timer"> <parent/> </service>
			<service name="Event"> <parent/> </service>
		</route>
	</start>
	<start name="nitpicker_config">
		<binary name="rom_filter"/>
		<resource name="RAM" quantum="1096K"/>
		<provides> <service name="ROM"/> </provides>
		<config>
			<input name="xray_enabled" rom="xray" node="xray">
				<attribute name="enabled" /> </input>

			<output node="config">
				<attribute name="focus" value="rom"/>
				<inline>
					<report focus="yes" xray="yes" hover="yes" keystate="yes"
					        clicked="yes"/>
					<capture/> <event/>
					<domain name="pointer" layer="1" origin="pointer"
					        content="client" label="no"/>
					<domain name="panel" layer="2"
					        content="client" label="no" hover="always"/>
				</inline>
				<if>
					<has_value input="xray_enabled" value="no" />
					<then>
						<inline>
							<domain name="launchpad" layer="3"
							        content="client" label="no" hover="always" focus="click"
							        ypos="18" height="-18" />
							<domain name="" layer="3"
							        content="client" label="no" hover="always" focus="click"
							        ypos="18" height="-18" />
						</inline>
					</then>
					<else>
						<inline>
							<domain name="launchpad" layer="3" color="#dd0000"
							        content="tinted" label="yes" hover="focused" focus="click"
							        ypos="18" height="-18" />
							<domain name="" layer="3" color="#55dd34"
							        content="tinted" label="yes" hover="focused" focus="click"
							        ypos="18" height="-18" />
						</inline>
					</else>
				</if>
				<inline>
					<policy label_prefix="pointer"            domain="pointer"/>
					<policy label_prefix="status_bar"         domain="panel"/>
					<policy label_prefix="scout -> launchpad" domain="launchpad"/>
					<default-policy                           domain=""/>

					<global-key name="KEY_SCROLLLOCK" label="global_keys_handler -> input" />
					<global-key name="KEY_F1"         label="global_keys_handler -> input" />
					<global-key name="KEY_F2"         label="global_keys_handler -> input" />
				</inline>
			</output>
		</config>
		<route>
			<service name="ROM" label="xray"> <child name="report_rom"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>

	<start name="global_keys_handler">
		<resource name="RAM" quantum="1096K"/>
		<config>
			<bool name="xray" initial="no"/>

			<press   name="KEY_SCROLLLOCK" bool="xray" change="toggle"/>
			<press   name="KEY_F1"         bool="xray" change="on"/>
			<release name="KEY_F1"         bool="xray" change="off"/>
			<press   name="KEY_F2"         bool="xray" change="toggle"/>

			<report name="xray" delay_ms="125">
				<hovered domain="panel"/>
				<bool name="xray"/>
			</report>
		</config>
		<route>
			<service name="Report"> <child name="report_rom"/> </service>
			<service name="ROM" label="hover"> <child name="report_rom"/> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start> 

	<start name="nitpicker" caps="120">
		<resource name="RAM" quantum="1216K"/>
		<provides>
			<service name="Gui"/> <service name="Capture"/> <service name="Event"/>
		</provides>
		<route>
			<service name="ROM" label="config">
				<child name="nitpicker_config"/> </service>
			<service name="ROM" label="focus">
				<child name="report_rom"/> </service>
			<service name="Report">
				<child name="report_rom"/> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>

	<start name="pointer">
		<resource name="RAM" quantum="1096K"/>
		<config/>
	</start>

	<start name="nit_focus">
		<resource name="RAM" quantum="1M"/>
		<config> <default-policy focus="yes"/> </config>
		<route>
			<service name="ROM" label="clicked"> <child name="report_rom"/> </service>
			<service name="Report"> <child name="report_rom"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>

	<start name="status_bar">
		<resource name="RAM" quantum="1096K"/>
		<route>
			<service name="ROM" label="focus"> <child name="report_rom"/> </service>
			<any-service> <parent/> <any-child/> </any-service>
		</route>
	</start>

	<start name="scout" caps="10000">
		<resource name="RAM" quantum="80M" />
	</start>
</config>

