Hy, I wrote a simple user program to test an i2c bus driver. I found in Documentation/i2c/dev-interface their is macro function to read data (i2c_smbus_read_byte_data). I used it but I have link error when I compile : $ arm-linux-gcc -O i2cread.c -o i2cread /tmp/ccfa90st.o: In function `read_byte': i2cread.c:(.text+0x3c): undefined reference to `i2c_smbus_read_byte_data' collect2: ld returned 1 exit status
Is someone know what is the problem ? Thanks in advance FabM
/* a simple program to read on i2c bus * Fabien Marteau <[EMAIL PROTECTED]> * * inspired from : * ch7024: manage the Svideo controller CH7024 * author: [EMAIL PROTECTED] * * ** THE ARMADEUS PROJECT ** ** Copyright (C) year The source forge armadeus project team ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** */ #include <stdio.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <linux/i2c.h> #include <linux/i2c-dev.h> #include <sys/ioctl.h> int fd; /* Read a byte on the I2C bus This is done by writing the register address we want to access and then by reading this register @param fd: file descriptor of the device @param reg: register to access @param buf: buffer used to store the result @return : -1 in case of error otherwise 0 */ __s32 read_byte( int fd,unsigned char addr, unsigned char reg) { int err; __s32 res; /* select address */ if(err=ioctl(fd,I2C_SLAVE,addr) < 0){ perror("can't select this address\n"); return err; } res = i2c_smbus_read_byte_data(fd,(__u8)reg); if(res<0) perror("read byte data error\n"); return res; } /* i2cread i2c-devfile addr*/ int main(int argc, char **argv){ unsigned char buf; unsigned char addr; unsigned char subaddr; unsigned char value; if(argc != 4){ printf("wrong args numbers\nsyntaxe (hexa) :\n"); printf("i2cread i2c-devfile addr subaddr\n"); return -1; } fd = open(argv[1],O_RDWR); if(fd < 0){ printf("%d : can't open %s\n",fd,argv[1]); return -1; } /* select address */ addr = (unsigned char )strtol(argv[2], (char **)NULL, 16); /* select subaddress */ subaddr = (unsigned char )strtol(argv[3], (char **)NULL, 16); buf = (unsigned char)read_byte(fd,addr, subaddr); printf("Read component %02x at subaddress %02x->%02x\n",addr,subaddr,buf); return value; }
_______________________________________________ i2c mailing list i2c@lm-sensors.org http://lists.lm-sensors.org/mailman/listinfo/i2c