Ok, thanks, I'll try the procedure.

Best regards

Paolo

  ----- Original Message ----- 
  From: stefano.pagnottelli 
  To: [email protected] 
  Sent: Friday, October 05, 2007 9:24 AM
  Subject: [foxboard] Re: SRF08 I2C sonar


  First of al this patch works only with 2.6 kernel

  You have to copy & paste the contents of boxes in two files (i2c.c
  and etraxi2c.h) and then replace the orginals devboard files.

  i2c.c is located in $YOURDEVBOADPATH/os/linux-2.6/arch/cris/drivers/i2c.c

  etraxi2c.h is located in
  $YOURDEVBOADPATH/os/linux-2.6/include/asm/etraxi2c.h

  After that you have to rebuild the new fimage and download it to the fox.

  This is the test code that i have used to test the devices.

  // ----------------------------------------------------------

  #define SLAVE_COMPASS_ADDR 0xC0
  #define SLAVE_SONAR_ADDR 0xE0

  #include "stdio.h"
  #include "stdlib.h"
  #include "unistd.h"
  #include "sys/ioctl.h"
  #include "fcntl.h"
  #include "time.h"
  #include "string.h"
  #include <asm/etraxi2c.h>
  #include <asm/i2c_errno.h>

  extern errno;
  // Global variables
  int fd_i2c;

  int I2C_Open(void) {
  fd_i2c = open("/dev/i2c", O_RDWR);
  if (fd_i2c <= 0) {
  perror("i2c");
  printf("I2C: open error on /dev/i2c %d %d\n",fd_i2c,errno);
  return(-1);
  }

  return(0); 
  }

  void I2C_Close(void) {
  close(fd_i2c);
  }

  int main(int argc, char **argv) {
  int retcode; int i,j; unsigned char ch;

  retcode = I2C_Open();
  if (retcode != 0) {
  exit(1);
  }

  unsigned long arg;
  int range;

  // Get sonar firmware version
  arg=I2C_READARG(SLAVE_SONAR_ADDR,0x00);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  printf("Sonar firmware version: %d\n",arg);
  // Get compass firmware version
  arg=I2C_READARG(SLAVE_COMPASS_ADDR,0x00);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  printf("Compass firmware version: %d\n",arg);
  // First sonar shot
  arg=I2C_WRITEARG(0xE0,0x00,0x51);
  ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_WRITEREG),arg);
  usleep(100000);

  while(1) {

  arg=I2C_READARG(0xC0,0x02);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  range=arg << 8;
  arg=I2C_READARG(0xC0,0x03);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  range+=arg;
  printf("Compass value 0xC0 %d\n",range);
  arg=I2C_READARG(0xE0,0x02);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  range=arg << 8;
  arg=I2C_READARG(0xE0,0x03);
  arg=ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_READREG),arg);
  range+=arg;
  printf("Sonar value 0xE0 %d\n",range);
  arg=I2C_WRITEARG(0xE0,0x00,0x51);
  ioctl(fd_i2c,_IO(ETRAXI2C_IOCTYPE,I2C_WRITEREG),arg);
  usleep(65000);

  }
  I2C_Close();

  return(0);
  }

  Bye
  Stefano

  // ----------------------------------------------------------

  --- In [email protected], "Paolo Pinto" <[EMAIL PROTECTED]> wrote:
  >
  > Hello Stefano,
  > 
  > Thanks very much for your suggestion.
  > 
  > Please could you explain to me how to use the source you submitted: 
  >
  http://developer.axis.com/wiki/doku.php?id=contributions#i2c_driver_update
  > Do I have to recompile the kernel or what else ?
  > 
  > Thanks a lot
  > 
  > Paolo



   

Reply via email to