#include <stdio.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
#include <string.h>
|
#include <string.h>
|
#include <stdarg.h>
|
#include <stdarg.h>
|
|
|
#include "utypes.h"
|
#include "utypes.h"
|
#include "tf_workparam.h"
|
#include "tf_workparam.h"
|
|
|
#ifdef _DEBUG
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#define new DEBUG_NEW
|
#undef THIS_FILE
|
#undef THIS_FILE
|
static char THIS_FILE[] = __FILE__;
|
static char THIS_FILE[] = __FILE__;
|
#endif
|
#endif
|
|
|
//
|
//
|
|
|
TF_WorkParam::TF_WorkParam(void)
|
TF_WorkParam::TF_WorkParam(void)
|
{
|
{
|
|
|
max_item=0;
|
max_item=0;
|
memset( this, 0, sizeof( TF_WorkParam ) );
|
memset( this, 0, sizeof( TF_WorkParam ) );
|
|
|
SetDefault();
|
SetDefault();
|
}
|
}
|
|
|
TF_WorkParam::~TF_WorkParam(void)
|
TF_WorkParam::~TF_WorkParam(void)
|
{
|
{
|
U32 ii=0;
|
U32 ii=0;
|
|
|
// Освобождение памяти от строковых параметров
|
// Освобождение памяти от строковых параметров
|
for( ii=0; ii<max_item; ii++ )
|
for( ii=0; ii<max_item; ii++ )
|
{
|
{
|
if( array_cfg[ii].is_float==2 )
|
if( array_cfg[ii].is_float==2 )
|
{
|
{
|
STR_CFG *cfg=array_cfg+ii;
|
STR_CFG *cfg=array_cfg+ii;
|
char **ptr=(char**)cfg->ptr;
|
char **ptr=(char**)cfg->ptr;
|
|
|
char *ps=*ptr;
|
char *ps=*ptr;
|
if( ps!=NULL )
|
if( ps!=NULL )
|
free( ps );
|
free( ps );
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
//! Установка параметров по умолчанию
|
//! Установка параметров по умолчанию
|
void TF_WorkParam::SetDefault( void )
|
void TF_WorkParam::SetDefault( void )
|
{
|
{
|
|
|
U32 ii=0;
|
U32 ii=0;
|
|
|
// Освобождение памяти от строковых параметров
|
// Освобождение памяти от строковых параметров
|
for( ii=0; ii<max_item; ii++ )
|
for( ii=0; ii<max_item; ii++ )
|
{
|
{
|
if( array_cfg[ii].is_float==2 )
|
if( array_cfg[ii].is_float==2 )
|
{
|
{
|
STR_CFG *cfg=array_cfg+ii;
|
STR_CFG *cfg=array_cfg+ii;
|
char **ptr=(char**)cfg->ptr;
|
char **ptr=(char**)cfg->ptr;
|
|
|
char *ps=*ptr;
|
char *ps=*ptr;
|
if( ps!=NULL )
|
if( ps!=NULL )
|
free( ps );
|
free( ps );
|
}
|
}
|
}
|
}
|
|
|
|
|
ii=0;
|
ii=0;
|
|
|
max_item=ii;
|
max_item=ii;
|
|
|
{
|
{
|
char str[1024];
|
char str[1024];
|
for( U32 ii=0; ii<max_item; ii++ )
|
for( U32 ii=0; ii<max_item; ii++ )
|
{
|
{
|
sprintf( str, "%s %s", array_cfg[ii].name, array_cfg[ii].def );
|
sprintf( str, "%s %s", array_cfg[ii].name, array_cfg[ii].def );
|
GetParamFromStr( str );
|
GetParamFromStr( str );
|
}
|
}
|
|
|
|
|
}
|
}
|
|
|
|
|
}
|
}
|
|
|
|
|
//! Получение параметров из файла инициализации
|
//! Получение параметров из файла инициализации
|
void TF_WorkParam::GetParamFromFile( BRDCHAR* fname )
|
void TF_WorkParam::GetParamFromFile( BRDCHAR* fname )
|
{
|
{
|
|
|
FILE *in;
|
FILE *in;
|
|
|
in=BRDC_fopen( fname, _BRDC("rt") );
|
in=BRDC_fopen( fname, _BRDC("rt") );
|
if( in==NULL ) {
|
if( in==NULL ) {
|
BRDC_printf( _BRDC("Can't open configuration file: %s\r\n"), fname );
|
BRDC_printf( _BRDC("Can't open configuration file: %s\r\n"), fname );
|
return;
|
return;
|
}
|
}
|
BRDC_printf( _BRDC("\r\nRead parameters from file: %s\r\n\r\n"), fname );
|
BRDC_printf( _BRDC("\r\nRead parameters from file: %s\r\n\r\n"), fname );
|
|
|
char str[512];
|
char str[512];
|
|
|
for( ; ; ) {
|
for( ; ; ) {
|
if( fgets( str, 510, in )==NULL ) {
|
if( fgets( str, 510, in )==NULL ) {
|
break;
|
break;
|
}
|
}
|
str[510]=0;
|
str[510]=0;
|
GetParamFromStr( str );
|
GetParamFromStr( str );
|
}
|
}
|
log_out( "\r\n" );
|
log_out( "\r\n" );
|
fclose( in );
|
fclose( in );
|
}
|
}
|
|
|
//! Получение параметра из строки
|
//! Получение параметра из строки
|
U32 TF_WorkParam::GetParamFromStr( char* str )
|
U32 TF_WorkParam::GetParamFromStr( char* str )
|
{
|
{
|
char name[256], val[256];
|
char name[256], val[256];
|
U32 ii;
|
U32 ii;
|
int ret;
|
int ret;
|
U32 len=strlen( str )+1;
|
U32 len=strlen( str )+1;
|
ret=sscanf( str, "%128s %128s", name, val );
|
ret=sscanf( str, "%128s %128s", name, val );
|
if( ret==2 ) {
|
if( ret==2 ) {
|
for( ii=0; ii<max_item; ii++ ) {
|
for( ii=0; ii<max_item; ii++ ) {
|
if( strcmp( array_cfg[ii].name, name )==0 ) {
|
if( strcmp( array_cfg[ii].name, name )==0 ) {
|
if( array_cfg[ii].is_float==0 ) {
|
if( array_cfg[ii].is_float==0 ) {
|
sscanf( val, "%i", array_cfg[ii].ptr );
|
sscanf( val, "%i", array_cfg[ii].ptr );
|
} else if( array_cfg[ii].is_float==1 ) {
|
} else if( array_cfg[ii].is_float==1 ) {
|
sscanf( val, "%g", (float*)array_cfg[ii].ptr );
|
sscanf( val, "%g", (float*)array_cfg[ii].ptr );
|
} else if( array_cfg[ii].is_float==2 ) {
|
} else if( array_cfg[ii].is_float==2 ) {
|
|
|
{
|
{
|
|
|
STR_CFG *cfg=array_cfg+ii;
|
STR_CFG *cfg=array_cfg+ii;
|
char **ptr=(char**)cfg->ptr;
|
char **ptr=(char**)cfg->ptr;
|
|
|
char *ps=*ptr;
|
char *ps=*ptr;
|
if( ps!=NULL )
|
if( ps!=NULL )
|
free( ps );
|
free( ps );
|
ps = (char*)malloc( 128 );
|
ps = (char*)malloc( 128 );
|
//*(cfg->ptr)=(U32)ps;
|
//*(cfg->ptr)=(U32)ps;
|
sprintf( ps, "%s", val );
|
sprintf( ps, "%s", val );
|
|
|
}
|
}
|
} else if( array_cfg[ii].is_float==3 ) {
|
} else if( array_cfg[ii].is_float==3 ) {
|
U32 v;
|
U32 v;
|
bool *p=(bool*)(array_cfg[ii].ptr);
|
bool *p=(bool*)(array_cfg[ii].ptr);
|
sscanf( val, "%d", &v );
|
sscanf( val, "%d", &v );
|
if( v ) {
|
if( v ) {
|
*p=true;
|
*p=true;
|
} else {
|
} else {
|
*p=false;
|
*p=false;
|
}
|
}
|
}
|
}
|
break;
|
break;
|
}
|
}
|
}
|
}
|
}
|
}
|
return len;
|
return len;
|
}
|
}
|
|
|
|
|
//! Расчёт параметров
|
//! Расчёт параметров
|
void TF_WorkParam::CalculateParams( void )
|
void TF_WorkParam::CalculateParams( void )
|
{
|
{
|
ShowParam();
|
ShowParam();
|
}
|
}
|
|
|
|
|
//! Сохранение параметров в памяти
|
//! Сохранение параметров в памяти
|
U32 TF_WorkParam::PutParamToMemory( char* ptr, U32 max_size )
|
U32 TF_WorkParam::PutParamToMemory( char* ptr, U32 max_size )
|
{
|
{
|
char str[256];
|
//char str[256];
|
int len;
|
//int len;
|
int total=0;
|
int total=0;
|
U32 ii;
|
//U32 ii;
|
STR_CFG *cfg;
|
//STR_CFG *cfg;
|
/*
|
/*
|
*((U32*)ptr)=max_item;
|
*((U32*)ptr)=max_item;
|
total=4;
|
total=4;
|
|
|
for( ii=0; ii<max_item; ii++ )
|
for( ii=0; ii<max_item; ii++ )
|
{
|
{
|
cfg=array_cfg+ii;
|
cfg=array_cfg+ii;
|
str[0]=0;
|
str[0]=0;
|
switch( cfg->is_float )
|
switch( cfg->is_float )
|
{
|
{
|
case 0: sprintf( str, "%s %d \r\n", cfg->name, *(cfg->ptr) ); break;
|
case 0: sprintf( str, "%s %d \r\n", cfg->name, *(cfg->ptr) ); break;
|
case 1:
|
case 1:
|
{
|
{
|
float* v=(float*)(cfg->ptr);
|
float* v=(float*)(cfg->ptr);
|
sprintf( str, "%s %g \r\n", cfg->name, *v ); break;
|
sprintf( str, "%s %g \r\n", cfg->name, *v ); break;
|
}
|
}
|
break;
|
break;
|
case 2:
|
case 2:
|
{
|
{
|
if( *(cfg->ptr)==0 )
|
if( *(cfg->ptr)==0 )
|
{
|
{
|
sprintf( str, "%s \r\n", cfg->name );
|
sprintf( str, "%s \r\n", cfg->name );
|
} else
|
} else
|
{
|
{
|
sprintf( str, "%s %s \r\n", cfg->name,(char*)(*cfg->ptr) );
|
sprintf( str, "%s %s \r\n", cfg->name,(char*)(*cfg->ptr) );
|
}
|
}
|
|
|
}
|
}
|
break;
|
break;
|
|
|
}
|
}
|
len=strlen( str )+1;
|
len=strlen( str )+1;
|
if( (total+len)<(S32)max_size )
|
if( (total+len)<(S32)max_size )
|
{
|
{
|
strcpy( ptr+total, str );
|
strcpy( ptr+total, str );
|
total+=len;
|
total+=len;
|
}
|
}
|
}
|
}
|
*/
|
*/
|
return total;
|
return total;
|
}
|
}
|
|
|
//! Получение параметров из памяти
|
//! Получение параметров из памяти
|
void TF_WorkParam::GetParamFromMemory( char* ptr )
|
void TF_WorkParam::GetParamFromMemory( char* ptr )
|
{
|
{
|
char *src=ptr;
|
//char *src=ptr;
|
U32 len;
|
//U32 len;
|
U32 n;
|
//U32 n;
|
n=*((U32*)ptr);
|
//n=*((U32*)ptr);
|
U32 ii;
|
//U32 ii;
|
int total=4;
|
//int total=4;
|
/*
|
/*
|
for( ii=0; ii<n; ii++ )
|
for( ii=0; ii<n; ii++ )
|
{
|
{
|
src=ptr+total;
|
src=ptr+total;
|
len=GetParamFromStr( src );
|
len=GetParamFromStr( src );
|
total+=len;
|
total+=len;
|
}
|
}
|
*/
|
*/
|
}
|
}
|
|
|
|
|
//! Отображение параметров
|
//! Отображение параметров
|
void TF_WorkParam::ShowParam( void )
|
void TF_WorkParam::ShowParam( void )
|
{
|
{
|
U32 ii;
|
U32 ii;
|
STR_CFG *item;
|
STR_CFG *item;
|
log_out( "\r\n\r\n\r\nParameters:\r\n\r\n" );
|
log_out( "\r\n\r\n\r\nParameters:\r\n\r\n" );
|
for( ii=0; ii<max_item; ii++ )
|
for( ii=0; ii<max_item; ii++ )
|
{
|
{
|
item=array_cfg+ii;
|
item=array_cfg+ii;
|
if( item->is_float==2 )
|
if( item->is_float==2 )
|
{
|
{
|
|
|
char **ptr=(char**)item->ptr;
|
char **ptr=(char**)item->ptr;
|
char *ps=*ptr;
|
char *ps=*ptr;
|
log_out( "%s %s\r\n", item->name, ps );
|
log_out( "%s %s\r\n", item->name, ps );
|
} else if( item->is_float==0 )
|
} else if( item->is_float==0 )
|
{
|
{
|
U32 ps=*((U32*)item->ptr);
|
U32 ps=*((U32*)item->ptr);
|
log_out( "%s %d\r\n", item->name, ps );
|
log_out( "%s %d\r\n", item->name, ps );
|
} else if( item->is_float==1 )
|
} else if( item->is_float==1 )
|
{
|
{
|
float ps=*((float*)item->ptr);
|
float ps=*((float*)item->ptr);
|
log_out( "%s %g\r\n", item->name, ps );
|
log_out( "%s %g\r\n", item->name, ps );
|
} else if( item->is_float==3 )
|
} else if( item->is_float==3 )
|
{
|
{
|
U32 ps=*((U32*)item->ptr);
|
U32 ps=*((U32*)item->ptr);
|
if( ps ) log_out( "%s %s\r\n", item->name, "true" );
|
if( ps ) log_out( "%s %s\r\n", item->name, "true" );
|
else log_out( "%s %s\r\n", item->name, "false" );
|
else log_out( "%s %s\r\n", item->name, "false" );
|
}
|
}
|
}
|
}
|
log_out( "\r\n\r\n\r\n" );
|
log_out( "\r\n\r\n\r\n" );
|
|
|
}
|
}
|
|
|
|
|
void TF_WorkParam::log_out( const char* format, ... )
|
void TF_WorkParam::log_out( const char* format, ... )
|
{
|
{
|
|
|
char buffer[2048];
|
char buffer[2048];
|
|
|
va_list marker;
|
va_list marker;
|
va_start( marker, format );
|
va_start( marker, format );
|
vsprintf( buffer, format, marker );
|
vsprintf( buffer, format, marker );
|
va_end( marker );
|
va_end( marker );
|
|
|
printf( "%s", buffer );
|
printf( "%s", buffer );
|
|
|
}
|
}
|
|
|