📄 tsknetwork.c
字号:
#include <std.h>
#include <tsk.h>
#include <stdio.h>
#include <csl.h>
#include <csl_cache.h>
#include <csl_dat.h>
#include <scom.h>
#include <utl.h>
#include <ialg.h>
#include <csl_gpio.h>
#include "appmain.h"
#include "..\ndk\inc\netmain.h"
IPN IpDecodeDefault = 0;
Uint32 StreamWaddr = 0;
char *ServerPAddr = "192.168.253.111"; //服务器ip地址
char *Defaultmessage ="This is a test of the emergency broadcasting system";
#define BUFLEN 0x4000
extern int linkstatus;
#pragma DATA_SECTION(rxdata_stream, ".user_data_ext")
#pragma DATA_ALIGN( rxdata_stream, 128)
unsigned char rxdata_stream[BUFLEN];
//
void tskNetworkTx()
{
SOCKET slisten = INVALID_SOCKET;
struct sockaddr_in sin1;
SCOM_Handle hs_Netok;
int hr,Tmp, rxlen;
unsigned char *Databuf;
/*打开SCOM模块*/
hs_Netok = SCOM_open("NETOK");
if( !hs_Netok )
{
for(;;);
}
// 等待所有的初始化完成
TSK_sleep(500);
SCOM_getMsg( hs_Netok, SYS_FOREVER );
// Allocate the file environment for this task
fdOpenSession( TaskSelf() );
// Create the main TCP listen socket
slisten = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP);
if( slisten == INVALID_SOCKET )
{
goto leave;
}
// Set Port = 2000, leaving IP address = Any
bzero( &sin1, sizeof(struct sockaddr_in) );
sin1.sin_family = AF_INET;
sin1.sin_len = sizeof( sin1 );
sin1.sin_addr.s_addr = inet_addr(ServerPAddr);
sin1.sin_port = htons(5150);
//如果没有网络连接就直接跳出
if (linkstatus==0)
{
goto leave;
}
xx: if( connect( slisten, (PSA) &sin1, sizeof(sin1) ) < 0 )
{
// printf("Connect failed (%d)\n",fdError());
goto leave;
}
// 如果是网络错误,重新连接网络;如果是传输数据头错误,丢一帧继续传输
for(;;)
{
// Receive configuration information
rxlen = recv(slisten,(char *)&rxdata_stream[0],BUFLEN,0);
if(rxlen == SOCKET_ERROR)
{
printf("recieve failed\n");
goto xx;
}
// Send received data back to host
Databuf = rxdata_stream;
while(rxlen > 0)
{
Tmp = send(slisten, Databuf, rxlen, 0);
if (Tmp == rxlen)
break;
if ((Tmp == SOCKET_ERROR)||(Tmp == -1))
{
printf("network failed!");
goto xx;
}
// If partional data transfered, then continue transfer
rxlen -= Tmp;
Databuf += Tmp;
}
if(hr == SOCKET_ERROR)
goto xx;
}
leave:
// We only get here on a fatal error - close the sockets
if( slisten != INVALID_SOCKET )
{
fdClose( slisten );
}
printf("tskNetwork Fatal Error\n");
// This task is killed by the system - here, we block
TaskBlock( TaskSelf() );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -