#ifndef HC_12_H
#define HC_12_H

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

#include <pthread.h>
#include <sys/shm.h>
#include <sys/wait.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "../libconf/libconf.h"

#define BUFFER 1024
#define MAIL "gomail -r \"%s\" -s \"%s\" -t \"%s\""

typedef struct CONF {
    char *mail;
    char *temperature;
    char *co;
    char *co2;
    char *MYSQL_ON;
    char *PUSH_MYSQL_DATA_TIME;
    char *MYSQL_HOST;
    char *MYSQL_PORT_;
    char *MYSQL_USRT;
    char *MYSQL_PASSWORD;
    char *MYSQL_DB;
    char *MYSQL_TABLES;

} CONF;

typedef struct DATA {
    // 存储实际传感器数据
    float ds18b20;
    float ch4;
    float rp2040;
    float rp2040_f;
    float co;
    float co2;
    float ch4_;

    // boot time
    long long unsigned int boot_time_;

    // 超过阈值次数
    int ds18b20_num;
    int ch4_num;
    int rp2040_num;
    int co_num;
    int co2_num;

    // 共享内存
    int *ds18b20_shm;
    int *co_shm;
    int *co2_shm;

    // 第一次发送Mail标志
    int ds18b20_1st;
    int ch4_1st;
    int co_1st;
    int co2_1st;

    // 持续浓度时候,等待时间再发送Mail
    int _time;
} DATA;

// 定义包含两个结构体的参数结构体
typedef struct {
    CONF *conf;
    DATA *data;
} Thread;

#endif