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

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 3121b5f was 69a13a4, checked in by Maurizio Lombardi <m.lombardi85@…>, 13 years ago

Add the remote battery interface functions implementation

  • Property mode set to 100644
File size: 3.5 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
41static void remote_battery_status_get(ddf_fun_t *, void *, ipc_callid_t,
42 ipc_call_t *);
43static void remote_battery_charge_level_get(ddf_fun_t *, void *, ipc_callid_t,
44 ipc_call_t *);
45
46/** Remote battery interface operations */
47static remote_iface_func_ptr_t remote_battery_dev_iface_ops[] = {
48 &remote_battery_status_get,
49 &remote_battery_charge_level_get,
50};
51
52/** Remote battery interface structure
53 *
54 * Interface for processing request from remote clients
55 * addressed by the battery interface.
56 *
57 */
58remote_iface_t remote_battery_dev_iface = {
59 .method_count = sizeof(remote_battery_dev_iface_ops) /
60 sizeof(remote_iface_func_ptr_t),
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.