📄 f15play.c
字号:
#define reg01 XBYTE[0x8100]
#define reg02 XBYTE[0x8200]
#define reg03 XBYTE[0x8300]
#define reg04 XBYTE[0x8400]
#define reg05 XBYTE[0x8500]
#define reg06 XBYTE[0x8600]
#define reg07 XBYTE[0x8700]
#define reg08 XBYTE[0x8800]
#define reg09 XBYTE[0x8900]
#define reg0a XBYTE[0x8a00]
#define reg0b XBYTE[0x8b00]
#define reg0c XBYTE[0x8c00]
#define reg0d XBYTE[0x8d00]
#define reg0e XBYTE[0x8e00]
#define reg0f XBYTE[0x8f00]
#define reg10 XBYTE[0x9000]
#define reg18 XBYTE[0x9800]
#define SEND_PORT 3502 //发送端口号
#define RECI_PORT 3501 //接收端口号
#define icmpprotocal 1
#define tcpprotocal 6
#define udpprotocal 17
#define combufend 1024
#define netbufend 2048
#define i2cdelay nop;nop;nop
struct ethernet
{
uchar recievestatus; //接收状态
uchar nextpage; //下一个页 估计此4个字节为网卡8019生成
uint length; //以太网长度,以字节为单位, 而非以太网的首部
uint destnodeid[3]; //目的网卡地址 (有效3)
uint sourcenodeid[3]; //源网卡地址 (有效3)
uint protocal; //下一层协议
uchar packet[1528]; //包的内容 (10)+18+1518=1536+(10)
};
//IP包 仅当IHL=5时用 当不=5时作转换
struct ip
{
uint head[9]; //以太网包头
uchar verandihl; //版本与头长度
uchar typeofserver; //服务类型
uint totallength; //总长度
uint frameindex; //IP帧序号
uint segment; //分段标志
uchar ttl; //生存时间
uchar protocal; //下一层协议
uint crc; //校验和
uint sourceip[2]; //源IP
uint destip[2]; //目的IP
uchar packet[1508]; //IP包的内容 18+20+1498+(10)=1536+(10)
};
struct ippacket
{
uint head[9]; //以太网包头
uint ippacket[764]; //IP包的内容 18+ (759+5)*2=1536+(2*5)
};
struct arp
{
uint head[9]; //以太网头 arp报文的内容总长28字节
uint harewaretype; //以太网为0x0001
uint protocaltype; //ip 为0X0800
uchar halength; //=0X06
uchar palength; //=0X04
uint operation; //操作 0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
uint sourcenodeid[3]; //源网卡地址
uint sourceip[2]; //源IP地址
uint destnodeid[3]; //目的网卡地址
uint destip[2]; //目的IP地址
};
struct icmp //包含在IP包中,是IP的上层为0X01的应用
{
uint head[9]; //以太网头
uint iphead[10]; //IP头
uchar type; //0X08 PING请求 0X00 PING应答
uchar option; //0X00 PING
uint crc;
uint id;
uint seq;
uchar icmpdata[1500]; //18+20+8+ 1490+(10)=1536 +(10)
};
struct tcp
{
uint head[9];
uint iphead[10];
uint sourceport; //源端口
uint destport; //目的端口
union w seqnumber; //顺序号
union w acknumber; //确认号
uchar offset; //数据偏移量
uchar control; //连接控制
uint window; //流控
uint crc; //校验和 ,包括伪头部,TCP头部,数据
uint urg; //紧急指针
uchar tcpdata[1478+20]; //TCP数据 18+20+20+1478=1536
};
struct udp
{
uint head[9];
uint iphead[10];
uint sourceport; //源端口
uint destport; //目的端口
uint udplength; //流控
uint crc; //校验和 ,包括伪头部,TCP头部,数据
uchar udpdata[1490+20]; //TCP数据 18+20+8+1490=1536
};
/*所有协议的共用体*/
union netcard
{
struct{ uchar bytebuf[1700];}bytes;
struct{ uint wordbuf[850];}words;
struct ethernet etherframe;
struct tcp tcpframe;
struct udp udpframe;
struct ip ipframe;
struct arp arpframe;
struct icmp icmpframe;
struct ippacket ippacket;
};
xdata union netcard rxdnet; //接收以太帧结构
xdata union netcard txdnet; //发送以太帧结构
xdata union u server_id[3+1]; //服务器硬件地址
xdata union u serve_ip_high; //服务器ip地址高位字节
xdata union u server_ip_low; //服务器ip地址低位字节
xdata union u mycard_id[3+1]; //本机硬件地址
xdata union u mycard_ip_low; //本机ip地址低位字节
xdata union u mycard_ip_high; //本机ip地址高位字节
//xdata uchar test_code1=0;
//xdata uchar test_code2=0;
bit play_pause=0; //暂时停机
xdata uchar i2c_err=0;
void set_cpu();
bit audio_test=0; //是普通音频源还是试题音频源
bit dsp_sbf=1;
xdata uint answ_len; //答案长度
xdata union u ti_zfen; //累计分
xdata union u xue_zfen; //学生累计分
xdata union u ti_fen; //当前题分
xdata union u ti_dfen; //当前题得分
idata union u answerid; //试卷源句柄
idata uint ti_tal; //答卷总题数
idata uchar answer_type; //答卷源类型
idata uchar ti_type; //题类型
idata uchar key_ip=0; //设置ip地址标志
idata uint frameindex=0; //包的循序号
idata uchar txt_type; //文本源类型
idata union u txt_id; //文本源句柄
idata union u txt_len; //文本源长度
idata uint page_tal=0; //文本的总页数
idata union u txt_page; //文本的当前页
xdata uchar soft_vol; //终端版本
xdata record_step=0;
xdata uchar meter_code0=0xfd;
xdata uchar meter_code1=0xfd;
xdata uchar meter_code2=0xfd;
idata uchar moni_biaozhi=0; //模拟广播标志
xdata uchar er_type; //二进制源的内型
xdata union u er_id; //二进制源句柄
xdata uint er_tal; //二进制源的总长
xdata uchar bugg=0; //调试标志 =0调试;=1工作
idata uchar snd_type; //音频源类型
idata union u sundid; //音频源句柄
idata union u snd_len; //音频源长度
idata uint second_tal=0; //音频源的总秒数
idata union u snd_second; //音频源的当前秒数
idata uchar mp3_t=0;
idata uchar adpcm_t=0;
idata uchar adpcm_err=0;
xdata uint mem_second[8+2]; //书签记忆数组
idata uchar mem_write_p=0; //书签写入指针
idata uint mem_tonet;
idata uchar audio_req=0; //
idata uchar audio_write=0; //
idata uchar info_no=0; //信息编码
idata uchar mp3_err;
void delayms(uint);
void init_cpu(); //cpu初始化
void do_reci_net(); //从网卡接收数据
void doarp();
void doicmp();
void doudp();
void doip(); //通过ip地址判断是自己的包
void send_data_net(uchar); //执行终端向服务器发送协议,num:协议编号
void udp_send_net(uint);
void sendtxdnet(uint); //数据发送到网卡
void write_mycards_id(); //将硬件地址写入网卡PAR0~5
void init_8019(); /*网卡初始化*/
void net_in_doing(); //网卡接收的数据的处理
uint checkudpcrc();
void overrun();
void dotcp();
void ziyuan_qinqiu();
uint createipheadcrc();
uint createicmpcrc();
void switchtrack(uchar); //声道模式
uint createipheadcrc1();
void lianfa(); //按键连发
void key_click_tchtxt(uint); //教师文本键盘
void key_click_tchfile(uint); //教师目录文本键盘
void key_click_answer(uint); //答卷键盘
void key_click_tchmp3(uint); //教师mp3音频键盘
void key_click_tchadpcm(uint); //教师adpcm音频键盘
void key_click_stutxt(uint); //学生文本键盘
void key_click_stufile(uint); //学生目录文本键盘
//void key_click_stutest(uint); //学生试题文本键盘
void key_click_stump3(uint); //学生mp3音频键盘
void key_click_stuadpcm(uint); //学生adpcm音频键盘
void key_click_denglu(uint); //登录键盘
void key_click_setip(uint); //设置ip键盘
void key_click_datadown(uint); //数据下载键盘
//void key_click_answer(uint); //临时答案键盘
void key_click_comon(uint); //公共键盘
void key_lianfa_comon(uint); //连发公共键盘
void key_click_setip(uint); //ip设置键盘
void filter_init(); //初始化滤波器
void denglu_start(); //登录初始化
void ipset_start(); //ip设置初始化
void rectime_ctl(); //录音时间
void mp3_init(); //mp3数据初始化输入
void acok(uchar);
void page(uchar);
void readhead();
void readonepacket(); //从8019读一个包到rxdnet
void arp_req();
void cls_lcd();
void ram_test();
uchar chr_bit(uint);
uint protocal_filter; //协议滤波器
idata uchar answer; //抢答的答案
void char_input(uchar);
idata uchar hang=1; //文本的行数
idata uint net_reci_write_p;
idata uint net_reci_read_p;
bit bbb=0;
idata uchar lianfa_val=0;
idata uchar jx_state=3;
void jx_ctl(uchar);
////dsp.h
uchar code ch1302[]=" 正在连接服务器,请等待....";
uchar code ch1303[]=" OK!与服务器连接成功......";
//uchar code ch1402[]="网卡溢出! ";
//uchar code ch1403[]="网卡校验错 ";
//uchar code ch1404[]="PING成功 ";
//uchar code ch1405[]="UDP校验错 ";
uchar code ch1406[]="正呼叫教师";
//uchar code ch1407[]=" ";
//uchar code ch1408[]="非法用户 ";
//uchar code ch1409[]="文本请求败 ";
//uchar code ch140a[]="MP3_BF溢出 ";
//uchar code ch140b[]="音频请求败 ";
uchar code ch140c[]="词库未记载";
uchar code ch140d[]="无效按键! ";
//uchar code ch140e[]="书签 ";
//uchar code ch1413[]="网页超上界 ";
//uchar code ch1423[]="网页超下界 ";
//uchar code ch1433[]="收超长数据 ";
//uchar code ch1434[]="IP包校验错 ";
//uchar code ch1435[]="DSP接收满 ";
//uchar code ch1436[]="DSP读写错 ";
//uchar code ch1437[]="UDP发送错 ";
//uchar code ch1438[]="DSP空 ";
//uchar code ch1439[]="采集错误 ";
//uchar code ch143b[]="dsp错误 ";
//uchar code ch143c[]="暂无帮助 ";
uchar code ch1701[]=" 第 题信息(共 题) ";
uchar code ch1702[]="用户登陆,请输入 ";
uchar code ch1703[]="座号设置,按方向键选择";
uchar code ch1704[]="英译汉";
uchar code ch1706[]="书签信息";
uchar code ch1707[]="您设置了新的书签";
uchar code ch1708[]="课堂提示";
uchar code ch170a[]="在线帮助";
uchar code ch1801[]="第 题(共 题)得分:应得[ . ]实得[ . ];本卷得分:应得[ . ]实得[ . ] ";
uchar code ch1802[]="学号:密码: ";
uchar code ch1803[]="组号:行号: ";
uchar code ch1805[]="教师正在向全班授课, 请认真听讲! ";
uchar code ch1806[]="您正在接受别人的会话示范! ";
uchar code ch1807[]="请您参与会话练习! ";
uchar code ch1808[]="教师正在与您单独对讲! ";
uchar code ch180a[]="RAM测试失败";
uchar code ch180b[]="网络测试通过";
uchar code ch180c[]="网络测试失败";
uchar code ch180d[]="mp3播放";
uchar code ch180e[]="mp3录音";
uchar code ch180f[]="AD开关";
uchar code ch1810[]="BC开关";
uchar code ch1811[]="机芯";
uchar code ch1812[]="陷波";
uchar code ch1813[]="偏磁";
uchar code ch1814[]="抹音";
uchar code ch1815[]="录音";
uchar code ch666[] ="学号:密码:新密:确认:";
uchar code ch777[] ="当前选中";
uchar code ch888[] ="座号";
uchar code ch999[] ="测试,正常吗? ";
xdata uchar f_txt[]=" "; //副文本缓冲区
idata uchar ft_len=0; //当前对话框标题长度
idata uchar fw_len=0; //当前对话框文本长度
idata uchar f_hx_temp=1;
idata uchar f_hy_temp=5;
void init_data_moni(); //系统数据初始化
void init_data_shuzi(); //系统数据初始化
void digistate(uchar state); //进入数字节目不同模式
void chip_mode(uchar); //改变dsp工作模式
void savetomp3buff(uchar dat);
void display_cmos();
void mp3_todsp();
void setadc();
void setvolume();
void seteq(); //设置音色
void switchtrace();
bit recall();
void bstop();
void bstart();
void bwrite(uchar);
uchar bread();
void writemem(uchar,uchar); //向015写入一个字节
void readadpcm();
uchar readmemory(uchar);
void plus(uchar);
void bwrite_z(uchar);
uchar bread_z();
void readadpcm_z();
uchar readmem_z(uchar);
void writemem_z(uchar,uchar); //向015写入一个字节
void init_dsp(); //sta015初始化
void talk_vol(uchar); //CMOS音量控制
void cmos_ctl(); //cmos状态控制
void cmos_ctl1();
void cpu_state(); //cpu初始化
void send_out();
void test_ctl();
void reset_sta015();
#define BUFF_SIZE 7620
#define MP3_BUFF_MAX 9000
xdata uchar mp3_buff[MP3_BUFF_MAX+20]; //mp3数据缓冲区
uint mp3_write_p=0; //mp3写入指针
uint mp3_read_p=0; //mp3读出指针
uint mp3_buff_len=0; //mps未读数据长度
#define ADPCM_BUFF_MAX 9000//10800
xdata uchar adpcm_buff[ADPCM_BUFF_MAX+20]; //adpcm数据缓冲区
idata uint adpcm_write_p=0; //adpcm写入指针
idata uint adpcm_read_p=0;
idata uint adpcm_len=0;
idata uchar key_yes=0; //=1按键有效
idata uchar call_state=0; //呼叫状态01呼叫
#define SET_REC 0x01 //录音
#define SET_PLAY 0x02 //放音
#define SET_PAUSE 0x03 //暂停
#define SET_FAST 0x04 //快进
#define SET_FAW 0x05 //快倒
#define SET_STOP 0x06 //停止
#define SET_JMP 0x07 //定位
#define SET_GUANGBO 0x08 //广播
xdata uchar pack_num=0;
xdata uchar cidai_vol=1; //磁带机音
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -