d50c190957
* moving folders and files and adjust server demo build * Fix Makefile for apps/server on Linux * fix unit test source file folders * fix datetime convert UTC functions. Add Code::Blocks project for datetime testing * added some ignore extensions * disable parallel make option * fix build for abort, dcc, and epics apps * fix build for dcc, epics, error, and getevent apps. * Fixed building of all apps * fix the ipv4 to ipv6 router app build * Change indent style from Google to Webkit * make pretty to re-format style * removed common Makefile since we already had one and two was too many * remove scripts from root folder that are no longer maintained or used * remove mercurial EOL and ignore files for git repo * remove .vscodeconfig files from repo * tweak clang-format style * clang-format src and apps with tweaked style * added clang-tidy to fix readability if braces in src * result of make tidy for src and apps * fix clang-tidy mangling * Added code::blocks project for BACnet server simulation * added code::blocks linux project for WhoIs app * update text files for EOL * fix EOL in some files * fixed make win32 apps for older gcc * Removed Borland C++ Makefile in apps. Unable to maintain support for Borland C++ compiler. * created codeblocks project for apps/epics for Windows * fixing ports/xplained to work with new data structure. * fix ports/xplained example for Atmel Studio compile * fix ports/stm32f10x example for gcc Makefile compile * fix ports/stm32f10x example for IAR EWARM compile * fix ports/xplained timer callback * fix ports/bdk_atxx_mspt build with subdirs * fix ports/bdk_atxx_mspt build with subdirs * updated git ignore for IAR build artifacts * updated gitignore for non-tracked files and folders * fixed bdk-atxx4-mstp port for Rowley Crossworks project file * fixed bdk-atxx4-mstp port for GCC AVR Makefile * fixed atmega168 port for IAR AVR and GCC AVR Makefile * fixed at91sam7s port for IAR ARM and GCC ARM Makefile * removed unmaintainable DOS, RTOS32, and atmega8 ports. Updated rx62n (untested). * changed arm7 to uip port
182 lines
3.5 KiB
C++
182 lines
3.5 KiB
C++
/*****************************************************************************
|
|
*
|
|
* Atmel Corporation
|
|
*
|
|
* File : Utility.cpp
|
|
* Compiler : Dev-C++ 4.9.8.0 - http://bloodshed.net/dev/
|
|
* Revision : $Revision: 1163 $
|
|
* Date : $Date: 2006-08-02 15:38:16 +0200 (on, 02 aug 2006) $
|
|
* Updated by : $Author: ohlia $
|
|
*
|
|
* Support mail : avr@atmel.com
|
|
*
|
|
* Target platform : Win32
|
|
*
|
|
* AppNote : AVR911 - AVR Open-source Programmer
|
|
*
|
|
* Description : A class holding misc. utility methods used in AVROSP.
|
|
*
|
|
*
|
|
****************************************************************************/
|
|
#include "Utility.hpp"
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <stdlib.h>
|
|
|
|
/* Global object */
|
|
Utility Util;
|
|
|
|
|
|
/* Constructor */
|
|
Utility::Utility() :
|
|
noLog( false ),
|
|
noProgress( false )
|
|
{
|
|
/* No code here */
|
|
}
|
|
|
|
|
|
/* Destructor */
|
|
Utility::~Utility()
|
|
{
|
|
/* No code here */
|
|
}
|
|
|
|
|
|
|
|
void Utility::log( const string & txt )
|
|
{
|
|
if( !noLog )
|
|
cout << txt;
|
|
}
|
|
|
|
|
|
void Utility::progress( const string & txt )
|
|
{
|
|
if( !noProgress )
|
|
cout << txt;
|
|
}
|
|
|
|
|
|
long Utility::convertHex( const string & txt )
|
|
{
|
|
long result = 0;
|
|
long digit;
|
|
long i;
|
|
|
|
if( txt.size() == 0 )
|
|
throw new ErrorMsg( "Cannot convert zero-length hex-string to number!" );
|
|
|
|
if( txt.size() > 8 )
|
|
throw new ErrorMsg( "Hex conversion overflow! Too many hex digits in string." );
|
|
|
|
|
|
for( i = 0; i < txt.size(); i++ )
|
|
{
|
|
/* Convert hex digit */
|
|
if( txt[i] >= '0' && txt[i] <= '9' )
|
|
digit = txt[i] - '0';
|
|
else if( txt[i] >= 'a' && txt[i] <= 'f' )
|
|
digit = txt[i] - 'a' + 10;
|
|
else if( txt[i] >= 'A' && txt[i] <= 'F' )
|
|
digit = txt[i] - 'A' + 10;
|
|
else
|
|
throw new ErrorMsg( "Invalid hex digit found!" );
|
|
|
|
/* Add digit as least significant 4 bits of result */
|
|
result = (result << 4) | digit;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
string Utility::convertLong( long num, long radix )
|
|
{
|
|
char buf[18];
|
|
string res;
|
|
|
|
itoa( num, buf, radix );
|
|
res = buf;
|
|
return res;
|
|
}
|
|
|
|
|
|
void Utility::parsePath( vector<string> & list )
|
|
{
|
|
/* Get environment variable and parse if it exists */
|
|
char * pathptr = getenv( "PATH" );
|
|
if( pathptr != NULL && pathptr[0] != 0 ) {
|
|
string path = pathptr;
|
|
int pos;
|
|
|
|
while( (pos = path.find_first_of( ";" )) < path.length() ) {
|
|
list.push_back( path.substr( 0, pos ) );
|
|
path.erase( 0, pos+1 );
|
|
}
|
|
|
|
list.push_back( path ); // Last directory.
|
|
}
|
|
}
|
|
|
|
|
|
bool Utility::fileExists( string filename )
|
|
{
|
|
/* Attempt to open file */
|
|
ifstream f;
|
|
f.open( filename.c_str(), ios::in );
|
|
if( !f ) {
|
|
return false;
|
|
} else {
|
|
f.close();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
void Utility::saveString( string txt, string filename )
|
|
{
|
|
ofstream f;
|
|
|
|
f.open( filename.c_str(), ios::out );
|
|
if( !f )
|
|
throw new ErrorMsg( "Error opening HEX file for output!" );
|
|
|
|
f << txt;
|
|
|
|
f.close();
|
|
}
|
|
|
|
|
|
#ifndef NOREGISTRY
|
|
string Utility::getRegistryValue( const string & path, const string & value )
|
|
{
|
|
/* Code modified from MSDN */
|
|
const long BUFSIZE=1000;
|
|
string result;
|
|
HKEY hKey;
|
|
char szAVRPath[BUFSIZE];
|
|
DWORD dwBufLen=BUFSIZE;
|
|
LONG lRet;
|
|
|
|
/* Open key */
|
|
lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, path.c_str(), 0, KEY_QUERY_VALUE, &hKey );
|
|
if( lRet != ERROR_SUCCESS )
|
|
throw new ErrorMsg( "Error when opening registry key: (" + path + ")!" );
|
|
|
|
/* Get value */
|
|
lRet = RegQueryValueEx( hKey, value.c_str(), NULL, NULL, (LPBYTE) szAVRPath, &dwBufLen);
|
|
if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
|
|
throw new ErrorMsg( "Error when reading key value: (" + value + ")!" );
|
|
|
|
/* Clean up and return result */
|
|
RegCloseKey( hKey );
|
|
result = szAVRPath;
|
|
return result;
|
|
}
|
|
#endif
|
|
|
|
/* end of file */
|
|
|