⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rightmd.cpp

📁 实时监控
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RightMD.cpp : implementation file
//

#include "stdafx.h"
#include "../dvrmanager.h"

#include "../utils/common.h"
#include "../utils/custom_msgs.h"
#include "../video/video_channel.h"
#include "net.h"
#include "RightMD.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRightMD dialog
#define REC_MAX 99
#define REC_MIN	1

//##ModelId=3F90BAAE03AC
CRightMD* CRightMD::self = NULL;
//##ModelId=3F90BAAF0011
CRightMD* CRightMD::the_one()
{
	return self;
}

//##ModelId=3F90BAAF0007
CRightMD::CRightMD(CWnd* pParent /*=NULL*/)
	: baseclass(CRightMD::IDD, pParent), mask(&m_grid), last_channel(-1)
{
	//{{AFX_DATA_INIT(CRightMD)
	m_date00 = 0;
	m_date01 = 0;
	m_date10 = 0;
	m_date11 = 0;
	m_rec_duration = 1;
	m_enable_md = FALSE;
	m_rec_sched = FALSE;
	m_rec_day = 0;
	m_md_sens = 0;
	m_channel = 0;
	m_which = -1;
	//}}AFX_DATA_INIT
	
	ZeroMemory(&opt, sizeof(TREC_MOTIONRECPARA));

	self = this;
}

//##ModelId=3F90BAAF02C4
void CRightMD::DoDataExchange(CDataExchange* pDX)
{
	if( 1 )//!pDX->m_bSaveAndValidate )
	{
		if( m_rec_duration < REC_MIN )
		{
			m_rec_duration = REC_MIN;
		}
		if( m_rec_duration > REC_MAX )
		{
			m_rec_duration = REC_MAX;
		}
	}

	if( pDX->m_bSaveAndValidate )
	{
		//memset(&opt.alarm_region, 0xff, 8);
		//memcpy(opt.alarm_region, mask->mask_data(), 8);
	}
	baseclass::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRightMD)
	DDX_Control(pDX, IDCB_REC_DAY, m_cbweek);
	DDX_Control(pDX, ID_S, m_s);
	DDX_Control(pDX, IDCB_CHANNEL, m_cbchannel);
	DDX_Control(pDX, ID_11, m_11);
	DDX_Control(pDX, IDBTN_SET_NET, m_btn_set_net);
	DDX_Control(pDX, IDBTN_REFRESH_NET, m_btn_refresh_net);
	DDX_Control(pDX, ID_FLOWER, m_grid);
	DDX_Control(pDX, ID_1, m_1);
	DDX_Control(pDX, IDCK_REC_SCHEDULE, m_ck_rec_sched);
	DDX_Control(pDX, IDCK_ENABLE, m_ck_enable);
	DDX_Control(pDX, IDCB_WHICH, m_cbwhich);
	DDX_Control(pDX, ID_6, m_6);
	DDX_Control(pDX, ID_2, m_2);
	DDX_Control(pDX, ID_TITLE, m_title);
	DDX_Control(pDX, ID_10, m_10);
	DDX_Control(pDX, ID_9, m_9);
	DDX_Control(pDX, ID_8, m_8);
	DDX_Control(pDX, ID_7, m_7);
	DDX_Control(pDX, ID_5, m_5);
	DDX_Control(pDX, ID_4, m_4) ;
	DDX_Control(pDX, ID_3, m_3) ;
	DDX_Control(pDX, ID_12, m_12) ;
	DDX_Control(pDX, IDCK_AUDIOALARM, m_ck_audioalarm);
	DDX_Control(pDX, IDCK_ALARMOUT1, m_ck_alarmout1);
	DDX_Control(pDX, IDCK_ALARMOUT2, m_ck_alarmout2);
	DDX_Control(pDX, IDCK_ALARMOUT3, m_ck_alarmout3);
	DDX_Control(pDX, IDCK_ALARMOUT4, m_ck_alarmout4);
	DDX_Check(pDX, IDCK_AUDIOALARM, m_audioalarm);
	DDX_Check(pDX, IDCK_ALARMOUT1, m_alarmout1);
	DDX_Check(pDX, IDCK_ALARMOUT2, m_alarmout2);
	DDX_Check(pDX, IDCK_ALARMOUT3, m_alarmout3);
	DDX_Check(pDX, IDCK_ALARMOUT4, m_alarmout4);
	DDX_DateTimeCtrl(pDX, IDDATE_00, m_date00);
	DDX_DateTimeCtrl(pDX, IDDATE_01, m_date01);
	DDX_DateTimeCtrl(pDX, IDDATE_10, m_date10);
	DDX_DateTimeCtrl(pDX, IDDATE_11, m_date11);
	DDX_Text(pDX, IDED_REC_DURATION, m_rec_duration);
	//DDV_MinMaxInt(pDX, m_rec_duration, 1, 99);
	DDX_Check(pDX, IDCK_ENABLE, m_enable_md);
	DDX_Check(pDX, IDCK_REC_SCHEDULE, m_rec_sched);
	DDX_CBIndex(pDX, IDCB_REC_DAY, m_rec_day);
	DDX_CBIndex(pDX, IDCB_MD_SENS, m_md_sens);
	DDX_CBIndex(pDX, IDCB_CHANNEL, m_channel);
	DDX_CBIndex(pDX, IDCB_WHICH, m_which);
	//}}AFX_DATA_MAP

	/*
	 *	当允许/禁止MD时, 更新控件状态
	 */
	static UINT ids[] = 
	{
		IDED_REC_DURATION, ID_SPIN,
		IDCB_MD_SENS, 
		//ID_FLOWER, //IDCB_REC_DAY,
		IDCK_REC_SCHEDULE,
		IDCK_AUDIOALARM,
		IDCK_ALARMOUT1,
		IDCK_ALARMOUT2,
	};
	for( int i=0; i<SIZE_OF(ids); i++ )
	{
		GetDlgItem(ids[i])->EnableWindow(m_enable_md);
	}
    bool m_bool;
	if(m_which == -1) m_bool = false;
	else m_bool = true;
	GetDlgItem(IDDATE_00)->EnableWindow(m_rec_sched && m_enable_md && m_bool);
	GetDlgItem(IDDATE_01)->EnableWindow(m_rec_sched && m_enable_md && m_bool);
	GetDlgItem(IDDATE_10)->EnableWindow(m_rec_sched && m_enable_md && m_bool);
	GetDlgItem(IDDATE_11)->EnableWindow(m_rec_sched && m_enable_md && m_bool);

	ULONG ip;
	USHORT port;
	CString alias;
	m_cbwhich.GetWindowText(alias);

	get_addr(alias, ip, port);
	GetDlgItem(IDCK_ALARMOUT2)->EnableWindow(!(check_2000_version(ip, port)|| check_2100_version(ip, port)) && m_enable_md && m_bool);
	GetDlgItem(IDCK_ALARMOUT3)->EnableWindow((check_16_version(ip, port)|| check_4008_version(ip, port)) && m_enable_md && m_bool);
	GetDlgItem(IDCK_ALARMOUT4)->EnableWindow((check_16_version(ip, port)|| check_4008_version(ip, port)) && m_enable_md && m_bool);	

}

void CRightMD::change_data_28_to_32(byte* m_byte, BOOL m_bool)
{
	ULONG  m_nub;
	for(int i=0; i<80;i=i+4)
	{
		m_nub = m_byte[i] + (m_byte[i+1]<<8);
		m_nub += (m_byte[i+2]<<16) + (m_byte[i+3]<<24);
		change_data_sequence(m_nub, m_bool);

		m_byte[i] = m_nub;
		m_byte[i+1] = m_nub>>8;
		m_byte[i+2] = m_nub>>16;
		m_byte[i+3] = m_nub>>24;
	}
}
void CRightMD::change_data_sequence(ULONG &m_nub, BOOL m_bool)
{
	ULONG m_nub_low;
	ULONG m_nub_high;
	ULONG m_nub_temp = 0 ;
	ULONG m_nub_out = 0 ;
	for(int i=0;i<32;i++)
	{
		m_nub_temp = _lrotl(m_nub,i+1);
		m_nub_temp = (m_nub_temp & 1) << i;
		m_nub_out = m_nub_out | m_nub_temp;
	}
	if(m_bool)
	{
		//28 change to 32
		m_nub_low = (m_nub_out >> 3) & 0x00007ffe;
		m_nub_high = (m_nub_out >> 2) & 0x3fff0000;
	}
	else
	{
		//32 change to 28
		m_nub_low = (m_nub_out & 0x0000ffff) >> 2 ;
		m_nub_high = (m_nub_out & 0xffff0000) >> 3 ;
	}
	m_nub = m_nub_low + m_nub_high ;
}

void CRightMD::change_data_14_to_16(byte* m_byte)
{
	USHORT  m_nub;
	for(int i=0; i<20;i=i+2)
	{
		m_nub = m_byte[i] + (m_byte[i+1]<<8);

		m_byte[i] = (m_nub<<1);
		m_byte[i+1] = ((m_nub)>>7) & 0x7f ;
	}
}

void CRightMD::change_data_16_to_14(byte* m_byte)
{
	USHORT  m_nub;
	for(int i=0; i<20; i=i+2)
	{
		m_nub = m_byte[i] + (m_byte[i+1]<<8);

		m_byte[i] = (m_nub>>1);
		m_byte[i+1] = (m_nub>>9);
	}
}



//##ModelId=3F90BAAE036D
void CRightMD::get_data()
{
	UpdateData();
	
	m_rec_duration = max(REC_MIN, min(REC_MAX, m_rec_duration));
	UpdateData(FALSE);

	opt.channel = m_channel;
	opt.onoff = (m_enable_md && m_rec_sched);

	if(!is_16_version() && !is_4_version() && !is_4008_version())
		memcpy(opt.alarm_region, mask->mask_data(), 8);
	else if( mask != (video_mask*)&m_grid )
	{
		if(is_4_version())
			memcpy(opt4.alarm_region, mask->mask_data(), 20);
		else
			memcpy(opt16.alarm_region, mask->mask_data(), 80);
	}

	opt.rectime = m_rec_duration;
	opt.recsmart = m_md_sens+1;		// +1, 2003-9-24 nodman
	opt.audio_alarm = m_audioalarm ;
	opt.alarmout = 0 ;
	if (m_alarmout1)
		opt.alarmout |= 1 ;
	if (m_alarmout2)
		opt.alarmout |= 2 ;
	if (m_alarmout3)
		opt.alarmout |= 4 ;
	if (m_alarmout4)
		opt.alarmout |= 8 ;

	get_date();
}

// Dialog -> opt
//##ModelId=3F90BAAE0377
void CRightMD::get_date()
{
	if(!UpdateData()) return;
	//UpdateData();

	// 如果对某一天不允许MD Sched
	if( !m_rec_sched )
	{
		UNSET_DAY(opt, m_rec_day);
		return;
	}
	
	SEG1_BGN_HOUR(opt, m_rec_day) = m_date00.GetHour();
	SEG1_BGN_MIN(opt, m_rec_day) = m_date00.GetMinute();
	SEG1_END_HOUR(opt, m_rec_day) = m_date01.GetHour();
	SEG1_END_MIN(opt, m_rec_day) = m_date01.GetMinute();
	
	SEG2_BGN_HOUR(opt, m_rec_day) = m_date10.GetHour();
	SEG2_BGN_MIN(opt, m_rec_day) = m_date10.GetMinute();
	SEG2_END_HOUR(opt, m_rec_day) = m_date11.GetHour();
	SEG2_END_MIN(opt, m_rec_day) = m_date11.GetMinute();

	/*
	 *	EVERDAY和其他天数(1-7)不能同时设置
	 */
	if( m_rec_day == 0 )	// EVERYDAY
	{
		if( m_rec_sched )
		{
			for( int i=1; i<8; i++ )
			{
				UNSET_DAY(opt, i);
			}
		}
	}
	else					// OTHER days
	{
		if( m_rec_sched )
		{
			UNSET_DAY(opt, 0);	// clear EVERYDAY flag
		}
	}
}

// opt -> Dialog
//##ModelId=3F90BAAE0381
void CRightMD::put_date()
{
	m_date00 = SEG1_BGN(opt, m_rec_day);
	m_date01 = SEG1_END(opt, m_rec_day);
	m_date10 = SEG2_BGN(opt, m_rec_day);	
	m_date11 = SEG2_END(opt, m_rec_day);
}

BEGIN_MESSAGE_MAP(CRightMD, baseclass)
	//{{AFX_MSG_MAP(CRightMD)
	ON_BN_CLICKED(IDCK_ENABLE, OnEnable)
	ON_CBN_SELCHANGE(IDCB_WHICH, OnSelchangeWhich)
	ON_BN_CLICKED(IDBTN_REFRESH_NET, OnRefreshNet)
	ON_CBN_SELCHANGE(IDCB_CHANNEL, OnSelchangeChannel)
	ON_NOTIFY(UDN_DELTAPOS, ID_SPIN, OnDeltaposSpin)
	ON_EN_CHANGE(IDED_REC_DURATION, OnChangeRecDuration)
	ON_CBN_SELCHANGE(IDCB_REC_DAY, OnSelchangeRecDay)
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDCK_REC_SCHEDULE, OnRecSchedule)
	ON_BN_CLICKED(IDBTN_SET_NET, OnSetNet)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDDATE_00, OnDatetimechange00)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDDATE_01, OnDatetimechange01)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDDATE_10, OnDatetimechange10)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDDATE_11, OnDatetimechange11)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDATE_DATA, on_update_data)
	ON_MESSAGE(WM_CHANNEL_OPEN, on_channel_open)
	ON_MESSAGE(WM_CHANNEL_CLOSE, on_channel_close)
	MSG2(NTM_OPT_GET_OK, on_get_ok)
	MSG2(NTM_OPT_SET_OK, on_set_ok)

	MSG2(NTM_OPT_GET_4_OK, on_get_4_ok)
	MSG2(NTM_OPT_GET_16_OK, on_get_16_ok)
	
	MSG2(WM_LOGGED_OUT, on_logged_out)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRightMD message handlers

//##ModelId=3F90BAAF02E3
BOOL CRightMD::OnInitDialog() 
{
	baseclass::OnInitDialog();
	
	init_label(m_1).SetFontBold(TRUE);
	init_label(m_3);
	init_label(m_4);
	init_label(m_5);
	init_label(m_7);
	init_label(m_8);
	init_label(m_9);
	init_label(m_10);
	init_label(m_11);
	init_label(m_12);

	init_title(m_title);
	
	m_grid.init();

	fill_combo_week(&m_cbweek);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//##ModelId=3F90BAAE038B
CString CRightMD::get_alias()
{
	CString alias;
	UpdateData();
	if( m_which == -1 )
		return alias;
	m_cbwhich.GetLBText(m_which, alias);
	return alias;
}

/*
 *	当允许/禁止MD时
 */
//##ModelId=3F90BAAF02ED
bool CRightMD::is_16_version()
{
	ULONG ip;
	USHORT port;
	CString alias = get_alias();
	get_addr(alias, ip, port);

	return check_16_version(ip, port);
}

bool CRightMD::is_4008_version()
{
	ULONG ip;
	USHORT port;
	CString alias = get_alias();
	get_addr(alias, ip, port);

	if(check_4008_version(ip, port))
		return true;
	return false;
}

bool CRightMD::is_4_version()
{
	ULONG ip;
	USHORT port;
	CString alias = get_alias();
	get_addr(alias, ip, port);

	if(check_4004_version(ip, port) || check_2000_version(ip,port) || check_2100_version(ip,port))
		return true;
	return false;
}

void CRightMD::OnEnable() 
{
	if( !is_visible(this) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -