root.c
来自「PPPoE协议在Psos中的实现源代码」· C语言 代码 · 共 470 行
C
470 行
#include <stdio.h>
#include "stdlib.h"
#include <tm1/tmIIC.h>
#include <tm1/tmBoard.h>
#include <tm1/tmProcessor.h>
#include "C:\TriMedia\apps\include\tmos.h"
#include "C:\TriMedia\apps\include\tsa.h"
#include "datatype.h"
/*#include "C:\TriMedia\OS\pSOS\pSOSystem\include\sys_conf.h"*/
#include "C:\TriMedia\OS\pSOS\pSOSystem\include\psos.h"
#include "C:\TriMedia\OS\pSOS\pSOSystem\include\probe.h"
#include "C:\TriMedia\include\tmlib\tmtypes.h"
#include "C:\TriMedia\include\tm1\tmInterrupts.h"
#include "C:\TriMedia\include\tm1\tmSSImmio.h"
#include "C:\TriMedia\include\tm1\tmHelp.h"
#include "C:\TriMedia\include\tm1\mmio.h"
#include "C:\TriMedia\include\ops\custom_defs.h"
#include "C:\TriMedia\include\tmlib\dprintf.h"
/********************************************/
#include "errno.h"
#include <assert.h>
#include <sys/stat.h>
#include <stdarg.h>
#include "pna.h"
#include "sys_conf.h"
#include "cs8900a.h"
#include "ping.h"
#include "csio.h"
#define REMOTEPORT 2000
#define TEST_LEN 1450
#define ALL_LEN 204800
#define TEST_COUNT 500000
/*#define TEST_TCP //if not defined ,then test UDP packet*/
extern unsigned char* SaveDataBuf;
extern int ReadPos;
extern int SendPos;
extern int StopCode;
extern int FullPacketNum;
UInt32 full_q, empty_q, contrl_q, savedata_q;
static MixPacket_t packet_pool[MAX_PACKETS];
UInt32* MsgBuf;
UInt8* remoteY;
UInt8* remoteU;
UInt8* remoteV;
UInt8* msg;
UInt8* remoteSave;
int IntReceiveFlag=0;
extern void code(void);
extern void SpeechEncoderG729();
extern void setup();
extern void SaveAVData();
unsigned long test_task_id;
unsigned long Contrl_id;
volatile unsigned short testSignal;
extern int csInMemoryMode;
void MyFatalHandler(long error, long node )
{
/* this is for errno,display mystring:[errno string] */
const char* s="errno";
perror(s);
printf("errno =%d\n",errno);
printf("fatal error enter myfatalhandler\n");
printf("%d\n",error);
printf("%d\n",node);
}
void testtask1(void)
{
unsigned short regRead;
if (csInMemoryMode)
regRead = inMEMw((unsigned short *)testSignal);
tm_wkafter(10);
}
void Net_Contrl()
{
struct sockaddr_in sa_biDirect;
int sock_biDirect;
int reader_socket;
long addrlen = sizeof (struct sockaddr_in);
long err;
int n;
char *TxBuffer = NULL;
char *RxBuffer = NULL;
unsigned int message[4];
unsigned int *info;
TxBuffer = malloc(TEST_LEN);
if(!TxBuffer)
DP(("can not allocate tx buffer\n"));
RxBuffer = malloc(TEST_LEN);
if(!RxBuffer)
DP(("can not allocate rx buffer\n"));
sa_biDirect.sin_family=AF_INET;
sa_biDirect.sin_port=htons(REMOTEPORT);
sa_biDirect.sin_addr.s_addr=htonl(INADDR_ANY);
memset(sa_biDirect.sin_zero,0,8); /* Zero the rest of the struct */
sock_biDirect = socket(AF_INET,SOCK_STREAM,TCP);
if(sock_biDirect == -1)
{
DP(("socket create error\n"));
return;
}
DP(("socket number is %d\n",sock_biDirect));
if(bind(sock_biDirect,&sa_biDirect,sizeof(struct sockaddr_in)) == -1)
{
DP(("bind error\n"));
close(sock_biDirect);
return;
}
DP(("bind OK\n"));
if(listen(sock_biDirect,4) == -1)
{
DP(("listen error\n"));
close(sock_biDirect);
return;
}
DP(("listen OK\n"));
reader_socket = accept(sock_biDirect, &sa_biDirect,&addrlen);
if(reader_socket == -1)
{
DP(("accept error\n"));
close(sock_biDirect);
return;
}
DP(("accept OK\n"));
/*if (connect(sock_biDirect, &sa_biDirect, sizeof(struct sockaddr_in)) == -1)
{
DP(("connect error\n"));
close(sock_biDirect);
return;
}*/
while(1)
{
tm_wkafter(4);
n = recv(reader_socket, RxBuffer, TEST_LEN, 0);
if(n == -1)
DP(("recv error : 0x%08x\n",errno));
else if( n==0)
{
DP(("connect shutdown\n"));
close(reader_socket);
reader_socket = accept(sock_biDirect, &sa_biDirect,&addrlen);
}
else if( n < TEST_LEN)
{
DP(("uncompleted packet\n"));
}
else
{
DP(("recv bytes = %d\n",n));
info=(unsigned int *)RxBuffer;
message[0]=info[0];
message[1]=info[1];
q_send(contrl_q, message);
}
/*n = send(sock_biDirect,TxBuffer,TEST_LEN,0);
if(n == -1)
DP(("send error : 0x%08x\n",errno));
else
DP(("sent bytes = %d\n",n));*/
}
close(sock_biDirect);
free(TxBuffer);
free(RxBuffer);
for(;;)
{
tm_wkafter(100000);
}
}
#define EVENT 1
void testtask(void)
{
struct sockaddr_in sa_biDirect;
int sock_biDirect;
int nsent = 0; /* add 1 each sendto()*/
int nrecv_ok = 0;
int nrecv_bad = 0;
long err;
int i;
int j;
int n;
char *TxBuffer = NULL;
char *RxBuffer = NULL;
unsigned short *pShort;
unsigned int message[4];
int pos;
unsigned long dummy;
unsigned long task1;
unsigned short Event1,Event2,Event3,Event4,st1,st2,st3,st4,le1,le2,le3,le4;
char *mymsg = "hello,if you see this message,then the Cs8900a has sent packets success\n";
MMIO(AO_FREQ)=((UInt32) (0.5 + ( 477218588.0 * 512000.0 /
66000000.0))) |
(1U << 31); /* ensures that VO is aware of new calculation method*/
/* Read an event from the Interrupt Status Queue */
Event1 = inMEMw( (unsigned short *)(PKTPG_ISQ) );
st1 = inMEMw( (unsigned short *)(PKTPG_RX_STATUS) );
le1 = inMEMw( (unsigned short *)(PKTPG_RX_LENGTH ) );
Event2 = inMEMw( (unsigned short *)(PKTPG_ISQ) );
st2 = inMEMw( (unsigned short *)(PKTPG_RX_STATUS) );
le2 = inMEMw( (unsigned short *)(PKTPG_RX_LENGTH ) );
Event3 = inMEMw( (unsigned short *)(PKTPG_ISQ) );
st3 = inMEMw( (unsigned short *)(PKTPG_RX_STATUS) );
le3 = inMEMw( (unsigned short *)(PKTPG_RX_LENGTH ) );
Event4 = inMEMw( (unsigned short *)(PKTPG_ISQ) );
st4 = inMEMw( (unsigned short *)(PKTPG_RX_STATUS) );
le4 = inMEMw( (unsigned short *)(PKTPG_RX_LENGTH ) );
/*t_create("aaaa",100,10000,10000,0,&task1);
t_start(task1,T_PREEMPT |T_TSLICE |T_ISR,testtask1,0); */
TxBuffer = malloc(TEST_LEN);
if(!TxBuffer)
DP(("can not allocate tx buffer\n"));
RxBuffer = malloc(TEST_LEN);
if(!RxBuffer)
DP(("can not allocate rx buffer\n"));
pShort = (unsigned short *)TxBuffer;
for(i=0;i<TEST_LEN/2;i++)
{
*pShort++ = i;
}
sa_biDirect.sin_family=AF_INET;
sa_biDirect.sin_port=htons(REMOTEPORT);
sa_biDirect.sin_addr.s_addr=htonl(SD_DEF_GTWY_IP);
memset(sa_biDirect.sin_zero,0,8); /* Zero the rest of the struct */
#ifdef TEST_TCP
sock_biDirect = socket(AF_INET,SOCK_STREAM,TCP);
#else
sock_biDirect = socket(AF_INET,SOCK_DGRAM,UDP);
#endif
if(sock_biDirect == -1)
{
DP(("socket create error\n"));
return;
}
DP(("socket number is %d\n",sock_biDirect));
memset(TxBuffer,0x48,TEST_LEN);
for(i=0;i<100;i++)
{
sendto(sock_biDirect,TxBuffer,TEST_LEN,0,&sa_biDirect,sizeof(struct sockaddr_in));
tm_wkafter(1);
}
if (connect(sock_biDirect, &sa_biDirect, sizeof(struct sockaddr_in)) == -1)
{
DP(("connect error\n"));
close(sock_biDirect);
return;
}
memset(TxBuffer,0x93,TEST_LEN);
for(i=0;i<100;i++)
{
send(sock_biDirect,TxBuffer,TEST_LEN,0);
tm_wkafter(4);
}
//tm_evevery(150, EVENT, &dummy );//150 ticks is 1 second
while(1)
{
//ev_receive( EVENT,EV_WAIT | EV_ALL,0,&dummy);
q_receive(savedata_q, Q_WAIT, 0, message);
pos=message[0];
memcpy(TxBuffer,SaveDataBuf+pos,1024);
n = send(sock_biDirect,TxBuffer,TEST_LEN,0);
/*for(i=0;i<48;i++)
{
if(FullPacketNum)
{
memcpy(TxBuffer,SaveDataBuf+SendPos,1024);
send(sock_biDirect,TxBuffer,TEST_LEN,0);
SendPos += 1024;
if(SendPos == ALL_LEN) SendPos=0;
FullPacketNum--;
}
else
{
break;
}
if(FullPacketNum>48) StopCode=1;
else StopCode=0;
tm_wkafter(3);
}*/
}
close(sock_biDirect);
free(TxBuffer);
free(RxBuffer);
DP(("sent packet number is %d\n",nsent));
DP(("recv right packet number is %d\n",nrecv_ok));
DP(("recv bad packet number is %d\n",nrecv_bad));
DP(("Drv test over\n"));
for(;;)
{
tm_wkafter(100000);
}
}
/********************************************************************/
static void
notify1(void)
{
#pragma TCS_interruptible_handler
IntReceiveFlag=1;
}
static void
notify2(void)
{
#pragma TCS_interruptible_handler
UInt32 message[4];
message[0] = MsgBuf[0];
q_send(contrl_q, message);
}
void root(void)
{
int j;
Int16 *bufPtr;
UInt32 speech_encoder, video_encoder, parameter_set,data_save;
UInt32 message[4];
/* intInstanceSetup_t inter_setup;
tmLibappErr_t rval;
UInt32 boardID;
Char *boardName;
unsigned int * addr1 = (unsigned int *) (MMIO(DRAM_BASE)+0xf00000);
unsigned int * addr2 = (unsigned int *) (MMIO(DRAM_BASE)+0xf00004);
unsigned int * addr3 = (unsigned int *) (MMIO(DRAM_BASE)+0xf00008);
unsigned int * addrm = (unsigned int *) (MMIO(DRAM_BASE)+0xf0000c);
unsigned int * addrsave = (unsigned int *) (MMIO(DRAM_BASE)+0xf00010);
tm_wkafter(800);
remoteY=(unsigned char*)(*addr1);
remoteU=(unsigned char*)(*addr2);
remoteV=(unsigned char*)(*addr3);
msg =(unsigned char*)(*addrm);
remoteSave =(unsigned char*)(*addrsave);
MsgBuf=(UInt32 *)malloc(16);
pciMemoryWriteUInt32 ( (UInt32 *)0x1f00000,(UInt32)MsgBuf);
if (intOpen(intAPP) != 0) {
exit(-1);
} else {
inter_setup.enabled = True;
inter_setup.handler = notify1;
inter_setup.priority = intPRIO_4;
inter_setup.level_triggered = False;
intInstanceSetup(intAPP, &inter_setup);
}
if (intOpen(intHOSTCOMM) != 0) {
exit(-1);
} else {
inter_setup.enabled = True;
inter_setup.handler = notify2;
inter_setup.priority = intPRIO_3;
inter_setup.level_triggered = False;
intInstanceSetup(intHOSTCOMM, &inter_setup);
}
tmosInit();
Init_Pre_Process();
Init_Coder_ld8a();
rval = tsaBoardGetBoard(&boardID, &boardName);
if (rval != TMLIBAPP_OK)
{
tmosExit(-1);
}
*/
DP_START(0x1000,0);
q_create("frat", MAX_PACKETS, Q_LOCAL | Q_FIFO | Q_NOLIMIT, &full_q);
q_create("erat", MAX_PACKETS, Q_LOCAL | Q_FIFO | Q_NOLIMIT, &empty_q);
q_create("ctrl", MAX_PACKETS, Q_LOCAL | Q_FIFO | Q_NOLIMIT, &contrl_q);
q_create("ctrl", MAX_PACKETS, Q_LOCAL | Q_FIFO | Q_NOLIMIT, &savedata_q);
bufPtr = (Pointer) _cache_malloc(MAX_PACKETS * BUFSIZEG729 * sizeof(Int16), -1);
if (bufPtr == Null) {
t_suspend(0L);
}
for (j = 0; j < MAX_PACKETS; j++) {
packet_pool[j].pointer = bufPtr;
packet_pool[j].size = BUFSIZEG729;
message[0] = (UInt) & packet_pool[j];
q_send(empty_q, message);
bufPtr += BUFSIZEG729 ;
}
/*MMIO(BLOCK_POWER_DOWN)|=0xc2;*/
/*t_create("contrltask",120,10000,10000,0,&Contrl_id);
t_start(Contrl_id,T_PREEMPT |T_TSLICE |T_ISR,Net_Contrl,0);*/
t_create("testtask",100,10000,10000,0,&test_task_id);
t_start(test_task_id,T_PREEMPT |T_TSLICE |T_ISR,testtask,0);
t_create( "setu", PRIORITY_BASE + 50, 14000, 14000, 0, ¶meter_set);
t_start( parameter_set, T_PREEMPT | T_TSLICE | T_NOASR | T_ISR, setup, 0 );
/*t_create("senc", PRIORITY_BASE + 8, 30000, 30000, T_LOCAL, &speech_encoder);
t_start(speech_encoder, T_PREEMPT | T_TSLICE | T_NOASR | T_ISR, SpeechEncoderG729, 0);*/
t_create( "code", PRIORITY_BASE + 9, 14000, 14000, 0, &video_encoder);
t_start( video_encoder, T_PREEMPT | T_TSLICE | T_ASR | T_ISR, code, 0 );
/*t_create( "save", PRIORITY_BASE + 11, 14000, 14000, 0, &data_save);
t_start( data_save, T_PREEMPT | T_TSLICE | T_ASR | T_ISR, SaveAVData, 0 );*/
t_suspend(0L);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?