Skip to content

Commit 3d84146

Browse files
committed
Proting I2C implementation to Arduino style
1 parent e2557fc commit 3d84146

File tree

1 file changed

+58
-117
lines changed

1 file changed

+58
-117
lines changed

libraries/ENVIE_Video_Firefly/REG_DRV.c

Lines changed: 58 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -20,152 +20,93 @@ Revision History:
2020
2121
******************************************************************************/
2222

23-
#include "config.h"
24-
#include "EFM8UB2/EFM8UB2_SMBus.h"
23+
#include "Arduino.h"
24+
2525
void patch_for_read_reg(unsigned char DevAddr);
26+
2627
char ReadReg(unsigned char DevAddr, unsigned char RegAddr, unsigned char data *pData)
2728
{
28-
patch_for_read_reg(DevAddr);
29-
I2C_Start();
30-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
31-
{// ACK
32-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
33-
{// ACK
34-
I2C_Restart();
35-
if(I2C_WriteByte(DevAddr | I2C_READ) == I2C_ACK)
36-
{// ACK
37-
*pData = I2C_ReadByte(I2C_NACK);
38-
I2C_Stop();
39-
return 0;
40-
}
41-
}
29+
patch_for_read_reg(DevAddr);
30+
31+
Wire.beginTransmission(DevAddr);
32+
Wire.write(RegAddr);
33+
Wire.endTransmission();
34+
Wire.requestFrom(DevAddr, 1);
35+
36+
if(Wire.available()) {
37+
*pData = Wire.read();
38+
return 0;
39+
} else {
40+
*pData = -1;
41+
return -1;
4242
}
43-
// NAK
44-
I2C_Stop();
45-
*pData = -1;
46-
return -1;
4743
}
4844

4945
char ReadWordReg(unsigned char DevAddr, unsigned char RegAddr, unsigned int data *pData)
5046
{
51-
patch_for_read_reg(DevAddr);
52-
I2C_Start();
53-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
54-
{// ACK
55-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
56-
{// ACK
57-
I2C_Restart();
58-
if(I2C_WriteByte(DevAddr | I2C_READ) == I2C_ACK)
59-
{// ACK
60-
DBYTE1(*pData) = I2C_ReadByte(I2C_ACK); // low byte
61-
DBYTE0(*pData) = I2C_ReadByte(I2C_NACK); // high byte
62-
I2C_Stop();
63-
return 0;
64-
}
65-
}
47+
patch_for_read_reg(DevAddr);
48+
49+
Wire.beginTransmission(DevAddr);
50+
Wire.write(RegAddr);
51+
Wire.endTransmission();
52+
Wire.requestFrom(DevAddr, 2);
53+
54+
if(Wire.available() >= 2) {
55+
DBYTE1(*pData) = Wire.read();
56+
DBYTE0(*pData) = Wire.read();
57+
return 0;
58+
} else {
59+
*pData = -1;
60+
return -1;
6661
}
67-
// NAK
68-
I2C_Stop();
69-
*pData = -1;
70-
return -1;
7162
}
7263

7364
char ReadBlockReg(unsigned char DevAddr, unsigned char RegAddr, unsigned char n, unsigned char *pBuf)
7465
{
75-
patch_for_read_reg(DevAddr);
76-
I2C_Start();
77-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
78-
{// ACK
79-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
80-
{// ACK
81-
I2C_Restart();
82-
if(I2C_WriteByte(DevAddr | I2C_READ) == I2C_ACK)
83-
{// ACK
84-
while(n != 1)
85-
{
86-
*pBuf = I2C_ReadByte(I2C_ACK);
87-
pBuf++;
88-
n--;
89-
}
90-
*pBuf = I2C_ReadByte(I2C_NACK);
91-
I2C_Stop();
92-
return 0;
93-
}
66+
patch_for_read_reg(DevAddr);
67+
68+
Wire.beginTransmission(DevAddr);
69+
Wire.write(RegAddr);
70+
Wire.endTransmission();
71+
Wire.requestFrom(DevAddr, n);
72+
73+
if(Wire.available() >= n) {
74+
for(unsigned char i = 0; i < n; i++) {
75+
pBuf[n] = Wire.read();
9476
}
77+
return 0;
9578
}
96-
// NAK
97-
I2C_Stop();
98-
do
99-
{
100-
*pBuf = -1;
101-
pBuf++;
102-
}while(--n);
10379
return -1;
10480
}
10581

10682
char WriteReg(unsigned char DevAddr, unsigned char RegAddr, unsigned char RegVal)
10783
{
108-
I2C_Start();
109-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
110-
{// ACK
111-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
112-
{// ACK
113-
if(I2C_WriteByte(RegVal) == I2C_ACK)
114-
{// ACK
115-
I2C_Stop();
116-
return 0;
117-
}
118-
}
119-
}
120-
// NAK
121-
I2C_Stop();
122-
return -1;
84+
Wire.beginTransmission(DevAddr);
85+
Wire.write(RegAddr);
86+
Wire.write(RegVal);
87+
Wire.endTransmission();
88+
return 0;
12389
}
12490

12591
char WriteWordReg(unsigned char DevAddr, unsigned char RegAddr, unsigned int RegVal)
12692
{
127-
I2C_Start();
128-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
129-
{// ACK
130-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
131-
{// ACK
132-
if(I2C_WriteByte(LOBYTE(RegVal)) == I2C_ACK) // low byte
133-
{// ACK
134-
if(I2C_WriteByte(HIBYTE(RegVal)) == I2C_ACK) // high byte
135-
{
136-
I2C_Stop();
137-
return 0;
138-
}
139-
}
140-
}
141-
}
142-
// NAK
143-
I2C_Stop();
144-
return -1;
93+
Wire.beginTransmission(DevAddr);
94+
Wire.write(RegAddr);
95+
Wire.write(LOBYTE(RegVal));
96+
Wire.write(HIBYTE(RegVal));
97+
Wire.endTransmission();
98+
return 0;
14599
}
146100

147101
char WriteBlockReg(unsigned char DevAddr, unsigned char RegAddr, unsigned char n, unsigned char *pBuf)
148102
{
149-
I2C_Start();
150-
if(I2C_WriteByte(DevAddr | I2C_WRITE) == I2C_ACK)
151-
{// ACK
152-
if(I2C_WriteByte(RegAddr) == I2C_ACK)
153-
{// ACK
154-
do
155-
{
156-
if(I2C_WriteByte(*pBuf) == I2C_NACK)
157-
{// NAK
158-
break;
159-
}
160-
pBuf++;
161-
}while(--n);
162-
I2C_Stop();
163-
return 0;
164-
}
103+
Wire.beginTransmission(DevAddr);
104+
Wire.write(RegAddr);
105+
for(unsigned char i = 0; i < n; i++) {
106+
Wire.write(pBuf[i]);
165107
}
166-
// NAK
167-
I2C_Stop();
168-
return -1;
108+
Wire.endTransmission();
109+
return 0;
169110
}
170111

171112
void patch_for_read_reg(unsigned char DevAddr)

0 commit comments

Comments
 (0)