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, &parameter_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 + -
显示快捷键?