/*
 *
 * CO2 PASCO2V01 传感器
 *
 */
 
#include <stdio.h>
#include <wiringPiI2C.h>

// Pasco2V01 设备地址
#define DEVICE_ADDRESS 0x76

// 最大尝试次数
#define MAX_RETRY 100

int main() {
    // 初始化 I2C 总线
    int fd = wiringPiI2CSetup(DEVICE_ADDRESS);
    if (fd < 0) {
        printf("Failed to initialize I2C\n");
        return -1;
    }

    // 发送命令开始测量
    int result = wiringPiI2CWrite(fd, 0x00);
    if (result < 0) {
        printf("Failed to write command\n");
        return -1;
    }

    // 等待传感器完成测量
    int retry = 0;
    while (retry < MAX_RETRY) {
        int status = wiringPiI2CReadReg8(fd, 0x00);
        if (status < 0) {
            printf("Failed to read status\n");
            return -1;
        }

        if (status & 0x08) {
            break;
        }

        retry++;
    }

    if (retry >= MAX_RETRY) {
        printf("Measurement timeout\n");
        return -1;
    }

    // 读取测量结果
    unsigned char data[3];
    data[0] = wiringPiI2CReadReg8(fd, 0x02);
    data[1] = wiringPiI2CReadReg8(fd, 0x03);
    data[2] = wiringPiI2CReadReg8(fd, 0x04);

    // 转换为浓度值
    unsigned int concentration = (data[0] << 16) | (data[1] << 8) | data[2];

    // 打印浓度值
    printf("Gas Concentration: %u ppm\n", concentration);

    return 0;
}
