]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libvbus/lib/src/vbus_i2c.cc
0d02564f73571d018a1da3bb32127f6a25ca29ba
[l4.git] / l4 / pkg / libvbus / lib / src / vbus_i2c.cc
1 /*
2  * (c) 2009 Torsten Frenzel <frenzel@os.inf.tu-dresden.de>
3  *     economic rights: Technische Universität Dresden (Germany)
4  *
5  * This file is part of TUD:OS and distributed under the terms of the
6  * GNU General Public License 2.
7  * Please see the COPYING-GPL-2 file for details.
8  */
9 #include <l4/cxx/ipc_stream>
10 #include <l4/vbus/vbus_generic>
11 #include <l4/vbus/vbus_i2c.h>
12 #include <l4/vbus/vdevice-ops.h>
13
14 int L4_CV
15 l4vbus_i2c_write(l4_cap_idx_t vbus, l4vbus_device_handle_t handle,
16                  l4_uint16_t addr, l4_uint8_t sub_addr,
17                  l4_uint8_t *buffer, unsigned long size)
18 {
19   L4::Ipc_iostream s(l4_utcb());
20   l4vbus_device_msg(handle, L4vbus_i2c_write, s);
21   s << addr << sub_addr << size;
22   s << L4::ipc_buf_cp_out(buffer, size);
23   return l4_error(s.call(vbus));
24 }
25
26 int L4_CV
27 l4vbus_i2c_read(l4_cap_idx_t vbus, l4vbus_device_handle_t handle,
28                 l4_uint16_t addr, l4_uint8_t sub_addr,
29                 l4_uint8_t *buffer, unsigned long *size)
30 {
31   L4::Ipc_iostream s(l4_utcb());
32   l4vbus_device_msg(handle, L4vbus_i2c_read, s);
33   s << addr << sub_addr << *size;
34
35   int err = l4_error(s.call(vbus));
36   if (err)
37     return err;
38   s >> *size >> L4::ipc_buf_cp_in(buffer, *size);
39   return 0;
40 }