#include #include #include #include // Status register bits #define STATUS_DIR 0x80 #define STATUS_TSB 0x40 #define STATUS_SBR 0x20 #define STATUS_RST 0x10 #define STATUS_LL 0x08 #define STATUS_SD 0x04 #define STATUS_PPD 0x02 #define STATUS_1WB 0x01 class owadapter_ds2482 { private: int i2cdev; void i2c_write(std::string bytes); unsigned char owadapter_ds2482::i2c_readbyte(); public: owadapter_ds2482(std::string device); }; owadapter_ds2482::owadapter_ds2482(std::string device) { i2cdev = open(device.c_str(), O_RDWR); if (i2cdev < 0) { perror(device.c_str()); exit(1); } ioctl(i2cdev, I2C_SLAVE, 0x18); i2c_write("\xF0"); // Device reset i2c_write("\xD2\xF0"); // Device config - standard speed, no pull-ups, no presence masking i2c_write("\xB4"); // 1 wire reset unsigned char status = i2c_readbyte(); std::cout << "Status byte: 0x" << std::hex << status << std::endl; } void owadapter_ds2482::i2c_write(std::string bytes) { if (write(i2cdev, bytes.c_str(), bytes.length()) != bytes.length()) { perror("i2c_write"); } } unsigned char owadapter_ds2482::i2c_readbyte() { unsigned char buf; read(i2cdev, &buf, 1); return buf; }