Mercurial > hg > beaglert
annotate include/I2c.h @ 256:3e93d9793da3 aux_task_args
Overload BeagleRT_createAuxiliaryTask so tasks can be created with or without arguments
author | Liam Donovan <l.b.donovan@qmul.ac.uk> |
---|---|
date | Fri, 06 May 2016 21:36:27 +0100 |
parents | 8a575ba3ab52 |
children |
rev | line source |
---|---|
andrewm@0 | 1 /* |
andrewm@0 | 2 * I2c.h |
andrewm@0 | 3 * |
andrewm@0 | 4 * Created on: Oct 14, 2013 |
andrewm@0 | 5 * Author: Victor Zappi |
andrewm@0 | 6 */ |
andrewm@0 | 7 |
andrewm@0 | 8 #ifndef I2C_H_ |
andrewm@0 | 9 #define I2C_H_ |
andrewm@0 | 10 |
andrewm@0 | 11 #include <iostream> |
andrewm@0 | 12 #include <iomanip> |
andrewm@0 | 13 #include <string> |
andrewm@0 | 14 #include <stdio.h> |
andrewm@0 | 15 #include <stdlib.h> |
andrewm@0 | 16 #include <unistd.h> |
andrewm@0 | 17 #include <fcntl.h> |
andrewm@0 | 18 #include <linux/i2c.h> |
andrewm@0 | 19 #include <linux/i2c-dev.h> |
andrewm@0 | 20 #include <sys/ioctl.h> |
andrewm@0 | 21 #include <stropts.h> |
andrewm@0 | 22 |
andrewm@0 | 23 #define MAX_BUF_NAME 64 |
andrewm@0 | 24 |
andrewm@0 | 25 using namespace std; |
andrewm@0 | 26 |
andrewm@0 | 27 |
andrewm@0 | 28 class I2c |
andrewm@0 | 29 { |
andrewm@0 | 30 |
andrewm@0 | 31 protected: |
andrewm@0 | 32 int i2C_bus; |
andrewm@0 | 33 int i2C_address; |
andrewm@0 | 34 int i2C_file; |
andrewm@0 | 35 |
andrewm@0 | 36 public: |
andrewm@0 | 37 int initI2C_RW(int bus, int address, int file); |
andrewm@0 | 38 virtual int readI2C() = 0; |
andrewm@0 | 39 int closeI2C(); |
andrewm@0 | 40 |
andrewm@0 | 41 virtual ~I2c(); |
andrewm@0 | 42 |
andrewm@0 | 43 }; |
andrewm@0 | 44 |
andrewm@0 | 45 |
andrewm@0 | 46 inline int I2c::initI2C_RW(int bus, int address, int fileHnd) |
andrewm@0 | 47 { |
andrewm@0 | 48 i2C_bus = bus; |
andrewm@0 | 49 i2C_address = address; |
andrewm@0 | 50 i2C_file = fileHnd; |
andrewm@0 | 51 |
andrewm@0 | 52 // open I2C device as a file |
andrewm@0 | 53 char namebuf[MAX_BUF_NAME]; |
andrewm@0 | 54 snprintf(namebuf, sizeof(namebuf), "/dev/i2c-%d", i2C_bus); |
andrewm@0 | 55 |
andrewm@0 | 56 if ((i2C_file = open(namebuf, O_RDWR)) < 0) |
andrewm@0 | 57 { |
andrewm@0 | 58 cout << "Failed to open " << namebuf << " I2C Bus" << endl; |
andrewm@0 | 59 return(1); |
andrewm@0 | 60 } |
andrewm@0 | 61 |
andrewm@0 | 62 // target device as slave |
andrewm@0 | 63 if (ioctl(i2C_file, I2C_SLAVE, i2C_address) < 0){ |
andrewm@0 | 64 cout << "I2C_SLAVE address " << i2C_address << " failed..." << endl; |
andrewm@0 | 65 return(2); |
andrewm@0 | 66 } |
andrewm@0 | 67 |
andrewm@0 | 68 return 0; |
andrewm@0 | 69 } |
andrewm@0 | 70 |
andrewm@0 | 71 |
andrewm@0 | 72 |
andrewm@0 | 73 inline int I2c::closeI2C() |
andrewm@0 | 74 { |
andrewm@0 | 75 if(close(i2C_file)>0) |
andrewm@0 | 76 { |
andrewm@0 | 77 cout << "Failed to close file "<< i2C_file << endl; |
andrewm@0 | 78 return 1; |
andrewm@0 | 79 } |
andrewm@0 | 80 return 0; |
andrewm@0 | 81 } |
andrewm@0 | 82 |
andrewm@0 | 83 |
andrewm@0 | 84 inline I2c::~I2c(){} |
andrewm@0 | 85 |
andrewm@0 | 86 |
andrewm@0 | 87 #endif /* I2C_H_ */ |