Bare Metal Programming Tool Kit
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
pcf8574.h
Go to the documentation of this file.
1 //***************************************************************************
2 //
3 // file : bmptk/chips/pcf8574.h
4 //
5 // LICENSE (MIT expat license, copy of license.txt)
6 //
7 // Copyright (c) 2013 Wouter van Ooijen (wouter@voti.nl)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE..
27 //
28 //***************************************************************************
29 
30 // document everything in this file
33 namespace bmptk {
34 namespace chips {
35 
37 template < typename bus, int base, int address >
39 
40  static_assert(
41  ( (int)bus::type == bmptk::type_i2c_bus ),
42  "bus must be an i2c bus"
43  );
44 
46  static void init(){
47  bus::init();
48  }
49 
51  static void set( unsigned int x ){
52  bus::put_start();
53  bus::put_byte( base + ( address << 1 ) );
54  bus::get_ack();
55  bus::put_byte( x );
56  bus::get_ack();
57  bus::put_stop();
58  }
59 
61  static unsigned int get(){
62  bus::put_start();
63  bus::put_byte( base + (( address << 1 ) | 0x01 ));
64  bus::get_ack();
65  unsigned int result = bus::get_byte();
66  bus::put_stop();
67  return result;
68  }
69 
70 };
71 
73 template< typename bus, int address = 0 >
75  pcf8574x_channel< bus, 0x40, address > >{};
76 
78 template< typename bus, int address = 0 >
80  pcf8574x_channel< bus, 0x70, address > >{};
81 
82 }; // namespace chips
83 }; // namespace bmptk