/* * main.c * * Created on: 22-Jan-2019 * Author: biswajit.p */ #include #include "includes.h" #include "ipport.h" #include "tcpport.h" #include "sys/alt_llist.h" #include "alt_iniche_dev.h" // Nichestack definitions #include "ipport.h" #include "libport.h" #include "osport.h" #define IPADDR0 192 #define IPADDR1 168 #define IPADDR2 5 #define IPADDR3 4 #define GWADDR0 192 #define GWADDR1 168 #define GWADDR2 5 #define GWADDR3 4 #define MSKADDR0 255 #define MSKADDR1 255 #define MSKADDR2 255 #define MSKADDR3 0 //#define SSS_RX_BUF_SIZE 1500 //#define SSS_TX_BUF_SIZE 1500 #define IP4_ADDR(ipaddr, a,b,c,d) ipaddr = \ htonl((((alt_u32)(a & 0xff) << 24) | ((alt_u32)(b & 0xff) << 16) | \ ((alt_u32)(c & 0xff) << 8) | (alt_u32)(d & 0xff))) /* Definition of Task Stacks */ #define ETHINIT_TASK_STACKSIZE 2048 OS_STK EthInit_stk[ETHINIT_TASK_STACKSIZE]; //OS_STK task2_stk[TASK_STACKSIZE]; /* Definition of Task Priorities */ #define ETHINIT_TASK_PRIORITY 1 //#define TASK2_PRIORITY 2 void ServerSocketTask(void *); TK_OBJECT(to_ssstask); TK_ENTRY(ServerSocketTask); //TK_ENTRY(SSSSimpleSocketServerTask); struct inet_taskinfo socketTask = { &to_ssstask, "simple socket server", ServerSocketTask, 4, 6096, }; int get_ip_addr(alt_iniche_dev *p_dev, ip_addr* ipaddr, ip_addr* netmask, ip_addr* gw, int* use_dhcp) { IP4_ADDR(*ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3); IP4_ADDR(*gw, GWADDR0, GWADDR1, GWADDR2, GWADDR3); IP4_ADDR(*netmask, MSKADDR0, MSKADDR1, MSKADDR2, MSKADDR3); return 0; } int get_mac_addr(NET net, unsigned char mac_addr[6]) { mac_addr[0] = 0x0; mac_addr[1] = 0x7; mac_addr[2] = 0xed; mac_addr[3] = 0x2a; mac_addr[4] = 0x02; mac_addr[5] = 0x0a; return 0; } void ServerSocketTask(void * ptr) { int fd_listen,new_fd,len; char tx_buf[15]; struct sockaddr_in addr; struct sockaddr_in incoming_addr; strcpy(tx_buf,"hello client"); fd_listen = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(10); addr.sin_addr.s_addr = INADDR_ANY; if ((bind(fd_listen,(struct sockaddr *)&addr,sizeof(addr))) < 0) { //alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Bind failed"); } listen(fd_listen,1); new_fd=accept(fd_listen,(struct sockaddr*)&incoming_addr,&len); while(1) { send(new_fd, tx_buf, sizeof(tx_buf), 0); } } void EthInitTask(void* pdata) { alt_iniche_init(); netmain(); while (!iniche_net_ready) TK_SLEEP(1); printf("\nSimple Socket Server starting up\n"); TK_NEWTASK(&socketTask); } int main(void) { /* Clear the RTOS timer */ OSTimeSet(0); OSTaskCreateExt(EthInitTask, NULL, (void *)&EthInit_stk[ETHINIT_TASK_STACKSIZE-1], ETHINIT_TASK_PRIORITY, ETHINIT_TASK_PRIORITY, EthInit_stk, ETHINIT_TASK_STACKSIZE, NULL, 0); OSStart(); while(1); /* Correct Program Flow never gets here. */ return -1; }