// PageOSDSettings.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageOSDSettings.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageOSDSettings dialog CPageOSDSettings::CPageOSDSettings(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageOSDSettings::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageOSDSettings) //}}AFX_DATA_INIT m_pNet5Api = NULL; m_pCod5Api = NULL; m_pMsgMgr = NULL; } void CPageOSDSettings::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageOSDSettings) DDX_Control(pDX, IDC_CHK_OSD_TIME_ENABLE, m_btnOSDTimeEnable); DDX_Control(pDX, IDC_CHK_OSD_ENABLE, m_btnOSDEnable); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageOSDSettings, CDialog) //{{AFX_MSG_MAP(CPageOSDSettings) ON_WM_DESTROY() ON_BN_CLICKED(IDC_BTN_OSD_APPLY, OnBtnOsdApply) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageOSDSettings message handlers BOOL CPageOSDSettings::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_pNet5Api = m_pConnection->GetNet5Api(); m_pCod5Api = m_pConnection->GetCod5Api(); m_pMsgMgr = m_pMgrNVE->GetMsgManager(); CMN5_MULTI_COMMAND Cmds[2]; COD5_OSD_STRING_INFO Info; ULONG uIndex = 0; MAKE_MULTI_CMD(Cmds[uIndex], uIndex, COD5_CAC_OSD_STRING, 0, 0, (ULONG)&Info, 0, 0, 0); MAKE_MULTI_CMD(Cmds[uIndex], uIndex, COD5_CAC_OSD_SHOW, 0, 0, 0, 0, 0, 0); CHECK_AND_RETURN_FALSE(m_pCod5Api->Cod5GetMultiCodecAdjusts(uIndex, Cmds), "Cod5GetMultiCodecAdjusts failed"); for (ULONG i=0; iPushErrorCodeF("Cod5GetMultiCodecAdjusts failed. cmd[0x%08x]", Cmds[i].uCommand); m_pMsgMgr->Show(TRUE); } } m_btnOSDEnable.SetCheck(Cmds[1].uParam[0]); SetDlgItemInt(IDC_EDIT_OSD_X, Info.uX); SetDlgItemInt(IDC_EDIT_OSD_Y, Info.uY); SetDlgItemText(IDC_EDIT_OSD_STRING, Info.String); SetDlgItemInt(IDC_EDIT_OSD_COLOR, Info.uFgColor); CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_OSD_STRING); if (pEdit) { pEdit->SetLimitText(MAX_OSD_STR_LENGTH); } char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "GET OSD_TIME\r\n\r\n", m_pConnection->GetServerAddr()); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot send RTSP request(OSD time)"); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive RTSP response(OSD time)"); ULONG uValue; char szValue[NVE_MAX_STR_LENGTH]; NVE_RTSP_VALUE RtspValue[NVE_MAX_RTSP_VALUE]; ParseRTSPResponse(szCmd, RtspValue, NVE_MAX_RTSP_VALUE); FindRTSPValue(RtspValue, "enable", &uValue, NVE_RTSP_VALUE_INT); m_btnOSDTimeEnable.SetCheck(uValue); FindRTSPValue(RtspValue, "x", &uValue, NVE_RTSP_VALUE_INT); SetDlgItemInt(IDC_EDIT_OSD_TIME_X, uValue); FindRTSPValue(RtspValue, "y", &uValue, NVE_RTSP_VALUE_INT); SetDlgItemInt(IDC_EDIT_OSD_TIME_Y, uValue); FindRTSPValue(RtspValue, "format", szValue, NVE_RTSP_VALUE_STR); SetDlgItemText(IDC_EDIT_OSD_TIME_FORMAT, szValue); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageOSDSettings::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here } void CPageOSDSettings::OnBtnOsdApply() { // TODO: Add your control notification handler code here CMN5_MULTI_COMMAND Cmds[2]; ULONG uIndex = 0; COD5_OSD_STRING_INFO Info; Info.uX = GetDlgItemInt(IDC_EDIT_OSD_X); Info.uY = GetDlgItemInt(IDC_EDIT_OSD_Y); CString OSDString; GetDlgItemText(IDC_EDIT_OSD_STRING, OSDString); strcpy(Info.String, (LPSTR)(LPCSTR)OSDString); Info.uBgColor = 0; Info.uFgColor = GetDlgItemInt(IDC_EDIT_OSD_COLOR); Info.uLength = strlen(Info.String); BOOL bEnable = m_btnOSDEnable.GetCheck(); MAKE_MULTI_CMD(Cmds[uIndex], uIndex, COD5_CAC_OSD_STRING, 0, 0, (ULONG)&Info, 0, 0, 0); MAKE_MULTI_CMD(Cmds[uIndex], uIndex, COD5_CAC_OSD_SHOW, 0, 0, bEnable, 0, 0, 0); CHECK_AND_RETURN(m_pCod5Api->Cod5SetMultiCodecAdjusts(uIndex, Cmds), "Cod5SetMultiCodecAdjusts failed"); for (ULONG i=0; iPushErrorCodeF("Cod5SetMultiCodecAdjusts failed. cmd[0x%08x]", Cmds[i].uCommand); m_pMsgMgr->Show(TRUE); } } CString strFormat; ULONG uX, uY; GetDlgItemText(IDC_EDIT_OSD_TIME_FORMAT, strFormat); uX = GetDlgItemInt(IDC_EDIT_OSD_TIME_X); uY = GetDlgItemInt(IDC_EDIT_OSD_TIME_Y); char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "SET OSD_TIME enable=%d, format=\"%s\", x=%d, y=%d\r\n\r\n", m_pConnection->GetServerAddr(), m_btnOSDTimeEnable.GetCheck(), (LPSTR)(LPCSTR)strFormat, uX, uY); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot send RTSP request(OSD time)"); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive RTSP response(OSD time)"); }