first working i2c (only for read&write 8bits) for linux

master
Kerem Yollu 4 years ago
parent ae81a1f11d
commit 016f1ad4e6

@ -1,10 +1,10 @@
cpp_src = $(wildcard *.cpp) cpp_src = $(wildcard *.cpp)
#c_src = $(wildcard ../c/algorithms/*.c) $(wildcard driver/ma120x0/*.c) #c_src = $(wildcard ../c/algorithms/*.c) $(wildcard driver/ma120x0/*.c)
cpp_obj = $(cpp_src:.cpp=.o) cpp_obj = $(cpp_src:.cpp=.o)
c_obj = $(c_src:.c=.o) c_obj = $(c_src:.c=.o)
CC = g++ CC = g++
CFLAGS = -Wall -pedantic CFLAGS = -Wall -pedantic -li2c
LDFLAGS = LDFLAGS =
EXEC = runtest EXEC = runtest

@ -1,16 +1,66 @@
#include "i2c_driver.h" #include "i2c_driver.h"
#include "systemCall.h" #include "systemCall.h"
I2C_Driver::I2C_Driver() #include <cstdio>
{ #include <ostream>
#include <iostream>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define PORT_I2C "/dev/i2c-1"
I2C_Driver::I2C_Driver(const uint8_t& channel, const uint8_t& mode)
{
char filename[20];
snprintf(filename, 19, "/dev/i2c-%d", channel);
deviceDescriptor = open(filename, O_RDWR);
if (deviceDescriptor < 0) {
std::cout << "unable to open : "<< deviceDescriptor << " ! quiting" << std::endl;
exit(1);
}
std::cout << "I2C initialized sucsessfully" << std::endl;
} }
std::string I2C_Driver::readByte(const uint8_t& address, const uint8_t& reg) uint8_t I2C_Driver::writeByte(const uint8_t& address, const uint8_t& data) // retuns 0 when a sucsessful transation ocures
{ {
std::string addrs = std::to_string(address); if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0)
std::string regs = std::to_string(reg); {
std::string command = "i2cget -y 1 " + addrs + " " + regs; std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl;
char* c = const_cast<char*>(command.c_str()); exit(1);
return execBash(c); }
send_buffer[0] = data;
if ((write(deviceDescriptor, send_buffer, 1)) != 1)
{
std::cout << "Unable to write quiting" << std::endl;
exit(0);
}
return 1;
} }
uint8_t I2C_Driver::readByte(const uint8_t& address, const uint8_t& reg)
{
if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0)
{
std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl;
exit(1);
}
if(writeByte(address,reg))
{
if (read(deviceDescriptor, recieve_buffer, 1) != 1)
{
std::cout << "Unable to read quiting" << std::endl;
exit(1); // ERROR HANDLING: i2c transaction failed
}
}
return recieve_buffer[0] ;
}

@ -1,24 +1,28 @@
#include <stdint.h> #include <stdint.h>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include "errorHandling.h"
class I2C_Driver class I2C_Driver
{ {
public: public:
I2C_Driver(); I2C_Driver(const uint8_t& channel, const uint8_t& mode);
std::string readByte(const uint8_t& address, const uint8_t& reg); uint8_t readByte(const uint8_t& address, const uint8_t& reg);
uint16_t readWord(const uint8_t& address, const uint8_t& reg); uint16_t readWord(const uint8_t& address, const uint8_t& reg);
bool writeByte(const uint8_t& address, const uint8_t& reg, const uint8_t& data); // retuns 0 when a sucsessful transation ocures uint8_t writeByte(const uint8_t& address, const uint8_t& data); // retuns 0 when a sucsessful transation ocures
bool writeWord(const uint8_t& address, const uint8_t& reg, const uint16_t& data); // retuns 0 when a sucsessful transation ocures uint8_t writeWord(const uint8_t& address, const uint8_t& reg, const uint16_t& data); // retuns 0 when a sucsessful transation ocures
private: private:
/* unsigned char device_address; int16_t deviceDescriptor;
unsigned char device_reg; uint8_t device_address;
unsigned char send_buffer[100]; uint8_t device_reg;
unsigned char recieve_buffer[100]; uint8_t send_buffer[32];
unsigned char blocks; uint8_t recieve_buffer[32];
*/ uint8_t blocks;
uint8_t channel;
uint8_t mode;
}; };

@ -15,13 +15,9 @@
#include "i2c_driver.h" #include "i2c_driver.h"
ErrorHandler errorHandle; ErrorHandler errorHandle;
CommandManager commander; CommandManager commander;
I2C_Driver i2cDriver; I2C_Driver i2cDriver(1,1);
int initPlatform() int initPlatform()
@ -33,7 +29,7 @@ int initPlatform()
void dummy() void dummy()
{ {
std::cout<< i2cDriver.readByte(0x40,0x00) <<std::endl; std::cout<< unsigned(i2cDriver.readByte(0x40,0x00)) <<std::endl;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])

Binary file not shown.
Loading…
Cancel
Save