?? c_trkin.c
字號:
/*******主要完成數(shù)字中繼的呼入處理和用戶選擇處理*********//* 老聊友回呼:1、修改命令字 2、兩個成員的加入私聊的問題 */
#pragma CODE DEBUG SYMBOLS OBJECTEXTEND
#include <reg51.h>
#include <absacc.h>
#include "Const.h"
#include "Extern.h"
extern unsigned char mfc_req(unsigned char trk_num,unsigned char send_type);//請求MFC通道
extern mfc_release(unsigned char mfc_num);//釋放MFC通道
extern unsigned char dtmf_req(unsigned char trk_num,unsigned char type);//請求DTMF通道
extern dtmf_release(unsigned char dtmf_num);//釋放DTMF通道
extern command(unsigned char x,unsigned char y,unsigned char z,unsigned char i,unsigned char j,unsigned char k,unsigned char l,unsigned char m,
unsigned char n,unsigned char o,unsigned char p,unsigned char q,unsigned char r,unsigned char s,unsigned char t,unsigned char u);
extern connect(unsigned char i_slot,unsigned char o_slot);//用于連接兩個時隙
extern no_sound(unsigned char para1);//無音處理
extern sig_req(unsigned char para1, unsigned char para2);//發(fā)送線路信令
extern user_release(unsigned char user_num);//釋放呼出資源
extern audio_play(unsigned char audio_num,unsigned char duan_num);//放音程序
extern audio_stop(unsigned char audio_num);//停止目前操作
extern delay_time(unsigned int subtime);//延時程序
extern unsigned char add_user(unsigned char user_num,unsigned char password[6],unsigned char chat_type);//公共聊天室加入會員
extern reduce_user(unsigned char chat_num,unsigned char user_num);//用戶從此聊天室中退出
extern unsigned char ask_online(unsigned char user_num,unsigned char password[6],unsigned char chat_type);//公共聊天室加入會員
extern unsigned search_user(unsigned char chat_num,unsigned char user_num);
extern unsigned char call_out_req(unsigned char user_num);//申請呼出資源
extern unsigned char back_search(unsigned char phone[6],unsigned char type);//判斷用戶是否為普通回呼用戶
extern unsigned char number_release(unsigned char phone[6],unsigned char type);//判斷用戶是否為老聊友回呼用戶
extern back_index(unsigned char user_num);//激活回呼用戶
extern audio_control(unsigned char yukong_num,unsigned char chat_num);//語音控制
extern yukong_release(unsigned char yukong_num);//語控資源釋放
void send_mfc_in(unsigned char mfc_num,unsigned char mfc_data)//MFC發(fā)送芯片操作 mfc_data:要發(fā)送的數(shù)據(jù) mfc_number:發(fā)送通道號
{
unsigned char xdata temp;
temp = 1;
while(temp)
{
if(((MFC_W_R >> (2 * mfc_num + 4)) & 0x01) != 0x01)//判斷此通道是否可寫
{
XBYTE[chat_mfc_resource[mfc_num].addr] = 0x3c;//設(shè)置為發(fā)后項,收前項
temp = 0;
}
}
delay_time(1000);
temp = 1;
mfc_data = (mfc_data & 0x0f);
while(temp)
{
if(((MFC_W_R >> (2 * mfc_num + 4)) & 0x01) != 0x01)//判斷此通道是否可寫
{
XBYTE[chat_mfc_resource[mfc_num].addr] = 0x80 + mfc_data;//發(fā)送要發(fā)的數(shù)據(jù)
temp = 0;
}
}
}
void error_chuli(unsigned char user_num)//輸入錯誤處理
{
audio_play(user_e1[user_num].dtmf,ERROR_DUAN);//放選擇錯誤提示音
audio_dtmf_resource[user_e1[user_num].dtmf].index = 0;//放完了,將指針置為0
audio_dtmf_resource[user_e1[user_num].dtmf].time = 0;//清空時間間隔
audio_dtmf_resource[user_e1[user_num].dtmf].count = 0;//本段音播放次數(shù)加1
}
void clr_duan(unsigned char user_num)//清空放音
{
unsigned char xdata trk_j;
for(trk_j = 0;trk_j < 8;trk_j++)//清播放音
{
audio_dtmf_resource[user_e1[user_num].dtmf].num[trk_j] = IDLE;
}
audio_dtmf_resource[user_e1[user_num].dtmf].length = 0;//清空長度
audio_dtmf_resource[user_e1[user_num].dtmf].count = 0;//清播放次數(shù)
audio_dtmf_resource[user_e1[user_num].dtmf].index = 0;//清空段索引
}
void play_one(unsigned char user_num,unsigned char duan)//播放單段音
{
audio_dtmf_resource[user_e1[user_num].dtmf].num[0] = duan;//通知聊天室中的人X號到了
audio_dtmf_resource[user_e1[user_num].dtmf].index = 0;//清空段索引
audio_dtmf_resource[user_e1[user_num].dtmf].length = 1;//置段長度
audio_play(user_e1[user_num].dtmf,audio_dtmf_resource[user_e1[user_num].dtmf].num[audio_dtmf_resource[user_e1[user_num].dtmf].index]);
//放提示音
audio_dtmf_resource[user_e1[user_num].dtmf].index++;//提示音索引號加1
}
void only_one(unsigned char user_num)//聊天室中只剩下一個人時處理
{
unsigned char xdata trk_j;
trk_j = IDLE;
if(user_e1[user_num].chat_num > 0x7f)//用戶進(jìn)入的是公共聊天室
{
if(chat_common_resource[user_e1[user_num].chat_num - 0x80].user_count == 2)//此聊天室僅剩一人
{
trk_j = search_user(user_e1[user_num].chat_num,user_num);//找到此人,問他是否想要轉(zhuǎn)到其他聊天室
}
}
else//用戶進(jìn)入的是私人聊天室
{
if(chat_private_resource[user_e1[user_num].chat_num].user_count == 2)//此聊天室僅剩一人
{
trk_j = search_user(user_e1[user_num].chat_num,user_num);//找到此人,問他是否想要轉(zhuǎn)到其他聊天室
}
}
if(trk_j != IDLE)//僅剩一人
{
if(dtmf_req(trk_j,IDLE) != IDLE)//申請DTMF資源
{
user_e1[trk_j].lc_state = WAIT_DOWN;//準(zhǔn)備接收用戶選擇
user_e1[trk_j].user_state = WAIT_COMMON;//等待用戶選擇
clr_duan(user_e1[trk_j].dtmf);
audio_dtmf_resource[user_e1[trk_j].dtmf].auto_flag = OCCUPY;//允許自動放音
play_one(trk_j,ONLY_ONE_DUAN);
connect(audio_dtmf_resource[user_e1[trk_j].dtmf].slot,trk_j);//連接相應(yīng)時隙
connect(trk_j,audio_dtmf_resource[user_e1[trk_j].dtmf].slot);//連接相應(yīng)時隙
}
}
}
void first_chuli(unsigned char user_num,unsigned char user_select,unsigned char type)//用戶第一選擇流程
{
switch(user_select)//用戶的按鍵
{
case 1://選擇進(jìn)入情感交友聊天室
{
if(type == 0)//正常的呼入擁護(hù)
{
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
clr_duan(user_num);
play_one(user_num,FEELING_DUAN);
user_e1[user_num].user_state = SELECT_TYPE;//轉(zhuǎn)到聊天室人數(shù)判斷
}
else//回呼用戶
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = COMMON_FEELING;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,FEELING_COMMON);
user_e1[user_num].chat_type = COMMON_FEELING;
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
}
}
break;
case 2://選擇進(jìn)入新聞聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = NEWS;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,NEWS_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = NEWS;//置用戶的聊天室種類
}
break;
case 3://選擇進(jìn)入足球聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = FOOTBALL;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,FOOTBALL_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = FOOTBALL;//置用戶的聊天室種類
}
break;
case 4://選擇進(jìn)入股票聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = STOCK;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,STOCK_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = STOCK;//置用戶的聊天室種類
}
break;
case 5://選擇進(jìn)入彩票聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = LOTTERY;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,LOTTERY_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = LOTTERY;//置用戶的聊天室種類
}
break;
case 6://選擇進(jìn)入英語聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = ENGLISH;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,ENGLISH_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = ENGLISH;//置用戶的聊天室種類
}
break;
case 7://選擇進(jìn)入熱門話題聊天室
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = HOT_MATTER;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
play_one(user_num,HOT_MATTER_DUAN);
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = HOT_MATTER;//置用戶的聊天室種類
}
break;
case 8://選擇進(jìn)入密碼聊天室
{
if(type == 0)//正常呼入的用戶
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = PASSWORD;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
clr_duan(user_num);
play_one(user_num,PASSWORD_DUAN);
user_e1[user_num].user_state = WAIT_PASSWORD;//等待用戶輸入密碼
user_e1[user_num].chat_type = PASSWORD;//置用戶的聊天室種類
user_e1[user_num].user_index = 0;
}
else//回呼用戶
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = PASSWORD;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
clr_duan(user_num);
audio_dtmf_resource[user_e1[user_num].dtmf].count = 1;
user_e1[user_num].user_state = JUDGE_USER;//等待用戶輸入密碼
user_e1[user_num].chat_type = PASSWORD;//置用戶的聊天室種類
}
}
break;
case 9://選擇進(jìn)入個人資料修改查詢
{
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
clr_duan(user_num);
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
command(5,0,user_num,0,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,IDLE,IDLE,IDLE,IDLE);
user_e1[user_num].wait = 1;
user_e1[user_num].user_state = IDLE;
}
break;
case 0x80://回呼用戶(選擇私聊)
{
if(user_e1[user_num].first_select == IDLE)
{
user_e1[user_num].first_select = PRIVATE_FEELING;
}
audio_stop(user_e1[user_num].dtmf);//停止當(dāng)前操作
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自動放音標(biāo)志
clr_duan(user_num);
audio_dtmf_resource[user_e1[user_num].dtmf].count = 1;
user_e1[user_num].user_state = JUDGE_USER;//轉(zhuǎn)到聊天室人數(shù)判斷
user_e1[user_num].chat_type = PRIVATE_FEELING;//置用戶的聊天室種類
}
break;
default:
{
error_chuli(user_num);//輸入錯誤
}
break;
}
audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;//清空用戶撥鍵
}
void back_failure(unsigned char user_num)//回呼的用戶:申請回呼的用戶已經(jīng)和別人聊上了
{
clr_duan(user_num);
play_one(user_num,OTHER_USER);
user_e1[user_num].user_state = INFORM_END;
user_e1[user_num].back_flag = 0;
}
user_select_ctrl(unsigned char user_num,unsigned char user_select)//用戶選擇流程
{
unsigned char xdata trk_j,trk_k;
switch(user_e1[user_num].user_state)
{
case SELECT_START://開始處理用戶選擇
{
if(user_select != IDLE)//用戶按鍵了
{
if(user_monitor_num == user_num)//往后臺回應(yīng)監(jiān)視信息
{
command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
first_chuli(user_num,user_select,0);
}
}
break;
case WAIT_YES://已經(jīng)注冊的用戶進(jìn)入個人資料中心
{
play_one(user_num,PRIVATE_CENTER);
user_e1[user_num].user_state = CHA_SHAN;//轉(zhuǎn)到等待用戶選擇查詢或刪除聊天號
audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -