Skip to content

Commit

Permalink
Add new hard/soft Wire I2C library.
Browse files Browse the repository at this point in the history
Added a generic pure abstract class to provide the interface for all
Wire implementations.  Modified the old Wire library using software
interface to use the new Base Wire abstract class.  Added a new
library which allows the use of the Wire class to use the I2C
hardware.  Changed default pin numbers for Software Wire library to
match pin numbers used for I2C/TWI shields created for the Arduino.

Signed-off-by: Trystan Jones <crenn6977@gmail.com>
  • Loading branch information
crenn authored and Marti Bolivar committed Jun 29, 2012
1 parent 50ee209 commit b98596c
Show file tree
Hide file tree
Showing 9 changed files with 626 additions and 251 deletions.
4 changes: 4 additions & 0 deletions CREDITS
Expand Up @@ -77,3 +77,7 @@ W: http://sarup.dk/index.html
N: Andy Scott ("xttocs")
E: andy.g.scott@gmail.com
D: LiquidCrystal library

N: Trystan Jones ("crenn")
E: crenn6977@gmail.com
D: New Wire library
66 changes: 66 additions & 0 deletions libraries/Wire/HardWire.cpp
@@ -0,0 +1,66 @@
/******************************************************************************
* The MIT License
*
* Copyright (c) 2010 LeafLabs LLC.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*****************************************************************************/

/**
* @file HardWire.cpp
* @author Trystan Jones <crenn6977@gmail.com>
* @brief Wire library, uses the hardware I2C available in the Maple to
* interact with I2C slave devices.
*/

/*
* Library created by crenn to use the new WireBase system and allow Arduino
* users easy interaction with the I2C Hardware in a familiar method.
*/

#include "HardWire.h"

uint8 HardWire::process() {
int8 res = i2c_master_xfer(sel_hard, &itc_msg, 1, 0);
if (res != 0) {
i2c_disable(sel_hard);
i2c_master_enable(sel_hard, (I2C_BUS_RESET | dev_flags));
}
return 0;
}

// TODO: Add in Error Handling if devsel is out of range for other Maples
HardWire::HardWire(uint8 dev_sel, uint8 flags) {
if (dev_sel == 1) {
sel_hard = I2C1;
} else if (dev_sel == 2) {
sel_hard = I2C2;
} else {
ASSERT(1);
}
dev_flags=flags;
i2c_master_enable(sel_hard, flags);
}

HardWire::~HardWire() {
i2c_disable(sel_hard);
sel_hard = 0;
}
70 changes: 70 additions & 0 deletions libraries/Wire/HardWire.h
@@ -0,0 +1,70 @@
/******************************************************************************
* The MIT License
*
* Copyright (c) 2010 LeafLabs LLC.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*****************************************************************************/

/**
* @file HardWire.h
* @author Trystan Jones <crenn6977@gmail.com>
* @brief Wire library, uses the hardware I2C available in the Maple to
* interact with I2C slave devices.
*/

/*
* Library created by crenn to use the new WireBase system and allow Arduino
* users easy interaction with the I2C Hardware in a familiar method.
*/

#include "wirish.h"
#include "WireBase.h"

#ifndef _HARDWIRE_H_
#define _HARDWIRE_H_

#include "i2c.h"

class HardWire : public WireBase {
private:
i2c_dev* sel_hard;
uint8 dev_flags;
protected:
/*
* Processes the incoming I2C message defined by WireBase to the hardware. If
* an error occured, restart the I2C device.
*/
uint8 process();
public:
/*
* Check if devsel is within range and enable selected I2C interface with
* passed flags
*/
HardWire(uint8, uint8 = 0);

/*
* Disables the I2C device and remove the device address.
*/
~HardWire();
};

#endif // _HARDWIRE_H_
5 changes: 0 additions & 5 deletions libraries/Wire/README

This file was deleted.

0 comments on commit b98596c

Please sign in to comment.