📄 ecm.c.bak
字号:
/*-------------------------------------------------------------------------------------*/
/*ecm.c */
/*-------------------------------------------------------------------------------------*/
#include "psos.h"
#include "pna.h"
#include "caproc.h"
#include "repid.h"
#include "constant.h"
#define ECMG_NOERROR 0
#define ECMG_SOCKETERROR 1
#define ECMG_TIMEOUTERROR 2
extern CA_CONFIG g_ca_config;
extern unsigned long ulMultEMM;
/*char ecmgsendbuf[CA_MAX_BUFFER_LENGTH];*/
/*char ecmgrecvbuf[CA_MAX_BUFFER_LENGTH];*/
int g_ecmg_use_masterslave[3];
int g_ecmg_connected[3];
CA_ECM_DATA g_ecm_data[3];
CA_ECMG_CHANNEL_STATUS g_ecmg_channel_status[3];
CA_ECMG_STREAM_STATUS_LIST g_ecmg_stream_status_list[3];
int g_ecm_index;
unsigned char g_CW_List[32*8],g_CW_List_Backup[32*8],g_CW_List_Backup2[32*8];
unsigned char g_wanted_cp_number[3],g_current_cp_number =0;
unsigned short g_ecmg_waitcommand[3];
int g_first_CW = 0;
extern int g_IsResetStatue;
unsigned char g_CurrentSaveCpNum;
extern int g_has_valid_ca_config;
extern int g_has_valid_ca1_config;
extern int g_has_valid_ca2_config;
/*发送通道状态作为测试应答*/
int ecmgSendChannelStatus(int socket,unsigned char ucCACount)
{
CA_MESSAGE_HEAD *pHead;
CA_MESSAGE_ITEM_HEAD *pItemHead;
int MsgLen=0;
int i;
int rc;
char EcmgSendBuf[CA_MAX_BUFFER_LENGTH];
pHead=(CA_MESSAGE_HEAD *)EcmgSendBuf;
pHead->protocol_version=0x02;
pHead->message_type =ECMG2SCS_CHANNEL_STATUS;
pHead->message_length =0;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));
pItemHead->parameter_type=ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].ECM_channel_ID;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_section_TSpkt_flag;
pItemHead->parameter_length=1;
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].section_TSpkt_flag;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_delay_start;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].delay_start;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_delay_stop;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].delay_stop;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_ECM_rep_period;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].ECM_rep_period;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_max_streams;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].max_streams;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_min_CP_duration;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].min_cp_duration;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_lead_CW;
pItemHead->parameter_length=1;
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].lead_CW;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_CW_per_msg;
pItemHead->parameter_length=1;
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].CW_per_msg;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_max_comp_time;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_channel_status[ucCACount].max_comp_time;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
MsgLen=pHead->message_length + sizeof(CA_MESSAGE_HEAD);
rc=ca_send(socket,EcmgSendBuf,MsgLen,g_ca_config.Para_Config[ucCACount].Network_Delay);
if(rc!=MsgLen)
return -1;
else
{
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a channel status message,channelid=%d",g_ecmg_channel_status[ucCACount].ECM_channel_ID);
return rc;
}
}
/*发送流状态应答*/
int ecmgSendStreamStatus(int socket,unsigned short streamid,unsigned char ucCACount)
{
CA_MESSAGE_HEAD *pHead;
CA_MESSAGE_ITEM_HEAD *pItemHead;
int MsgLen=0;
int i;
int rc;
char EcmgSendBuf[CA_MAX_BUFFER_LENGTH];
for(i=0;i<g_ecmg_stream_status_list[ucCACount].streamcount;i++)
{
if(g_ecmg_stream_status_list[ucCACount].streamlist[i].ECM_stream_ID==streamid)
break;
}
pHead=(CA_MESSAGE_HEAD *)EcmgSendBuf;
pHead->protocol_version=0x02;
pHead->message_type =ECMG2SCS_STREAM_STATUS;
pHead->message_length =0;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));
pItemHead->parameter_type=ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_stream_status_list[ucCACount].streamlist[i].ECM_channel_ID;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_ECM_stream_ID;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_stream_status_list[ucCACount].streamlist[i].ECM_stream_ID;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
pItemHead->parameter_type=ECMG2SCS_access_criteria_transfer_mode;
pItemHead->parameter_length=1;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ecmg_stream_status_list[ucCACount].streamlist[i].access_criteria_transfer_mode;
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
MsgLen=pHead->message_length + sizeof(CA_MESSAGE_HEAD);
rc=ca_send(socket,EcmgSendBuf,MsgLen,g_ca_config.Para_Config[ucCACount].Network_Delay);
if(rc!=MsgLen)
return -1;
else
{
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a stream status message,streamid=%d.",streamid);
return rc;
}
}
/*发送信息到ECMG*/
int ecmgSend(int socket,unsigned short cmd,unsigned long para,unsigned char ucCACount)
{
CA_MESSAGE_HEAD *pHead;
CA_MESSAGE_ITEM_HEAD *pItemHead;
int MsgLen=0;
int i;
int rc;
int acindex;
unsigned char ch1,ch2;
char EcmgSendBuf[CA_MAX_BUFFER_LENGTH];
CA_PARA_CONFIG* Para_Config;
CA_ECMG_STREAM_STATUS_LIST* Status_List;
Para_Config = &g_ca_config.Para_Config[ucCACount];
Status_List = &g_ecmg_stream_status_list[ucCACount];
pHead=(CA_MESSAGE_HEAD *)EcmgSendBuf;
pHead->protocol_version=0x02;
pHead->message_type =cmd;
pHead->message_length =0;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));
switch(cmd)
{
case ECMG2SCS_CHANNEL_TEST:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Para_Config->ECM_channel_id;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
g_ecmg_channel_status[ucCACount].waitresponse=1;
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a channel setup message,channelid=%d.",Para_Config->ECM_channel_id);
break;
case ECMG2SCS_CHANNEL_SET_UP:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Para_Config->ECM_channel_id;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type = ECMG2SCS_Super_CAS_ID;
pItemHead->parameter_length = 4;
*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=(unsigned long)((unsigned long)(Para_Config->CA_system_id<<16) + Para_Config->CA_subsystem_id);
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 4;
g_ecmg_channel_status[ucCACount].waitresponse=1;
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a channel setup message,channelid=%d.",Para_Config->ECM_channel_id);
break;
/*关闭通道请求*/
case ECMG2SCS_CHANNEL_CLOSE:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Para_Config->ECM_channel_id;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a channel close message,channelid=%d.",Para_Config->ECM_channel_id);
break;
/*建立流请求*/
case ECMG2SCS_STREAM_SET_UP:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_channel_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_ECM_stream_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_stream_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
/*----------------------------------------------------------*/
/* added 2003-4-18 */
/*----------------------------------------------------------*/
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_ECM_id;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_stream_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
/*----------------------------------------------------------*/
/* added 2003-4-18 */
/*----------------------------------------------------------*/
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_nominal_CP_duration;
pItemHead->parameter_length =2;
/*----------------------------------------------------------------------------------------------------------*/
/**(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ca_config.Para_Config.CP_Duration;*/
/* updated by johnnyling 2004-02-16 */
/*----------------------------------------------------------------------------------------------------------*/
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Para_Config->CP_Duration*10;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
Status_List->streamlist[para].waitresponse=1;
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a stream setup message,streamid=%d.",Status_List->streamlist[para].ECM_stream_ID);
break;
/*关闭流请求*/
case ECMG2SCS_STREAM_CLOSE_REQUEST:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_channel_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_ECM_stream_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_stream_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
caSendLog(LOGTYPE_NORMAL,"ecmg: Send a stream close request message,streamid=%d.",Status_List->streamlist[para].ECM_stream_ID);
break;
/*发送CW控制制字*/
case ECMG2SCS_CW_PROVISION:
pItemHead->parameter_type =ECMG2SCS_ECM_channel_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Para_Config->ECM_channel_id;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_ECM_stream_ID;
pItemHead->parameter_length =2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=Status_List->streamlist[para].ECM_stream_ID;
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
pItemHead->parameter_type =ECMG2SCS_CP_number;
pItemHead->parameter_length =2;
#if 1 /*modify by fpx 20060526*/
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number -1;
#else
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number -3;
#endif
/* *(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_wanted_cp_number[ucCACount] -1; */
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 2;
/* g_CurrentSaveCpNum = g_wanted_cp_number[ucCACount];
g_IsResetStatue = 0;*/
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2);
acindex=Status_List->streamlist[para].ECM_stream_ID;
if((g_ecmg_channel_status[ucCACount].lead_CW==0)&&(g_ecmg_channel_status[ucCACount].CW_per_msg==1))
{/*一次发一个CW控制字*/
pItemHead->parameter_type =ECMG2SCS_CP_CW_Combination;
pItemHead->parameter_length=10;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number-3;
for(i=0;i<8;i++)
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2 + i)=g_CW_List_Backup2[para*8 + i];
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 10;
}
else if((g_ecmg_channel_status[ucCACount].lead_CW==1)&&(g_ecmg_channel_status[ucCACount].CW_per_msg==2))
{/*当前和下一个CW*/
pItemHead->parameter_type =ECMG2SCS_CP_CW_Combination;
pItemHead->parameter_length=10;
#if 1 /*modify by fpx 20060526*/
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number-1;
#else
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number-3;
#endif
for(i=0;i<8;i++)
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2 + i)=g_CW_List_Backup[acindex*8 + i];
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 10;
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 10);
pItemHead->parameter_type =ECMG2SCS_CP_CW_Combination;
pItemHead->parameter_length=10;
#if 1 /*modify by fpx 20060526*/
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number;
#else
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_current_cp_number-2;
#endif
for(i=0;i<8;i++)
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + 2 + i)=g_CW_List[acindex*8 + i];
pHead->message_length+=sizeof(CA_MESSAGE_ITEM_HEAD) + 10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -