/*
Description : setitimer() set the interval to run function
Synopsis : #include <sys/time.h>
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
struct itimerval {
struct timerval it_interval;
struct timerval it_value;
};
struct timeval {
long tv_sec;
long tv_usec;
}
*/
#include <stdio.h> // for printf()
#include <unistd.h> // for pause()
#include <signal.h> // for signal()
#include <string.h> // for memset()
#include <sys/time.h> // struct itimeral. setitimer()
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#define CHIP "/dev/i2c-0"
#define CHIP_ADDR 0x06 //remote slave device
#define SELF_ADDR 0x05 //self i2c controller address
#define I2C_SLAVE_RDWR 0x0709
#define READ_SIZE 5
#define WRITE_SIZE 40
char readbuff[READ_SIZE],writebuff[WRITE_SIZE];
struct i2c_rdwr_ioctl_data ioctldata;
int fd;
void SendMsg(int signum)
{
int ret;
ret = ioctl(fd, I2C_RDWR,(unsigned long )&ioctldata);
if (0 > ret)
{
printf("SendI2cMsg:call I2C_RDWR error\n");
return ret;
}
}
int main()
{
// Get system call result to determine successful or failed
int res = 0;
struct i2c_msg msg;
int ret,i;
// Register printMsg to SIGALRM
signal(SIGALRM, SendMsg);
fd=open(CHIP,O_RDWR);
if (fd < 0)
{
printf("can not open file\n");
return 0;
}
if (ioctl(fd, I2C_SLAVE, CHIP_ADDR) < 0)
{
/* 设置芯片地址 */
printf("ioctl:set slave address failed\n");
goto close;
}
for(i = 0; i < WRITE_SIZE; i++)
writebuff[i] = i+1;
msg.len = WRITE_SIZE;
msg.addr = CHIP_ADDR;
msg.flags = 0;
msg.buf = writebuff;
ioctldata.nmsgs = 1;
ioctldata.msgs = &msg;
struct itimerval tick;
// Initialize struct
memset(&tick, 0, sizeof(tick));
// Timeout to run function first time
//first time
tick.it_value.tv_sec = 1; // sec
tick.it_value.tv_usec = 0; // micro sec.
// Interval time to run function
#if 1
tick.it_interval.tv_sec = 0;
tick.it_interval.tv_usec = 100000;
#endif
// Set timer, ITIMER_REAL : real-time to decrease timer,
// send SIGALRM when timeout
res = setitimer(ITIMER_REAL, &tick, NULL);
if (res)
{
printf("Set timer failed!!/n");
}
// Always sleep to catch SIGALRM signal
close:
close(fd);
while(1)
{
pause();
}
return 0;
}
settimer示例
最新推荐文章于 2020-04-03 11:26:40 发布