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

📄 rdcp.c

📁 dvr
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
********************************************************************************
*
*  Copyright 2002, Vineyard Technologies, Inc.
*
* Filename 	: rdcp.c
* Programmer: Steve KyeongHyeon Lee
* Created 	: 2003/03/01
* Modified 	: 2004/11/03 
*
* Description : Remote DVR Control Protocol
********************************************************************************
*/
#ifdef NOT_JUNK
#include "types.h"

#include <stdio.h>
#include "8052reg.h"
#include "absacc.h"
#include "eprom.h"
#include "gio.h"
#include "gcset.h"
#include "key.h"
#include "main.h"
#include "socket.h"
#include "lan.h"
#include "rdcp.h"
#include "ghdd.h"
#include "audio.h"
#include "gosd.h"
#ifdef VY_MD
#include "md.h"
#endif
#include "bfpga.h"
/*
###############################################################################
Externs
###############################################################################
*/
extern xdata u8 gv_NTSC_PAL;
extern xdata u8	gv_time_data[6];
extern xdata u8	gv_rec_frame_rate;
extern xdata u8	gv_temp_CAMERA_OF_RECORD;
extern xdata u8	gv_encoder_mode;
extern xdata u8	gv_on_play_flag;

extern xdata u8	code_frame_rate[9];
extern xdata u8	gv_skip_search_block;
extern xdata u8	gv_ff_mode;
extern xdata u32 gv_lba_start;
extern xdata u8 gv_int0_flag;
extern xdata u8 gv_Current_Channel;


//extern u8 HDD_EventLog_Get(u8 hddIndex, u16 *eoffset, u8 direct, EvtNode *evt_buf);
extern void xioWriteByte(u8 ipw_regidx, u8 ipw_regval);
extern void ds1307_time_read(void);
extern void ds1307_time_set(void);
//extern void hdd_format(void);
extern void main_job(u8 key);
extern void rec_job(u8 key);
extern void get_time_for_play(u8 hddIndex, u32* start_lba, u8* start_time, u8* end_time);
extern u8 play_start(void);
extern void play_job(u8 key);
extern void en_top(void);
extern void delay_time (u16 dt_time_end, u8 cnt);
extern void Channel_Display(u8 mode);
extern void SCHEDULE_TIME_DISP(u8 dataa);
extern void wakeup_genesis(u8 mode);
extern u8 adjust_audio_frame(u8 mode);
extern void hdd_pre_write(u8 aud_rec_intr);
extern void SearchNewEvent(void);


/*
###############################################################################
RDCP (Remote DVR Control Protocol packet format
###############################################################################

         Protocol_ID Payload_Length Control_Code Payload
  Normal 0xF5        0xLL           0xKK         XXXXXX
  Error  0xF4        0x01           0xKK         XX

###############################################################################
*/

#define HDSZ	3		// RDCP Header Size
#define PID_N	0xF5	// Protocol ID Normal
#define PID_E	0xF4	// Protocol ID Error 

#define LIST_TYPE_WHOLE_HDD	0
#define LIST_TYPE_SENSOR	1
#define LIST_TYPE_TIME		2

/*
###############################################################################
Static types and definitions
###############################################################################
*/


// Message Codes from Client
#define Client_Open_Request							0x00
#define Client_Close_Request						0x01
#define Client_Get_Info_Request						0x02
#define Client_CmdSetRecordMode_Request				0x03
#define Client_CmdSetInputCamera_Request			0x04
#define Client_CmdSetRecordCamera_Request			0x05
#define Client_CmdSetVideoQuality_Request			0x06
#define Client_CmdSetRecordFrameRate_Request		0x07
#define Client_CmdSetAlarmOnDuration_Request		0x08
#define Client_CmdSetAlarmRecordDuration_Request	0x09
#define Client_CmdSetAudio_Request					0x0A
#define Client_CmdGetSchedule_Request				0x0B
#define Client_CmdSetSchedule_Request				0x0C
#define Client_CmdGetTime_Request					0x0D
#define Client_CmdSetTime_Request					0x0E
#define Client_CmdFormatHdd_Request					0x0F
#define Client_CmdRecordStart_Request				0x10
#define Client_CmdRecordStop_Request				0x11
#define Client_CmdPlaySearch_Request				0x12
#define Client_CmdPlayStart_Request					0x13
#define Client_CmdPlayStop_Request					0x14
#define Client_CmdPlayPause_Request					0x15
#define Client_CmdPlayFastForward_Request			0x16
#define Client_CmdPlayRewind_Request				0x17
#define Client_CmdRez0								0x18
#define Client_CmdGetState_Request					0x19
#define Client_CmdSetChannel_Request				0x1A
#define Client_CmdGetNetConfigRequest				0x1B
#define Client_CmdSetVideoResolution_Request		0x1C
#define Client_CmdSetAudioTransfer_Request			0x1D
#define Client_CmdEnableRateControl_Request			0x1E
#define Client_CmdSetThreshold_Request				0x1F
#define Client_CmdSetDefaultFrameRate_Request		0x20
#define Client_CmdSetFrameRateConfig_Request		0x21
#define Client_CmdSetQ_Level_Request				0x22
#define Client_CmdPoll_Request						0x23
#define	Client_CmdGetMdInfo_Request					0x24
#define	Client_CmdSetMdInfo_Request					0x25

#define	RDCP_CLIENT_CODES							0x26

// Message Codes of Server
#define Server_Open_Confirm							0x40
#define Server_Close_Request						0x41
#define Server_Get_Info_Confirm						0x42
#define Server_SetRecordMode_Confirm				0x43
#define Server_SetInputCamera_Confirm				0x44
#define Server_SetRecordCamera_Confirm				0x45
#define Server_SetVideoQuality_Confirm				0x46
#define Server_SetRecordFrameRate_Confirm			0x47
#define Server_SetAlarmOnDuration_Confirm			0x48
#define Server_SetAlarmRecordDuration_Confirm		0x49
#define Server_SetAudio_Confirm						0x4A
#define Server_GetSchedule_Confirm					0x4B
#define Server_SetSchedule_Confirm					0x4C
#define Server_GetTime_Confirm						0x4D
#define Server_SetTime_Confirm						0x4E
#define Server_FormatHdd_Confirm					0x4F
#define Server_RecordStart_Confirm					0x50
#define Server_RecordStop_Confirm					0x51
#define Server_PlaySearch_Confirm					0x52
#define Server_PlayStart_Confirm					0x53
#define Server_PlayStop_Confirm						0x54
#define Server_PlayPause_Confirm					0x55
#define Server_PlayFastForward_Confirm				0x56
#define Server_PlayRewind_Confirm					0x57
#define Server_NotifyState							0x58
#define Server_GetState_Confirm						0x59
#define Server_SetChannel_Confirm					0x5A
#define Server_GetNetConfig_Confirm					0x5B
#define Server_SetVideoResolution_Confirm			0x5C
#define Server_SetAudioTransfer_Confirm				0x5D
#define Server_EnableRateControl_Confirm			0x5E
#define Server_SetThreshold_Confirm					0x5F 
#define Server_SetDefaultFrameRate_Confirm			0x60
#define Server_SetFrameRateConfig_Confirm			0x61
#define Server_SetQ_Level_Confirm					0x62
#define Server_Poll_Confirm							0x63
#define	Server_GetMdInfo_Confirm					0x64
#define	Server_SetMdInfo_Confirm					0x65 


// Server Denied Reason Code
#define RDCP_ERR_INVALID_PASSWD		0x01
#define RDCP_ERR_INVALID_PARAM		0x02
#define RDCP_ERR_INVALID_STATE		0x03
#define RDCP_ERR_NOT_ALLOWED		0x04
#define RDCP_ERR_NOT_IMPLEMENTED	0x05
#define RDCP_ERR_HDD_FULL			0x06
#define RDCP_ERR_HDD_EMPTY			0x07
#define RDCP_ERR_HDD_NONE			0x08
#define RDCP_ERR_BUTTON_PUSH		0x09
#define RDCP_ERR_UNKONWN			0xFF


/*
###############################################################################
Static Functions prototype
###############################################################################
*/

static u8 Proc_Open_Request							(void);
static u8 Proc_Open_Confirm                       	(void);
static u8 Proc_Close_Request                      	(void);
static u8 Proc_Get_Info_Request                   	(void);
static u8 Proc_CmdSetRecordMode_Request				(void);
static u8 Proc_CmdSetInputCamera_Request			(void);
static u8 Proc_CmdSetRecordCamera_Request		    (void);
static u8 Proc_CmdSetVideoQuality_Request		    (void);
static u8 Proc_CmdSetRecordFrameRate_Request		(void);
static u8 Proc_CmdSetAlarmOnDuration_Request		(void);
static u8 Proc_CmdSetAlarmRecordDuration_Request	(void);
static u8 Proc_CmdSetAudio_Request					(void);
static u8 Proc_CmdGetSchedule_Request			    (void);
static u8 Proc_CmdSetSchedule_Request			    (void);
static u8 Proc_CmdGetTime_Request				    (void);
static u8 Proc_CmdSetTime_Request				    (void);
static u8 Proc_CmdFormatHdd_Request					(void);
static u8 Proc_CmdRecordStart_Request			    (void);
static u8 Proc_CmdRecordStop_Request				(void);
static u8 Proc_CmdPlaySearch_Request				(void);
static u8 Proc_CmdPlayStart_Request					(void);
static u8 Proc_CmdPlayStop_Request					(void);
static u8 Proc_CmdPlayPause_Request					(void);
static u8 Proc_CmdPlayFastForward_Request		    (void);
static u8 Proc_CmdPlayRewind_Request				(void);
static u8 Proc_CmdRez0								(void);
static u8 Proc_CmdGetState_Request					(void);
static u8 Proc_CmdSetChannel_Request				(void);
static u8 Proc_CmdGetNetConfigRequest			    (void);
static u8 Proc_CmdSetVideoResolution_Request		(void);
static u8 Proc_CmdSetAudioTransfer_Request			(void);
static u8 Proc_CmdEnableRateControl_Request			(void);
static u8 Proc_CmdSetThreshold_Request				(void);
static u8 Proc_CmdSetDefaultFrameRate_Request	    (void);
static u8 Proc_CmdSetFrameRateConfig_Request		(void);
static u8 Proc_CmdSetQ_Level_Request				(void);
static u8 Proc_CmdPoll_Request						(void);
static u8 Proc_CmdGetMdInfo_Request					(void);
static u8 Proc_CmdSetMdInfo_Request					(void);

          
static u8 Svr_CmdClose_Request(void);
static u8 Svr_CmdNotifyState(void);
static void rdcp_close_all(u8 option);
static void _fill_state(u8* txpkt, u16* txlen);

/*
###############################################################################
Static global variables
###############################################################################
*/
u8 (*rdcp_client_funcs[RDCP_CLIENT_CODES])(void) = {
	
     Proc_Open_Request						// 00
    ,Proc_Close_Request						// 01
    ,Proc_Get_Info_Request					// 02
    ,Proc_CmdSetRecordMode_Request			// 03	
    ,Proc_CmdSetInputCamera_Request			// 04	
    ,Proc_CmdSetRecordCamera_Request		// 05		
    ,Proc_CmdSetVideoQuality_Request		// 06		
    ,Proc_CmdSetRecordFrameRate_Request		// 07	
    ,Proc_CmdSetAlarmOnDuration_Request		// 08
    ,Proc_CmdSetAlarmRecordDuration_Request	// 09
    ,Proc_CmdSetAudio_Request				// 0A			
    ,Proc_CmdGetSchedule_Request			// 0B				
    ,Proc_CmdSetSchedule_Request			// 0C		
    ,Proc_CmdGetTime_Request				// 0D				
    ,Proc_CmdSetTime_Request				// 0E
    ,Proc_CmdFormatHdd_Request				// 0F	
    ,Proc_CmdRecordStart_Request			// 10
    ,Proc_CmdRecordStop_Request				// 11
    ,Proc_CmdPlaySearch_Request				// 12
    ,Proc_CmdPlayStart_Request				// 13
    ,Proc_CmdPlayStop_Request				// 14
    ,Proc_CmdPlayPause_Request				// 15
    ,Proc_CmdPlayFastForward_Request		// 16
    ,Proc_CmdPlayRewind_Request				// 17
    ,Proc_CmdRez0							// 18								
    ,Proc_CmdGetState_Request				// 19	
    ,Proc_CmdSetChannel_Request				// 1A			
    ,Proc_CmdGetNetConfigRequest			// 1B
    ,Proc_CmdSetVideoResolution_Request		// 1C
	,Proc_CmdSetAudioTransfer_Request		// 1D
    ,Proc_CmdEnableRateControl_Request		// 1E
    ,Proc_CmdSetThreshold_Request			// 1F
    ,Proc_CmdSetDefaultFrameRate_Request	// 20	
    ,Proc_CmdSetFrameRateConfig_Request		// 21
    ,Proc_CmdSetQ_Level_Request				// 22
    ,Proc_CmdPoll_Request					// 23	
    ,Proc_CmdGetMdInfo_Request				// 24	
    ,Proc_CmdSetMdInfo_Request				// 25	
};

xdata u8 gv_rdcp_FW_stat = FWST_VOID;	// Firmware State
xdata u8 gv_reason_code = 0x00;
xdata u8 gv_rdcp_session_open = FALSE;
xdata u8 gv_rdcp_stime[6];
xdata u8 gv_rdcp_target_time = FALSE;
xdata u8 gv_rdcp_hdd_time_for_play = FALSE;
xdata u8 gv_rdcp_poll_live = 0;
xdata u8 gv_rdcp_rec_stop_request = 0;
xdata u8 gv_rdcp_play_job_req = 0;
xdata u8 gv_rdcp_play_job = 0;
xdata u8 gv_rdcp_changed_vfr = 0;
#ifdef DEBUG_RDCP
xdata u8* gv_rdcp_stat_msg[8] = { "VIEW", "PLAY", "PAUSE", "FastF", "REC_TIME", "REC_NO", "REC_S_ON", "REC_S_OFF" };
#endif
extern xdata u8 gv_soft_key;
extern xdata u8 gv_soft_key_flag;



//###############################################################################
// Process RDCP rx packet from client (PC)
// rx packet buffer is gv_rxbuf and size is in gv_rxlen
// tx packet buffer is gv_txbuf and size is in gv_txlen
//###############################################################################
void RDCP_process(void)
{
	u8 func_id, ret;
	u8 i,first_pkt_len, rest_pkt_len;

	NEXT_PACKET:

	gv_rdcp_poll_live = 0;
	
	//////////////////////////////////////////////////////////////////
	// check rx packet integrity
	if(gv_rxlen<HDSZ)
	{ 
#ifdef DEBUG_RDCP
		printf("\n\rPacket size is too small: sz=%d", (int)gv_rxlen);
#endif
		return;
	}
	
	if(gv_rxbuf[FIELD_PID]!=PID_N) // min pkt len is HDSZ and first byte is allways PID_N	
	{
#ifdef DEBUG_RDCP
		printf("\n\rInvalid protocol ID: %02x", (u16)gv_rxbuf[FIELD_PID]);
#endif
		return;
	}
	
#ifdef DEBUG_RDCP_RX
	printf("\r\n*RDCP_process; code: 0x%02X",(u16)gv_rxbuf[FIELD_CMD]);
#endif

	//////////////////////////////////////////////////////////////////
	// find command id
	func_id = gv_rxbuf[FIELD_CMD];

	//////////////////////////////////////////////////////////////////
	// check the command id range
	if( func_id >= RDCP_CLIENT_CODES ){
#ifdef DEBUG_RDCP
		printf("\n\rErr:CntlCode=0x%2x", (u16)func_id);
#endif
		return;
	}

	if((!gv_rdcp_session_open) && (func_id!=Client_Open_Request)){	// session was not open
		gv_reason_code = RDCP_ERR_NOT_ALLOWED;
		goto ErrCondition;
	}

	//////////////////////////////////////////////////////////////////
	// check we can execute received command in correct state
	switch(gv_rdcp_FW_stat){
		
		case FWST_VIEW:
			if((func_id == Client_CmdRecordStop_Request) ||
			   (func_id == Client_CmdPlayStop_Request) ||
			   (func_id == Client_CmdPlayFastForward_Request) ||
			   (func_id == Client_CmdPlayRewind_Request) ||
			   (func_id == Client_CmdPlayPause_Request) 
			  )
			{ // Invalid State
				gv_reason_code = RDCP_ERR_INVALID_STATE;
				goto ErrCondition;
			}
			break;
			
		case FWST_PLAY:
		case FWST_PAUSE:
		case FWST_FF:
			if(((func_id >  Client_Get_Info_Request)    && (func_id <  Client_CmdGetSchedule_Request)) ||
			   ((func_id >= Client_CmdSetTime_Request)  && (func_id <= Client_CmdPlaySearch_Request)) ||
			    (func_id == Client_CmdGetMdInfo_Request) ||

⌨️ 快捷键说明

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