# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#
# WARNING: This file is machine generated by fidlgen.

include <fuchsia/power/c/fidl.h>
fuchsia_power_Status = fuchsia_power_Status_OK, fuchsia_power_Status_NotAvailable

fuchsia_power_BatteryStatusInLine {
	status			flags[fuchsia_power_Status, int32]
	battery_present		int8
	charging		int8
	discharging		int8
	critical		int8
	power_adapter_online	int8
	timestamp		int64
	level			int32
	remaining_battery_life	int32
} [packed]

fuchsia_power_BatteryStatusOutOfLine {
	void	void
} [packed]

fuchsia_power_BatteryStatusHandles {
	void	void
} [packed]

fuchsia_power_PowerManagerGetBatteryStatusRequest {
	hdr	fidl_message_header[1245959964]
} [packed]

fuchsia_power_PowerManagerGetBatteryStatusRequestHandles {
	void	void
} [packed]

fuchsia_power_PowerManagerGetBatteryStatusResponseHandles {
	status	fuchsia_power_BatteryStatusHandles
} [packed]

fuchsia_power_PowerManagerWatchRequest {
	hdr	fidl_message_header[1083615561]
	watcher	flags[fidl_handle_presence, int32]
} [packed]

fuchsia_power_PowerManagerWatchRequestHandles {
	watcher	zx_chan_fuchsia_power_PowerManagerWatcher_client
} [packed]

resource zx_chan_fuchsia_power_PowerManager_client[zx_chan]
resource zx_chan_fuchsia_power_PowerManager_server[zx_chan]

zx_channel_create$fuchsia_power_PowerManager(options const[0], out0 ptr[out, zx_chan_fuchsia_power_PowerManager_client], out1 ptr[out, zx_chan_fuchsia_power_PowerManager_server])
fdio_service_connect$fuchsia_power_PowerManager(path ptr[in, string["/svc/fuchsia.power.PowerManager"]], handle zx_chan_fuchsia_power_PowerManager_server)
zx_channel_call$fuchsia_power_PowerManagerGetBatteryStatus(handle zx_chan_fuchsia_power_PowerManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_power_PowerManagerGetBatteryStatusRequest, fuchsia_power_PowerManagerGetBatteryStatusRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_power_PowerManagerGetBatteryStatusResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_write$fuchsia_power_PowerManagerWatch(handle zx_chan_fuchsia_power_PowerManager_client, options const[0], bytes ptr[in, fuchsia_power_PowerManagerWatchRequest], num_bytes bytesize[bytes], handles ptr[in, fuchsia_power_PowerManagerWatchRequestHandles], num_handles bytesize[handles])

fuchsia_power_PowerManagerWatcherOnChangeBatteryStatusRequest {
	hdr			fidl_message_header[1282068360]
	battery_statusInLine	fuchsia_power_BatteryStatusInLine
	battery_statusOutOfLine	fuchsia_power_BatteryStatusOutOfLine
} [packed]

fuchsia_power_PowerManagerWatcherOnChangeBatteryStatusRequestHandles {
	battery_status	fuchsia_power_BatteryStatusHandles
} [packed]

resource zx_chan_fuchsia_power_PowerManagerWatcher_client[zx_chan]
resource zx_chan_fuchsia_power_PowerManagerWatcher_server[zx_chan]

zx_channel_create$fuchsia_power_PowerManagerWatcher(options const[0], out0 ptr[out, zx_chan_fuchsia_power_PowerManagerWatcher_client], out1 ptr[out, zx_chan_fuchsia_power_PowerManagerWatcher_server])
fdio_service_connect$fuchsia_power_PowerManagerWatcher(path ptr[in, string["/svc/"]], handle zx_chan_fuchsia_power_PowerManagerWatcher_server)
zx_channel_write$fuchsia_power_PowerManagerWatcherOnChangeBatteryStatus(handle zx_chan_fuchsia_power_PowerManagerWatcher_client, options const[0], bytes ptr[in, fuchsia_power_PowerManagerWatcherOnChangeBatteryStatusRequest], num_bytes bytesize[bytes], handles ptr[in, fuchsia_power_PowerManagerWatcherOnChangeBatteryStatusRequestHandles], num_handles bytesize[handles])
