Modified for W5500 Ethernet initialize

Fork of GMMP_mbed by SKTelecom_ThingPlug

Network/Network.cpp

Committer:
hkjung
Date:
2015-08-12
Revision:
3:6b4536e1962f
Parent:
0:7e575e5f88ec

File content as of revision 3:6b4536e1962f:

/** TCP Socket 통신을 위한 모듈
 * @file Network.cpp
 * @date 2015/07/20
 * @version 0.0.1.0
 **/

#include "Client.h"

#include "Network.h"
#include "GMMP_Operation.h"

int g_socket = -1;

//Client client;
extern Client *g_pClient; //lesmin

void CloseSocket()
{
	if (g_socket <= 0) return;

	g_socket = -1;
	
	return;
}

int CheckSocket()
{
	return 0;
}

int Connect()
{  
  int ret = GMMP_SUCCESS;  

  //delay(2000);
  infoln("Connecting...");
  INFO("server ip: %d.%d.%d.%d:%d", g_serverIp[0], g_serverIp[1], g_serverIp[2], g_serverIp[3], g_nServerPort);

  char szServerIp[24];
  sprintf(szServerIp, "%d.%d.%d.%d", g_serverIp[0], g_serverIp[1], g_serverIp[2], g_serverIp[3]);

	if(g_pClient == NULL) {
		ERR("pClient is NULL!!!");
		return LIB_PARAM_ERROR;
	}

//  if (client.connect((char *)szServerIp, g_nServerPort)) {
	/*
	if (g_pClient->connect((char *)szServerIp, g_nServerPort)) {
		infoln("Connected!!");
	} else {
		infoln("connection failed!");
		ret = SERVER_CONNECT_ERROR;
	}
	*/
	int retry = 30;
	do
	{		
		if(retry <= 0) {
			ret = SERVER_CONNECT_ERROR;
			break;
		}
		
		infoln("Trying to connect to Server...");
		if (g_pClient->connect((char *)szServerIp, g_nServerPort)) {
			infoln("Connected!");
			break;
		}	
		
		infoln("Connection failed!");
	} while(retry--);

	return ret;
}

int WriteTCP(char* pBuf, int nLen)
{
	DBG("WriteTCP(): %d", nLen);

	if (pBuf == NULL || nLen <= 0) return LIB_PARAM_ERROR;

	if(g_pClient == NULL) {
		ERR("pClient is NULL!!!");
		return LIB_PARAM_ERROR;
	}
//  client.write(pBuf, nLen);
	g_pClient->write(pBuf, nLen);

	return GMMP_SUCCESS;
}

int ReadTCP(char* pBuf, const int nMaxlen)
{
  return ReadTCP2(pBuf, nMaxlen, 1);
}

int ReadTCPAsync(char* pBuf, const int nMaxlen);

int ReadTCP2(char* pBuf, const int nMaxlen, byte blocking)
{
  //blocking = 0;

  if (!blocking) {
    return ReadTCPAsync(pBuf, nMaxlen);
  }

	if (pBuf == NULL || nMaxlen <= 0) return LIB_PARAM_ERROR;

	if(g_pClient == NULL) {
		ERR("pClient is NULL!!!");
		return LIB_PARAM_ERROR;
	}

	int idx = 0;
	memset(pBuf,  0, nMaxlen);

	while(idx < nMaxlen)
	{
//    if (client.available()) {
    if (g_pClient->available()) {
//		  pBuf[idx] = client.read();
		  pBuf[idx] = g_pClient->read();
      DBG("%d", idx);
      DBG(" %c",(byte)pBuf[idx]);
      idx++;
    } else {
      //debugln("E_WOULDBLOCK");
      return E_WOULDBLOCK;
    }
	}

	return GMMP_SUCCESS;
}

int ReadTCPAsync(char* pBuf, const int nMaxlen)
{
	if (pBuf == NULL || nMaxlen <= 0) return LIB_PARAM_ERROR;

	if(g_pClient == NULL) {
		ERR("pClient is NULL!!!");
		return LIB_PARAM_ERROR;
	}

	int idx = 0;
  char val = -1;

	memset(pBuf,  0, nMaxlen);

	while(idx < nMaxlen)
	{
//    val = client.read();
    val = g_pClient->read();

    if (val != -1) {
		  pBuf[idx++] = (byte)val;
      
      /*
		  pBuf[idx] = (byte)val;
      debug(idx);
      debug(" ");
      debugln((byte)pBuf[idx]);
      idx++;
      */
    } else {
      return E_WOULDBLOCK;
    }
	}

	return GMMP_SUCCESS;
}