Exemplo n.º 1
0
void CQianIO::P_TmAccChk()
{
	_KillTimer(&g_objTimerMng, ACCCHK_TIMER );
	
	unsigned char uszResult;

	if( !IOGet((byte)IOS_ACC, &uszResult) )
	{
		if( IO_ACC_ON == uszResult )
		{
//			PowerOnGps( true );
			SetDevSta( true, DEVSTA_ACCVALID );
		}
		else if( IO_ACC_ON == uszResult )
		{
			DWORD dwCur = GetTickCount();
			if( dwCur - m_dwAccInvalidTm >= ACCCHK_INTERVAL )
			{
//				PowerOnGps( false );
				//告诉手柄进入省电模式
				char buf[] = {0x01, 0x0c, 0x01};
				DataPush(buf, 3, DEV_QIAN, DEV_DIAODU, LV2);
			}
			SetDevSta( false, DEVSTA_ACCVALID );
		} 
	}
	
	if( IO_ACC_ON == uszResult )
		_SetTimer(&g_objTimerMng,  ACCCHK_TIMER, ACCCHK_INTERVAL, G_TmAccChk ); // 不能省略
	else
		_SetTimer(&g_objTimerMng,  ACCCHK_TIMER, 10000, G_TmAccChk );
}
Exemplo n.º 2
0
void CSock::_TcpKeep( BYTE v_bytNextInterval )
{
    if( !m_bTcpLogged ) return;

    PRTMSG(MSG_NOR, "Rcv Cent Tcp Link Keep Req: %d m\n", v_bytNextInterval );

    G_RecordDebugInfo("Dvr Tcp Rcv Cent Link Keep Req: %d m", v_bytNextInterval );

    char buf[ 100 ] = { 0 };
    int iLen = 0;

#if 0 == USE_PROTOCOL || 1 == USE_PROTOCOL || 30 == USE_PROTOCOL
    char* pData = NULL;
    int iDataLen = 0;
    const BYTE FRM04_GRADE = 0x10;
#endif

#if 2 == USE_PROTOCOL
    char cAnsType = 1;
    char* pData = &cAnsType;
    int iDataLen = sizeof(cAnsType);
    const BYTE FRM04_GRADE = 0x04;
#endif

    if( !_MakeTcpFrame( pData, iDataLen, 0x04, FRM04_GRADE, buf, sizeof(buf), iLen ) )
    {
        // 将数据推到业务支撑子层进行发送
        DataPush(buf, iLen, DEV_DVR, DEV_SOCK, LV2);
    }

    _SetTimer(&g_objTimerMng, DVRTCP_RECONN_TIMER, 4*v_bytNextInterval*60000 + 50000, G_TmTcpReConn);
}
Exemplo n.º 3
0
void CLN_Login::HeartKeep()
{
	m_dwSendHeartKeepTimers++;

	// 心跳数据重传了9次未收到心跳应答,请求ComuExe重新拨号
	if( m_dwSendHeartKeepTimers >= 9 )
	{
		PRTMSG(MSG_NOR, "Send HeartKeep to max timers, Ask ComuExe to queck net!\n");
		char buf[] = {0x34, 0x01};
		DataPush((void*)&buf, 2, DEV_SOCK, DEV_PHONE, LV3);
		g_objLNDownLoad.m_bNetFined = false;
		m_dwSendHeartKeepTimers = 0;
		m_dwLoginSucc = 0;
		_KillTimer(&g_objTimerMng, HEART_KEEP_TIMER);

		return;
	}

	char  szBuf[100] = {0};
	DWORD dwLen = 0;
	
	szBuf[dwLen++] = 0x41;	// 命令类型
	
	szBuf[dwLen++] = 0x00;	// 动作:心跳
	szBuf[dwLen++] = 0x03;
	
	// 发送
	g_objApplication.SendAppFrame(MODE_A, 0x80, true, 0, szBuf, dwLen);
	PRTMSG(MSG_NOR, "Send HeartKeep Frame!\n");
	
	// 重启定时器
	tag1PComuCfg obj1PComuCfg;
	GetImpCfg( (void*)&obj1PComuCfg, sizeof(obj1PComuCfg), offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(obj1PComuCfg) );
	_SetTimer(&g_objTimerMng, HEART_KEEP_TIMER, obj1PComuCfg.m_iHeartKeepInterval*1000, G_TmHeartKeep );
}
Exemplo n.º 4
0
void CSock::TcpLog()
{
    char buf[ 200 ] = { 0 };
    int iLen = 0;

    // TCP连续登陆失败次数达到上限
    if(m_iTcpLogTimers > TCP_MAX_LOG_TIMERS)
    {
        m_iTcpLogTimers = 0;
        _KillTimer(&g_objTimerMng, DVRTCP_LOG_TIMER);

        buf[0] = 0x01;	// 请求SockServExe重新连接套接字
        DataPush(buf, 1, DEV_DVR, DEV_SOCK, LV3);
        PRTMSG(MSG_NOR, "Tcp Log failed to max timers, request Tcp Reconnect!\n");

        // 调度屏进行提示
        G_TmShowMsg(NULL, 0);

        return;
    }

    m_bTcpLogged = false;

#if USE_LIAONING_SANQI == 1
    buf[0] = 0x07;
    buf[1] = m_bTcpLogged ? 0x01 : 0x00;
    DataPush(buf, 2, DEV_DVR, DEV_QIAN, LV3);
#endif
    _SetTimer(&g_objTimerMng, DVRTCP_LOG_TIMER, 15000, G_TmTcpLog );

#if 2 == USE_PROTOCOL
    tag1PComuCfg obj1PComuCfg;
    obj1PComuCfg.Init(CDMA_NAME,CDMA_PASS);
    GetImpCfg( &obj1PComuCfg, sizeof(obj1PComuCfg),	offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(obj1PComuCfg) );
    memcpy( m_objGPRS01.m_szUserIdenCode, USERIDENCODE, sizeof(m_objGPRS01.m_szUserIdenCode) );
#endif

    GetSelfTel( m_objGPRS01.m_szParData, sizeof(m_objGPRS01.m_szParData) );

#if 0 == USE_PROTOCOL || 1 == USE_PROTOCOL || 30 == USE_PROTOCOL
    const BYTE GPRSLOGFRM_TYPE = 0x11;
    const BYTE GPRSLOGFRM_GRADE = 0x10;
#endif
#if 2 == USE_PROTOCOL
    const BYTE GPRSLOGFRM_TYPE = 0x01;
    const BYTE GPRSLOGFRM_GRADE = 0x04;
#endif
    if( !_MakeTcpFrame( (char*)&m_objGPRS01, sizeof(m_objGPRS01), GPRSLOGFRM_TYPE, GPRSLOGFRM_GRADE, buf, sizeof(buf), iLen ) )
    {
        PRTMSG(MSG_NOR, "Send Tcp Log Frame\n" );

        G_RecordDebugInfo("Dvr Send Tcp Log Frame" );

        DataPush(buf, iLen, DEV_DVR, DEV_SOCK, LV3);
        m_iTcpLogTimers++;
    }
}
Exemplo n.º 5
0
void CDownLineFile::Send4353(tag4353 &obj4353)
{
	int iBufLen, iRet;
	char resbuf[1024] ={0};	

	PRTMSG(MSG_DBG, "Send4353 WinIndex=%d,Sta=0x%08X.",obj4353.ulWinIndex,obj4353.ulWinStatus);

	iRet = g_objSms.MakeSmsFrame((char*)&obj4353, sizeof(obj4353), 0x43, 0x53, resbuf, sizeof(resbuf), iBufLen);
	if( !iRet ) g_objSock.SOCKSNDSMSDATA( resbuf, iBufLen, LV12,0);
	
	memcpy(&m_ObjLst4353,&obj4353,sizeof(m_ObjLst4353));

	_SetTimer(&g_objTimerMng, SEND4353_TIMER, 10000, G_TmSend4353);
	
	m_iSend4353Cnt = 0;	
}
Exemplo n.º 6
0
int CHelp::DealComu80( char* v_szData, DWORD v_dwDataLen )
{
	int iRet = 0;
	int iBufLen = 0;
	WORD wPhotoType = 0;
	char buf[SOCK_MAXSIZE];
	tag0341 req;
	tagQianGps objQianGps;
	tag2QGprsCfg objGprsCfg;
	GetSecCfg( &objGprsCfg, sizeof(objGprsCfg), offsetof(tagSecondCfg, m_uni2QGprsCfg.m_obj2QGprsCfg), sizeof(objGprsCfg) );
	
	if( v_dwDataLen < 1 )
	{
		iRet = ERR_PAR;
		goto DEALCOMU80_END;
	}
	
	iRet = g_objMonAlert.GetCurQianGps( objQianGps, true );
	if( iRet ) goto DEALCOMU80_END;
	
	req.m_bytHelpType = v_szData[ 0 ];
	memcpy( &req.m_objQianGps, &objQianGps, sizeof(req.m_objQianGps) );
	
	iRet = g_objSms.MakeSmsFrame( (char*)&req, sizeof(req), 0x03, 0x41, buf, sizeof(buf), iBufLen );
	if( iRet ) goto DEALCOMU80_END;
	
	iRet = g_objSock.SOCKSNDSMSDATA( buf, iBufLen, LV13,
		(objGprsCfg.m_bytChannelBkType_1 & 0x04) ? DATASYMB_SMSBACKUP : 0 );
	
DEALCOMU80_END:
	BYTE bytResType = 0;
	if( !iRet ) bytResType = 1;
	else bytResType = 2;
	
	buf[0] = 0x01;
	buf[1] = char(0x81);
	buf[2] = bytResType;
	DataPush(buf, 3, DEV_QIAN, DEV_DIAODU, LV2);
	
#if QIANTYPE_USE == QIANTYPE_KJ2 || QIANTYPE_USE == QIANTYPE_JG2 || QIANTYPE_USE == QIANTYPE_V7
	_SetTimer(&g_objTimerMng, AUTODIALHELPTEL_TIMER, 3000, G_TmAutoDialHelpTel );
#endif
	
	return iRet;
}
Exemplo n.º 7
0
void CCtrlGesture::onMouseMove (CPoint pt, uint /*key*/) {
	if (m_points.size() == 0) {
		return; // when called by CCtrlMain::_CheckMouseMove(), this could happen
	}

	CPoint ptLast = m_points[m_points.size() - 1];
	if (abs(pt.x - ptLast.x) < m_gestureSensitivity && abs(pt.y - ptLast.y) < m_gestureSensitivity) {
		return;
	}

	assert(m_gestureTimeout > 0);
	m_isTimeout = false;
	_SetTimer(m_gestureTimeout, (uint)this);
	m_lastMove = ::GetTickCount();
	int x = pt.x - ptLast.x;
	int y = pt.y - ptLast.y;

	TCHAR c;
	if (abs(x) > abs(y)) {
		if (x > 0) {
			c = _T('R');
		} else {
			c = _T('L');
		}
	} else {
		if (y > 0) {
			c = _T('D');
		} else {
			c = _T('U');
		}
	}

	if (m_gesture.length() == 0 || m_gesture.at(m_gesture.length() - 1) != c) {
		m_gesture += c;
	}
	m_points.push_back(pt);

	invalidate();
}
Exemplo n.º 8
0
/// 7D+1->7D,7D+2->7E,去帧头尾7e之后,但没有完全解开GPRS封装
void CSock::_DealTcpData( char* v_szBuf, DWORD v_dwBufLen )
{
    if( v_dwBufLen < TCPFRAME_BASELEN )
    {
        XUN_ASSERT_VALID( false, "" );
        return;
    }

    DWORD dwDataPos = 0;
    BYTE bytFrmType = 0;
    BYTE bytGrade = 0;
#if 0 == USE_PROTOCOL || 1 == USE_PROTOCOL
    dwDataPos = 3;
    bytGrade = BYTE( v_szBuf[ 1 ] );
    bytFrmType = BYTE( v_szBuf[ 2 ] );
#endif
#if 2 == USE_PROTOCOL
    dwDataPos = 4;
    bytGrade = BYTE( v_szBuf[ 2 ] );
    bytFrmType = BYTE( v_szBuf[ 3 ] );
#endif

    switch( bytFrmType )
    {
    case 0x81:
    case 0x91: // 移动台登陆应答
    {
        if( v_dwBufLen > 6 )	// 若长度大于6,说明是第一次登陆应答,后面带有IP地址和端口
        {
            if( 1 == v_szBuf[ dwDataPos ] ) // 若是成功应答
            {
                PRTMSG(MSG_NOR,  "TCP First Logged Succ!\n" );

                G_RecordDebugInfo("Dvr Tcp First Logged Succ!" );

                _KillTimer(&g_objTimerMng, DVRTCP_LOG_TIMER );
                _KillTimer(&g_objTimerMng, SHOW_MSG_TIMER);

                // 提取IP端口,送到SockServExe
                char buf[ 200 ] = { 0 };
                buf[0] = 0x05;	// 请求SockServExe重新连接套接字,且附带有IP端口
                memcpy(buf+1, v_szBuf+dwDataPos+1, v_dwBufLen-dwDataPos-1);
                DataPush(buf, v_dwBufLen-dwDataPos, DEV_DVR, DEV_SOCK, LV3);
            }
            else
            {
                PRTMSG(MSG_NOR, "TCP First Logged Fail\n" );
                m_iTcpLogTimers = 0;

                // 通过调度屏提示
                G_TmShowMsg(NULL, 0);
            }
        }
        else					// 否则是第二次登陆后的应答
        {
            if( 1 == v_szBuf[ dwDataPos ] ) // 若是成功应答
            {
                PRTMSG(MSG_NOR,  "TCP Second Logged Succ!\n" );

                G_RecordDebugInfo("Dvr Tcp Second Logged Succ!" );

                _KillTimer(&g_objTimerMng, DVRTCP_LOG_TIMER );
                m_bTcpLogged = true;

#if USE_LIAONING_SANQI == 1
                char szbuf[ 2 ] = { 0 };
                szbuf[0] = 0x07;
                szbuf[1] = m_bTcpLogged ? 0x01 : 0x00;
                DataPush(szbuf, 2, DEV_DVR, DEV_QIAN, LV3);
#endif
                DWORD dwCur = GetTickCount();

                m_dwTcpLogTm = dwCur; // 确保之后重新进行登陆超时判断
                m_iTcpLogTimers = 0;

                char buf = 0x03;	// 通知SockServExe登陆成功
                DataPush((void*)&buf, 1, DEV_DVR, DEV_SOCK, LV3);

                // 关闭提示
                _KillTimer(&g_objTimerMng, SHOW_MSG_TIMER);

                // 防止万一TCP登陆后的第一个链路维护没有收到
                _SetTimer(&g_objTimerMng, DVRTCP_RECONN_TIMER, 180000, G_TmTcpReConn);
            }
            else
            {
                PRTMSG(MSG_NOR, "TCP Second Logged Fail\n" );
                m_iTcpLogTimers = 0;

                // 通过调度屏提示
                G_TmShowMsg(NULL, 0);
            }
        }
    }
    break;

    case 0x82: // 移动台数据传输应答
    {
        if( 0x02 == v_szBuf[ dwDataPos ] ) // 若移动台未登陆
        {
            m_dwTcpLogTm = GetTickCount(); // 先初始化时间,确保重新进行登陆超时判断
            TcpLog();
        }
    }
    break;

    case 0x83: // 业务数据
    {
        _DealGprsTran( bytGrade, v_szBuf + dwDataPos, v_dwBufLen - TCPFRAME_BASELEN );
    }
    break;

    case 0x84: // 前置机链路探询
    {
        _TcpKeep( BYTE(v_szBuf[ dwDataPos ]) );
    }
    break;

    default:
        XUN_ASSERT_VALID( false, "" );
    }
}
Exemplo n.º 9
0
int CSock::AnalyseSockData( const char* v_szRecv, const int v_iRecvLen )
{
    if( !v_szRecv || v_iRecvLen <= 0 ) return 0;

    // 非中心协议帧
    if( 0x01 == v_szRecv[0] )
    {
        switch(v_szRecv[1])
        {
        case 0x01:		// SoceServExe通知已连接中心
        {
            TcpLog();
        }
        break;

        case 0x02:		// SoceServExe通知已断开中心
        {
            _KillTimer(&g_objTimerMng,DVRTCP_LOG_TIMER);
            m_bTcpLogged = false;
#if USE_LIAONING_SANQI == 1
            char buf[2] = {0};
            buf[0] = 0x07;
            buf[1] = m_bTcpLogged ? 0x01 : 0x00;
            DataPush(buf, 2, DEV_DVR, DEV_QIAN, LV3);
#endif
        }
        break;

        case 0x03:		// SoceServExe请求向调度屏发送提示
        {
            G_TmShowMsg(NULL, 0);
            _SetTimer(&g_objTimerMng, SHOW_MSG_TIMER, 30000, G_TmShowMsg);
        }
        break;

        default:
            break;
        }

        return 0;
    }

    // 中心TCP协议帧
    else if( 0x00 == v_szRecv[0] )
    {
        int i7ECount = 0;
        if( m_dwTcpFrameLen > 0 ) i7ECount = 1;

        int iBegin = 1;
        for( int i = 1; i < v_iRecvLen; i ++ )
        {
            if( 0x7e == v_szRecv[ i ] )
            {
                ++ i7ECount;

                if( 0 == i7ECount % 2 ) // 若得到一帧
                {
                    if( m_dwTcpFrameLen + (i - iBegin + 1) <= sizeof(m_szTcpRecvFrame) )
                    {
                        memcpy( m_szTcpRecvFrame + m_dwTcpFrameLen, v_szRecv + iBegin, i - iBegin + 1 );
                        m_dwTcpFrameLen += (DWORD)(i - iBegin + 1);

                        if( m_dwTcpFrameLen <= 2 )
                        {
                            ++ i7ECount;
                            iBegin = i;
                            memset((void*)m_szTcpRecvFrame, 0, sizeof(m_szTcpRecvFrame) );
                            m_dwTcpFrameLen = 0;
                            continue;
                        }
                        else
                        {
                            // 反转义
                            _DeTranData( m_szTcpRecvFrame, m_dwTcpFrameLen );

                            // 计算校验和
                            if( !_ChkSum( m_szTcpRecvFrame, m_dwTcpFrameLen) )
                            {
                                PRTMSG(MSG_NOR, "Dvr Tcp ChkSum err!\n");
                                memset((void*)m_szTcpRecvFrame, 0, sizeof(m_szTcpRecvFrame) );
                                m_dwTcpFrameLen = 0;
                                continue;
                            }

                            // 协议解析和处理
                            _DealTcpData( m_szTcpRecvFrame, m_dwTcpFrameLen );

                            memset((void*)m_szTcpRecvFrame, 0, sizeof(m_szTcpRecvFrame) );
                            m_dwTcpFrameLen = 0;
                        }
                    }
                    else
                    {
                        XUN_ASSERT_VALID( false, "" );
                        memset((void*)m_szTcpRecvFrame, 0, sizeof(m_szTcpRecvFrame) );
                        m_dwTcpFrameLen = 0;
                    }
                }
                else
                {
                    iBegin = i;
                }
            }
        }

        if( 0 != i7ECount % 2 ) // 若最后有不完整帧数据
        {
            if( m_dwTcpFrameLen + (v_iRecvLen - iBegin) < sizeof(m_szTcpRecvFrame) )
            {
                memcpy( m_szTcpRecvFrame + m_dwTcpFrameLen, v_szRecv + iBegin, v_iRecvLen - iBegin );
                m_dwTcpFrameLen += (DWORD)(v_iRecvLen - iBegin);
            }
            else
            {
                XUN_ASSERT_VALID( false, "" );
                memset((void*)m_szTcpRecvFrame, 0, sizeof(m_szTcpRecvFrame) );
                m_dwTcpFrameLen = 0;
                return 1;
            }
        }
    }
    // 中心UDP协议帧
    else if( 0x02 == v_szRecv[0] )
    {
        switch( v_szRecv[1] )
        {
#if VIDEO_BLACK_TYPE == 1
        case 0xB1:		// 黑匣子文件传输开始帧应答
            Deal38B1((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        case 0xB2:		// 黑匣子文件内容传输请求
            Deal38B2((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        case 0xB3:		// 黑匣子文件传输结束帧
            Deal38B3((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;
#endif

#if VIDEO_BLACK_TYPE == 2
        case 0xD1:
            Deal38D1((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        case 0xD3:
            Deal38D3((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;
#endif

        case 0x03:
            Deal3803((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        case 0x35:
            Deal3835((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        case 0x36:
            Deal3836((char*)v_szRecv+2, (int)v_iRecvLen-2);
            break;

        default:
            break;
        }
    }

    return 0;
}
Exemplo n.º 10
0
// 文件类型(1)+ 文件名(40)+ 应答类型(1)+ 【请求重传的包个数(8) + 包序号(8)* M】
int  Deal38D3(char *v_databuf, int v_datalen)
{
	char	szFileName[40] = {0};
	FILE	*fp = NULL;
	HI_U64	ulPackCount = 0;
	HI_U64	ulPackNo = 0;
	HI_U64	i = 0;
	char	szSendBuf[1500] = {0};
	int		iSendLen = 0;
	int		ireadlen = 0;

	tag1PComuCfg objComuCfg;
	GetImpCfg( &objComuCfg, sizeof(objComuCfg), offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(objComuCfg) );	
	
	memcpy(szFileName, v_databuf+1, 34);
	PRTMSG(MSG_DBG, "Recv D3 frame:%s \n", szFileName);
	
	// 若文件名一致,则关闭C3重传定时器
	if( strcmp(szFileName, g_objUploadFileSta.m_szTempFileName[0]) == 0 )
	{
		PRTMSG(MSG_NOR, "Close C3_ReUpload Timer!\n");		
		_KillTimer(&g_objTimerMng, C1C3_REUPLOAD_TIMER);

		// 若文件接收完整
		if( v_databuf[41] == 0x01 )
		{
			UpdateUploadSta(TRUE);
			BeginUploadFile();
		}
		else
		{				
			fp = fopen(g_objUploadFileSta.m_szRealFileName[0],"rb");
			if(NULL == fp)
				return 1;

			// 请求重传包个数
			memcpy((void*)&ulPackCount, v_databuf+42, 8);

			for(i=0; i<ulPackCount; i++)
			{
				// 获取一个重传包序号
				memcpy((void*)&ulPackNo, v_databuf+50+8*i, 8);
				PRTMSG(MSG_DBG, "ReUpload Pack: %ld\n", ulPackNo);

				// 定位到文件中的该位置
				fseek(fp, g_objUploadFileSta.m_ulStartOffset[0]+ulPackNo*UPLOAD_PACK_SIZE, SEEK_SET );

				// 包数据
				if( (ireadlen = fread(szSendBuf+C2_HEAD_SIZE, 1, UPLOAD_PACK_SIZE, fp)) < 0 )
					break;

				iSendLen = 0;
				
				// 帧头
				szSendBuf[iSendLen++] = 0xC2;
				
				// 手机号
				memcpy(szSendBuf+iSendLen, objComuCfg.m_szTel, 15);
				iSendLen += 15;
				
				// 文件类型
				szSendBuf[iSendLen++] = g_objUploadFileSta.m_uszFileType;
				
				// 文件名
				memcpy(szSendBuf+iSendLen, g_objUploadFileSta.m_szTempFileName[0], 40);
				iSendLen += 40;
				
				// 包序号
				memcpy(szSendBuf+iSendLen, (void*)&ulPackNo, 8);
				iSendLen += 8;
				
				// 包大小
				szSendBuf[iSendLen++] = ireadlen%256;
				szSendBuf[iSendLen++] = ireadlen/256;

				//推到SockServExe发送
				DataPush(szSendBuf, ireadlen+C2_HEAD_SIZE, DEV_DVR, DEV_SOCK, LV2);

				if( i%10 == 0)
					usleep(200000);
			}

			if( NULL != fp )
				fclose(fp);

			// 再次发送C3结束帧:0xC3 + 手机号(15)+ 文件类型(1)+ 文件名(40)
			szSendBuf[0] = 0xC3;
			DataPush(szSendBuf, 57, DEV_DVR, DEV_SOCK, LV2);
			PRTMSG(MSG_DBG, "Upload C3 frame!\n");
			
			// 保存到缓冲,以备重传
			memcpy(g_szReUploadBuf, szSendBuf, 57);
			g_iReUploadLen = 57;
			
			// 启动超时重传定时器
			_SetTimer(&g_objTimerMng, C1C3_REUPLOAD_TIMER, 5000, Deal_ReUpload);
		}
	}
}
Exemplo n.º 11
0
void *G_BlackUploadThread(void* arg)
{
	char	szSendBuf[1500] = {0};
	int		iSendLen = 0;
	HI_U64	ulPackNo = 0;
	int		ireadlen = 0;
	FILE	*fp = NULL;
	
	fp = fopen(g_objUploadFileSta.m_szRealFileName[0],"rb");
	if(NULL == fp)
		return NULL;

	tag1PComuCfg objComuCfg;
	GetImpCfg( &objComuCfg, sizeof(objComuCfg), offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(objComuCfg) );	

	// 将文件定位到所要上传的位置
	fseek(fp, g_objUploadFileSta.m_ulStartOffset[0], SEEK_SET);

	// 分包组帧上传
	for(ulPackNo=0; ulPackNo<g_objUploadFileSta.m_ulPackTotal; ulPackNo++)
	{
		// 包数据
		if( (ireadlen = fread(szSendBuf+C2_HEAD_SIZE, 1, UPLOAD_PACK_SIZE, fp)) < 0 )
			break;

		iSendLen = 0;

		// 帧头
		szSendBuf[iSendLen++] = 0xC2;
		
		// 手机号
		memcpy(szSendBuf+iSendLen, objComuCfg.m_szTel, 15);
		iSendLen += 15;
		
		// 文件类型
		szSendBuf[iSendLen++] = g_objUploadFileSta.m_uszFileType;
		
		// 文件名
		memcpy(szSendBuf+iSendLen, g_objUploadFileSta.m_szTempFileName[0], 40);
		iSendLen += 40;

		// 包序号
		memcpy(szSendBuf+iSendLen, (void*)&ulPackNo, 8);
		iSendLen += 8;

		// 包大小
		szSendBuf[iSendLen++] = ireadlen%256;
		szSendBuf[iSendLen++] = ireadlen/256;

		//推到SockServExe发送
		DataPush(szSendBuf, ireadlen+C2_HEAD_SIZE, DEV_DVR, DEV_SOCK, LV2);

		if( ulPackNo % 10 == 0)
		{
			PRTMSG(MSG_DBG, "Upload C2 frame, ulPackNo = %d\n", ulPackNo);
			usleep(200000);
		}
	}

	if( NULL != fp )
		fclose(fp);

	// 整个文件发送完毕之后,发送C3结束帧:0xC3 + 手机号(15)+ 文件类型(1)+ 文件名(40)
	szSendBuf[0] = 0xC3;
	DataPush(szSendBuf, 57, DEV_DVR, DEV_SOCK, LV2);
	PRTMSG(MSG_DBG, "Upload C3 frame!\n");

	// 保存到缓冲,以备重传
	memcpy(g_szReUploadBuf, szSendBuf, 57);
	g_iReUploadLen = 57;
	
	// 启动超时重传定时器
	_SetTimer(&g_objTimerMng, C1C3_REUPLOAD_TIMER, 5000, Deal_ReUpload);
}
Exemplo n.º 12
0
void BeginUploadFile()
{
	int	i = 0;
	int	iLen = 0;
	
	int iCurDateTime[6];

	BYTE	szTempBuf[100] = {0};
	int  iTempLen = 0;

	// 若当前正在监控,则返回
	if(	g_objWorkStart.VUpload[0] || g_objWorkStart.VUpload[1] || g_objWorkStart.VUpload[2] || g_objWorkStart.VUpload[3] )
		return;

	// 更新上传文件的状态
	if( FALSE == UpdateUploadSta(FALSE) ) 
		return;

	// 组帧(C1帧)
	szTempBuf[iTempLen++] = 0xC1;

	// 手机号
	tag1PComuCfg objComuCfg;
	GetImpCfg( &objComuCfg, sizeof(objComuCfg), offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(objComuCfg) );					
	memcpy(szTempBuf+iTempLen, objComuCfg.m_szTel, 15);
	iTempLen += 15;
	
	//文件类型
	szTempBuf[iTempLen++] = g_objUploadFileSta.m_uszFileType;		
	
	//此处黑匣子文件名固定长为34个字节,后面补空格,凑齐40个字节
	iLen = strlen(g_objUploadFileSta.m_szTempFileName[0]);
	memcpy( szTempBuf+iTempLen, g_objUploadFileSta.m_szTempFileName[0], iLen);	
	iTempLen += iLen;
	szTempBuf[iTempLen++] = ' ';szTempBuf[iTempLen++] = ' ';szTempBuf[iTempLen++] = ' ';	
	szTempBuf[iTempLen++] = ' ';szTempBuf[iTempLen++] = ' ';szTempBuf[iTempLen++] = ' ';
	
	// 时间序号
	GetCurDateTime( iCurDateTime );
	
	szTempBuf[iTempLen++] = (char)(iCurDateTime[0]-2000);
	szTempBuf[iTempLen++] = (char)iCurDateTime[1];
	szTempBuf[iTempLen++] = (char)iCurDateTime[2];
	szTempBuf[iTempLen++] = (char)iCurDateTime[3];
	szTempBuf[iTempLen++] = (char)iCurDateTime[4];
	szTempBuf[iTempLen++] = (char)iCurDateTime[5];
	
	// 总包数
	memcpy(szTempBuf+iTempLen, (void*)&g_objUploadFileSta.m_ulPackTotal, 8);
	iTempLen += 8;
		
	// 推到SockServExe发送
	DataPush(szTempBuf, (DWORD)iTempLen, DEV_DVR, DEV_SOCK, LV2);

	PRTMSG(MSG_DBG, "Upload C1 frame\n");
	//PrintString((char*)szTempBuf, iTempLen);

	// 保存到缓冲,以备重传
	memcpy(g_szReUploadBuf, szTempBuf, iTempLen);
	g_iReUploadLen = iTempLen;

 	// 启动超时重传定时器
	_SetTimer(&g_objTimerMng, C1C3_REUPLOAD_TIMER, 5000, Deal_ReUpload);
}
Exemplo n.º 13
0
void CLN_Login::Register()
{
	tag1PComuCfg obj1PComuCfg;
	GetImpCfg( &obj1PComuCfg, sizeof(obj1PComuCfg),	offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(obj1PComuCfg) );
	if( 0x20 == obj1PComuCfg.m_szTel[0] || 0x30 == obj1PComuCfg.m_szTel[0] || !strcmp("", obj1PComuCfg.m_szTel) )
	{
		PRTMSG(MSG_NOR, "Get SelfTel, but Incorrect or Empty, Quit Register!\n" );
		return;
	}

	m_dwRegisterTimers++;
	
	// 注册重传了10次未收到应答,请求ComuExe重新拨号
	if( m_dwRegisterTimers >= 50 )
	{
		PRTMSG(MSG_NOR, "Send Register to max timers, Ask ComuExe to queck net!\n");
		char buf[] = {0x34, 0x01};
		DataPush((void*)&buf, 2, DEV_SOCK, DEV_PHONE, LV3);
		
		m_dwRegisterTimers = 0;
		_KillTimer(&g_objTimerMng, REGISTER_TIMER);

		return;
	}

	char  szBuf[200] = {0};
	DWORD dwLen = 0;

	char  szTempBuf[100] = {0};
	DWORD dwTempLen = 0;

	szBuf[dwLen++] = 0x41;	// 命令类型

	szBuf[dwLen++] = 0x00;	// 动作:注册
	szBuf[dwLen++] = 0x00;

	szBuf[dwLen++] = 0x00;	// Attr1
	szBuf[dwLen++] = 0x03;	// K_len1
	szBuf[dwLen++] = 'v';	// Key1: ver 终端版本号:M(3)+R(3)+V(4)+S(1)
	szBuf[dwLen++] = 'e';
	szBuf[dwLen++] = 'r';
	szBuf[dwLen++] = 0x00;	// V_len1
	szBuf[dwLen++] = dwTempLen = GetVer(szTempBuf);
	memcpy(szBuf+dwLen, szTempBuf, dwTempLen);
	dwLen += dwTempLen;

	szBuf[dwLen++] = 0x00;	// Attr2
	szBuf[dwLen++] = 0x03;	// K_len2
	szBuf[dwLen++] = 'v';	// Key2: ven 厂商编号
	szBuf[dwLen++] = 'e';
	szBuf[dwLen++] = 'n';
	szBuf[dwLen++] = 0x00;	// V_len2
	szBuf[dwLen++] = dwTempLen = GetVen(szTempBuf);
	memcpy(szBuf+dwLen, szTempBuf, dwTempLen);
	dwLen += dwTempLen;

	szBuf[dwLen++] = 0x00;	// Attr3
	szBuf[dwLen++] = 0x05;	// K_len3
	szBuf[dwLen++] = 'g';	// Key3: group 集团计费号
	szBuf[dwLen++] = 'r';
	szBuf[dwLen++] = 'o';
	szBuf[dwLen++] = 'u';
	szBuf[dwLen++] = 'p';
	szBuf[dwLen++] = 0x00;	// V_len3
	szBuf[dwLen++] = dwTempLen = GetGroup(szTempBuf);
	memcpy(szBuf+dwLen, szTempBuf, dwTempLen);
	dwLen += dwTempLen;
	
	// 发送
	g_objApplication.SendAppFrame(MODE_A, 0x80, true, 0, szBuf, dwLen);
	PRTMSG(MSG_NOR, "Send Register Frame!\n");
	
	_SetTimer(&g_objTimerMng, REGISTER_TIMER, 10000, G_TmRegister);
}
Exemplo n.º 14
0
void CLN_Login::Login()
{
	tag1PComuCfg obj1PComuCfg;
	GetImpCfg( &obj1PComuCfg, sizeof(obj1PComuCfg),	offsetof(tagImportantCfg, m_uni1PComuCfg.m_obj1PComuCfg), sizeof(obj1PComuCfg) );
	if( 0x20 == obj1PComuCfg.m_szTel[0] || 0x30 == obj1PComuCfg.m_szTel[0] || !strcmp("", obj1PComuCfg.m_szTel) )
	{
		PRTMSG(MSG_NOR, "Get SelfTel, but Incorrect or Empty, Quit Login!\n" );
		return;
	}

	m_dwLoginTimers++;
	
	// 登陆重传了10次未收到应答,请求ComuExe重新拨号
	if( m_dwLoginTimers >= 50 )
	{
		PRTMSG(MSG_NOR, "Send Login to max timers, Ask ComuExe to queck net!\n");
		char buf[] = {0x34, 0x01};
		DataPush((void*)&buf, 2, DEV_SOCK, DEV_PHONE, LV3);
		
		m_dwLoginTimers = 0;
		_KillTimer(&g_objTimerMng, LOGIN_TIMER);
	
		return;
	}

	char  szBuf[200] = {0};
	DWORD dwLen = 0;
	
	char  szTempBuf[100] = {0};
	DWORD dwTempLen = 0;
	
	szBuf[dwLen++] = 0x41;	// 命令类型
	
	szBuf[dwLen++] = 0x00;	// 动作:登陆
	szBuf[dwLen++] = 0x01;
	
	// 终端类型
	szBuf[dwLen++] = 0x00;	// Attr1
	szBuf[dwLen++] = 0x02;	// K_len1
	szBuf[dwLen++] = 't';	// Key1: tP 终端类型
	szBuf[dwLen++] = 'P';
	szBuf[dwLen++] = 0x00;	// V_len1
	szBuf[dwLen++] = 0x01;
	szBuf[dwLen++] = 0x01;	// 01h:新协议,02h:老协议,03h:兼容协议,04h:VG3协议

	// 终端版本号
	szBuf[dwLen++] = 0x00;	// Attr2
	szBuf[dwLen++] = 0x03;	// K_len2
	szBuf[dwLen++] = 'v';	// Key2: ver 终端版本号:M(3)+R(3)+V(4)+S(1)
	szBuf[dwLen++] = 'e';
	szBuf[dwLen++] = 'r';
	szBuf[dwLen++] = 0x00;	// V_len2
	szBuf[dwLen++] = dwTempLen = GetVer(szTempBuf);
	memcpy(szBuf+dwLen, szTempBuf, dwTempLen);
	dwLen += dwTempLen;

	// 位置信息、速度、方向、里程
	dwTempLen = G_GetPoint(szTempBuf);	
	memcpy(szBuf+dwLen, szTempBuf, dwTempLen);
	dwLen += dwTempLen;
	
	// 发送
	g_objApplication.SendAppFrame(MODE_A, 0x80, true, 0, szBuf, dwLen);
	PRTMSG(MSG_NOR, "Send Login Frame!\n");
	_KillTimer(&g_objTimerMng, HEART_KEEP_TIMER);
	_SetTimer(&g_objTimerMng, LOGIN_TIMER, 10000, G_TmLogin);
}
Exemplo n.º 15
0
void CQianIO::StartAccChk(DWORD v_dwFstInterval)
{
	_KillTimer(&g_objTimerMng, ACCCHK_TIMER );
	_SetTimer(&g_objTimerMng, ACCCHK_TIMER, v_dwFstInterval, G_TmAccChk );
}