📄 c_manage.c
字号:
unsigned char xdata temp,i;
temp = ask_private(user_num);
if(temp != IDLE)//在线找到合意的聊友
{
i = assign_private_num(temp);//分配聊天室中用户的号码
chat_private_resource[temp].user_num[i] = user_num;//置此聊天号对应的用户
user_e1[user_num].user_num = i;//置此用户在聊天室中对应的号码
user_e1[user_num].chat_num = temp;//置此用户对应的聊天室号
chat_private_resource[temp].user_count++;//此聊天室人数加1
//往后台回应用户状态
command(7,1,user_e1[user_num].user_sex,user_e1[user_num].user_age,user_e1[user_num].opp_sex,user_e1[user_num].opp_age,0,temp,user_e1[user_num].telephone[0],user_e1[user_num].telephone[1],user_e1[user_num].telephone[2],user_e1[user_num].telephone[3],user_e1[user_num].telephone[4],user_e1[user_num].telephone[5],IDLE,IDLE);
return(temp);
}
else//在线没有合意的聊友
{
return(chat_private_req(user_num));
}
}
chat_private_release(unsigned char chat_num)//释放私人聊天室资源
{
unsigned char temp;
chat_private_count++;
//往后台回应聊天室状态
command(6,1,1,chat_num,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
chat_private_resource[chat_num].flag = LEISURE;
chat_private_resource[chat_num].user_count = 0;
for(temp = 0;temp < 2;temp++)
{
chat_private_resource[chat_num].user_num[temp] = IDLE;
}
}
reduce_user_private(unsigned char chat_num,unsigned char user_num)//用户从此聊天室中退出
{
//往后台回应用户状态
command(7,1,user_e1[user_num].user_sex,user_e1[user_num].user_age,user_e1[user_num].opp_sex,user_e1[user_num].opp_age,1,chat_num,user_e1[user_num].telephone[0],user_e1[user_num].telephone[1],user_e1[user_num].telephone[2],user_e1[user_num].telephone[3],user_e1[user_num].telephone[4],user_e1[user_num].telephone[5],IDLE,IDLE);
if(chat_private_resource[chat_num].user_count < 2)//此聊天室此刻是否只剩一人
{
chat_private_release(chat_num);//是则释放此聊天室资源
}
else//不止一人
{
chat_private_resource[chat_num].user_num[user_e1[user_num].user_num] = IDLE;//将此用户从此聊天室中删除
chat_private_resource[chat_num].user_count--;//聊天室人数减1
}
}
unsigned char add_user(unsigned char user_num,unsigned char password[6],unsigned char chat_type)//公共聊天室加入会员
{
unsigned char xdata temp;
if(chat_type < 9)
{
temp = add_user_common(user_num,password,chat_type);
}
else
{
temp = add_user_private(user_num);
}
return(temp);
}
reduce_user(unsigned char chat_num,unsigned char user_num)//用户从此聊天室中退出
{
if(chat_num < 0x80)
{
reduce_user_private(chat_num,user_num);
}
else
{
chat_num = chat_num - 0x80;
reduce_user_common(chat_num,user_num);
}
}
unsigned ask_online_private(unsigned char chat_type,unsigned char user_num)//在线私聊寻找
{
unsigned char xdata temp;
for(temp = 0;temp < TRK_MAX;temp++)
{
if(temp != user_num)
{
if(user_e1[temp].first_select == 0x80)
{
if(user_e1[temp].chat_type != 0x80)
{
return(temp);
}
}
}
}
return(IDLE);
}
unsigned char ask_online_common(unsigned char user_num,unsigned char password[6],unsigned char chat_type)//在线公聊寻找
{
unsigned char xdata temp,i;
if(chat_type == 8)
{
for(temp = 0;temp < TRK_MAX;temp++)
{
if(temp != IDLE)
{
if(user_e1[temp].first_select == chat_type)
{
if(user_e1[temp].chat_type != chat_type)
{
for(i = 0;i< 6;i++)
{
if(user_e1[user_num].password[i] != user_e1[temp].password[i])
{
return(IDLE);
}
}
return(temp);
}
}
}
}
}
else
{
for(temp = 0;temp < TRK_MAX;temp++)
{
if(temp != user_num)
{
if(user_e1[temp].first_select == chat_type)
{
if(user_e1[temp].chat_type != chat_type)
{
return(temp);
}
}
}
}
}
return(IDLE);
}
unsigned char ask_online(unsigned char user_num,unsigned char password[6],unsigned char chat_type)//寻找在线的聊友(第一选择没人而转到其他聊天室的人)
{
unsigned char xdata temp;
if(chat_type < 9)
{
temp = ask_online_common(user_num,password,chat_type);
}
else
{
temp = ask_online_private(chat_type,user_num);
}
return(temp);
}
unsigned char search_user_common(unsigned char chat_num,unsigned char user_num)//公共聊天室寻找
{
unsigned char xdata i;
for(i = 0;i < 16;i++)
{
if(chat_common_resource[chat_num].user_num[i] != IDLE)
{
if(chat_common_resource[chat_num].user_num[i] != user_num)
{
return(chat_common_resource[chat_num].user_num[i]);
}
}
}
return(IDLE);
}
unsigned char search_user_private(unsigned char chat_num,unsigned char user_num)//私人聊天室寻找
{
unsigned char xdata i;
for(i = 0;i < 2;i++)
{
if(chat_private_resource[chat_num].user_num[i] != IDLE)
{
if(chat_private_resource[chat_num].user_num[i] != user_num)
{
return(chat_private_resource[chat_num].user_num[i]);
}
}
}
return(IDLE);
}
unsigned char search_user(unsigned char chat_num,unsigned char user_num)//寻找某聊天室剩下的最后一人
{
unsigned char xdata temp;
if(chat_num > 0x7f)
{
temp = search_user_common(chat_num - 0x80,user_num);
}
else
{
temp = search_user_private(chat_num,user_num);
}
return(temp);
}
void clear_DS21554(void)//DS21554寄存器清零
{
unsigned char xdata i,j;
for(i = 0;i < 0xc0;i++)
{
for(j = 0;j < 4;j++)
{
XBYTE[DS21554_ADDR[j] + i] = 0;
}
}
}
init_DS21554()//初始化DS21554
{
unsigned char xdata i,j;
for(j = 0;j < 4;j++)
{
XBYTE[DS21554_ADDR[j] + RCR1] = 0x60;
XBYTE[DS21554_ADDR[j] + RCR2] = 0xfe;
XBYTE[DS21554_ADDR[j] + TCR1] = 0x2b;
XBYTE[DS21554_ADDR[j] + TCR2] = 0xf8;
XBYTE[DS21554_ADDR[j] + CCR1] = 0x44;
XBYTE[DS21554_ADDR[j] + LICR] = 0x04;
XBYTE[DS21554_ADDR[j] + TEST3] = 0x10;
XBYTE[DS21554_ADDR[j] + CCR2] = 0;
XBYTE[DS21554_ADDR[j] + CCR3] = 0xc2;
XBYTE[DS21554_ADDR[j] + TCBR1] = IDLE;
XBYTE[DS21554_ADDR[j] + TCBR2] = IDLE;
XBYTE[DS21554_ADDR[j] + TCBR3] = IDLE;
XBYTE[DS21554_ADDR[j] + TCBR4] = IDLE;
XBYTE[DS21554_ADDR[j] + TAF] = 0x9b;
XBYTE[DS21554_ADDR[j] + TNAF] = 0xdf;
XBYTE[DS21554_ADDR[j] + TS1] = 0x0b;
for(i = 1;i < 16;i++)
{
XBYTE[DS21554_ADDR[j] + TS1 + i] = 0xbb;
}
}
delay_time(200);
for(j = 0;j < 4;j++)
{
XBYTE[DS21554_ADDR[j] + RCR1] = 0x61;
XBYTE[DS21554_ADDR[j] + CCR5] = 0xf0;
XBYTE[DS21554_ADDR[j] + CCR6] = 0x03;
}
}
user_release(unsigned char user_num)//数字中继用户释放
{
unsigned char xdata temp;
user_e1[user_num].mfc = IDLE;
user_e1[user_num].dtmf = IDLE;
user_e1[user_num].opp_num = IDLE;
user_e1[user_num].wait = 0;
user_e1[user_num].false = 0;
user_e1[user_num].backward_signal = RSD_IDLE;//闭塞、主叫挂机
user_e1[user_num].forward_signal = 0xbb;
user_e1[user_num].flag = LEISURE;
user_e1[user_num].back_flag = 0;
user_e1[user_num].user_age = IDLE;
user_e1[user_num].opp_age = IDLE;
user_e1[user_num].user_sex = MAN;
user_e1[user_num].opp_sex = WOMAN;
for(temp = 0;temp < 32;temp++)
{
user_e1[user_num].telephone[temp] = IDLE;
}
for(temp = 0;temp < 6;temp++)
{
user_e1[user_num].password[temp] = IDLE;
user_e1[user_num].number_chat[temp] = IDLE;
}
user_e1[user_num].first_select = IDLE;
user_e1[user_num].user_index = 0;
user_e1[user_num].a6_flag = 0;
user_e1[user_num].kd = 0;
user_e1[user_num].lc_state = 0;
user_e1[user_num].mfc_state = IDLE;
user_e1[user_num].user_state = IDLE;
user_e1[user_num].sub_status = IDLE;
user_e1[user_num].mfc_count = 0;
user_e1[user_num].delay = 0;
user_e1[user_num].chat_num = IDLE;
user_e1[user_num].chat_type = IDLE;
user_e1[user_num].user_mix = IDLE;
user_e1[user_num].user_num = IDLE;
user_e1[user_num].yukong_num = IDLE;
}
mfc_init()//MFC变量初始化
{
unsigned char i,j;
mfc_count = 2;
mfc_test_num = IDLE;
for(i = 0;i < 2;i++)
{
chat_mfc_resource[i].flag = LEISURE;
for(j = 0;j < 2;j++)
{
chat_mfc_resource[i].buf[j] = IDLE;
}
chat_mfc_resource[i].buf_p = 0;
chat_mfc_resource[i].addr = MFC_READ_ADDR + i;
chat_mfc_resource[i].slot = 0xc0 + i * 2;
chat_mfc_resource[i].delay = 0;
chat_mfc_resource[i].user = IDLE;
}
}
i_mfc()//MFC通道初始化
{
unsigned char temp;
temp = 1;
while(temp)
{
if(((MFC_W_R >> 4) & 0x01) != 0x01)
{
XBYTE[chat_mfc_resource[0].addr] = 0x31;
temp = 0;
}
}
temp = 1;
while(temp)
{
if(((MFC_W_R >> 4) & 0x01) != 0x01)
{
XBYTE[chat_mfc_resource[0].addr] = 0x60;
temp = 0;
}
}
temp = 1;
while(temp)
{
if(((MFC_W_R >> 5) & 0x01) != 0x01)
{
temp = XBYTE[chat_mfc_resource[0].addr];
temp = 0;
}
}
temp = 1;
while(temp)
{
if(((MFC_W_R >> 6) & 0x01) != 0x01)
{
XBYTE[chat_mfc_resource[0].addr] = 0x30;
temp = 0;
}
}
temp = 1;
while(temp)
{
if(((MFC_W_R >> 6) & 0x01) != 0x01)
{
XBYTE[chat_mfc_resource[0].addr] = 0x61;
temp = 0;
}
}
temp = 1;
while(temp)
{
if(((MFC_W_R >> 7) & 0x01) != 0x01)
{
temp = XBYTE[chat_mfc_resource[0].addr];
temp = 0;
}
}
}
unsigned char mfc_req(unsigned char trk_num,unsigned char send_type)//请求MFC通道
{
unsigned char xdata i,j,temp;
if(send_type == CALL_OUT)//呼出,考虑到只有两路资源,只有在两路都空闲时才能呼出
{
if(mfc_count != 2 )//两路都空闲
{
return(IDLE);
}
else
{
for(i = 0; i < 2; i++)
{
if(chat_mfc_resource[i].flag == LEISURE)//本路空闲
{
mfc_count--;
command(8,0,mfc_count,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
chat_mfc_resource[i].flag = OCCUPY;//置占用标志
for(j = 0;j < 2;j++)
{
chat_mfc_resource[i].buf[j] = IDLE;
}
chat_mfc_resource[i].buf_p = 0;
chat_mfc_resource[i].user = trk_num;
user_e1[trk_num].mfc = i;//置数字中继用户对应的MFC通道号
temp = 1;
while(temp)
{
if(((MFC_W_R >> (2 * i + 4)) & 0x01) != 0x01)
{
XBYTE[chat_mfc_resource[i].addr] = 0x3d;//设置为发前项,收后项
temp = 0;
}
}
connect(trk_num,chat_mfc_resource[i].slot);//连接相应时隙
connect(chat_mfc_resource[i].slot,trk_num);//连接相应时隙
return(i);
}
}
}
}
else//呼入
{
if(mfc_count == 0)//没有空闲资源
{
return(IDLE);
}
else//至少还有一路
{
for(i = 0; i < 2; i++)
{
if(chat_mfc_resource[i].flag == LEISURE)//本路空闲
{
mfc_count--;//剩余通道数减1
command(8,0,mfc_count,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
chat_mfc_resource[i].flag = OCCUPY;//置占用标志
for(j = 0;j < 2;j++)
{
chat_mfc_resource[i].buf[j] = IDLE;
}
chat_mfc_resource[i].buf_p = 0;
chat_mfc_resource[i].user = trk_num;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -