int Setting::Compare(const SettingData & x, const SettingData & y) const
{
	in_addr_t ipX, ipY;
	bool bValidX, bValidY;
	switch (m_eType & 0xF)
	{
	case SettingTypeText:
	case SettingTypeFile:
		return x.strValue.compare(y.strValue);
	case SettingTypeColor:
		return strcasecmp((const char *)x.strValue, (const char *)y.strValue);
	case SettingTypeIP:
		bValidX = StringToIPAddress(x.strValue, ipX);
		bValidY = StringToIPAddress(y.strValue, ipY);
		if (bValidX && bValidY)
		{
			ipX = htonl(ipX);
			ipY = htonl(ipY);
			return ipX - ipY;
		}
		else if (bValidX)
			return 1;
		else if (bValidY)
			return -1;
		else
			return 0;
	case SettingTypeBool:
		if (x.bValue)
			return y.bValue ? 0 : 1;
		else
			return y.bValue ? -1 : 0;
	case SettingTypeInt:
		return x.iValue - y.iValue;
	case SettingTypeFloat:
		if (x.fValue < y.fValue)
			return -1;
		else if (x.fValue == y.fValue)
			return 0;
		else
			return 1;
	default:
		return 0;
	}
}
Beispiel #2
0
/**
 * UDPClientOpen - Create a UDP client on specified port, try more time for arp request.
 * \param udpaddr IP address of server
 * \param udpport Remote Port of UDP server
 * \return The number of current socket or 0 if an error occured during the opening of the socket.
 */
BYTE UDPClientOpen (char *udpaddr, char udpport[])
{			

	static NODE_INFO Server;
 	StringToIPAddress((BYTE*) udpaddr, &Server.IPAddr);
	ARPResolveMAC((char*) &(Server.IPAddr));
	if(ARPIsResolved(&Server.IPAddr, &Server.MACAddr))
		return UDPGenericOpen(0, &Server, udpport);
	else 
		return 0;
}
Beispiel #3
0
void *
domainInit(void *arg)
{
  ORTEDomainProp dp;

  ORTEDomainPropDefaultGet(&dp);
  ORTEVerbositySetOptions(verbosity);
  dp.appLocalManager = StringToIPAddress(manager);
  d = ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN, &dp, NULL, ORTE_TRUE);
  return arg;
}
Beispiel #4
0
Datei: DNS.c Projekt: CEIT-UQ/RGB
/*****************************************************************************
  Function:
	void DNSResolve(BYTE* Hostname, BYTE Type)

  Summary:
	Begins resolution of an address.
	
  Description:
	This function attempts to resolve a host name to an IP address.  When 
	called, it starts the DNS state machine.  Call DNSIsResolved repeatedly
	to determine if the resolution is complete.
	
	Only one DNS resoultion may be executed at a time.  The Hostname must 
	not be modified in memory until the resolution is complete.

  Precondition:
	DNSBeginUsage returned TRUE on a previous call.

  Parameters:
	Hostname - A pointer to the null terminated string specifiying the
		host for which to resolve an IP.
	RecordType - DNS_TYPE_A or DNS_TYPE_MX depending on what type of
		record resolution is desired.

  Returns:
  	None
  	
  Remarks:
	This function requires access to one UDP socket.  If none are available,
	MAX_UDP_SOCKETS may need to be increased.
  ***************************************************************************/
void DNSResolve(BYTE* Hostname, BYTE Type)
{
	if(StringToIPAddress(Hostname, &ResolvedInfo.IPAddr))
	{
		Flags.bits.AddressValid = TRUE;
		smDNS = DNS_DONE;
	}
	else
	{	
		DNSHostName = Hostname;
		DNSHostNameROM = NULL;
		smDNS = DNS_START;
		RecordType = Type;
		Flags.bits.AddressValid = FALSE;
	}
}
Beispiel #5
0
/**
 * UDPClientOpen - Create a UDP client on specified port, try more time for arp request.
 * \param udpaddr IP address of server
 * \param udpport Remote Port of UDP server
 * \return The number of current socket or 0 if an error occured during the opening of the socket.
 */
BYTE UDPClientOpen (char *udpaddr, char udpport[])
{
    #if defined (FLYPORT)
	if (WFStatus != TURNED_OFF)
    #endif
	{
		static NODE_INFO Server;
		StringToIPAddress((BYTE*) udpaddr, &Server.IPAddr);
		ARPResolveMAC((char*) &(Server.IPAddr));
		vTaskDelay(30);
		if(ARPIsResolved(&Server.IPAddr, &Server.MACAddr))
			return UDPGenericOpen(0, &Server, udpport);
		else 
			return 0;
	}
	return 0;
}
bool Setting::IsValid(const SettingData & sValue) const
{
	bool bValid;
	unsigned int i;
	if ((m_eType & SettingTypeList) == SettingTypeList)
	{
		bValid = false;
		for (i = 0; i < m_iEnum; i++)
		{
			if (Compare(m_vecEnum[i], sValue) == 0) {
				bValid = true;
				break;
			}
		}
	}
	else if ((m_eType & SettingTypeRange) == SettingTypeRange)
	{
		bValid = (m_pMin == NULL || Compare(*m_pMin, sValue) <= 0) && (m_pMax == NULL || Compare(*m_pMax, sValue) >= 0);
	}
	else
		bValid = true;

	if (bValid)
	{
		in_addr_t ipAddress;
		switch (m_eType & 0xF)
		{
		case SettingTypeText:
		case SettingTypeFile:
			return true;
		case SettingTypeColor:
			return QColor(sValue.strValue).isValid();
		case SettingTypeIP:
			return StringToIPAddress(sValue.strValue, ipAddress);
		case SettingTypeBool:
		case SettingTypeInt:
		case SettingTypeFloat:
			return true;
		default:
			return false;
		}
	} else
		return false;
}
bool Setting::SetValue(const SettingData & sValue)
{
	bool bValid;
	in_addr_t ipValue;
	if (bValid = IsValid(sValue))
	{
		switch (m_eType & 0xF)
		{
		case SettingTypeText:
		case SettingTypeFile:
			m_sValue.strValue = sValue.strValue;
			break;
		case SettingTypeColor:
		{
			QColor clr(sValue.strValue);
			m_sValue.strValue = clr.isValid() ? clr.name() : "";
			break;
		}
		case SettingTypeIP:
			StringToIPAddress(sValue.strValue, ipValue);
			m_sValue.strValue = IPAddressToString(ipValue);
			break;
		case SettingTypeBool:
			m_sValue.bValue = sValue.bValue;
			break;
		case SettingTypeInt:
			m_sValue.iValue = sValue.iValue;
			break;
		case SettingTypeFloat:
			m_sValue.fValue = sValue.fValue;
			break;
		default:
			return false;
		}
	}
	return bValid;
}
Beispiel #8
0
int CarModel::Init(const std::map<QString, QString> & mapParams)
{
	QString strValue;
	MapCarObject * pObject;
	Model * pModel;

	if (Model::Init(mapParams))
		return 1;

	strValue = GetParam(mapParams, CARMODEL_PARAM_DELAY, CARMODEL_PARAM_DELAY_DEFAULT);
	m_tDelay = MakeTime(ValidateNumber(StringToNumber(strValue), 0., HUGE_VAL));

	strValue = GetParam(mapParams, CARMODEL_PARAM_CARIP, CARMODEL_PARAM_CARIP_DEFAULT);
	if (!StringToIPAddress(strValue, m_ipCar))
		return 2;

	strValue = GetParam(mapParams, CARMODEL_PARAM_LOGCAR, CARMODEL_PARAM_LOGCAR_DEFAULT);
	m_bLogThisCar = StringToBoolean(strValue);

	strValue = GetParam(mapParams, CARMODEL_LINK_PARAM, CARMODEL_LINK_PARAM_DEFAULT);
	if (!g_pSimulator->m_ModelMgr.GetModel(strValue, pModel))
		return 5;
	m_pLinkModel = (CarLinkModel *)pModel;
	if (m_pLinkModel != NULL)
		m_pLinkModel->SetCar(m_ipCar);
	strValue = GetParam(mapParams, CARMODEL_PHYS_PARAM, CARMODEL_PHYS_PARAM_DEFAULT);
	if (!g_pSimulator->m_ModelMgr.GetModel(strValue, pModel))
		return 6;
	m_pPhysModel = (CarPhysModel *)pModel;
	if (m_pPhysModel != NULL)
		m_pPhysModel->SetCar(m_ipCar);

	strValue = GetParam(mapParams, CARMODEL_COMM_PARAM, CARMODEL_COMM_PARAM_DEFAULT);
	if (!g_pSimulator->m_ModelMgr.GetModel(strValue, pModel))
		return 4;
	m_pCommModel = (CarCommModel *)pModel;
	if (m_pCommModel != NULL)
		m_pCommModel->SetCar(m_ipCar);

	strValue = GetParam(mapParams, CARMODEL_TRACKSPEED_PARAM, CARMODEL_TRACKSPEED_PARAM_DEFAULT);
	m_bTrackSpeed = StringToBoolean(strValue);

	pObject = new MapCarObject(this);

//HACK: set color based on ip group
	in_addr_t temp = pObject->m_pCar->GetIPAddress();
	temp = temp>>8 & 0xFF;
	if(temp == 100) //red ones
	{
		QColor * redColor = new QColor(0xFF, 0x00, 0x00);
		pObject->SetColor(redColor->rgb());
	}
	else if(temp == 200) //black ones
	{
		QColor * redColor = new QColor(0x00, 0x00, 0x00);
		pObject->SetColor(redColor->rgb());
	}
	else //the others
	{
		pObject->SetColor(g_pMapObjects->GetColor());
	}
//end HACK

	m_iMapObjectID = g_pMapObjects->add(pObject);
	if (m_iMapObjectID == -1)
		delete pObject;

	g_pCarRegistry->addCar(this);

	m_iNextSeqNumber = 0;
	m_iNextRXSeqNumber = 0;



	return 0;
}
Beispiel #9
0
int
main(int argc, char *argv[])
{
#if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
  static struct option long_opts[] = {
    { "domain", 1, 0, 'd' },
    { "verbosity", 1, 0, 'v' },
    { "refresh", 1, 0, 'R' },
    { "purge", 1, 0, 'P' },
    { "expiration", 1, 0, 'E' },
    { "metaMulticast", 1, 0, 'I' },
    { "logfile", 1, 0, 'l' },
    { "version", 0, 0, 'V' },
    { "help",  0, 0, 'h' },
    { 0, 0, 0, 0}
  };
#endif
  ORTEDomainProp          dp;
  int                     opt, domain = ORTE_DEFAULT_DOMAIN;

  ORTEInit();
  ORTEDomainPropDefaultGet(&dp);
  NTPTIME_BUILD(deadline, 3);
  NTPTIME_BUILD(minimumSeparation, 0);

#if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
  while ((opt = getopt_long(argc, argv, "d:v:R:E:I:P:l:Vh", &long_opts[0], NULL)) != EOF) {
#else
  while ((opt = getopt(argc, argv, "d:v:R:E:I:P:l:Vh")) != EOF) {
#endif
    switch (opt) {
      case 'd':
	domain = strtol(optarg, NULL, 0);
	break;
      case 'v':
	ORTEVerbositySetOptions(optarg);
	break;
      case 'R':
	NtpTimeAssembFromMs(dp.baseProp.refreshPeriod, strtol(optarg, NULL, 0), 0);
	break;
      case 'P':
	NtpTimeAssembFromMs(dp.baseProp.purgeTime, strtol(optarg, NULL, 0), 0);
	break;
      case 'E':
	NtpTimeAssembFromMs(dp.baseProp.expirationTime, strtol(optarg, NULL, 0), 0);
	break;
      case 'I':
	dp.multicast.enabled = ORTE_TRUE;
	dp.multicast.ipAddress = StringToIPAddress(optarg);
	break;
      case 'l':
	ORTEVerbositySetLogFile(optarg);
      case 'V':
	printf("Open Real-Time Ethernet (%s).\n", dp.version);
	exit(0);
	break;
      case 'h':
      default:
	usage();
	exit(opt == 'h' ? 0 : 1);
    }
  }
  //Create application
  printf("|------------------------------------------------------------------------------|\n");
  printf("| %-10s | %-9s | %-9s | %-18s | %-18s |\n",
	 "status", "type", "topic", "time received", "time sent");
  printf("|------------------------------------------------------------------------------|\n");
  d = ORTEDomainAppCreate(domain, &dp, NULL, ORTE_TRUE);
  ORTEDomainAppSubscriptionPatternAdd(d, "*", "*", subscriptionCallBack, NULL);
  ORTEDomainStart(d, ORTE_TRUE, ORTE_FALSE, ORTE_TRUE, ORTE_FALSE, ORTE_TRUE);
  while (1)
    ORTESleepMs(1000);
  exit(0);
}
Beispiel #10
0
/****************************************************************************
  Function:
    void DDNSTask(void)

  Summary:
    Dynamic DNS client task/state machine.

  Description:
  	This function performs the background tasks of the Dynamic DNS Client.
  	Once the DDNSPointers structure is configured, this task attempt to 
  	update the Dynamic DNS hostname on a periodic schedule.
  	
  	The task first accesses the CheckIP server to determine the device's
  	current external IP address.  If the IP address has changed, it 
  	issues an update command to the dynamic DNS service to propagate the
  	change.  This sequence executes whenever dwUpdateAt elapses, which by
  	default is every 10 minutes, or when an update is forced.
    
  Precondition:
    DDNSInit() has been called.

  Parameters:
	None
	
  Returns:
    None

  Remarks:
	This function acts as a task (similar to one in an RTOS).  It
	performs its task in a co-operative manner, and the main application
	must call this function periodically to ensure that its tasks get 
	executed in a timely fashion.
  ***************************************************************************/
void DDNSTask(void)
{
	BYTE 				i;
	static TICK			Timer;
	static TCP_SOCKET	MySocket = INVALID_SOCKET;
	static char ROM * 	ROMStrPtr;
	static char * 		RAMStrPtr;

	static BYTE vBuffer[16];
	WORD wPos;
	static IP_ADDR ipParsed;
	
	static enum
	{
		SM_IDLE = 0u,
		SM_BEGIN_CHECKIP,				//0x1
		SM_CHECKIP_SKT_OBTAINED,		//0x2
		SM_CHECKIP_FIND_DELIMITER,		//0x3
		SM_CHECKIP_FIND_ADDRESS,		//0x4
		SM_CHECKIP_DISCONNECT,			//0x5
		SM_IP_UPDATE_HOME,				//0x6
		SM_IP_UPDATE_SKT_OBTAINED,		//0x7

		/*  
			HTTP request msg is divided into 6 parts 
			SM_IP_UPDATE_REQ_A,B,C,D,E,F as the tcp ip tx
			buffer is only able to carry 200 bytes at a time.
		*/
		
		SM_IP_UPDATE_REQ_A,				//0x8
		SM_IP_UPDATE_REQ_B,				//0x9
		SM_IP_UPDATE_REQ_C,				//0xa	
		SM_IP_UPDATE_REQ_D,				//0xb
		SM_IP_UPDATE_REQ_E,				//0xc
		SM_IP_UPDATE_REQ_F,				//0xd

		SM_IPUPDATE_FIND_RESPONSE,		//0xe
		SM_IPUPDATE_PARSE_RESPONSE,		//0xf
		SM_IPUDATE_DISCONNECT,			//0x10
		SM_DONE,						// Done, try again in 10 minutes
		SM_SOFT_ERROR,					// Soft error, try again in 30 seconds
		SM_SYSTEM_ERROR 				// System error, try again in 30 minutes
	} smDDNS = SM_IDLE;

	switch(smDDNS)
	{
		case SM_IDLE:

			// Wait for timeout to begin IP check
			if((LONG)(TickGet() - dwUpdateAt) < 0)
				break;
			
			// Otherwise, continue to next state
			smDDNS = SM_BEGIN_CHECKIP;
				
		case SM_BEGIN_CHECKIP:
			
			// If a fatal error has occurred, abort to the SM_DONE state and keep
			// the error message.
			if(lastStatus >= DDNS_STATUS_ABUSE && lastStatus <= DDNS_STATUS_911)
			{
				smDDNS = SM_DONE;
				break;
			}

			// If DDNSClient is not properly configured, abort
			if( 
				// Verify that each pointer is not null, and is not empty
				(DDNSClient.ROMPointers.Host && (!DDNSClient.Host.szROM || *DDNSClient.Host.szROM == '\0') ) ||
				(!DDNSClient.ROMPointers.Host && (!DDNSClient.Host.szRAM || *DDNSClient.Host.szRAM == '\0') ) ||
				(DDNSClient.ROMPointers.Username && (!DDNSClient.Username.szROM || *DDNSClient.Username.szROM == '\0') ) ||
				(!DDNSClient.ROMPointers.Username && (!DDNSClient.Username.szRAM || *DDNSClient.Username.szRAM == '\0') ) ||
				(DDNSClient.ROMPointers.Password && (!DDNSClient.Password.szROM || *DDNSClient.Password.szROM == '\0') ) ||
				(!DDNSClient.ROMPointers.Password && (!DDNSClient.Password.szRAM || *DDNSClient.Password.szRAM == '\0') ) ||
				(DDNSClient.ROMPointers.CheckIPServer && (!DDNSClient.CheckIPServer.szROM || *DDNSClient.CheckIPServer.szROM == '\0') ) ||
				(!DDNSClient.ROMPointers.CheckIPServer && (!DDNSClient.CheckIPServer.szRAM || *DDNSClient.CheckIPServer.szRAM == '\0') ) ||
				(DDNSClient.ROMPointers.UpdateServer && (!DDNSClient.UpdateServer.szROM || *DDNSClient.UpdateServer.szROM == '\0') ) ||
				(!DDNSClient.ROMPointers.UpdateServer && (!DDNSClient.UpdateServer.szRAM || *DDNSClient.UpdateServer.szRAM == '\0') )
			)
			{
				smDDNS = SM_SOFT_ERROR;
				lastStatus = DDNS_STATUS_INVALID;
				break;
			}
			
			// Start with an invalidated IP String
			vBuffer[0] = '\0';
	
			// Connect a socket to the remote server
			if(DDNSClient.ROMPointers.CheckIPServer)
			{	
				MySocket = TCPOpen((DWORD)(ROM_PTR_BASE)DDNSClient.CheckIPServer.szROM, TCP_OPEN_ROM_HOST,
					DDNSClient.CheckIPPort, TCP_PURPOSE_DEFAULT);
			}
			else
			{
				MySocket = TCPOpen((DWORD)(PTR_BASE)DDNSClient.CheckIPServer.szRAM, TCP_OPEN_RAM_HOST,
					DDNSClient.CheckIPPort, TCP_PURPOSE_DEFAULT);						
			}
			
			// If no socket available, try again on next loop
			if(MySocket == INVALID_SOCKET)
				break;

			smDDNS++;
			Timer = TickGet();
			break;

		case SM_CHECKIP_SKT_OBTAINED:

			// Wait for the remote server to accept our connection request
			if(!TCPIsConnected(MySocket))
			{
				// Time out if too much time is spent in this state
				if(TickGet()-Timer > 6*TICK_SECOND)
				{
					// Close the socket so it can be used by other modules
					// We will retry soon
					TCPDisconnect(MySocket);
					MySocket = INVALID_SOCKET;
					lastStatus = DDNS_STATUS_CHECKIP_ERROR;
					smDDNS = SM_SOFT_ERROR;
				}
				break;
			}

			Timer = TickGet();

			// Make certain the socket can be written to
			if(TCPIsPutReady(MySocket) < 125)//125 = size of TCP Tx buffer
				break;
			
			// Transmit the request to the server
			TCPPutROMString(MySocket, (ROM BYTE*)"GET / HTTP/1.0\r\nHost: ");

			if(DDNSClient.ROMPointers.CheckIPServer)
			{
				TCPPutROMString(MySocket, DDNSClient.CheckIPServer.szROM);
			}
			else
			{
				TCPPutString(MySocket, DDNSClient.CheckIPServer.szRAM);
			}

			TCPPutROMString(MySocket, (ROM BYTE*)"\r\nConnection: close\r\n\r\n");

			// Send the packet
			TCPFlush(MySocket);
			smDDNS++;
			break;

		case SM_CHECKIP_FIND_DELIMITER:

			// Check if remote node is still connected.  If not, force to the disconnect state,
			// but don't break because data may still be waiting.
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 6*TICK_SECOND)
				smDDNS = SM_CHECKIP_DISCONNECT;

			// Search out the "Address: " delimiter in the response
			wPos = TCPFindROMArray(MySocket, (ROM BYTE*)"Address: ", 9, 0, FALSE);
			
			// If not yet found, clear as much as possible and break
			if(wPos == 0xffff)
			{
				wPos = TCPIsGetReady(MySocket);
				if(wPos > 9)
					TCPGetArray(MySocket, NULL, wPos - 9);
				break;
			}
				
			// Clear up to and past that string
			TCPGetArray(MySocket, NULL, wPos + 9);
		
			// Continue on to read the IP
			Timer = TickGet();
			smDDNS++;
		
		case SM_CHECKIP_FIND_ADDRESS:
			
			// Check if remote node is still connected.  If not, force to the disconnect state,
			// but don't break because data may still be waiting.
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 6*TICK_SECOND)
				smDDNS = SM_CHECKIP_DISCONNECT;

			// Search out the "</body>" delimiter in the response
			wPos = TCPFindROMArray(MySocket, (ROM BYTE*)"</body>", 7, 0, FALSE);
			
			// If not yet found, break
			if(wPos == 0xffff)
				break;
				
			// Read and terminate that string as the IP address (preventing buffer overflows)
			if(wPos > 15)
				wPos = 15;
			TCPGetArray(MySocket, vBuffer, wPos);
			vBuffer[wPos] = '\0';
			
			// Parse the IP address that was read, invalidating on failure
			if(!StringToIPAddress(vBuffer, &ipParsed))
				vBuffer[0] = '\0';

			// Continue on to close the socket			
			
		case SM_CHECKIP_DISCONNECT:

			// Close the socket
			TCPDisconnect(MySocket);
			MySocket = INVALID_SOCKET;

			// Determine if an update is necessary
			if(vBuffer[0] == '\0')
			{// CheckIP Failed
				lastStatus = DDNS_STATUS_CHECKIP_ERROR;
				smDDNS = SM_SOFT_ERROR;
				break;
			}

			if( (ipParsed.Val ==lastKnownIP.Val) && (!bForceUpdate))
			{
				// IP address has not changed and no update is forced
				lastStatus = DDNS_STATUS_UNCHANGED;
				smDDNS = SM_DONE;
				break;
			}
			
			// Need to perform an update
			lastKnownIP = ipParsed;
			bForceUpdate = FALSE;
			smDDNS++;
			break;
			 
		case SM_IP_UPDATE_HOME:

			// Connect a socket to the remote server
			if(DDNSClient.ROMPointers.UpdateServer)
			{
				MySocket = TCPOpen((DWORD)(ROM_PTR_BASE)DDNSClient.UpdateServer.szROM, TCP_OPEN_ROM_HOST, 
					DDNSClient.UpdatePort, TCP_PURPOSE_DEFAULT);
			}
			else
			{
				MySocket = TCPOpen((DWORD)(PTR_BASE)DDNSClient.UpdateServer.szRAM, TCP_OPEN_RAM_HOST,
					DDNSClient.UpdatePort, TCP_PURPOSE_DEFAULT);
			}
	
			// If no socket is available, try again on the next loop
			if(MySocket == INVALID_SOCKET)
				break;
			
			// Move on to the next state
			smDDNS++;
			Timer = TickGet();
			break;

		case SM_IP_UPDATE_SKT_OBTAINED:
		
			// Wait for the remote server to accept our connection request
			if(!TCPIsConnected(MySocket))
			{
				// Time out if too much time is spent in this state
				if(TickGet() - Timer > 6*TICK_SECOND)
				{
					// Close the socket so it can be used by other modules
					// We will try again immediately
					TCPDisconnect(MySocket);
					MySocket = INVALID_SOCKET;
					lastStatus = DDNS_STATUS_UPDATE_ERROR;
					smDDNS--;
				}
				break;
			}
			
			// Reset timer and begin sending the request
			Timer = TickGet();
			smDDNS++;
			// No break needed...try to send first bit immediately.

		case SM_IP_UPDATE_REQ_A:
	
			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || (TickGet() - Timer > 10*TICK_SECOND))
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break;
			}
			
			if(TCPIsPutReady(MySocket) < 25u)  // 25 =~ 16+9
				break;

			TCPPutROMString(MySocket, (ROM BYTE*)"GET /nic/update?hostname=");
			smDDNS++;
			// No break needed...try to send next bit immediately.
			
		case SM_IP_UPDATE_REQ_B:

			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || (TickGet() - Timer > 10*TICK_SECOND))
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break; 
			}

			// Try to write, verifying that space is available first
			if(DDNSClient.ROMPointers.Host)
			{
				if(TCPIsPutReady(MySocket) < strlenpgm((ROM char*)DDNSClient.Host.szROM))
					break;
				TCPPutROMString(MySocket,DDNSClient.Host.szROM);
			}
			else
			{
				if(TCPIsPutReady(MySocket) < strlen((char*)DDNSClient.Host.szRAM))
					break;
				TCPPutString(MySocket,DDNSClient.Host.szRAM);
			}

			smDDNS++;
			// No break needed...try to send next bit immediately.
			
		case SM_IP_UPDATE_REQ_C:

			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 10*TICK_SECOND)
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break; 
			}

			if(TCPIsPutReady(MySocket) < 70u)
				break;
	
			TCPPutROMString(MySocket, (ROM BYTE*)"&myip=");
			TCPPutString(MySocket, vBuffer);
			TCPPutROMString(MySocket, (ROM BYTE*)"&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG HTTP/1.0");	

			TCPFlush(MySocket);
			smDDNS++;
			// No break needed...try to send next bit immediately.

		case SM_IP_UPDATE_REQ_D:

			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 10*TICK_SECOND)
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break; 
			}
			
			if(TCPIsPutReady(MySocket) < 131u) // 131 =~ 8+23 + dynamic dns server hostname
				break;

			TCPPutROMString(MySocket, (ROM BYTE*)"\r\nHost: ");//8
			
			if(DDNSClient.ROMPointers.UpdateServer)
				TCPPutROMString(MySocket,DDNSClient.UpdateServer.szROM);
			else
				TCPPutString(MySocket,DDNSClient.UpdateServer.szRAM);
			
			TCPPutROMString(MySocket, (ROM BYTE*)"\r\nAuthorization: Basic ");//23

			TCPFlush(MySocket);
			smDDNS++;
			// No break needed...try to send the next bit immediately.

		case SM_IP_UPDATE_REQ_E:

			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 6*TICK_SECOND)
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break; 
			}
			
			// User name and passwords for DynDNS.org can each be up to 24 characters
			// Base64 encoded data is always at least 25% bigger than the original
			if(TCPIsPutReady(MySocket) < 100u)
				break;	

			if(DDNSClient.ROMPointers.Username)
			{
				ROMStrPtr = (ROM char*)DDNSClient.Username.szROM;
				wPos = strlenpgm(ROMStrPtr);
			}
			else
			{
				RAMStrPtr = (char*)DDNSClient.Username.szRAM;
				wPos = strlen((char*)RAMStrPtr);
			}

			i = 0;
			while(wPos)
			{
				while(i < wPos && i < 3u)
				{
					if(DDNSClient.ROMPointers.Username)
						vBuffer[i] = *ROMStrPtr++;
					else
						vBuffer[i] = *RAMStrPtr++;
					i++;
				}
				wPos -= i; 				
										
				if(i == 3u)
				{
					Base64Encode(vBuffer, i, vBuffer, 4);
					TCPPutArray(MySocket, vBuffer, 4);
					i = 0;
				}
			}

			if(DDNSClient.ROMPointers.Password)
			{		
				ROMStrPtr = (ROM char*)DDNSClient.Password.szROM;
				wPos = strlenpgm(ROMStrPtr);
			}
			else
			{
				RAMStrPtr = (char*)DDNSClient.Password.szRAM;
				wPos = strlen((char*)RAMStrPtr);
			}

		  	// Increment for the ':' separator and i for bytes left in username
		  	wPos += i + 1;
			
			vBuffer[i++] = ':';

			while(wPos)
			{
				while(i < wPos && i < 3u)
				{
					if(DDNSClient.ROMPointers.Password)
						vBuffer[i] = *ROMStrPtr++;
					else
						vBuffer[i] = *RAMStrPtr++;
					i++;
				}
				wPos -= i; 				
				Base64Encode(vBuffer, i, vBuffer, 4);
				TCPPutArray(MySocket, vBuffer, 4);
				i = 0;
			}
			
			TCPFlush(MySocket);
			smDDNS++;
			break;

			
		case SM_IP_UPDATE_REQ_F:

			// Check for lost connections or timeouts
			if(!TCPIsConnected(MySocket) || TickGet() - Timer > 10*TICK_SECOND)
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break; 
			}
			
			if(TCPIsPutReady(MySocket) < 50)
				break;
			
			TCPPutROMString(MySocket, (ROM BYTE*)"\r\nUser-Agent: Microchip - TCPIPSTACK - "VERSION"\r\n\r\n");
			TCPFlush(MySocket);
			smDDNS++;
			
			// Reset the timer to wait for a response
			Timer = TickGet();
			break;
								
		case SM_IPUPDATE_FIND_RESPONSE:
			// Locate the response string

			// Wait up to 10 seconds for a response
			if(TickGet() - Timer > 10*TICK_SECOND)
			{
				lastStatus = DDNS_STATUS_UPDATE_ERROR;
				smDDNS = SM_IPUDATE_DISCONNECT;
				break;
			}
		
			// According to HTTP, the response will start after the two CRLFs
			wPos = TCPFindROMArray(MySocket, (ROM BYTE*)"\r\n\r\n", 4, 0, FALSE);

			// If not yet found, eliminate everything up to
			if(wPos == 0xffff)
			{
				wPos = TCPIsGetReady(MySocket);
				if(wPos > 4)
					TCPGetArray(MySocket, NULL, wPos - 4);
				break;
			}
				
			TCPGetArray(MySocket, NULL, wPos+4);
			smDDNS++;
			// No break...continue to next state immediately
			
		case SM_IPUPDATE_PARSE_RESPONSE:
			// Try to parse the response text
			
			// Wait up to 10 seconds for the remote server to disconnect
			// so we know all data has been received
			if(TCPIsConnected(MySocket) && TickGet() - Timer < 10*TICK_SECOND)
				break;
			
			// Read the response code
		 	wPos = TCPIsGetReady(MySocket);
		 	if(wPos > sizeof(vBuffer) - 1)
		 		wPos = sizeof(vBuffer) - 1;

			wPos = TCPGetArray(MySocket, vBuffer, wPos);
			vBuffer[wPos] = '\0';
			for(i = 0; i < sizeof(vBuffer); i++)
				if(vBuffer[i] == ' ')
					vBuffer[i] = '\0';

			for(lastStatus = 0; lastStatus <= DDNS_STATUS_UPDATE_ERROR; lastStatus++)
				if(!strcmppgm2ram((char*)vBuffer, (ROM char*)_updateIpSrvrResponse[lastStatus]))
					break;
		
			smDDNS++;
			// No break...continue to finalization

		case SM_IPUDATE_DISCONNECT:
			// Close the socket so it can be used by other modules.
			if(MySocket != INVALID_SOCKET)
			{
				TCPDisconnect(MySocket);
				MySocket = INVALID_SOCKET;
			}
			
			// Determine what to do based on status
			if(lastStatus <= DDNS_STATUS_NUMHOST || lastStatus == DDNS_STATUS_UNCHANGED)
				smDDNS = SM_DONE;
			else if(lastStatus == DDNS_STATUS_911 || lastStatus == DDNS_STATUS_DNSERR)
				smDDNS = SM_SYSTEM_ERROR;
			else
				smDDNS = SM_SOFT_ERROR;
			
			smDDNS++;
			break;
			
		case SM_DONE:
			dwUpdateAt = TickGet() + 10*60*TICK_SECOND;	// 10 minutes
			smDDNS = SM_IDLE;
			break;
			
		case SM_SOFT_ERROR:
			dwUpdateAt = TickGet() + 30*TICK_SECOND; 		// 30 seconds
			smDDNS = SM_IDLE;
			break;
					
		case SM_SYSTEM_ERROR:
			dwUpdateAt = TickGet() + 30*60*TICK_SECOND;		// 30 minutes
			smDDNS = SM_IDLE;
			break;
	}
}
Beispiel #11
0
void DoUARTConfig(void)
{
    BYTE response[MAX_USER_RESPONSE_LEN];
    IP_ADDR tempIPValue;
    IP_ADDR *destIPValue;
	WORD_VAL wvTemp;
    BOOL bQuit = FALSE;

	while(!bQuit)
	{
		// Display the menu
	    putrsUART("\r\n\r\n\rMicrochip TCP/IP Config Application ("TCPIP_STACK_VERSION", " __DATE__ ")\r\n\r\n");
	    putrsUART("\t1: Change serial number:\t\t");
		wvTemp.v[1] = AppConfig.MyMACAddr.v[4];
		wvTemp.v[0] = AppConfig.MyMACAddr.v[5];
		uitoa(wvTemp.Val, response);
		putsUART((char *)response);
		putrsUART("\r\n\t2: Change host name:\t\t\t");
		putsUART((char *)AppConfig.NetBIOSName);
	    putrsUART("\r\n\t3: Change static IP address:\t\t");
	    DisplayIPValue(AppConfig.MyIPAddr);
	    putrsUART("\r\n\t4: Change static gateway address:\t");
	    DisplayIPValue(AppConfig.MyGateway);
	    putrsUART("\r\n\t5: Change static subnet mask:\t\t");
	    DisplayIPValue(AppConfig.MyMask);
		putrsUART("\r\n\t6: Change static primary DNS server:\t");
	    DisplayIPValue(AppConfig.PrimaryDNSServer);
		putrsUART("\r\n\t7: Change static secondary DNS server:\t");
	    DisplayIPValue(AppConfig.SecondaryDNSServer);
	    putrsUART("\r\n\t8: ");
		putrsUART((ROM char*)(AppConfig.Flags.bIsDHCPEnabled ? "Dis" : "En"));
		putrsUART("able DHCP & IP Gleaning:\t\tDHCP is currently ");
		putrsUART((ROM char*)(AppConfig.Flags.bIsDHCPEnabled ? "enabled" : "disabled"));
	    putrsUART("\r\n\t9: Download MPFS image.");
	    putrsUART("\r\n\t0: Save & Quit.");
	    putrsUART("\r\nEnter a menu choice: ");
	
	
		// Wait for the user to press a key
	    while(!DataRdyUART());
	
		putrsUART((ROM char*)"\r\n");
	
		// Execute the user selection
	    switch(ReadUART())
	    {
		    case '1':
				putrsUART("New setting: ");
				if(ReadStringUART(response, sizeof(response)))
				{
					wvTemp.Val = atoi((char*)response);
			        AppConfig.MyMACAddr.v[4] = wvTemp.v[1];
		    	    AppConfig.MyMACAddr.v[5] = wvTemp.v[0];
				}
		        break;
		
			case '2':
				putrsUART("New setting: ");
		        ReadStringUART(response, sizeof(response) > sizeof(AppConfig.NetBIOSName) ? sizeof(AppConfig.NetBIOSName) : sizeof(response));
				if(response[0] != '\0')
				{
					memcpy(AppConfig.NetBIOSName, (void*)response, sizeof(AppConfig.NetBIOSName));
			        FormatNetBIOSName(AppConfig.NetBIOSName);
				}
				break;
		
		    case '3':
		        destIPValue = &AppConfig.MyIPAddr;
		        goto ReadIPConfig;
		
		    case '4':
		        destIPValue = &AppConfig.MyGateway;
		        goto ReadIPConfig;
		
		    case '5':
		        destIPValue = &AppConfig.MyMask;
		        goto ReadIPConfig;
		
		    case '6':
		        destIPValue = &AppConfig.PrimaryDNSServer;
		        goto ReadIPConfig;
	
			case '7':
		        destIPValue = &AppConfig.SecondaryDNSServer;
		        goto ReadIPConfig;
		
ReadIPConfig:
				putrsUART("New setting: ");
		        ReadStringUART(response, sizeof(response));
		
		        if(StringToIPAddress(response, &tempIPValue))
		            destIPValue->Val = tempIPValue.Val;
				else
		            putrsUART("Invalid input.\r\n");

		        break;
		
		
		    case '8':
		        AppConfig.Flags.bIsDHCPEnabled = !AppConfig.Flags.bIsDHCPEnabled;
		        break;
		
		    case '9':
				#if (defined(MPFS_USE_EEPROM)|| defined(MPFS_USE_SPI_FLASH)) && defined(STACK_USE_MPFS2)
		        	DownloadMPFS();
				#endif
		        break;
		
		    case '0':
			    bQuit = TRUE;
				#if defined(EEPROM_CS_TRIS) || defined(SPIFLASH_CS_TRIS)
		        	SaveAppConfig(&AppConfig);
					putrsUART("Settings saved.\r\n");
				#else
					putrsUART("External EEPROM/Flash not present -- settings will be lost at reset.\r\n");
				#endif
		        break;
		}
	}
}
void QAutoGenDialog::accept()
{
	unsigned int i, iVehicles = m_txtVehicles->value(), iCar;
	QString strParam, strValue, strName, strType = m_comboVehicleType->currentText();
	std::map<QString, QString> mapParams;
	std::map<QString, std::map<QString, AutoGenParameter> >::iterator iterParams = m_mapModels.find(strType), iterAssocParams;
	std::map<QString, AutoGenParameter>::iterator iterParam;
	QStringList listDepends;
	QStringList::iterator iterDepend;
	in_addr_t ipAddress, ipTemp;
	std::map<QString, QString> mapAssocModels;
	std::map<QString, QString>::iterator iterAssocModel;
	std::map<QString, QString> mapAssocModelTypes;
	std::map<QString, QString>::iterator iterAssocModelType;
	std::vector<std::pair<QString, QString> > vecAssocModelTypes;
	std::map<QString, std::map<QString, AutoGenParameter> > mapAssocModelParams;
	std::map<QString, std::map<QString, ModelParameter> >::iterator iterModelType = m_pMapParams->find(strType), iterModelParams;
	std::map<QString, ModelParameter>::iterator iterModelParam;
	std::set<QString> setDepends;
	std::set<QString>::iterator iterSetDepend;
	QAutoGenModelDialog * pDialog;
	int nResult;
	bool bAddressSet = false;
	std::map<QString, Rect>::iterator iterAddressParams;

	// get record list for different parameters
	for (iterAddressParams = m_mapMapSelections.begin(); iterAddressParams != m_mapMapSelections.end(); ++iterAddressParams)
	{
		switch (m_comboRegionType->currentItem())
		{
		case 0:
			g_pMapDB->GetRecordsInRegion(m_mapRandomRecords[iterAddressParams->first], iterAddressParams->second);
			break;
		default:
			break;
		}
	}

	// make list of associated models
	for (iterParam = iterParams->second.begin(); iterParam != iterParams->second.end(); ++iterParam)
	{
		strParam = iterParam->first, strValue = iterParam->second.strValue;
		iterModelParam = iterModelType->second.find(strParam);
		if (iterParam->second.eType == AutoGenParamTypeNewModel)
		{
			vecAssocModelTypes.push_back(std::pair<QString, QString>(strParam, strValue));
			mapAssocModelTypes.insert(vecAssocModelTypes.back());
		}
	}

	for (i = 0; i < vecAssocModelTypes.size(); i++)
	{
		if (vecAssocModelTypes[i].second.compare(NULLMODEL_NAME) != 0)
		{
			pDialog = new QAutoGenModelDialog(vecAssocModelTypes[i].first, vecAssocModelTypes[i].second, this);
			m_mapModelIndexes[vecAssocModelTypes[i].second] = 0;
			iterModelParams = m_pMapParams->find(vecAssocModelTypes[i].second);
			iterAssocParams = m_mapModels.find(vecAssocModelTypes[i].second);
			iterAssocParams = mapAssocModelParams.insert(std::pair<QString, std::map<QString, AutoGenParameter> >(vecAssocModelTypes[i].first, iterAssocParams->second)).first;
			pDialog->m_pVecModelTypes = m_pVecModelTypes;
			pDialog->m_pAssocModelTypeMap = &mapAssocModelTypes;
			pDialog->m_pAssocModelTypes = &vecAssocModelTypes;
			pDialog->m_pModelParams = &iterModelParams->second;
			// generate auto-generator parameters
			pDialog->m_pParams = &iterAssocParams->second;
			pDialog->InitializeModelParams();
			nResult = pDialog->exec();
			delete pDialog;
			if (nResult == QDialog::Rejected)
				return;
		}
	}

	iCar = 0;
	qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
	ipAddress = GetIPAddress();
	for (i = 0; i < iVehicles; i++)
	{
		// create this vehicle
		while (m_pModelNames->find(strName = QString("%1%2").arg(strType).arg(iCar)) != m_pModelNames->end())
			iCar++;
		for (iterParam = iterParams->second.begin(); iterParam != iterParams->second.end(); ++iterParam)
		{
			strParam = iterParam->first, strValue = iterParam->second.strValue;
			iterModelParam = iterModelType->second.find(strParam);
			switch (iterParam->second.eType & (~AutoGenParamTypeNoRandom))
			{
			case AutoGenParamTypeNewModel:
				iterAssocModelType = mapAssocModelTypes.find(strParam);
				setDepends.insert(mapParams[iterAssocModelType->first] = GetAssocModel(iterAssocModelType->first, iterAssocModelType->second, mapAssocModels, mapAssocModelTypes, mapAssocModelParams, i));
				break;
			case AutoGenParamTypeDepends:
				listDepends = QStringList::split(';', strValue);
				for (iterDepend = listDepends.begin(); iterDepend != listDepends.end(); ++iterDepend)
					setDepends.insert(*iterDepend);
				break;
			case AutoGenParamTypeIP:
				if (!bAddressSet && StringToIPAddress(strValue, ipTemp))
					ipAddress = ipTemp;
				break;
			case AutoGenParamTypeRandom:
				mapParams[strParam] = GetRandomParameter(strParam, strValue, iterModelParam->second);
				break;
			case AutoGenParamTypeFile:
				mapParams[strParam] = GetFileParameter(strParam, strValue, i);
				break;
			default:
				mapParams[strParam] = strValue;
				break;
			}
		}
		while (m_pVehicleIPs->find(ipAddress) != m_pVehicleIPs->end())
			ipAddress++;
		bAddressSet = true;
		mapParams[m_strIPAddressParam] = IPAddressToString(ipAddress);
		setDepends.erase("NULL");
		mapParams[PARAM_DEPENDS] = QString::null;
		for (iterSetDepend = setDepends.begin(); iterSetDepend != setDepends.end(); ++iterSetDepend)
		{
			if (mapParams[PARAM_DEPENDS].isEmpty())
				mapParams[PARAM_DEPENDS] = *iterSetDepend;
			else
				mapParams[PARAM_DEPENDS] += (';' + *iterSetDepend);
		}
		setDepends.clear();
		m_pVehicleIPs->insert(ipAddress);
		m_pModels->insert(std::pair<QString, std::map<QString, QString> >(strName, mapParams));
		m_pVehicleList->push_back(std::pair<QString, QString>(strName, strType));
		m_pModelNames->insert(strName);
		mapAssocModels.clear();
		iCar++;
		ipAddress++;
	}

	m_mapFileData.clear();
	qApp->restoreOverrideCursor();
	QDialog::accept();
}
Beispiel #13
0
bool InitNetwork()
{
	QString strNetInitFile, strNetInitArgs, strValue;
	bool bContinue = true;
	int iErrorCode;

	// make sure network isn't running
	CloseNetwork();

	if (g_bNetworkEnabled)
		return false;

	g_pLogger->LogInfo("Opening Network Interface...");

	g_strDeviceName = g_pSettings->GetParam(PARAMKEY_NETWORK_DEVNAME, g_pSettings->m_sSettings[SETTINGS_NETWORK_DEVICENAME_NUM].GetValue().strValue, true);
	g_strDeviceType = g_pSettings->m_sSettings[SETTINGS_NETWORK_DEVICETYPE_NUM].GetValue().strValue;
	if (g_pSettings->GetParam(PARAMKEY_NETWORK_IP, "", false).isEmpty() || !StringToIPAddress(g_pSettings->GetParam(PARAMKEY_NETWORK_IP, "", false), g_ipAddress))
	{
		if (!StringToIPAddress(g_pSettings->m_sSettings[SETTINGS_NETWORK_IPADDRESS_NUM].GetValue().strValue, g_ipAddress))
			g_ipAddress = 0;
	}
	if (g_pSettings->GetParam(PARAMKEY_NETWORK_SUBNET, "", false).isEmpty() || !StringToIPAddress(g_pSettings->GetParam(PARAMKEY_NETWORK_SUBNET, "", false), g_ipSubnet))
		StringToIPAddress(g_pSettings->m_sSettings[SETTINGS_NETWORK_IPSUBNET_NUM].GetValue().strValue, g_ipSubnet);
	g_iTXPower = g_pSettings->m_sSettings[SETTINGS_NETWORK_TXPOWER_NUM].GetValue().iValue;
	g_iTXRate = g_pSettings->m_sSettings[SETTINGS_NETWORK_TXRATE_NUM].GetValue().iValue;

	strNetInitFile = g_pSettings->m_sSettings[SETTINGS_NETWORK_INITFILE_NUM].GetValue().strValue;
	if (!strNetInitFile.isEmpty())
	{
		strNetInitArgs = g_pSettings->m_sSettings[SETTINGS_NETWORK_INITARGS_NUM].GetValue().strValue;

		strNetInitArgs.replace("%dn", g_strDeviceName);
		strNetInitArgs.replace("%dt", g_strDeviceType);
		strNetInitArgs.replace("%ip", IPAddressToString(g_ipAddress));
		strNetInitArgs.replace("%sub", IPAddressToString(g_ipSubnet));
		strNetInitArgs.replace("%txp", QString::number(g_iTXPower));
		strNetInitArgs.replace("%txr", QString::number(g_iTXRate));

		if (!strNetInitArgs.isEmpty())
			strNetInitFile += " " + strNetInitArgs;

		while (bContinue)
		{
			iErrorCode = system(strNetInitFile);
			if (iErrorCode == 0) {
				g_bNetworkEnabled = true;
				bContinue = false;
			} else
				bContinue = g_pLogger->PromptLogError(PACKAGE_TITLE, QString("Could not open network interface (code %1)").arg(iErrorCode), false);
		}
	}
	else
		g_bNetworkEnabled = true;

	if (g_bNetworkEnabled)
	{
		/*if (g_strDeviceType.compare("denso") == 0)
			g_bNetworkEnabled = InitializeDensoUnit(g_ipAddress, g_ipSubnet, g_strDeviceName, g_iTXPower, g_iTXRate);
		*/
	}

	if (g_bNetworkEnabled)
		g_pLogger->LogInfo("Successful\n");
	else {
		g_pLogger->LogInfo("Failed\n");
		return false;
	}

	if (g_pMainWindow != NULL)
	{
		g_pMainWindow->m_pNetInit->setMenuText("Re&initialize");
		g_pMainWindow->m_pNetInit->setToolTip("Reinitialize network devices and connections");
		g_pMainWindow->m_pNetClose->setEnabled(true);
		g_pMainWindow->m_pNetMenu->setItemEnabled(g_pMainWindow->m_iNetServerMenuID, true);
		g_pMainWindow->m_pNetworkManager->SetNetworkInitialized(true);
	}

	g_pOldSigPipeHandler = signal(SIGPIPE, SIG_IGN);

	// start server
	if (g_pSettings->m_sSettings[SETTINGS_NETWORK_AUTOSERVER_NUM].GetValue().bValue)
	{
		if (g_strDeviceType.compare("denso") == 0)
			return StartServer(UDPSERVER_NAME);
		else
			return StartServer(UDPSERVER_NAME);
	}
	else
		return true;
}
Beispiel #14
0
/*====	2012-04-30 Liz: Control 3 Buttons: UP, DOWN, ENTER to let user key in password/CT_rating 	=====*/
BYTE user_input_control(BYTE number_of_digits)
{
	BYTE i = 0;
	
	// Display cursor to let user know to start key in value
	//if(current_pw_digit == 0 && is_cursor_on==0)
	if(is_cursor_on==0)
	{
		if(getMenuCurrentState() == MENU_PASSWORD_STATE)	LCD_PrintStringPGM("PASSWORD?    1/1", LCD_ROW0);
		UserInput();
		is_cursor_on = 1;
	}

	// If BUTTON_DOWN is pressed, decrease digit value (from 0-9)
	if (digit > 48)
	{
		if (BUTTON_DOWN == 0) button_down_old_state = 1;
		if ((BUTTON_DOWN == 1) && (button_down_old_state == 1))
		{
			digit--;
			UserInput();
			button_down_old_state = 0;
			#ifdef APP_USE_BUZZER
			sound();
			#endif
			return 1;
		}
	}
	
	// If BUTTON_UP is pressed, increase digit value (from 0-9)	
	if (digit < 57)
	{
		if (BUTTON_UP == 0) button_up_old_state = 1;
		if ((BUTTON_UP == 1) && (button_up_old_state == 1))
		{
			digit++;
			UserInput();
			button_up_old_state = 0;
			#ifdef APP_USE_BUZZER
			sound();
			#endif
			return 2;
		}
	}
	// If BUTTON_ENTER is pressed, move to next digit or submit user input
	if (BUTTON_ENTER == 0) button_enter_old_state = 1;
	if ((BUTTON_ENTER == 1) && (button_enter_old_state == 1))
	{
		button_enter_old_state = 0;
		if(current_pw_digit < number_of_digits - 1)
		{
			UserInput();
			current_pw_digit++; 
			digit = 48;
			is_cursor_on = 0;
		}
		else
		{
			// User already key in 4-digit pw, checking if pw is correct
			if(getMenuCurrentState() == MENU_PASSWORD_STATE)
			{
				if(char_menu_pw[0]==AppConfig.Password[0] && char_menu_pw[1]==AppConfig.Password[1]
			 	  && char_menu_pw[2]==AppConfig.Password[2] && char_menu_pw[3]==AppConfig.Password[3])
				{
					LCD_ClearScreen();
					setMenuCurrentState(MENU_SETTINGS_STATE);
					set_current_menu(0);
					gotoMenuSettingState();
				}
				else
				{
					LCD_PrintStringPGM("Wrong Password", LCD_ROW1);
					Delay10KTCYx(0);
					Delay10KTCYx(0);
					LCD_ClearScreen();
					is_cursor_on = 0;
					//LCD_PrintStringPGM("Settings     2/3", LCD_ROW0);
				}
			}
			else if(getMenuCurrentState() == SUBMENU_SETTINGS_STATE && get_current_menu() == 0)	// Get CT_Rating input
			{
				CALIBRATION_VALUES stCalib;
				
				// Get Calib value first
				if( !MCURequestToBOTTOMBoard(MMT_GET_CALIBRATION_DATA, &stCalib, sizeof(CALIBRATION_VALUES), TRUE, TRUE) )
				{
					LCD_PrintStringPGM("Try Again...", LCD_ROW1);
				}
				else
				{
					// Update CT value
					stCalib.CT_RANGE = atoi(char_menu_pw);

					// There are changes... save it!
					MCURequestToBOTTOMBoard(MMT_SET_CALIBRATION_DATA_NEW, &stCalib, sizeof(CALIBRATION_VALUES), TRUE, TRUE);
			
					if( ((BYTE*)&stCalib)[0] != 'O' && ((BYTE*)&stCalib)[1] != 'K' )
						LCD_PrintStringPGM("Try Again...", LCD_ROW1);
					else
					{
						LCD_PrintStringPGM("OK-PLS RESET ENR", LCD_ROW1);
						setMenuCurrentState(MENU_SETTINGS_STATE);
						resetUserInput();
					}
				}
			
				Delay10KTCYx(0);
				Delay10KTCYx(0);
				LCD_ClearScreen();
				LCD_PrintStringPGM("Set CT_Range 1/3", LCD_ROW0);
			}
			else if(getMenuCurrentState() == SUBMENU_SETTINGS_STATE && get_current_menu() == 2)	// Get IPAddr input
			{
				char s[16] = "192.168.1.";

				s[10] = 0;
				strcat(s, char_menu_pw);			

				if(!StringToIPAddress((BYTE*)s, &AppConfig.MyIPAddr))
					LCD_PrintStringPGM("Try Again...", LCD_ROW1);
				else
				{
					LCD_PrintString(s, LCD_ROW1, 0);
					setMenuCurrentState(MENU_SETTINGS_STATE);
					resetUserInput();

					SaveAppConfig();
					Reset();
				}
				Delay10KTCYx(0);
				Delay10KTCYx(0);
				LCD_ClearScreen();
				LCD_PrintStringPGM("Set IP addr  3/3", LCD_ROW0);	
			}
			
			resetUserInput();
		}
		#ifdef APP_USE_BUZZER
			sound();
		#endif	
		return 3;
	}
}
Beispiel #15
0
int
main(int argc, char *argv[])
{
#if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
  static struct option long_opts[] = {
    { "domain", 1, 0, 'd' },
    { "publisher", 0, 0, 'p' },
    { "strength", 1, 0, 'S' },
    { "subscriber", 0, 0, 's' },
    { "refresh", 1, 0, 'R' },
    { "purge", 1, 0, 'P' },
    { "expiration", 1, 0, 'E' },
    { "minimumSeparation", 1, 0, 'm' },
    { "metaMulticast", 1, 0, 'I' },
    { "dataMulticast", 1, 0, 'i' },
    { "timetolive", 1, 0, 't' },
    { "delay", 1, 0, 'D' },
    { "verbosity", 1, 0, 'v' },
    { "quiet", 0, 0, 'q' },
    { "logfile", 1, 0, 'l' },
    { "version", 0, 0, 'V' },
    { "help",  0, 0, 'h' },
    { 0, 0, 0, 0}
  };
#endif
  ORTEDomain              *d;
  ORTEDomainProp          dp;
  ORTEPublication         *p = NULL;
  ORTESubscription        *s = NULL;
  int                     opt, domain = ORTE_DEFAULT_DOMAIN;
  int32_t                 strength = 1;
  int32_t                 instanceSend = 0, instanceRecv = 0;
  NtpTime                 persistence, deadline, minimumSeparation, delay;
  Boolean                 havePublisher = ORTE_FALSE;
  Boolean                 haveSubscriber = ORTE_FALSE;
  IPAddress               smIPAddress = IPADDRESS_INVALID;
  ORTEDomainAppEvents     events;

  ORTEInit();
  ORTEDomainPropDefaultGet(&dp);
  NTPTIME_BUILD(minimumSeparation, 0);
  NTPTIME_BUILD(delay, 1); //1s

#if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
  while ((opt = getopt_long(argc, argv, "m:S:d:v:R:E:P:l:I:i:t:D:Vhpsq", &long_opts[0], NULL)) != EOF) {
#else
  while ((opt = getopt(argc, argv, "m:S:d:v:R:E:P:l:I:i:t:D:Vhpsq")) != EOF) {
#endif
    switch (opt) {
      case 'S':
	strength = strtol(optarg, NULL, 0);
	break;
      case 'd':
	domain = strtol(optarg, NULL, 0);
	break;
      case 'p':
	havePublisher = ORTE_TRUE;
	break;
      case 's':
	haveSubscriber = ORTE_TRUE;
	break;
      case 'v':
	ORTEVerbositySetOptions(optarg);
	break;
      case 'R':
	NtpTimeAssembFromMs(dp.baseProp.refreshPeriod, strtol(optarg, NULL, 0), 0);
	break;
      case 'P':
	NtpTimeAssembFromMs(dp.baseProp.purgeTime, strtol(optarg, NULL, 0), 0);
	break;
      case 'E':
	NtpTimeAssembFromMs(dp.baseProp.expirationTime, strtol(optarg, NULL, 0), 0);
	break;
      case 'm':
	NtpTimeAssembFromMs(minimumSeparation, strtol(optarg, NULL, 0), 0);
	break;
      case 'D':
	NtpTimeAssembFromMs(delay, strtol(optarg, NULL, 0)/1000, strtol(optarg, NULL, 0)%1000);
	break;
      case 'I':
	dp.multicast.enabled = ORTE_TRUE;
	dp.multicast.ipAddress = StringToIPAddress(optarg);
	break;
      case 'i':
	dp.multicast.enabled = ORTE_TRUE;
	smIPAddress = StringToIPAddress(optarg);
	break;
      case 't':
	dp.multicast.ttl = strtol(optarg, NULL, 0);
	break;
      case 'l':
	ORTEVerbositySetLogFile(optarg);
      case 'q':
	quite = ORTE_TRUE;
	break;
      case 'V':
	printf("Ocera Real-Time Ethernet (%s).\n", dp.version);
	exit(0);
	break;
      case 'h':
      default:
	usage();
	exit(opt == 'h' ? 0 : 1);
    }
  }

  //initiate event system
  ORTEDomainInitEvents(&events);
  events.onRegFail = onRegFail;

  //Create application
  d = ORTEDomainAppCreate(domain, &dp, &events, ORTE_FALSE);
  //Register ser./deser. rutines with maximal size 4 Bytes
  ORTETypeRegisterAdd(d, "PingData", NULL, NULL, NULL, 4);
  //Create publisher
  if (havePublisher) {
    NTPTIME_BUILD(persistence, 5);
    p = ORTEPublicationCreate(
      d,
      "Ping",
      "PingData",
      &instanceSend,
      &persistence,
      strength,
      sendCallBack,
      NULL,
      &delay);
    if (p == NULL) {
      printf("ORTEPublicationCreate failed\n");
      exit(1);
    }
  }
  if (haveSubscriber) {
    NTPTIME_BUILD(deadline, 3);
    s = ORTESubscriptionCreate(
      d,
      IMMEDIATE,
      BEST_EFFORTS,
      "Ping",
      "PingData",
      &instanceRecv,
      &deadline,
      &minimumSeparation,
      recvCallBack,
      NULL,
      smIPAddress);
    if (s == NULL) {
      printf("ORTESubscriptionCreate failed\n");
      exit(1);
    }
  }
  //never ending loop
  while (!regfail)
    ORTESleepMs(1000);
  exit(0);
}
void HTTPExecCmd(BYTE** argv, BYTE argc)
{
    BYTE command;
    BYTE var;
#if defined(ENABLE_REMOTE_CONFIG)
	DWORD_VAL dwVal;
    BYTE CurrentArg;
    WORD_VAL TmpWord;
#endif
    /*
     * Design your pages such that they contain command code
     * as a one character numerical value.
     * Being a one character numerical value greatly simplifies
     * the job.
     */
    command = argv[0][0] - '0';

    /*
     * Find out the cgi file name and interpret parameters
     * accordingly
     */
    switch(command)
    {
    case CGI_CMD_DIGOUT:	// ACTION=0
        /*
         * Identify the parameters.
         * Compare it in upper case format.
         */
        var = argv[1][0] - '0';

        switch(var)
        {
        case CMD_LED1:	// NAME=0
            // Toggle LED.
            LED1_IO ^= 1;
            break;

        case CMD_LED2:	// NAME=1
            // Toggle LED.
            LED2_IO ^= 1;
            break;
         }

         memcpypgm2ram((void*)argv[0], (ROM void*)COMMANDS_OK_PAGE, COMMANDS_OK_PAGE_LEN);
         break;
#if defined(USE_LCD)
    case CGI_CMD_LCDOUT:	// ACTION=1
		if(argc > 2u)	// Text provided in argv[2]
		{
			// Convert %20 to spaces, and other URL transformations
			UnencodeURL(argv[2]);

			// Write 32 received characters or less to LCDText
			if(strlen((char*)argv[2]) < 32u)
			{
				memset(LCDText, ' ', 32);
				strcpy((char*)LCDText, (char*)argv[2]);
			}
			else
			{
				memcpy(LCDText, (void*)argv[2], 32);
			}

			// Write LCDText to the LCD
			LCDUpdate();
		}
		else			// No text provided
		{
			LCDErase();
		}
		memcpypgm2ram((void*)argv[0], (ROM void*)COMMANDS_OK_PAGE, COMMANDS_OK_PAGE_LEN);
        break;
#endif
#if defined(ENABLE_REMOTE_CONFIG)
// Possibly useful code for remotely reconfiguring the board through 
// HTTP
	case CGI_CMD_RECONFIG:	// ACTION=2
		// Loop through all variables that we've been given
		CurrentArg = 1;
		while(argc > CurrentArg)
		{
			// Get the variable identifier (HTML "name"), and 
			// increment to the variable's value
			TmpWord.v[1] = argv[CurrentArg][0];
			TmpWord.v[0] = argv[CurrentArg++][1];
	        var = hexatob(TmpWord);
	        
	        // Make sure the variable's value exists
	        if(CurrentArg >= argc)
	        	break;
	        
	        // Take action with this variable/value
	        switch(var)
	        {
	        case VAR_IP_ADDRESS:
	        case VAR_SUBNET_MASK:
	        case VAR_GATEWAY_ADDRESS:
	        	{
		        	// Convert the returned value to the 4 octect 
		        	// binary representation
			        if(!StringToIPAddress(argv[CurrentArg], (IP_ADDR*)&dwVal))
			        	break;

					// Reconfigure the App to use the new values
			        if(var == VAR_IP_ADDRESS)
			        {
				        // Cause the IP address to be rebroadcast
				        // through Announce.c or the RS232 port since
				        // we now have a new IP address
				        if(dwVal.Val != *(DWORD*)&AppConfig.MyIPAddr)
					        DHCPBindCount++;
					    
					    // Set the new address
			        	memcpy((void*)&AppConfig.MyIPAddr, (void*)&dwVal, sizeof(AppConfig.MyIPAddr));
			        }
			        else if(var == VAR_SUBNET_MASK)
			        	memcpy((void*)&AppConfig.MyMask, (void*)&dwVal, sizeof(AppConfig.MyMask));
			        else if(var == VAR_GATEWAY_ADDRESS)
			        	memcpy((void*)&AppConfig.MyGateway, (void*)&dwVal, sizeof(AppConfig.MyGateway));
		        }
	            break;
	
	        case VAR_DHCP:
	        	if(AppConfig.Flags.bIsDHCPEnabled)
	        	{
		        	if(!(argv[CurrentArg][0]-'0'))
		        	{
		        		AppConfig.Flags.bIsDHCPEnabled = FALSE;
		        	}
		        }
		        else
	        	{
		        	if(argv[CurrentArg][0]-'0')
		        	{
						AppConfig.MyIPAddr.Val = 0x00000000ul;
		        		AppConfig.Flags.bIsDHCPEnabled = TRUE;
				        AppConfig.Flags.bInConfigMode = TRUE;
			        	DHCPInit(0);
		        	}
		        }
	            break;
	    	}

			// Advance to the next variable (if present)
			CurrentArg++;	
        }
		
		// Save any changes to non-volatile memory
      	SaveAppConfig(&AppConfig);


		// Return the same CONFIG.CGI file as a result.
        memcpypgm2ram((void*)argv[0],
             (ROM void*)CONFIG_UPDATE_PAGE, CONFIG_UPDATE_PAGE_LEN);
		break;
#endif	// #if defined(ENABLE_REMOTE_CONFIG)

    default:
		memcpypgm2ram((void*)argv[0], (ROM void*)COMMANDS_OK_PAGE, COMMANDS_OK_PAGE_LEN);
        break;
    }

}
Beispiel #17
0
static void HTTPProcess(HTTP_HANDLE h) {
	char bafs[26], r;

	BOOL lbContinue;
	static HTTP_INFO* ph;
	WORD w;
	static BYTE *p, *t;

	ph = &HCB[h];
    do {
		lbContinue = FALSE;
        if(!TCPIsConnected(ph->socket)) { 	ph->smHTTP = SM_HTTP_IDLE;  break; }

        switch(ph->smHTTP) {
        case SM_HTTP_IDLE:
			w = TCPGetArray(ph->socket, httpData, MAX_HTML_CMD_LEN);
			if(!w) {
				if(TCPGetRxFIFOFree(ph->socket) == 0) TCPDisconnect(ph->socket); // Request is too big, we can't support it.
				break;
			}
			httpData[w] = 0;
			t = p = httpData;
			while(*p)	if(*p=='%') { *t++ = hex2bin(p+1); p += 3; } else *t++ = *p++;	*t = 0;
			r = httpData[150];  httpData[150]=0;

			lbContinue = TRUE;
			ph->smHTTP = SM_HTTP_NOT_FOUND;
			if(strstrrampgm(httpData,"POST"))	ph->smHTTP = SM_HTTP_POST;
			if(strstrrampgm(httpData,"GET")) {
				ph->smHTTP = SM_HTTP_HEADER;
#ifndef _FAVICON_
				if(strstrrampgm(httpData,(ROM void*)"favicon"))		{ TCPDisconnect(ph->socket);  ph->smHTTP = SM_HTTP_IDLE; }
#else
				if(strstrrampgm(httpData,"favicon"))		ph->smHTTP = SM_ICO_HEADER;
#endif
				if(strstrrampgm(httpData, "Sw_Pool"))		AppConfig.who ^= 0x81;
				if(strstrrampgm(httpData, "Sw_Mode"))		AppConfig.sw_mode ^= 1;
				if(strstrrampgm(httpData, "Sw_Clock"))		AppConfig.CkSel ^= 1;
				if(strstrrampgm(httpData, "Sw_LEDs"))		bLEDs ^= 1;
			}
			httpData[150]=r;
			break;
            
        case SM_HTTP_POST:
			exoit(ph->socket);
			memcpypgm2ram(spwrk,rMinPool,SZ_ROMS );
			for(r=0;r<SZ_SRCH;r++) {
				BYTE *s;
				p = strstrrampgm(httpData,(ROM BYTE*)(DWORD)sComa[r]);
				if(p) {
					p+=5;
					t=strstrrampgm(p,ampa);
					if(t) {
						*t=0; s=p;
						switch(r) {
//							case C_JMAC:	Hex2Mac(p); break; //S2Mac(p);	break;
							case C_JMIP:	StringToIPAddress(p,&AppConfig.MyIPAddr); break;
							case C_JMSK:	StringToIPAddress(p,&AppConfig.MyMask); break;
							case C_JGTW:	StringToIPAddress(p,&AppConfig.MyGateway); break;
							case C_PDNS:	StringToIPAddress(p,&AppConfig.PrimaryDNSServer); break;
							case C_SDNS:	StringToIPAddress(p,&AppConfig.SecondaryDNSServer); break;
							case C_WPRT:	AppConfig.MyPort = atoi(p); break;
							case C_MPRT:	while(*p) if((*p) == ',')	{ *p=0; AppConfig.MinPort[0] = atoi(s); break; } else p++;
											AppConfig.MinPort[1] = atoi(++p); *--p = ',';
											break;
							case C_MURL:	while(*p) if((*p) == ',')	{ *p=0; strcpy(&spwrk[0],s); break; } else p++;
											strcpy(&spwrk[sizeof(rMinPool)/2],++p); *--p = ',';
											break;
							case C_USPA:	while(*p) if((*p) == ',')	{ *p=0; strcpy(&spwrk[sizeof(rMinPool)],s); break; } else p++;
											strcpy(&spwrk[sizeof(rMinPool)+sizeof(rUsrPass)/2],++p); *--p = ',';
											break;
						}
						*t='&';
					}
				}
			}
			ph->smHTTP = SM_HTTP_IDLE; 		SetUPS();
	       	break;

        case SM_HTTP_NOT_FOUND:
			if(TCPIsPutReady(ph->socket) >= sizeof(hdrErr)) {
				TCPPutROMString(ph->socket, hdrErr); TCPFlush(ph->socket);
				TCPDisconnect(ph->socket);
				ph->smHTTP = SM_HTTP_IDLE;
            }
            break;
#ifdef _FAVICON_
        case SM_ICO_HEADER:
			if ( TCPIsPutReady(ph->socket) ) {
                lbContinue = TRUE;
				if(TCPIsPutReady(ph->socket) >= sizeof(hdrICO)+198) {
                	TCPPutROMString(ph->socket, hdrICO);
					TCPPutROMArray(ph->socket, favicon,198);
					TCPFlush(ph->socket);
					TCPDisconnect(ph->socket);
                	ph->smHTTP = SM_HTTP_IDLE;
				}
			}
			break;
#endif
        case SM_HTTP_HEADER:
            if ( TCPIsPutReady(ph->socket) ) {
                lbContinue = TRUE;
				if(TCPIsPutReady(ph->socket) >= sizeof(hdrOK)) {
                	TCPPutROMString(ph->socket, hdrOK);
					TCPFlush(ph->socket);
                	ph->smHTTP = SM_HTTP_GET;
                	ph->Pos = Page;
            	}
            }
            break;

        case SM_HTTP_GET:
			TCPDiscard(ph->socket);
			if(TCPIsPutReady(ph->socket) >= 400) {
				ph->Pos = TCPPutROMString(ph->socket, ph->Pos);
				ph->Pos++;
				switch (*ph->Pos) {
					case  0: TCPDisconnect(ph->socket); ph->smHTTP = SM_HTTP_IDLE; ph->Pos = Page; break;
					case  1: DoStic(ph->socket, 1); break;
					case  2: DoStic(ph->socket, 2); break;
					case  3: DoStic(ph->socket, 3); break;
//					case  4: MAC2Hex(bafs); TCPPutString(ph->socket, bafs); break;
					case  5: IP2String(AppConfig.MyIPAddr,bafs); TCPPutString(ph->socket, bafs); break;
					case  6: IP2String(AppConfig.MyMask,bafs); TCPPutString(ph->socket, bafs); break;
					case  7: IP2String(AppConfig.MyGateway,bafs); TCPPutString(ph->socket, bafs); break;
					case  8: uitoa(AppConfig.MyPort,bafs); TCPPutString(ph->socket, bafs); break;
					case  9: IP2String(AppConfig.PrimaryDNSServer,bafs); TCPPutString(ph->socket, bafs); break;
					case 10: IP2String(AppConfig.SecondaryDNSServer,bafs); TCPPutString(ph->socket, bafs); break;
					case 11: uitoa(AppConfig.MinPort[0],bafs); TCPPutString(ph->socket, bafs); TCPPut(ph->socket,','); uitoa(AppConfig.MinPort[1],bafs); TCPPutString(ph->socket, bafs); break;
					case 12: TCPPutROMString(ph->socket, rMinPool[0]); TCPPut(ph->socket,','); TCPPutROMString(ph->socket, rMinPool[1]); break;
					case 13: TCPPutROMString(ph->socket, rUsrPass[0]); TCPPut(ph->socket,','); TCPPutROMString(ph->socket, rUsrPass[1]); break;
				}
				ph->Pos++;
			}
			TCPFlush(ph->socket);
			break;
		default:	break;
        }
    } while( lbContinue );
}
Beispiel #18
0
void ExecuteMenuChoice(MENU_CMD choice)
{
    char response[MAX_USER_RESPONSE_LEN];
    IP_ADDR tempIPValue;
    IP_ADDR *destIPValue;

    serPutByte('\r');
    serPutByte('\n');
    serPutRomString(menuCommandPrompt[choice-'0'-1]);

    switch(choice)
    {
    case MENU_CMD_SERIAL_NUMBER:
        itoa(AppConfig.SerialNumber.Val, response);
        serPutString((BYTE*)response);
        serPutByte(')');
        serPutByte(':');
        serPutByte(' ');

        if ( USARTGetString(response, sizeof(response)) )
        {
            AppConfig.SerialNumber.Val = atoi(response);

            AppConfig.MyMACAddr.v[4] = AppConfig.SerialNumber.v[1];
            AppConfig.MyMACAddr.v[5] = AppConfig.SerialNumber.v[0];
        }
        else
            goto HandleInvalidInput;

        break;

    case MENU_CMD_IP_ADDRESS:
        destIPValue = &AppConfig.MyIPAddr;
        goto ReadIPConfig;

    case MENU_CMD_GATEWAY_ADDRESS:
        destIPValue = &AppConfig.MyGateway;
        goto ReadIPConfig;

    case MENU_CMD_SUBNET_MASK:
        destIPValue = &AppConfig.MyMask;

    ReadIPConfig:
        DisplayIPValue(destIPValue, FALSE);
        serPutByte(')');
        serPutByte(':');
        serPutByte(' ');

        USARTGetString(response, sizeof(response));

        if ( !StringToIPAddress(response, &tempIPValue) )
        {
HandleInvalidInput:
            serPutRomString(InvalidInputMsg);
            while( !serIsGetReady() );
            serGetByte();
        }
        else
        {
            destIPValue->Val = tempIPValue.Val;
        }
        break;


    case MENU_CMD_ENABLE_AUTO_CONFIG:
        AppConfig.Flags.bIsDHCPEnabled = TRUE;
        break;

    case MENU_CMD_DISABLE_AUTO_CONFIG:
        AppConfig.Flags.bIsDHCPEnabled = FALSE;
        break;

    case MENU_CMD_DOWNLOAD_MPFS:
#if defined(MPFS_USE_EEPROM)
        DownloadMPFS();
#endif
        break;

    case MENU_CMD_QUIT:
#if defined(MPFS_USE_EEPROM)
        appcfgSave();
#endif
        break;
    }
}
/*****************************************************************************
 * FUNCTION: do_ifconfig_cmd
 *
 * RETURNS: None
 *
 * PARAMS:  None
 *
 * NOTES:   Responds to the user invoking ifconfig
 *****************************************************************************/
void do_ifconfig_cmd(void)
{
     uint8_t   macAddress[6];
     uint8_t conState, cpId;
     IP_ADDR ipAddress;

    // if user only typed in ifconfig with no other parameters
    if (ARGC == 1u)
    {
        IfconfigDisplayStatus();
        return;
    }

    if (WF_hibernate.state)
    {
        WFConsolePrintRomStr("The Wi-Fi module is in hibernate mode - command failed.", true);
        return;
    }

#if defined(WF_CM_DEBUG)
    else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "info") )
    {
        uint8_t i;
        tWFCMInfoFSMStats cm_stats;

        WF_CMInfoGetFSMStats(&cm_stats);
        for (i = 0; i < 12; i++)
        {
            sprintf( (char *) g_ConsoleContext.txBuf,
                    "[%02X]: %02X%02X %02X%02X",
                    i,
                    cm_stats.byte[i*4 + 0],
                    cm_stats.byte[i*4 + 1],
                    cm_stats.byte[i*4 + 2],
                    cm_stats.byte[i*4 + 3]
                    );
            WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , true);
        }
    }
    else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "scan") )
    {
        if (WF_Scan(1) != WF_SUCCESS) // scan, using CP 1
            WFConsolePrintRomStr("Scan failed", true);
    }
    else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "scanget") ) //"scangetresult"
    {
        tWFScanResult pScanResult[1];

        WF_ScanGetResult(0, pScanResult);
    }
    else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "cpgete") ) //"cpgetelements"
    {
        tWFCPElements pCPElements[1];

        WF_CPGetElements(1, pCPElements);
    }
#endif
    // else if 2 arguments and the second arg is IP address
    else if ( (ARGC == 2u) && (StringToIPAddress((uint8_t*)ARGV[1], &ipAddress)) )
    {
        #if defined(STACK_USE_DHCP_CLIENT)
        if (DHCPIsEnabled(0))
        {
          WFConsolePrintRomStr("Static IP address should not be set with DHCP enabled", true);
          return;
        }
        #endif

        AppConfig.MyIPAddr.v[0] = ipAddress.v[0];
        AppConfig.MyIPAddr.v[1] = ipAddress.v[1];
        AppConfig.MyIPAddr.v[2] = ipAddress.v[2];
        AppConfig.MyIPAddr.v[3] = ipAddress.v[3];

        /* Microchip DHCP client clobbers static ip on every iteration of loop, even if dhcp is turned off*/
        AppConfig.DefaultIPAddr.v[0] = ipAddress.v[0];
        AppConfig.DefaultIPAddr.v[1] = ipAddress.v[1];
        AppConfig.DefaultIPAddr.v[2] = ipAddress.v[2];
        AppConfig.DefaultIPAddr.v[3] = ipAddress.v[3];

        LCDDisplayIPValue(AppConfig.MyIPAddr);
    }
    // else if 2 args and second arg is MAC address
    else if ( (ARGC == 2u) && isMacAddress(ARGV[1], macAddress))
    {
        /* Can only set MAC address in idle state */
        WF_CMGetConnectionState(&conState, &cpId);
        if ( conState != WF_CSTATE_NOT_CONNECTED )
        {
            WFConsolePrintRomStr("HW MAC address can only be set in idle mode", true);
            return;
        }

        WF_SetMacAddress( macAddress );
        AppConfig.MyMACAddr.v[0] = macAddress[0];
        AppConfig.MyMACAddr.v[1] = macAddress[1];
        AppConfig.MyMACAddr.v[2] = macAddress[2];
        AppConfig.MyMACAddr.v[3] = macAddress[3];
        AppConfig.MyMACAddr.v[4] = macAddress[4];
        AppConfig.MyMACAddr.v[5] = macAddress[5];
    }
    else if ( (2u <= ARGC) && (strcmppgm2ram((char *)ARGV[1], (ROM FAR char *)"netmask") == 0) )
    {
        if (ARGC != 3u)
        {
            missingValue();
            return;
        }

        #if defined(STACK_USE_DHCP_CLIENT)
        if ( DHCPIsEnabled(0) )
        {
            WFConsolePrintRomStr(
                "The Netmask should not be set with DHCP enabled", true);
            return;
        }
        #endif

        if ( !StringToIPAddress((uint8_t*)ARGV[2], &ipAddress) )
        {
            WFConsolePrintRomStr("Invalid netmask value", true);
            return;
        }

        AppConfig.MyMask.v[0] = ipAddress.v[0];
        AppConfig.MyMask.v[1] = ipAddress.v[1];
        AppConfig.MyMask.v[2] = ipAddress.v[2];
        AppConfig.MyMask.v[3] = ipAddress.v[3];

        /* Microchip DHCP client clobbers static netmask on every iteration of loop, even if dhcp is turned off*/
        AppConfig.DefaultMask.v[0] = ipAddress.v[0];
        AppConfig.DefaultMask.v[1] = ipAddress.v[1];
        AppConfig.DefaultMask.v[2] = ipAddress.v[2];
        AppConfig.DefaultMask.v[3] = ipAddress.v[3];
    }
    else if ( (2u <= ARGC) && (strcmppgm2ram((char *)ARGV[1], (ROM FAR char *)"gateway") == 0) )
    {
        if (ARGC != 3u)
        {
            missingValue();
            return;
        }

        if ( !StringToIPAddress((uint8_t*)ARGV[2], &ipAddress) )
        {
            WFConsolePrintRomStr("Invalid gateway value", true);
            return;
        }

        AppConfig.MyGateway.v[0] = ipAddress.v[0];
        AppConfig.MyGateway.v[1] = ipAddress.v[1];
        AppConfig.MyGateway.v[2] = ipAddress.v[2];
        AppConfig.MyGateway.v[3] = ipAddress.v[3];
    }
    else if ( (2u <= ARGC) && (strcmppgm2ram((char*)ARGV[1], "auto-dhcp") == 0) )
    {
        if (ARGC != 3u)
        {
            missingValue();
            return;
        }

        #if defined(STACK_USE_DHCP_CLIENT)
        if (strcmppgm2ram((char*)ARGV[2], "start") == 0)
        {
            setDHCPState(true);
        }
        else if (strcmppgm2ram((char*)ARGV[2], "stop") == 0)
        {
            setDHCPState(false);
        }
        else
        #endif
        {
            WFConsolePrintRomStr("   Invalid dhcp param", true);
            return;
        }
    }
    else
    {
        notHandledParam(1);
    }
}
Beispiel #20
0
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License for more details.
  *
  */


// library header file's path
#include "orte.h"
// pregenerated header
#include "jorte/org_ocera_orte_tools_Conversions.h"


/* native function - prototype declared in pregenerated header */
JNIEXPORT jlong JNICALL
Java_org_ocera_orte_tools_JORTEConversions_StringToIPAddress
(JNIEnv *env, jclass class, jstring jstrIP)
{
    const char *charIP;
    long        longIP;

    // get IP
    charIP = (*env)->GetStringUTFChars(env, jstrIP, 0);
    // call ORTE function
    longIP = (long)StringToIPAddress(charIP);
    // free memory
    (*env)->ReleaseStringUTFChars(env, jstrIP, charIP);
    return(longIP);
}
Beispiel #21
0
void ExecuteMenuChoice(MENU_CMD choice)
{
    char response[MAX_USER_RESPONSE_LEN];
    IP_ADDR tempIPValue;
    IP_ADDR *destIPValue;
    WORD_VAL w;
    BYTE offset;

    serPutByte('\r');
    serPutByte('\n');
    serPutRomString(menuCommandPrompt[choice-'0'-1]);

    switch(choice)
    {
    case MENU_CMD_SERIAL_NUMBER:
        w.byte.LSB = appcfgGetc(APPCFG_SERIAL_NUMBER0);
        w.byte.MSB = appcfgGetc(APPCFG_SERIAL_NUMBER1);
        itoa(w.Val, response);
        serPutString((BYTE*)response);
        serPutByte(')');
        serPutByte(':');
        serPutByte(' ');

        if ( USARTGetString(response, sizeof(response)) )
        {
            w.Val = atoi(response);
            appcfgPutc(APPCFG_SERIAL_NUMBER0, w.byte.LSB);
            appcfgPutc(APPCFG_SERIAL_NUMBER1, w.byte.MSB);

            AppConfig.MyMACAddr.v[4] = w.byte.MSB;
            AppConfig.MyMACAddr.v[5] = w.byte.LSB;
        }
        else
            goto HandleInvalidInput;

        break;

    case MENU_CMD_IP_ADDRESS:
        destIPValue = &AppConfig.MyIPAddr;
        offset = APPCFG_IP0;
        goto ReadIPConfig;

    case MENU_CMD_GATEWAY_ADDRESS:
        destIPValue = &AppConfig.MyGateway;
        offset = APPCFG_GATEWAY0;
        goto ReadIPConfig;

    case MENU_CMD_SUBNET_MASK:
        destIPValue = &AppConfig.MyMask;
        offset = APPCFG_MASK0;

    ReadIPConfig:
        scfDisplayIPValue(destIPValue);
        serPutByte(')');
        serPutByte(':');
        serPutByte(' ');

        USARTGetString(response, sizeof(response));

        if ( !StringToIPAddress(response, &tempIPValue) )
        {
HandleInvalidInput:
            serPutRomString(InvalidInputMsg);
            while( !serIsGetReady() );
            serGetByte();
        }
        else
        {
            destIPValue->Val = tempIPValue.Val;
            
            //Update new configuration data just entered
            appcfgPutc(offset++, tempIPValue.v[0]);
            appcfgPutc(offset++, tempIPValue.v[1]);
            appcfgPutc(offset++, tempIPValue.v[2]);
            appcfgPutc(offset++, tempIPValue.v[3]);
        }
        break;


    case MENU_CMD_ENABLE_AUTO_CONFIG:
        //Set DHCP flag
        appcfgPutc(APPCFG_NETFLAGS, appcfgGetc(APPCFG_NETFLAGS) | APPCFG_NETFLAGS_DHCP);
        break;

    case MENU_CMD_DISABLE_AUTO_CONFIG:
        //Clear DHCP flag
        appcfgPutc(APPCFG_NETFLAGS, appcfgGetc(APPCFG_NETFLAGS) & ~APPCFG_NETFLAGS_DHCP);
        break;

    case MENU_CMD_DOWNLOAD_FSYS_IMAGE:
        DownloadFsysImage();
        break;

    case MENU_CMD_QUIT:
        break;
    }
}