void getSUBR(uint8 *addr) { addr[0] = IINCHIP_READ(WIZC_SUBR0); addr[1] = IINCHIP_READ(WIZC_SUBR1); addr[2] = IINCHIP_READ(WIZC_SUBR2); addr[3] = IINCHIP_READ(WIZC_SUBR3); }
void getDIPR(uint8 s, uint8 *addr) { addr[0] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR0)); addr[1] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR1)); addr[2] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR2)); addr[3] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR3)); }
void getSIPR(uint8 * addr) { addr[0] = IINCHIP_READ(SIPR); addr[1] = IINCHIP_READ(SIPR+1); addr[2] = IINCHIP_READ(SIPR+2); addr[3] = IINCHIP_READ(SIPR+3); }
/* @brief This function sets up Source IP address. */ void getGAR(uint8 *addr) { addr[0] = IINCHIP_READ(WIZC_GAR0); addr[1] = IINCHIP_READ(WIZC_GAR1); addr[2] = IINCHIP_READ(WIZC_GAR2); addr[3] = IINCHIP_READ(WIZC_GAR3); }
uint8_t process_request(TCP_CONFIG *config) { uint16_t bytes_to_send =0; uint8_t rets=0; if(bytesReceived>tcp_data_buffer_size) return 0; // Content overflow // Assuming GIT request, read and parse if you with to use urls for anything recv_data_processing(config->s, tcp_data_buffer, bytesReceived); // Data from the GIT request sprintf(website,"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n\ <html>\n<head>\n<center><h1>%d</h1></center>\n<meta http-equiv=\"refresh\" content=\"1.5\" >",ADCRead(0)); bytes_to_send = strlen((char *)website); rets = send(config->s, website,bytes_to_send , 0); // Send Response with html bytesReceived=0; IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_DISCON); // Shut down connection while (IINCHIP_READ(Sn_CR(config->s))); // IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_CLOSE); // while (IINCHIP_READ(Sn_CR(config->s))); // IINCHIP_WRITE(Sn_IR(config->s), 0xFF); // return 1; }
/** @brief This function sets up Source IP address. */ void getGAR(uint8 * addr) { addr[0] = IINCHIP_READ(GAR); addr[1] = IINCHIP_READ(GAR+1); addr[2] = IINCHIP_READ(GAR+2); addr[3] = IINCHIP_READ(GAR+3); }
uint32 getSn_TX_WRSR(SOCKET s) { uint32 tx_write_size=0; tx_write_size = IINCHIP_READ(Sn_TX_WRSR(s)); tx_write_size = (tx_write_size << 16) + IINCHIP_READ(Sn_TX_WRSR2(s)); return tx_write_size; }
void getSIPR(uint8 *addr) { addr[0] = IINCHIP_READ(WIZC_SIPR0); addr[1] = IINCHIP_READ(WIZC_SIPR1); addr[2] = IINCHIP_READ(WIZC_SIPR2); addr[3] = IINCHIP_READ(WIZC_SIPR3); }
void getUIPR(uint8* addr) { vuint16 tmp; tmp = IINCHIP_READ(UIPR); addr[0] = (uint8)(tmp >> 8); addr[1] = (uint8)tmp; tmp = IINCHIP_READ(UIPR2); addr[2] = (uint8)(tmp >> 8); addr[3] = (uint8)tmp; }
void getSn_DIPR(SOCKET s, uint8* addr) { vuint16 tmp; tmp = IINCHIP_READ(Sn_DIPR(s)); addr[0] = (uint8)(tmp>>8); addr[1] = (uint8)tmp; tmp = IINCHIP_READ(Sn_DIPR2(s)); addr[2] = (uint8)(tmp>>8); // M_15052008 : Replace Sn_DHAR2 with Sn_DIPR. // addr[3] = (uint8)IINCHIP_READ(Sn_DHAR2(s)); addr[3] = (uint8)tmp; }
void getSn_DHAR(SOCKET s, uint8* addr) { vuint16 tmp; tmp = IINCHIP_READ(Sn_DHAR(s)); addr[0] = (uint8)(tmp>>8); addr[1] = (uint8)tmp; tmp = IINCHIP_READ(Sn_DHAR2(s)); addr[2] = (uint8)(tmp>>8); addr[3] = (uint8)tmp; tmp = IINCHIP_READ(Sn_DHAR4(s)); addr[4] = (uint8)(tmp>>8); addr[5] = (uint8)tmp; }
void getPDHAR(uint8* addr) { vuint16 tmp; tmp = IINCHIP_READ(PDHAR); addr[0] = (uint8)(tmp >> 8); addr[1] = (uint8)tmp; tmp = IINCHIP_READ(PDHAR2); addr[2] = (uint8)(tmp >> 8); addr[3] = (uint8)tmp; tmp = IINCHIP_READ(PDHAR4); addr[4] = (uint8)(tmp >> 8); addr[5] = (uint8)tmp; }
uint8 getSn_SSR(SOCKET s) { uint8 ssr, ssr1; ssr = (uint8)IINCHIP_READ(Sn_SSR(s)); // first read while(1) { ssr1 = (uint8)IINCHIP_READ(Sn_SSR(s)); // second read if(ssr == ssr1) break; // if first == sencond, Sn_SSR value is valid. ssr = ssr1; // if first <> second, save second value into first. } return ssr; }
void Set_network(void) { uint8 tmp_array[6]; uint8 i; // MAC ADDRESS for (i = 0 ; i < 6; i++) Config_Msg.Mac[i] = MAC[i]; // Local IP ADDRESS Config_Msg.Lip[0] = IP[0]; Config_Msg.Lip[1] = IP[1]; Config_Msg.Lip[2] = IP[2]; Config_Msg.Lip[3] = IP[3]; // GateWay ADDRESS Config_Msg.Gw[0] = GateWay[0]; Config_Msg.Gw[1] = GateWay[1]; Config_Msg.Gw[2] = GateWay[2]; Config_Msg.Gw[3] = GateWay[3]; // Subnet Mask ADDRESS Config_Msg.Sub[0] = SubNet[0]; Config_Msg.Sub[1] = SubNet[1]; Config_Msg.Sub[2] = SubNet[2]; Config_Msg.Sub[3] = SubNet[3]; setSHAR(Config_Msg.Mac); // setSUBR(Config_Msg.Sub); saveSUBR(Config_Msg.Sub); setGAR(Config_Msg.Gw); setSIPR(Config_Msg.Lip); // Set DHCP Config_Msg.DHCP = Enable_DHCP; //Destination IP address for TCP Client Chconfig_Type_Def.destip[0] = Dest_IP[0]; Chconfig_Type_Def.destip[1] = Dest_IP[1]; Chconfig_Type_Def.destip[2] = Dest_IP[2]; Chconfig_Type_Def.destip[3] = Dest_IP[3]; Chconfig_Type_Def.port = Dest_PORT; //Set PTR and RCR register setRTR(6000); setRCR(3); //Init. TX & RX Memory size sysinit(txsize, rxsize); printf("\r\n----------------------------------------- \r\n"); printf("W5200E01-M3 \r\n"); printf("Network Configuration Information \r\n"); printf("----------------------------------------- "); printf("\r\nMAC : %.2X.%.2X.%.2X.%.2X.%.2X.%.2X", IINCHIP_READ(SHAR0+0),IINCHIP_READ(SHAR0+1),IINCHIP_READ(SHAR0+2), IINCHIP_READ(SHAR0+3),IINCHIP_READ(SHAR0+4),IINCHIP_READ(SHAR0+5)); getSIPR (tmp_array); printf("\r\nIP : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); getSUBR(tmp_array); printf("\r\nSN : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); getGAR(tmp_array); printf("\r\nGW : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); }
// return values: // 1 on success // 0 otherwise int EthernetDNSClass::_startDNSSession() { (void)this->_closeDNSSession(); int i; for (i = NUM_SOCKETS-1; i>=0; i--) if (SOCK_CLOSED == IINCHIP_READ(Sn_SR(i))) { if (socket(i, Sn_MR_UDP, DNS_CLIENT_PORT, 0) > 0) { this->_socket = i; break; } } if (this->_socket < 0) return 0; uint16 port = DNS_SERVER_PORT; for (i=0; i<4; i++) IINCHIP_WRITE((Sn_DIPR0(this->_socket) + i), this->_dnsData.serverIpAddr[i]); IINCHIP_WRITE(Sn_DPORT0(this->_socket), (uint8)((port & 0xff00) >> 8)); IINCHIP_WRITE((Sn_DPORT0(this->_socket) + 1), (uint8)(port & 0x00ff)); return 1; }
/** @brief This function is for resetting of the iinchip. Initializes the iinchip to work in whether DIRECT or INDIRECT mode */ void iinchip_init(void) { setMR( MR_RST ); #ifdef __DEF_IINCHIP_DBG__ printf("MR value is %02x \r\n",IINCHIP_READ(MR)); #endif }
/** @brief This function is for resetting of the iinchip. Initializes the iinchip to work in whether DIRECT or INDIRECT mode */ void wizSWReset() { setMR( MR_RST ); #ifdef __DEF_IINCHIP_DBG__ printf("MR value is %02x \r\n",IINCHIP_READ(MR)); #endif }
uint8_t tcp_socket_init(TCP_CONFIG *config) { static bool startup=false; if(!startup) { GPIO_Configuration(); Reset_W5200(); WIZ_SPI_Init(); Set_network(config->Source_IP, config->Gateway, config->MAC, config->Subnet); startup=true; while (getSn_SR(config->s) != SOCK_CLOSED); } if(socket(config->s,Sn_MR_TCP,config->Source_Port,0x00)== 0) /* reinitialize the socket */ { return 0; //TCP socket failed } while (getSn_SR(config->s) != SOCK_INIT); // Wait for socket to open IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_LISTEN); // Start listening on port specified while (IINCHIP_READ(Sn_CR(config->s))); // Check status while (getSn_SR(config->s) != SOCK_LISTEN); // Wait for listen return 1; }
/** @brief This function get the UDP socket status. @return UDP socket status. */ int8 GetUDPSocketStatus(SOCKET s) { int8 ret=0; switch(getSn_SR(s)) { case SOCK_CLOSED: /**< closed */ ret = (int8)STATUS_CLOSED; break; case SOCK_UDP: /**< udp socket */ ret = STATUS_UDP; break; #if 0 case SOCK_IPRAW: /**< ip raw mode socket */ ret = 11; break; case SOCK_MACRAW: /**< mac raw mode socket */ ret = 12; break; case SOCK_PPPOE: /**< pppoe socket */ ret = 13; break; #endif default: if((IINCHIP_READ(Sn_MR(s))&0x0F) != Sn_MR_UDP) ret = (int8)ERROR_NOT_UDP_SOCKET; break; } return ret; }
uint8 getSn_IR(SOCKET s) { #ifdef __DEF_IINCHIP_INT__ // In case of using ISR routine of iinchip return SOCK_INT[s]; #else // In case of processing directly return (uint8)IINCHIP_READ(Sn_IR(s)); #endif }
void printSysCfg(void) { uint8 tmp_array[6]; printf("\r\n----------------------------------------- \r\n"); printf("W5200-Cortex M4 \r\n"); printf("Network Configuration Information \r\n"); printf("----------------------------------------- "); printf("\r\nMAC : %.2X.%.2X.%.2X.%.2X.%.2X.%.2X", IINCHIP_READ(SHAR0+0),IINCHIP_READ(SHAR0+1),IINCHIP_READ(SHAR0+2), IINCHIP_READ(SHAR0+3),IINCHIP_READ(SHAR0+4),IINCHIP_READ(SHAR0+5)); getSIPR (tmp_array); printf("\r\nIP : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); getSUBR(tmp_array); printf("\r\nSN : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); getGAR(tmp_array); printf("\r\nGW : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]); }
void getSHAR(uint8 * addr) { vuint16 tmp; tmp = IINCHIP_READ(SHAR); addr[0] = (uint8)(tmp>>8); addr[1] = (uint8)tmp; tmp = IINCHIP_READ(SHAR2); addr[2] = (uint8)(tmp>>8); addr[3] = (uint8)tmp; tmp = IINCHIP_READ(SHAR4); addr[4] = (uint8)(tmp>>8); addr[5] = (uint8)tmp; /* addr[0] = (uint8)(IINCHIP_READ(SHAR)>>8); addr[1] = (uint8)IINCHIP_READ(SHAR); addr[2] = (uint8)(IINCHIP_READ(SHAR2)>>8); addr[3] = (uint8)IINCHIP_READ(SHAR2); addr[4] = (uint8)(IINCHIP_READ(SHAR4)>>8); addr[5] = (uint8)IINCHIP_READ(SHAR4); */ }
void getSHAR(uint8 * addr) { addr[0] = IINCHIP_READ(SHAR); addr[1] = IINCHIP_READ(SHAR+1); addr[2] = IINCHIP_READ(SHAR+2); addr[3] = IINCHIP_READ(SHAR+3); addr[4] = IINCHIP_READ(SHAR+4); addr[5] = IINCHIP_READ(SHAR+5); }
void getSHAR(uint8 *addr) { addr[0] = IINCHIP_READ(WIZC_SHAR0); addr[1] = IINCHIP_READ(WIZC_SHAR1); addr[2] = IINCHIP_READ(WIZC_SHAR2); addr[3] = IINCHIP_READ(WIZC_SHAR3); addr[4] = IINCHIP_READ(WIZC_SHAR4); addr[5] = IINCHIP_READ(WIZC_SHAR5); }
void loopback_udp(SOCKET s, uint16 port, uint8 xdata *data_buf, uint16 mode) { switch (IINCHIP_READ(Sn_SR(s))) { case SOCK_UDP: loopback_recv(s); loopback_send(s); break; case SOCK_CLOSED: // CLOSED close(s); // close the SOCKET socket(s, Sn_MR_UDP, port, mode); // open the SOCKET with UDP mode printf("LOOPBACK_UDPStarted. CH : %bu\r\n", s); break; default: break; } }
/** @brief This function get the TCP socket status. @return TCP socket status. */ int8 GetTCPSocketStatus(SOCKET s) { int8 ret=0; switch(getSn_SR(s)) { case SOCK_CLOSED: /**< closed */ ret = (int8)STATUS_CLOSED; break; case SOCK_INIT: /**< init state */ ret = STATUS_INIT; break; case SOCK_LISTEN: /**< listen state */ ret = STATUS_LISTEN; break; case SOCK_SYNSENT: /**< connection state */ ret = STATUS_SYNSENT; break; case SOCK_SYNRECV: /**< connection state */ ret = STATUS_SYNRECV; break; case SOCK_ESTABLISHED: /**< success to connect */ ret = STATUS_ESTABLISHED; break; case SOCK_FIN_WAIT: /**< closing state */ ret = STATUS_FIN_WAIT; break; case SOCK_CLOSING: /**< closing state */ ret = STATUS_CLOSING; break; case SOCK_TIME_WAIT: /**< closing state */ ret = STATUS_TIME_WAIT; break; case SOCK_CLOSE_WAIT: /**< closing state */ ret = STATUS_CLOSE_WAIT; break; case SOCK_LAST_ACK: /**< closing state */ ret = STATUS_LAST_ACK; break; default: if((IINCHIP_READ(Sn_MR(s))&0x0F) != Sn_MR_TCP) ret = (int8)ERROR_NOT_TCP_SOCKET; break; } return ret; }
/*----------- TCP Server Routine ------------*/ void ProcessTcpServer(SOCKET mSocket, uint16 port) { // if len is not volatile, it will overflow // and causes 'cstack' overstack error volatile uint16_t len; getSn = getSn_SR(mSocket); switch (getSn_SR(mSocket)) { case SOCK_ESTABLISHED: if(ch_status[mSocket] == 0) { printf("\r\n------------------------"); printf("\r\nSocket No. %d : Connected", mSocket); printf("\r\n - Peer IP : %d.%d.%d.%d", IINCHIP_READ(Sn_DIPR0(mSocket)+0), IINCHIP_READ(Sn_DIPR0(mSocket)+1), IINCHIP_READ(Sn_DIPR0(mSocket)+2), IINCHIP_READ(Sn_DIPR0(mSocket)+3)); printf("\r\n - Peer Port : %d", ( (uint16)(IINCHIP_READ(Sn_DPORT0(mSocket)+0)<<8) + (uint16)IINCHIP_READ(Sn_DPORT0(mSocket)+1)) ); printf("\r\n - Source Port : %d", IINCHIP_READ(Sn_PORT0(mSocket))); ch_status[mSocket] = 1; } /* check Rx data and set flags only when there's valid character recognized */ if ((len = getSn_RX_RSR(mSocket)) > 0) { /* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */ /* the data size to read is MAX_BUF_SIZE. */ if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE; switch(mSocket) { case SOCK_ZERO : E1Flag = true; break; // EQ-DAQ-01 board case SOCK_ONE : E2Flag = true; break; // EQ-DAQ-02 board case SOCK_TWO : PCFlag = true; break; // PC Client default : break; } /* prevent from overflowing */ len = recv(mSocket, RX_BUF, len); } break; case SOCK_CLOSE_WAIT: E1Flag = false; // Reset E1 flag E2Flag = false; // Reset E2 flag PCFlag = false; // Reset PC flag printf("\r\nSocket No. %d : CLOSE_WAIT", mSocket); // disconnect and set status disconnect(mSocket); ch_status[mSocket] = 0; break; case SOCK_INIT: lis = listen(mSocket); break; case SOCK_CLOSED: //reinitialize the socket if(socket(mSocket, Sn_MR_TCP, port ,0x00) == 0) { printf("Fail to create socket."); } else { E1Flag = false; // Reset E1 flag E2Flag = false; // Reset E2 flag PCFlag = false; // Reset PC flag lis = listen(mSocket); } break; } }
/** @brief This function set the transmit & receive buffer size as per the channels */ void wizMemInit( uint8 * tx_size, uint8 * rx_size ) { int16 i; int16 ssum,rsum; #ifdef __DEF_IINCHIP_DBG__ printf("sysinit()\r\n"); #endif ssum = 0; rsum = 0; SBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_TXBUF__); /* Set base address of Tx memory for channel #0 */ RBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_RXBUF__); /* Set base address of Rx memory for channel #0 */ for (i = 0 ; i < MAX_SOCK_NUM; i++) // Set the size, masking and base address of Tx & Rx memory by each channel { IINCHIP_WRITE((Sn_TXMEM_SIZE(i)),tx_size[i]); IINCHIP_WRITE((Sn_RXMEM_SIZE(i)),rx_size[i]); #ifdef __DEF_IINCHIP_DBG__ printf("Sn_TXMEM_SIZE = %d\r\n",IINCHIP_READ(Sn_TXMEM_SIZE(i))); printf("Sn_RXMEM_SIZE = %d\r\n",IINCHIP_READ(Sn_RXMEM_SIZE(i))); #endif SSIZE[i] = (int16)(0); RSIZE[i] = (int16)(0); if (ssum <= 16384) { switch( tx_size[i] ) { case 1: SSIZE[i] = (int16)(1024); SMASK[i] = (uint16)(0x03FF); break; case 2: SSIZE[i] = (int16)(2048); SMASK[i] = (uint16)(0x07FF); break; case 4: SSIZE[i] = (int16)(4096); SMASK[i] = (uint16)(0x0FFF); break; case 8: SSIZE[i] = (int16)(8192); SMASK[i] = (uint16)(0x1FFF); break; case 16: SSIZE[i] = (int16)(16384); SMASK[i] = (uint16)(0x3FFF); break; } } if (rsum <= 16384) { switch( rx_size[i] ) { case 1: RSIZE[i] = (int16)(1024); RMASK[i] = (uint16)(0x03FF); break; case 2: RSIZE[i] = (int16)(2048); RMASK[i] = (uint16)(0x07FF); break; case 4: RSIZE[i] = (int16)(4096); RMASK[i] = (uint16)(0x0FFF); break; case 8: RSIZE[i] = (int16)(8192); RMASK[i] = (uint16)(0x1FFF); break; case 16: RSIZE[i] = (int16)(16384); RMASK[i] = (uint16)(0x3FFF); break; } } ssum += SSIZE[i]; rsum += RSIZE[i]; if (i != 0) // Sets base address of Tx and Rx memory for channel #1,#2,#3 { SBUFBASEADDRESS[i] = SBUFBASEADDRESS[i-1] + SSIZE[i-1]; RBUFBASEADDRESS[i] = RBUFBASEADDRESS[i-1] + RSIZE[i-1]; } #ifdef __DEF_IINCHIP_DBG__ printf("ch = %d\r\n",i); printf("SBUFBASEADDRESS = %d\r\n",(uint16)SBUFBASEADDRESS[i]); printf("RBUFBASEADDRESS = %d\r\n",(uint16)RBUFBASEADDRESS[i]); printf("SSIZE = %d\r\n",SSIZE[i]); printf("RSIZE = %d\r\n",RSIZE[i]); #endif } }
/** @brief This function gets Interrupt register in common register. */ uint8 getIR( void ) { return IINCHIP_READ(IR); }
/** @brief This function set the transmit & receive buffer size as per the channels is used Note for TMSR and RMSR bits are as follows\n bit 1-0 : memory size of channel #0 \n bit 3-2 : memory size of channel #1 \n bit 5-4 : memory size of channel #2 \n bit 7-6 : memory size of channel #3 \n bit 9-8 : memory size of channel #4 \n bit 11-10 : memory size of channel #5 \n bit 12-12 : memory size of channel #6 \n bit 15-14 : memory size of channel #7 \n Maximum memory size for Tx, Rx in the W5500 is 16K Bytes,\n In the range of 16KBytes, the memory size could be allocated dynamically by each channel.\n Be attentive to sum of memory size shouldn't exceed 8Kbytes\n and to data transmission and receiption from non-allocated channel may cause some problems.\n If the 16KBytes memory is already assigned to centain channel, \n other 3 channels couldn't be used, for there's no available memory.\n If two 4KBytes memory are assigned to two each channels, \n other 2 channels couldn't be used, for there's no available memory.\n */ void sysinit( uint8 * tx_size, uint8 * rx_size ) { int16 i; int16 ssum,rsum; #ifdef __DEF_IINCHIP_DBG__ printf("sysinit()\r\n"); #endif ssum = 0; rsum = 0; for (i = 0 ; i < MAX_SOCK_NUM; i++) // Set the size, masking and base address of Tx & Rx memory by each channel { IINCHIP_WRITE( (Sn_TXMEM_SIZE(i)), tx_size[i]); IINCHIP_WRITE( (Sn_RXMEM_SIZE(i)), rx_size[i]); #ifdef __DEF_IINCHIP_DBG__ printf("tx_size[%d]: %d, Sn_TXMEM_SIZE = %d\r\n",i, tx_size[i], IINCHIP_READ(Sn_TXMEM_SIZE(i))); printf("rx_size[%d]: %d, Sn_RXMEM_SIZE = %d\r\n",i, rx_size[i], IINCHIP_READ(Sn_RXMEM_SIZE(i))); #endif SSIZE[i] = (int16)(0); RSIZE[i] = (int16)(0); if (ssum <= 16384) { switch( tx_size[i] ) { case 1: SSIZE[i] = (int16)(1024); break; case 2: SSIZE[i] = (int16)(2048); break; case 4: SSIZE[i] = (int16)(4096); break; case 8: SSIZE[i] = (int16)(8192); break; case 16: SSIZE[i] = (int16)(16384); break; default : RSIZE[i] = (int16)(2048); break; } } if (rsum <= 16384) { switch( rx_size[i] ) { case 1: RSIZE[i] = (int16)(1024); break; case 2: RSIZE[i] = (int16)(2048); break; case 4: RSIZE[i] = (int16)(4096); break; case 8: RSIZE[i] = (int16)(8192); break; case 16: RSIZE[i] = (int16)(16384); break; default : RSIZE[i] = (int16)(2048); break; } } ssum += SSIZE[i]; rsum += RSIZE[i]; } }