static ROC_BOOL CheckAndFormatIpAddr(char *pSrc, char *pDst)
{
	if (!CheckIPAddr(pSrc))
	{
		return ROC_FALSE;
	}

	FormatIpAddr(pSrc, pDst);

	return ROC_TRUE;
}
Beispiel #2
0
// 注:仅支持单板模式
// 必须打开单板模式编译宏“SINGLE_BOARD_PLATFORM”才能编译通过!!!
int main(int argc, char** argv)
{
    HV_Trace(5, "Begin...\n");
    HV_Trace(5, "%s %s\n", __TIME__, __DATE__);

    LinuxSystemInit();

    CUserExitThread e;
    e.Start(NULL);

    // 使能看门狗。
    // 注:使能之前必须喂狗,防止遇到“打开看门狗的同时发生喂狗超时而导致设备复位”这样的情况。
    WdtHandshake();
    CPLD_Write(CPLD_WTD_ENABLE, 1);
    WdtHandshake();

    // 载入各模块参数
    ModuleParams cModuleParams;
    if ( S_OK != LoadModuleParam(cModuleParams) )
    {
        HV_Trace(5, "LoadModuleParam failed!\n");
        HV_Exit(HEC_FAIL|HEC_RESET_DEV, "LoadModuleParam failed!");
    }

    WdtHandshake();

    // 判断是否恢复出厂设置
    if (IsRecoverFactorySettings())
    {
        RecoverFactorySettings();
        HV_Exit(HEC_SUCC, "RecoverFactorySettings!");
    }

    WdtHandshake();

    // 初始化共享内存
    if (S_OK != InitDspLinkMemBlocks(LPRAPP_SINGLE_BOARD_PLATFORM))
    {
        HV_Trace(5, "Memory blocks initialize failed!\n");
        HV_Exit(HEC_RESET_DEV|HEC_FAIL, "Memory blocks initialize failed!");
    }

    WdtHandshake();

    BOOL fIsIP1Correct = FALSE;

    // 判断是否测试相机口(生产测试时使用)
    if (!IsTestCamLanPort())
    {
        // 正常工作,非测试,设置LAN1和LAN2口
        // 确保LAN1和LAN2不在同一网段内,如果在同一网段内,LAN1将会被强行关闭
        if (CheckIPAddr(cModuleParams.cTcpipCfgParam_1, cModuleParams.cTcpipCfgParam_2) == S_OK)
        {
            fIsIP1Correct = TRUE;
            SetTcpipAddr_1(&cModuleParams.cTcpipCfgParam_1);
        }

        // 设置设备IP
        SetTcpipAddr_2(&cModuleParams.cTcpipCfgParam_2);
    }
    else
    {
        // 进行测试相机口,只设置LAN1口为通信息端口
        fIsIP1Correct = TRUE;
        SetTcpipAddr_1(&cModuleParams.cTcpipCfgParam_2);
    }

    if (S_OK == StartCamTransmit(0,
                                 "",
                                 cModuleParams.cTcpipCfgParam_1,
                                 cModuleParams.cTcpipCfgParam_2))
    {
        HV_Trace(5, "StartCamTransmit...\n");
    }

    WdtHandshake();
    CSafeSaverDm6467Impl* pcSafeSaver = NULL;
    if (1 == cModuleParams.cResultSenderParam.fInitHdd)
    {
        SetAllLightOn();
        g_cHddOpThread.SetHddOpType(HOT_FULL_INIT);
        g_cHddOpThread.Start(NULL);
        HV_Trace(5, "Hdd init...\n");
    }
    if (cModuleParams.cResultSenderParam.fIsSafeSaver)
    {
        if (!cModuleParams.cResultSenderParam.fInitHdd)
        {
            SetAllLightOn();
            g_cHddOpThread.SetHddOpType(HOT_INIT);
            g_cHddOpThread.Start(NULL);
            HV_Trace(5, "Hdd check...\n");
        }
        WdtHandshake();
        while (1 != g_nHddCheckStatus)
        {
            HV_Trace(5, "等待硬盘初始化完成...\n");
            HV_Sleep(1000);
            WdtHandshake();
        }
        pcSafeSaver = new CSafeSaverDm6467Impl();
        SSafeSaveParam sParam;
        sParam.fCoverCtrl = true;
        sParam.fSaveRecord = true;
        pcSafeSaver->Init(&sParam);
    }

    SEND_RECORD_PARAM cParam;
    cParam.pcSafeSaver = pcSafeSaver;
    CCameraRecordLinkCtrl cCameraRecordLinkCtrl;
    cCameraRecordLinkCtrl.SetParam(&cParam);
    if ( S_OK != cCameraRecordLinkCtrl.Start(NULL) )
    {
        HV_Trace(5, "CCameraRecordLinkCtrl Start failed!\n");
        HV_Exit(HEC_FAIL, "CCameraRecordLinkCtrl Start failed!");
    }

    WdtHandshake();
    ICameraCmdProcess* pICameraCmdProcess = NULL;
    if ( S_OK != CCameraCmdProcess::CreateICameraCmdProcess(&pICameraCmdProcess) )
    {
        HV_Trace(5, "CreateICameraCmdProcess failed!\n");
        HV_Exit(HEC_FAIL, "CreateICameraCmdProcess failed!");
    }

    CCameraCmdLinkCtrl cCameraCmdLinkCtrl(pICameraCmdProcess);
    if ( S_OK != cCameraCmdLinkCtrl.Start(NULL) )
    {
        HV_Trace(5, "CCameraCmdLinkCtrl Start failed!\n");
        HV_Exit(HEC_FAIL, "CCameraCmdLinkCtrl Start failed!");
    }

    WdtHandshake();
    CHvBoxHolder cHvBoxHolder;
    cHvBoxHolder.Init(&cModuleParams, pcSafeSaver);

    HV_Sleep(300);

    // 启动设备搜索响应线程
    CIPSearchThread cDevSearch;
    if ( S_OK != cDevSearch.Create() )
    {
        HV_Trace(5, "IP search thread create failed!\n");
        HV_Exit(HEC_FAIL, "IP search thread create failed!");
    }

    // 初始化HvTelnet服务
    if ( -1 == TelnetInit() )
    {
        HV_Trace(5, "TelnetInit is Failed!\n");
        HV_Exit(HEC_FAIL, "TelnetInit is Failed!");
    }

    WdtHandshake();

    /*
    SetBuzzerOn();
    HV_Sleep(200);
    SetBuzzerOff();
    */

    SetLan1LedOff();
    SetLan2LedOff();
    SetHddLedOff();
    SetStatLedOff();

    HV_Trace(5, "Running...\n");

    // 定时对网关进行ARPPing
    CPingThread cPingThread;
    cPingThread.SetIPAddress(cModuleParams.cTcpipCfgParam_1.szIp, cModuleParams.cTcpipCfgParam_1.szNetmask, cModuleParams.cTcpipCfgParam_1.szGateway);
    cPingThread.Start(NULL);

    WdtHandshake();

    DWORD32 dwIPTick = 0;
    DWORD32 dwBoxTick = 0;
    DWORD32 dwDotTick = 0;
    DWORD32 dwMemTick = GetSystemTick();
    while (1)
    {
        if (!fIsIP1Correct && (GetSystemTick() - dwIPTick >= 5000))
        {
            HV_Trace(5, "LAN1和LAN2的IP不能设置为同一网段,请更改!\n");
            dwIPTick = GetSystemTick();
        }

        HV_Sleep(500);

        if (GetSystemTick() - dwBoxTick >= 10000)
        {
            cHvBoxHolder.ShowStatus();
            dwBoxTick = GetSystemTick();
        }

        if (GetSystemTick() - dwMemTick >= 20000)
        {
            ShareMemPoolStatusShow();
            dwMemTick = GetSystemTick();
        }

        WdtHandshake();
        WorkLedLight();

        if (GetSystemTick() - dwDotTick >= 1000)
        {
            HV_Trace(5,".");
            fflush(stdout);
            dwDotTick = GetSystemTick();
        }
    }

    HV_Exit(HEC_FAIL, "MainExit");
}