Linux中读写i2c

最近因为种种原因,要在跑Linux Embedded的上位机中写一个程序,要有界面还要控制i2c和下位机通信。

于是回想起了本科的时候各种搓板子的「悲惨经历」,以及微机原理老师留的在嵌入式OS上随便跑点什么的课后大作业。预估了一下,估计这活挺难的。

不过好在最近一段时间一直在用Linux,或多或少的也了解了一些关于Linux的知识。发现在应用层写个控制i2c的程序实在是太简单啦!

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include "i2c.h"

int slave_read_byte(int fd, unsigned char addr, char* readByte)
{
    fd = ::open(I2CDEV, O_RDWR); //这里需要添加::,在global namespace中找到open函数,close同理。
    if(fd<0)
    {
        return 1;
    }
    if(ioctl(fd, I2C_SLAVE, addr) < 0)
    {
        return 1;
    }
    read(fd, readByte, 1);
    ::close(fd);
    return 0;
}

int slave_write_byte(int fd, unsigned char addr, char* value)
{
    fd = ::open(I2CDEV, O_RDWR);
    if(fd<0)
    {
        return 1;
    }
    if(ioctl(fd, I2C_SLAVE, addr) < 0)
    {
        return 1;
    }
    write(fd, value, 1);
    ::close(fd);
    return 0;
}

然后就ok了,剩下的就可以在pushbutton的slot里读写下位机之类的了。