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