📄 ecm.c
字号:
g_ecmg_use_masterslave[1]=2;
Display("ecmg1: Connect slave ecmg server OK!\r\n");
}
}
else
{
g_ecmg_use_masterslave[1] = 1;
Display("ecmg1: Connect master ecmg server OK!");
}
g_ecmg_connected[1]=1;
/*----------------------------------------------------------------------------------*/
/*connect OK */
/*----------------------------------------------------------------------------------*/
for(;;)
{
tm_set(0,0,0);
g_ecmg_waitcommand[1]=ECMG2SCS_CHANNEL_STATUS;
/*发送通道建立请求*/
rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CHANNEL_SET_UP,0,1);
if(rc<0)
{
Display("ecmg1: Send channel setup message socket error!\r\n");
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
else if(rc==0)
{
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
Display("ecmg1: Send channel setup message time out!\r\n",errno);
break;
}
Display("ecmg1: send channel setup message ok!\r\n");
haserr=ECMG_NOERROR;
/*获得当前时间*/
tm_get(&olddate,&oldtime,&oldtick);
while(1)
{
/*接收通道状态应答*/
rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
if(rc<0) /* socket error */
{
haserr=ECMG_SOCKETERROR;
break;
}
else if(rc==1) /* got the waiting message */
break;
tm_get(&date,&time,&tick);
/*两次比较是否超时*/
if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
{
haserr=ECMG_TIMEOUTERROR;
break;
}
my_Delay(10);
}
if(haserr==ECMG_SOCKETERROR)
{
Display("ecmg1: Receive channel status message socket error! \r\n");
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
else if(haserr==ECMG_TIMEOUTERROR)
{
close(g_socket_ecmg1);
g_ecmg_connected[1] = 0;
Display("ecmg1: Receive channel status message out of time!\r\n");
break;
}
Display("ecmg1: recevie channel status message ok!\r\n");
/*----------------------------------------------------------------------------------*/
/* setup all the stream */
/*----------------------------------------------------------------------------------*/
haserr=ECMG_NOERROR;
g_ecmg_waitcommand[1]=ECMG2SCS_STREAM_STATUS;
for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
{/*根据列表信息建立多个流,最大为32*/
/*发送建立流请求*/
rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_STREAM_SET_UP,i,1);
if(rc<0)
{
haserr=ECMG_SOCKETERROR;
break;
}
else if(rc==0)
{
haserr=ECMG_TIMEOUTERROR;
break;
}
}
if(haserr==ECMG_SOCKETERROR)
{
Display("ecmg1: Send stream setup message socket error!\r\n");
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
else if(haserr==ECMG_TIMEOUTERROR)
{
/*延时,将所有流关闭*/
ecmg_close_all(g_socket_ecmg1,2);
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
Display("ecmg1: Send stream setup message out of time!\r\n");
break;
}
Display("ecmg1: Send stream setup message ok!\r\n");
/*----------------------------------------------------------------------------------*/
/* wait for all the stream status message */
/*----------------------------------------------------------------------------------*/
haserr=ECMG_NOERROR;
tm_get(&olddate,&oldtime,&oldtick);
while(1)
{
/*接收流状态应答*/
rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_STREAM_STATUS,0,1);
if(rc<0) /* socket error */
{
haserr=ECMG_SOCKETERROR;
break;
}
else if(rc==1) /* got the waiting message */
break;
tm_get(&date,&time,&tick);
if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
{
haserr=ECMG_TIMEOUTERROR;
break;
}
my_Delay(10);
}
if(haserr==ECMG_SOCKETERROR)
{
Display("ecmg1: Receive stream status message socket error! \r\n");
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1] = 0;
break;
}
else if(haserr==ECMG_TIMEOUTERROR)
{
ecmg_close_all(g_socket_ecmg1,2);
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1]=0;
Display("ecmg1: Receive stream status message out of time! \r\n");
break;
}
Display("ecmg1: Receive stream status message ok!\r\n");
/* if(g_IsResetStatue)
g_wanted_cp_number[1]=g_current_cp_number+1;
else
g_wanted_cp_number[1] = g_CurrentSaveCpNum;
*/
g_ecm_data[1].ecmsendflag=0;
g_ecmg_waitcommand[1]=0;
/* ca_CW_int_Handle(); */
tm_get(&lastdate,&lasttime,&lasttic);
for(;;)
{
/*------------------------------------------------------------------------------*/
/* wait message from interrupt */
/*------------------------------------------------------------------------------*/
/*等待接收中断事件*/
if(ReceiveQueue("QSEC",Q_WAIT,KC_TICKS2SEC,Msg)==ERR_TIMEOUT)
{
waitTime+=1;
if((bSendChannelTest==0)&&(waitTime>20))
{
waitTime=0;
rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CHANNEL_TEST,0,1);
if(rc<=0)
{
ca_Clear_simucrypt_map();
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
bSendChannelTest=1;
}
if(bSendChannelTest==1)
{
rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
if(rc<0) /* socket error */
{
ca_Clear_simucrypt_map();
bSendChannelTest=0;
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
else if(rc==1) /* got the waiting message */
{
waitTime=0;
bSendChannelTest=0;
continue;
}
if(waitTime>6)
{
ca_Clear_simucrypt_map();
bSendChannelTest=0;
close(g_socket_ecmg1);
g_ecmg_connected[1]=0;
break;
}
}
else
{
ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
}
continue;
}
waitTime=0;
bSendChannelTest=0;
if(g_ecmg_connected[1]==0)
{
break;
}
if(Msg[0] == 2)
{/*请求断开连接*/
close(g_socket_ecmg1);
g_socket_ecmg1 = 0;
ca_Clear_simucrypt_map();
break;
}
/*------------------------------------------------------------------------------*/
/* send all the cw to ecmg */
/*------------------------------------------------------------------------------*/
haserr=ECMG_NOERROR;
g_ecmg_waitcommand[1] = ECMG2SCS_ECM_RESPONSE;
for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
{
/*发送CW信息*/
rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CW_PROVISION,i,1);
if(rc<0)
{
haserr=ECMG_SOCKETERROR;
break;
}
else if(rc==0)
{
haserr=ECMG_TIMEOUTERROR;
break;
}
my_Delay(10);
}
if(haserr==ECMG_SOCKETERROR)
{
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1] = 0;
ca_Clear_simucrypt_map();
break;
}
else if(haserr==ECMG_TIMEOUTERROR)
{
ecmg_close_all(g_socket_ecmg1,2);
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1]=0;
ca_Clear_simucrypt_map();
Display("ecmg1: Send CW provision message out of time!\r\n");
break;
}
haserr=ECMG_NOERROR;
tm_get(&olddate,&oldtime,&oldtick);
for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
{
/*等待接收ECM应答*/
rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_ECM_RESPONSE,0,1);
if(rc<0) /* socket error */
{
haserr=ECMG_SOCKETERROR;
break;
}
tm_get(&date,&time,&tick);
if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
{
haserr=ECMG_TIMEOUTERROR;
close(g_socket_ecmg1);
g_socket_ecmg1=0;
ca_Clear_simucrypt_map();
break;
}
my_Delay(10);
}
if(haserr!=ECMG_NOERROR)
{
break;
}
g_ecm_data[1].pqflag=!g_ecm_data[1].pqflag;
/* g_wanted_cp_number[1]++;
if(g_wanted_cp_number[1] >= 255)
g_wanted_cp_number[1] = 0; */
g_ecmg_waitcommand[1]=0;
g_ecm_data[1].ecmsendflag=1;
}
if(haserr==ECMG_SOCKETERROR)
{
Display("ecmg1: Receive ecm response message socket error! \r\n");
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1]=0;
ca_Clear_simucrypt_map();
break;
}
else if(haserr==ECMG_TIMEOUTERROR)
{
ecmg_close_all(g_socket_ecmg1,2);
close(g_socket_ecmg1);
g_socket_ecmg1=0;
g_ecmg_connected[1]=0;
ca_Clear_simucrypt_map();
Display("ecmg1: Receive ecm response message out of time! \r\n");
break;
}
if(dif_second(curdate,curtime,lastdate,lasttime) >= ( 60*120))
{
Config_Nib();
lastdate=curdate;
lasttime=curtime;
lasttic=curtic;
}
}
}
}
void tk_ecmgMgr2(void)
{
static int g_socket_ecmg2=0;
struct sockaddr_in ECMGAddr;
unsigned long RcvBufLen;
int i,rc;
int haserr;
unsigned long Msg[4];
unsigned long date,time,tick,olddate,oldtime,oldtick;
unsigned long waitTime=0;
unsigned long bSendChannelTest=0;
g_ecm_data[2].pqflag=1;
if(g_socket_ecmg2)
close(g_socket_ecmg2);
for(;;)
{
my_Delay(1000);
g_ecmg_connected[2]=0;
g_ecmg_waitcommand[2] = 1;
/*创建套接口*/
g_socket_ecmg2 = socket(AF_INET, SOCK_STREAM, TCP);
if(g_socket_ecmg2 == -1)
{
Display("ecmg2: Create socket failed! error code=0x%x.\r\n",errno);
close(0);
my_Delay(100);
continue;
}
Display("ecmg2: socket create ok!\r\n");
g_ecmg_use_masterslave[2]=0;
ECMGAddr.sin_family = AF_INET;
ECMGAddr.sin_port = htons(g_ca_config.Para_Config[2].ECMG_Master_Port);
ECMGAddr.sin_addr.s_addr = htonl(g_ca_config.Para_Config[2].ECMG_Master_IP);
for(i=0;i<8;i++)
ECMGAddr.sin_zero[i] = 0;
/*连接主ECMG*/
RcvBufLen = 16*1024;
setsockopt(g_socket_ecmg2,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);
if(conne
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -