source: mainline/uspace/lib/drv/generic/remote_battery_dev.c@ f9d9184

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since f9d9184 was c1ee46f, checked in by Jan Vesely <jano.vesely@…>, 12 years ago

libdrv, battery: Use index initialized arrays.

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/*
2 * Copyright (c) 2012 Maurizio Lombardi
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libdrv
30 * @{
31 */
32/** @file
33 */
34
35#include <async.h>
36#include <errno.h>
37#include <ops/battery_dev.h>
38#include <device/battery_dev.h>
39#include <ddf/driver.h>
40#include <macros.h>
41
42static void remote_battery_status_get(ddf_fun_t *, void *, ipc_callid_t,
43 ipc_call_t *);
44static void remote_battery_charge_level_get(ddf_fun_t *, void *, ipc_callid_t,
45 ipc_call_t *);
46
47/** Remote battery interface operations */
48static const remote_iface_func_ptr_t remote_battery_dev_iface_ops[] = {
49 [BATTERY_STATUS_GET] = remote_battery_status_get,
50 [BATTERY_CHARGE_LEVEL_GET] = remote_battery_charge_level_get,
51};
52
53/** Remote battery interface structure
54 *
55 * Interface for processing request from remote clients
56 * addressed by the battery interface.
57 *
58 */
59remote_iface_t remote_battery_dev_iface = {
60 .method_count = ARRAY_SIZE(remote_battery_dev_iface_ops),
61 .methods = remote_battery_dev_iface_ops,
62};
63
64/** Process the status_get() request from the remote client
65 *
66 * @param fun The function from which the battery status is read
67 * @param ops The local ops structure
68 */
69static void
70remote_battery_status_get(ddf_fun_t *fun, void *ops, ipc_callid_t callid,
71 ipc_call_t *call)
72{
73 const battery_dev_ops_t *bops = (battery_dev_ops_t *) ops;
74
75 if (bops->battery_status_get == NULL) {
76 async_answer_0(callid, ENOTSUP);
77 return;
78 }
79
80 battery_status_t batt_status;
81 const int rc = bops->battery_status_get(fun, &batt_status);
82
83 if (rc != EOK)
84 async_answer_0(callid, rc);
85 else
86 async_answer_1(callid, rc, batt_status);
87}
88
89/** Process the battery_charge_level_get() request from the remote client
90 *
91 * @param fun The function from which the battery charge level is read
92 * @param ops The local ops structure
93 *
94 */
95static void
96remote_battery_charge_level_get(ddf_fun_t *fun, void *ops, ipc_callid_t callid,
97 ipc_call_t *call)
98{
99 const battery_dev_ops_t *bops = (battery_dev_ops_t *) ops;
100
101 if (bops->battery_charge_level_get == NULL) {
102 async_answer_0(callid, ENOTSUP);
103 return;
104 }
105
106 int battery_level;
107 const int rc = bops->battery_charge_level_get(fun, &battery_level);
108
109 if (rc != EOK)
110 async_answer_0(callid, rc);
111 else
112 async_answer_1(callid, rc, battery_level);
113}
114
Note: See TracBrowser for help on using the repository browser.