📄 sensor_i2c.c
字号:
#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <errno.h>#include <linux/delay.h>//#include <linux/i2c.h>#include "sensor_i2c.h"#define I2C_DEVICE "/dev/ov_sensor"#define PPI_DEVICE "/dev/ppifcp"#define I2C_TENBIT 0x0704#define I2C_SLAVE 0x0703#define I2C_RDWR 0x0707#define APP_DBG 1#define IDAddr 0x3000#define I2C_CYCLE 0#define SET_IIC_PAR(addr,data) ioctl(fd1,I2C_CYCLE,IDAddr + addr);(I2cWrBuf[0] = data)unsigned char ImageBuf[704*288];unsigned char I2cWrBuf[2];unsigned char I2cRdBuf[2];int fd1,fd2,fd3;void OvInitChk(int fd);void OvInit(int fd){ int t = sizeof(SensorInitTab); int i; /* ioctl(fd,I2C_CYCLE,IDAddr + SENSOR_COM7); I2cWrBuf[0] = 0x80; write(fd,I2cWrBuf,2); OvInitChk(fd); */ for(i = 0;i< t - 1;i = i+2){ SET_IIC_PAR(SensorInitTab[i],SensorInitTab[i+1]); write(fd,I2cWrBuf,2); }}void OvInitChk(int fd){ char i = sizeof(SensorInitTab); for(i = i-2;i >= 0;i = i-2){ ioctl(fd,I2C_CYCLE,IDAddr + i); }} void MatrixSave(void){ fd3 = read(fd2,ImageBuf,sizeof(ImageBuf)); if (fd3 < 0){ printf("catch image failed!\n"); close(fd3); } else{ printf("obtain matrix:= %d\n",fd3); fd3 = open("/var/temp1",O_CREAT); close(fd3); fd3 = open("/var/temp1",O_RDWR); if (fd3 < 0) printf("open file failed\n"); else write(fd3,ImageBuf,sizeof(ImageBuf)); close(fd3); }}int main(void){ unsigned int i,j;#ifdef APP_DBG unsigned int JudgeChar;#endif fd1 = open(I2C_DEVICE,O_RDWR); if (fd1 < 0) { perror("open device failed!\n"); exit(0); }#ifdef APP_DBG printf("open I2C success!\n"); #endif OvInit(fd1); fd2 = open(PPI_DEVICE,O_RDONLY); if (fd2 < 0) { perror("open device failed!\n"); exit(0); } ioctl(fd2,CMD_PPI_SET_PIXELS_PER_LINE,704);#ifdef APP_DBG printf("open PPI success!\n"); while(1){ printf("please input the opcode dd for read ,cc for write:"); scanf("%x",&JudgeChar); if(JudgeChar == 0xdd){ printf("please input the read address:"); scanf("%x",&i); SET_IIC_PAR(i,0x0); printf("0x%x content is %x\n",i,read(fd1,I2cRdBuf,2)); } else if(JudgeChar == 0xcc){ printf("please input the write address:"); scanf("%x",&JudgeChar); printf("please input the write content:"); scanf("%x",&i); SET_IIC_PAR(JudgeChar,i); write(fd1,I2cWrBuf,2); } else if(JudgeChar == 0xee) MatrixSave(); else if(JudgeChar == 0xff) break; }#endif#if 0 for(i=0;i < sizeof(ImageBuf);++i) printf("%x,",ImageBuf[i]); // for (j=0x00;j<=0xfe00;j=j+0x100) // {i i2c_wr_buf[0] = 0x55; ioctl(fd1,I2C_CYCLE,0x3000+0); write(fd1,i2c_wr_buf,2); getchar(); j=read(fd1,i2c_rd_buf,2); printf("address 0 content is %x\n",j); getchar(); i2c_wr_buf[0] = 0xaa; ioctl(fd1,I2C_CYCLE,0x3000+1); write(fd1,i2c_wr_buf,2); getchar(); j=read(fd1,i2c_rd_buf,2); printf("address 1 content is %x\n",j); getchar(); i2c_wr_buf[0] = 0x55; ioctl(fd1,I2C_CYCLE,0x3000+2); write(fd1,i2c_wr_buf,2); getchar(); j=read(fd1,i2c_rd_buf,2); printf("address 2 content is %x\n",j); getchar(); for(i=0;i< 0xab;++i) { i2c_wr_buf[0] = 0x55; ioctl(fd1,I2C_CYCLE,0x3000+i); write(fd1,i2c_wr_buf,2); getchar(); j=read(fd1,i2c_rd_buf,2); //if ((i2c_rd_buf[0]!=0x6)&&(i2c_rd_buf[0]!=0x24)) printf("address %x content is %x\n",i,j); getchar(); } #endif close(fd1); close(fd2); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -