1d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen/*
2d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  TwoWire.h - TWI/I2C library for Arduino & Wiring
3d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Copyright (c) 2006 Nicholas Zambetti.  All right reserved.
4d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
5d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  This library is free software; you can redistribute it and/or
6d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  modify it under the terms of the GNU Lesser General Public
7d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  License as published by the Free Software Foundation; either
8d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  version 2.1 of the License, or (at your option) any later version.
9d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
10d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  This library is distributed in the hope that it will be useful,
11d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  but WITHOUT ANY WARRANTY; without even the implied warranty of
12d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Lesser General Public License for more details.
14d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
15d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  You should have received a copy of the GNU Lesser General Public
16d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  License along with this library; if not, write to the Free Software
17d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen*/
19d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
20d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifndef TwoWire_h
21d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define TwoWire_h
22d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
23d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include <inttypes.h>
24d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
25d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define BUFFER_LENGTH 32
26d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
27d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenclass TwoWire
28d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen{
29d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  private:
30d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t rxBuffer[];
31d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t rxBufferIndex;
32d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t rxBufferLength;
33d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
34d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t txAddress;
35d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t txBuffer[];
36d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t txBufferIndex;
37d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t txBufferLength;
38d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
39d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static uint8_t transmitting;
40d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static void (*user_onRequest)(void);
41d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static void (*user_onReceive)(int);
42d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static void onRequestService(void);
43d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    static void onReceiveService(uint8_t*, int);
44d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  public:
45d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    TwoWire();
46d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void begin();
47d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void begin(uint8_t);
48d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void begin(int);
49d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void beginTransmission(uint8_t);
50d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void beginTransmission(int);
51d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    uint8_t endTransmission(void);
52d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    uint8_t requestFrom(uint8_t, uint8_t);
53d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    uint8_t requestFrom(int, int);
54d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void send(uint8_t);
55d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void send(uint8_t*, uint8_t);
56d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void send(int);
57d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void send(char*);
58d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    uint8_t available(void);
59d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    uint8_t receive(void);
60d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void onReceive( void (*)(int) );
61d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    void onRequest( void (*)(void) );
62d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen};
63d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
64d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenextern TwoWire Wire;
65d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
66d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#endif
67d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
68