Changeset 15 in flair-src for trunk/lib/FlairCore/src/RTDM_I2cPort.cpp
- Timestamp:
- Apr 8, 2016, 3:40:57 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairCore/src/RTDM_I2cPort.cpp
r2 r15 26 26 using std::string; 27 27 28 namespace flair 29 { 30 namespace core 31 { 28 namespace flair { 29 namespace core { 32 30 33 RTDM_I2cPort::RTDM_I2cPort(const Object * parent,string name,string device) : I2cPort(parent,name)34 {35 int err=0;36 31 RTDM_I2cPort::RTDM_I2cPort(const Object *parent, string name, string device) 32 : I2cPort(parent, name) { 33 int err = 0; 34 struct rti2c_config write_config; 37 35 38 //printf("i2c integer le mutex dans le driver, avec acces ioctl\n"); 39 fd = rt_dev_open(device.c_str(), 0); 40 if (fd < 0) 41 { 42 Err("rt_dev_open (%s)\n",ObjectName().c_str(),strerror(-fd)); 43 } 36 // printf("i2c integer le mutex dans le driver, avec acces ioctl\n"); 37 fd = rt_dev_open(device.c_str(), 0); 38 if (fd < 0) { 39 Err("rt_dev_open (%s)\n", ObjectName().c_str(), strerror(-fd)); 40 } 44 41 45 write_config.config_mask = RTI2C_SET_BAUD|RTI2C_SET_TIMEOUT_RX|RTI2C_SET_TIMEOUT_TX; 46 write_config.baud_rate = 400000; 47 write_config.rx_timeout = 500000; 48 write_config.tx_timeout = 1000000;//5ms pour les xbldc, normalement 1ms 49 // the rest implicitely remains default 42 write_config.config_mask = 43 RTI2C_SET_BAUD | RTI2C_SET_TIMEOUT_RX | RTI2C_SET_TIMEOUT_TX; 44 write_config.baud_rate = 400000; 45 write_config.rx_timeout = 500000; 46 write_config.tx_timeout = 1000000; // 5ms pour les xbldc, normalement 1ms 47 // the rest implicitely remains default 50 48 51 52 err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config);53 if (err) 54 { 55 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG error (%s)\n",ObjectName().c_str(),strerror(-err));56 49 // config 50 err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config); 51 if (err) { 52 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG error (%s)\n", 53 ObjectName().c_str(), strerror(-err)); 54 } 57 55 } 58 56 59 RTDM_I2cPort::~RTDM_I2cPort() 60 { 61 rt_dev_close(fd); 57 RTDM_I2cPort::~RTDM_I2cPort() { rt_dev_close(fd); } 58 59 int RTDM_I2cPort::SetSlave(uint16_t address) { 60 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_SLAVE, &address); 61 if (err) { 62 Err("rt_dev_ioctl RTI2C_RTIOC_SET_SLAVE error (%s)\n", strerror(-err)); 63 } 64 65 return err; 62 66 } 63 67 64 int RTDM_I2cPort::SetSlave(uint16_t address) 65 { 66 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_SLAVE, &address); 67 if (err) 68 { 69 Err("rt_dev_ioctl RTI2C_RTIOC_SET_SLAVE error (%s)\n",strerror(-err)); 70 } 68 void RTDM_I2cPort::SetRxTimeout(Time timeout_ns) { 69 struct rti2c_config write_config; 71 70 72 return err; 71 write_config.config_mask = RTI2C_SET_TIMEOUT_RX; 72 write_config.rx_timeout = timeout_ns; 73 74 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config); 75 if (err) { 76 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG (%s)\n", ObjectName().c_str(), 77 strerror(-err)); 78 } 73 79 } 74 80 75 void RTDM_I2cPort::SetRxTimeout(Time timeout_ns) 76 { 77 struct rti2c_config write_config; 81 void RTDM_I2cPort::SetTxTimeout(Time timeout_ns) { 82 struct rti2c_config write_config; 78 83 79 write_config.config_mask = RTI2C_SET_TIMEOUT_RX;80 write_config.rx_timeout= timeout_ns;84 write_config.config_mask = RTI2C_SET_TIMEOUT_TX; 85 write_config.tx_timeout = timeout_ns; 81 86 82 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config);83 if (err) 84 { 85 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG (%s)\n",ObjectName().c_str(),strerror(-err));86 87 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config); 88 if (err) { 89 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG (%s)\n", ObjectName().c_str(), 90 strerror(-err)); 91 } 87 92 } 88 93 89 void RTDM_I2cPort::SetTxTimeout(Time timeout_ns) 90 { 91 struct rti2c_config write_config; 92 93 write_config.config_mask = RTI2C_SET_TIMEOUT_TX; 94 write_config.tx_timeout = timeout_ns; 95 96 int err = rt_dev_ioctl(fd, RTI2C_RTIOC_SET_CONFIG, &write_config ); 97 if (err) 98 { 99 Err("rt_dev_ioctl RTI2C_RTIOC_SET_CONFIG (%s)\n",ObjectName().c_str(),strerror(-err)); 100 } 94 ssize_t RTDM_I2cPort::Write(const void *buf, size_t nbyte) { 95 return rt_dev_write(fd, buf, nbyte); 101 96 } 102 97 103 ssize_t RTDM_I2cPort::Write(const void *buf,size_t nbyte) 104 { 105 return rt_dev_write(fd, buf, nbyte); 106 } 107 108 ssize_t RTDM_I2cPort::Read(void *buf,size_t nbyte) 109 { 110 return rt_dev_read(fd, buf, nbyte); 98 ssize_t RTDM_I2cPort::Read(void *buf, size_t nbyte) { 99 return rt_dev_read(fd, buf, nbyte); 111 100 } 112 101 … … 119 108 using namespace flair::core; 120 109 110 namespace flair { 111 namespace core { 121 112 122 namespace flair 123 { 124 namespace core 125 { 126 127 RTDM_I2cPort::RTDM_I2cPort(const Object* parent,string name,string device) : I2cPort(parent,name) 128 { 129 Err("not available in non real time\n"); 113 RTDM_I2cPort::RTDM_I2cPort(const Object *parent, string name, string device) 114 : I2cPort(parent, name) { 115 Err("not available in non real time\n"); 130 116 } 131 117 132 RTDM_I2cPort::~RTDM_I2cPort() 133 { 118 RTDM_I2cPort::~RTDM_I2cPort() {} 134 119 135 }120 int RTDM_I2cPort::SetSlave(uint16_t address) { return -1; } 136 121 137 int RTDM_I2cPort::SetSlave(uint16_t address) 138 { 139 return -1; 140 } 122 void RTDM_I2cPort::SetRxTimeout(Time timeout_ns) {} 141 123 142 void RTDM_I2cPort::SetRxTimeout(Time timeout_ns) 143 { 144 } 124 void RTDM_I2cPort::SetTxTimeout(Time timeout_ns) {} 145 125 146 void RTDM_I2cPort::SetTxTimeout(Time timeout_ns) 147 { 148 } 126 ssize_t RTDM_I2cPort::Write(const void *buf, size_t nbyte) { return -1; } 149 127 150 ssize_t RTDM_I2cPort::Write(const void *buf,size_t nbyte) 151 { 152 return -1; 153 } 154 155 ssize_t RTDM_I2cPort::Read(void *buf,size_t nbyte) 156 { 157 return -1; 158 } 128 ssize_t RTDM_I2cPort::Read(void *buf, size_t nbyte) { return -1; } 159 129 160 130 } // end namespace core
Note:
See TracChangeset
for help on using the changeset viewer.