📄 rdcp.c
字号:
/*
********************************************************************************
*
* 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 + -