// Author: NiuJiuRu
// Email: niujiuru@qq.com
// Date: 2025-08-19
#ifndef __MCU_CTRL_BOARD_H__
#define __MCU_CTRL_BOARD_H__

#include "../swapi/include_swapiLib.h"

// 告诉编译器使用一字节内存对齐
#pragma pack(push, 1)

// 传感器采集的环境数据(小端序)
typedef struct
{
  uint8_t timestamp[4];   // 本地时间(秒, 存在"​​2038-01-19 03:14:07 UTC​​"溢出风险)
  uint8_t temperature[2]; // 温度, 单位: 0.1°C
  uint8_t humidity[2];    // 湿度, 单位: 0.1%RH
  uint8_t illuminance[4]; // 光照, 单位: lux
  uint8_t voltage[2];     // 电压, 单位: 0.1V
} SensorEnvData;

// 恢复之前原有内存字节对齐方式
#pragma pack(pop)

#ifdef __cplusplus
extern "C"
{
#endif

// 打开与MCU控制板的串口通讯, 返回: 0成功, <0时失败
int MCBComInit();

// 关闭与MCU控制板的串口通讯, 返回: 0成功, <0时失败
int MCBComExit();

// 配置单片机控制板-运行参数, 返回: 0成功, <0时失败
int MCBConfParameters(uint32_t version, uint8_t ctrl_mode, uint8_t light_duration, uint8_t start_hour, uint8_t end_hour, uint16_t tp_intvl_min);

// 设置工作状态位图-固件运维, 返回: 0成功, <0时失败
int MCBSetMNTStateBit(uint8_t state/*1bit位, 0x00:空闲, 0x01:运维中*/);

// 设置工作状态位图-相机拍照, 返回: 0成功, <0时失败
int MCBSetCamStateBit(uint8_t state/*2bit位, 0x00:空闲, 0x01:拍照中, 0x10:上传中, 0x11:保留*/);

// 设置工作状态位图-环境数据, 返回: 0成功, <0时失败
int MCBSetEnvStateBit(uint8_t state/*2bit位, 0x00:空闲, 0x01:收集中, 0x10:上传中, 0x11:保留*/);

// 请求获取当前实时-环境数据, 返回: 0成功, <0时失败
int MCBReqEnvCurData();

#ifdef _DEBUG
void *MCBGetSerialHandle(); // 仿真串口输入, 模拟单元测试时使用
#endif

#ifdef __cplusplus
}
#endif

#endif // __MCU_CTRL_BOARD_H__
