// 系统监听模块
// 杭州秒寻科技有限公司
// 周涛
// 2024-9-29
#include "includes.h"

// 定义本模块使用的全局变量
static MONITOR_PARAM_T gMonitor_stMonitorParam = {0};

// 模块初始化
void monitor_init()
{
    SYS_MEMSET(&gMonitor_stMonitorParam, 0, sizeof(MONITOR_PARAM_T));

    // 创建定时器
    timer_create_timer(&gMonitor_stMonitorParam.byTimerID, ETIMER_LOOP);

    // 启动定时器，监测wifi模块工作状态
    timer_start_timer(gMonitor_stMonitorParam.byTimerID, 1000 * 60, (void *)monitor_timer_one_minute_expire);

    return;
}

// 1分钟定时器超时回调函数
void monitor_timer_one_minute_expire()
{
    // 心跳上报
    monitor_report_udp_heart();

    return;
}

// 上报UDP心跳
void monitor_report_udp_heart()
{
    uint8 bySwitch = 0;

    // 查询网管中心使能标识符
    bySwitch = wmm_network_get_omc_switch_flag();
    if (!bySwitch)
    { // 网管中心不使能，则不用上报心跳包
        return;
    }

    gMonitor_stMonitorParam.byUdpHeartCounter++; // 心跳计数器加1
    if (gMonitor_stMonitorParam.byUdpHeartCounter == 3)
    {
        gMonitor_stMonitorParam.byUdpHeartCounter = 0; // 置零

        // 上报已正确返回，可继续上报
        if (!gMonitor_stMonitorParam.byUdpReportFlag)
        {
            gMonitor_stMonitorParam.byUdpReportFlag = 1; // 上报标识符置1
            oam_report_heart();
        }
        // 上一次的上报未正确返回
        else
        {
            gMonitor_stMonitorParam.byUdpReportExpireCounter++;         // 上报超时计数器加1
            if (gMonitor_stMonitorParam.byUdpReportExpireCounter >= 10) // 30分钟后重新初始化wifi模块
            {
                gMonitor_stMonitorParam.byUdpReportFlag = 0;          // 上报状态清零
                gMonitor_stMonitorParam.byUdpReportExpireCounter = 0; // 上报超时计数器清零

                nmc_reset_transparent_mode();
                wifi_ble_reset(); // wifi蓝牙模块复位
            }
            else
            {
                oam_report_heart();
            }
        }
    }

    return;
}

// UDP上报状态复位
void monitor_report_udp_heart_reset()
{
    gMonitor_stMonitorParam.byUdpReportFlag = 0;          // 上报状态清零
    gMonitor_stMonitorParam.byUdpReportExpireCounter = 0; // 上报超时计数器清零

    return;
}