/****************************** * Copyright (C) 2017 by Tobias Wartzek * @file bme680_main.c * @date 07.10.2017 * @version 1.0 * @brief Interface to BME680 from Raspberry Pi * * * Read out temperature, pressure, humidity and gas sensor ohmic values * via I²C and Raspberry Pi. * * History * Version Date Detail * 1.0 07.10.2017 Initial creation * ******************************/ #include #include #include #include #include #include #include #include #include #include #include "bme680.h" #define DESTZONE "TZ=Europe/Stockholm" // Our destination time zone // I2C Linux device handle int g_i2cFid; // open the Linux device void i2cOpen() { g_i2cFid = open("/dev/i2c-1", O_RDWR); if (g_i2cFid < 0) { perror("i2cOpen"); exit(1); } } // close the Linux device void i2cClose() { close(g_i2cFid); } // set the I2C slave address for all subsequent I2C device transfers void i2cSetAddress(int address) { if (ioctl(g_i2cFid, I2C_SLAVE, address) < 0) { perror("i2cSetAddress"); exit(1); } } void user_delay_ms(uint32_t period) { sleep(period/1000); } int8_t user_i2c_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */ uint8_t reg[1]; reg[0]=reg_addr; if (write(g_i2cFid, reg, 1) != 1) { perror("user_i2c_read_reg"); rslt = 1; } if (read(g_i2cFid, reg_data, len) != len) { perror("user_i2c_read_data"); rslt = 1; } return rslt; } int8_t user_i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */ uint8_t reg[16]; reg[0]=reg_addr; for (int i=1; i