1895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/*
2895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall $License:
3895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall   Copyright 2011 InvenSense, Inc.
4895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
5895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Licensed under the Apache License, Version 2.0 (the "License");
6895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall you may not use this file except in compliance with the License.
7895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall You may obtain a copy of the License at
8895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
9895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall http://www.apache.org/licenses/LICENSE-2.0
10895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
11895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Unless required by applicable law or agreed to in writing, software
12895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall distributed under the License is distributed on an "AS IS" BASIS,
13895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall See the License for the specific language governing permissions and
15895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall limitations under the License.
16895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall  $
17895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall */
18895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/*******************************************************************************
19895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *
20895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * $Id: i2c.h 5629 2011-06-11 03:13:08Z mcaramello $
21895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *
22895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *******************************************************************************/
23895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
24895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifndef _I2C_H
25895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define _I2C_H
26895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
27895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "mltypes.h"
28895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
29895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef __cplusplus
30895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallextern "C" {
31895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
32895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
33895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* ------------ */
34895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* - Defines. - */
35895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* ------------ */
36895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
37895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* - Error Codes. - */
38895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
39895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_SUCCESS 0
40895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_ERROR   1
41895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
42895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* ---------- */
43895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* - Enums. - */
44895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* ---------- */
45895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
46895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* --------------- */
47895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* - Structures. - */
48895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* --------------- */
49895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
50895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_RBUFF_MAX    128
51895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_RBUFF_SIZE    17
52895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
53895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef BB_I2C
54895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_RBUFF_DYNAMIC  0
55895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#else
56895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define I2C_RBUFF_DYNAMIC  1
57895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
58895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
59895401859313187f15a800e62d43e6bcbf48fadaJP Abgralltypedef struct {
60895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
61895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	HANDLE  i2cHndl;
62895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	HANDLE  hDevice;                    // handle to the drive to be examined
63895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
64895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU8      readBuffer[1024];
65895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	MLU8      writeBuffer[1024];
66895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
67895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU16     rBuffRIndex;
68895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	MLU16     rBuffWIndex;
69895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#if !I2C_RBUFF_DYNAMIC
70895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU8      rBuff[I2C_RBUFF_MAX][I2C_RBUFF_SIZE];
71895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#else
72895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU8     *rBuff;
73895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
74895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU16     rBuffMax;
75895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	MLU16     rBuffNumBytes;
76895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
77895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    MLU8      runThread;
78895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall	MLU8      autoProcess;
79895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
80895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall} I2C_Vars_t;
81895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
82895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* --------------------- */
83895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* - Function p-types. - */
84895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* --------------------- */
85895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
86895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#if (defined(BB_I2C))
87895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_open_bind_cb(int (*func)(unsigned int i2c_slave_addr));
88895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_open_cb(int (*func)(const char *dev, int rw));
89895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_close_cb(int (*func)(int fd));
90895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_lltransfer_cb(int (*func)(int fd, int client_addr, const char *write_buf, unsigned int write_len,
91895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall                                                                      char *read_buf,  unsigned int read_len ));
92895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_write_register_cb(int (*func)(int fd, int client_addr, unsigned char reg, unsigned char value));
93895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_read_register_cb(unsigned char (*func)(int fd, int client_addr, unsigned char reg));
94895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallvoid set_i2c_dump_register_cb(int (*func)(int fd, int client_addr, unsigned char start_reg, unsigned char *buff, int len));
95895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
96895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint           _i2c_write_register(int fd, int client_addr, unsigned char reg, unsigned char value);
97895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallunsigned char _i2c_read_register (int fd, int client_addr, unsigned char reg);
98895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint            i2c_lltransfer    (int fd, int client_addr, const char *write_buf, unsigned int write_len,
99895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall                                                                 char *read_buf,  unsigned int read_len );
100895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint            i2c_write_register(int fd, int client_addr, unsigned char reg, unsigned char value);
101895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallunsigned char  i2c_read_register (int fd, int client_addr, unsigned char reg);
102895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint            i2c_dump_register (int fd, int client_addr, unsigned char start_reg, unsigned char *buff, int len);
103895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint i2c_open         (const char *dev, int rw);
104895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint i2c_close        (int fd);
105895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint i2c_open_bind    (unsigned int i2c_slave_addr);
106895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
107895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
108895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2COpen           (unsigned char autoProcess, unsigned char createThread);
109895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CClose          (void);
110895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CDeviceIoControl(void);
111895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CRead           (void);
112895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CWrite          (void);
113895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CSetBufferSize  (unsigned short bufferSize);
114895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CBufferUpdate   (void);
115895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CHandler        (void);
116895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CReadBuffer     (unsigned short cnt, unsigned char bufferMode, unsigned char *rBuff);
117895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CEmptyBuffer    (void);
118895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CPktsInBuffer   (unsigned short *pktsInBuffer);
119895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CCreateMutex    (void);
120895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CLockMutex      (void);
121895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CUnlockMutex    (void);
122895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
123895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CWriteBurst     (unsigned char slaveAddr, unsigned char registerAddr, unsigned short length, unsigned char *data);
124895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CReadBurst      (unsigned char slaveAddr, unsigned char registerAddr, unsigned short length, unsigned char *data);
125895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
126895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2COpenBB         (void);
127895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint I2CCloseBB        (int i2cHandle);
128895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
129895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef __cplusplus
130895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall}
131895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
132895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
133895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif /* _TEMPLATE_H */
134