OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [common/] [utils/] [tf_workparam.cpp] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
#include <stdlib.h>
2
#include <string.h>
3
#include <stdio.h>
4
#include <stdarg.h>
5
 
6
#include "utypes.h"
7
//#include "useful.h"
8
#include "tf_workparam.h"
9
 
10
#ifdef _DEBUG
11
#define new DEBUG_NEW
12
#undef THIS_FILE
13
static char THIS_FILE[] = __FILE__;
14
#endif
15
 
16
 
17
//
18
 
19
 
20
TF_WorkParam::TF_WorkParam(void)
21
{
22
 
23
    max_item=0;
24
    memset( this, 0, sizeof( TF_WorkParam ) );
25
 
26
    SetDefault();
27
 
28
 
29
}
30
 
31
TF_WorkParam::~TF_WorkParam(void)
32
{
33
    U32 ii=0;
34
 
35
    // Освобождение памяти от строковых параметров
36
    for( ii=0; ii<max_item; ii++ )
37
    {
38
        if( array_cfg[ii].is_float==2 )
39
        {
40
            STR_CFG *cfg=array_cfg+ii;
41
            char **ptr=(char**)cfg->ptr;
42
 
43
            char *ps=*ptr;
44
            if( ps!=NULL )
45
                free( ps );
46
        }
47
    }
48
}
49
 
50
//! Установка параметров по умолчанию
51
void TF_WorkParam::SetDefault( void )
52
{
53
 
54
    U32 ii=0;
55
 
56
    // Освобождение памяти от строковых параметров
57
    for( ii=0; ii<max_item; ii++ )
58
    {
59
        if( array_cfg[ii].is_float==2 )
60
        {
61
            STR_CFG *cfg=array_cfg+ii;
62
            char **ptr=(char**)cfg->ptr;
63
 
64
            char *ps=*ptr;
65
            if( ps!=NULL )
66
                free( ps );
67
        }
68
    }
69
 
70
 
71
    //ZeroMemory( this, sizeof( TF_WorkParam ) );
72
 
73
 
74
 
75
 
76
 
77
    ii=0;
78
    /*
79
array_cfg[ii++]=STR_CFG(  0, "RGG_SideObservation", "1", (U32*)&st.Nav_LR_Side, "борт наблюдения (правый +1, левый -1)" );
80
array_cfg[ii++]=STR_CFG(  1, "lambda",          "0.0032",       (U32*)&st.lambda, "длина волны (м)" );
81
array_cfg[ii++]=STR_CFG(  2, "RliFileName",                             "..\\gol\\bmp\\_A_4Kx16k.bmp",          (U32*)&pRliFileName, "имя файла с изображением для режима иммитации РЛИ " );
82
array_cfg[ii++]=STR_CFG(  3, "SYNTH_OBZOR_cutDoppler",  "1",    (U32*)(&st.cutDoppler), "cutDoppler" );
83
*/
84
 
85
    max_item=ii;
86
 
87
 
88
    /*
89
 
90
   {
91
           if( pPathVega==NULL )
92
           {
93
                 pPathVega = (char*)malloc( 1024 );
94
           }
95
 
96
                int ret=GetEnvironmentVariableA(
97
                        "VEGA",
98
                        pPathVega,
99
                        1020
100
                        );
101
                char buf[1024];
102
                if( ret==0 )
103
                        sprintf( pPathVega, "c:\\vega" );
104
 
105
                sprintf( buf, "%s\\temp\\obzor\\", pPathVega );
106
 
107
 
108
        strcpy( st.output_dir, buf );                        // директория файлов вычислений(server)
109
        strcpy( st.output_dir_loc, buf );                    // директория файлов вычислений(client)
110
 
111
        strcpy( sk.output_dir, buf );                        // директория файлов вычислений(server)
112
        strcpy( sk.output_dir_loc, buf );                    // директория файлов вычислений(client)
113
 
114
        //free( pPathVega );
115
   };
116
*/
117
    {
118
        char str[1024];
119
        for( unsigned ii=0; ii<max_item; ii++ )
120
        {
121
            sprintf( str, "%s  %s", array_cfg[ii].name, array_cfg[ii].def );
122
            GetParamFromStr( str );
123
        }
124
 
125
 
126
    }
127
 
128
 
129
}
130
 
131
 
132
//! Получение параметров из файла инициализации
133
void TF_WorkParam::GetParamFromFile( BRDCHAR* fname )
134
{
135
 
136
    FILE *in;
137
 
138
    in=BRDC_fopen( fname, _BRDC("rt") );
139
    if( in==NULL ) {
140
        //log_out( "Не могу открыть файл конфигурации %s\r\n", fname );
141
        BRDC_fprintf( stderr, _BRDC("Can't open configuration file: %s\r\n"), fname );
142
        return;
143
    }
144
    //log_out( "\r\nЧтение параметров из файла %s\r\n\r\n", fname );
145
    BRDC_fprintf( stderr, _BRDC("\r\nReading parameters from file: %s\r\n\r\n"), fname );
146
 
147
    char str[512];
148
 
149
    for( ; ; ) {
150
        if( fgets( str, 510, in )==NULL ) {
151
            break;
152
        }
153
        str[510]=0;
154
        GetParamFromStr( str );
155
    }
156
    log_out( "\r\n" );
157
    fclose( in );
158
 
159
}
160
 
161
//! Получение параметра из строки
162
U32 TF_WorkParam::GetParamFromStr( char* str )
163
{
164
    char name[256], val[256];
165
    U32 ii;
166
    int ret;
167
    U32 len=strlen( str )+1;
168
    ret=sscanf( str, "%128s %128s", name, val );
169
    if( ret==2 ) {
170
        for( ii=0; ii<max_item; ii++ ) {
171
            if( strcmp( array_cfg[ii].name, name )==0 ) {
172
                if( array_cfg[ii].is_float==0 ) {
173
                    sscanf( val, "%i", array_cfg[ii].ptr );
174
                    // scr.log_out( "%-20s  %d\r\n", array_cfg[ii].name, *(array_cfg[ii].ptr) );
175
                } else if( array_cfg[ii].is_float==1 ) {
176
                    sscanf( val, "%g", (float*)array_cfg[ii].ptr );
177
                    // scr.log_out( "%-20s  %g\r\n", array_cfg[ii].name, *((float*)(array_cfg[ii].ptr)) );
178
                } else if( array_cfg[ii].is_float==2 ) {
179
                    //*((CString*)array_cfg[ii].ptr)=val;
180
                    {
181
 
182
                        STR_CFG *cfg=array_cfg+ii;
183
                        char **ptr=(char**)cfg->ptr;
184
 
185
                        char *ps=*ptr;
186
                        if( ps!=NULL )
187
                            free( ps );
188
                        ps = (char*)malloc( 128 );
189
                        *(cfg->ptr)=((size_t)ps);
190
                        sprintf( ps, "%s", val );
191
                        //scr.log_out("%-20s  %s\r\n", array_cfg[ii].name, ps );
192
 
193
                    }
194
                } else if( array_cfg[ii].is_float==3 ) {
195
                    U32 v;
196
                    bool *p=(bool*)(array_cfg[ii].ptr);
197
                    sscanf( val, "%d", &v );
198
                    if( v ) {
199
                        *p=true;
200
                        //scr.log_out( "%-20s  true\r\n", array_cfg[ii].name );
201
                    } else {
202
                        *p=false;
203
                        //scr.log_out( "%-20s  false\r\n", array_cfg[ii].name );
204
                    }
205
                }
206
                break;
207
            }
208
        }
209
    }
210
    return len;
211
}
212
 
213
 
214
//! Расчёт параметров
215
void TF_WorkParam::CalculateParams( void )
216
{
217
    ShowParam();
218
}
219
 
220
 
221
//! Сохранение параметров в памяти
222
U32 TF_WorkParam::PutParamToMemory( char* ptr, U32 max_size )
223
{
224
    char str[256];
225
    int len;
226
    int total=0;
227
    unsigned ii;
228
    STR_CFG *cfg;
229
 
230
    *((U32*)ptr)=max_item;
231
    total=4;
232
 
233
    for( ii=0; ii<max_item; ii++ )
234
    {
235
        cfg=array_cfg+ii;
236
        str[0]=0;
237
        switch( cfg->is_float )
238
        {
239
        case 0: sprintf( str, "%s  %d \r\n", cfg->name, *(cfg->ptr) ); break;
240
        case 1:
241
            {
242
                float* v=(float*)(cfg->ptr);
243
                sprintf( str, "%s  %g \r\n", cfg->name, *v ); break;
244
            }
245
            break;
246
        case 2:
247
            {
248
                if( *(cfg->ptr)==0 )
249
                {
250
                    sprintf( str, "%s  \r\n", cfg->name );
251
                } else
252
                {
253
                    sprintf( str, "%s  %s \r\n", cfg->name,(char*)(*cfg->ptr) );
254
                }
255
 
256
            }
257
            break;
258
 
259
        }
260
        len=strlen( str )+1;
261
        if( (total+len)<(int)max_size )
262
        {
263
            strcpy( ptr+total, str );
264
            total+=len;
265
        }
266
    }
267
    return total;
268
}
269
 
270
//! Получение параметров из памяти
271
void TF_WorkParam::GetParamFromMemory( char* ptr )
272
{
273
    char *src=ptr;
274
    U32 len;
275
    U32 n;
276
    n=*((U32*)ptr);
277
    unsigned ii;
278
    int total=4;
279
 
280
    for( ii=0; ii<n; ii++ )
281
    {
282
        src=ptr+total;
283
        len=GetParamFromStr( src );
284
        total+=len;
285
    }
286
 
287
}
288
 
289
 
290
//! Отображение параметров
291
void TF_WorkParam::ShowParam( void )
292
{
293
        U32 ii;
294
        STR_CFG  *item;
295
        log_out( "\r\n\r\n\r\nParameters value:\r\n\r\n" );
296
        for( ii=0; ii<max_item; ii++ )
297
        {
298
                item=array_cfg+ii;
299
        if( item->is_float==2 )
300
                {
301
 
302
                        char **ptr=(char**)item->ptr;
303
                        char *ps=*ptr;
304
                        log_out( "%s  %s\r\n", item->name, ps );
305
                } else if( item->is_float==0 )
306
                {
307
                        U32 ps=*((U32*)item->ptr);
308
                        log_out( "%s  %d\r\n", item->name, ps );
309
                } else if( item->is_float==1 )
310
                {
311
                        float ps=*((float*)item->ptr);
312
                        log_out( "%s  %g\r\n", item->name, ps );
313
                } else if( item->is_float==3 )
314
                {
315
                        U32 ps=*((U32*)item->ptr);
316
                        if( ps ) log_out( "%s  %s\r\n", item->name, "true" );
317
                        else log_out( "%s  %s\r\n", item->name, "false" );
318
                }
319
        }
320
        log_out( "\r\n\r\n\r\n" );
321
 
322
}
323
 
324
 
325
void TF_WorkParam::log_out( const char* format, ... )
326
{
327
 
328
                char buffer[2048];
329
 
330
                va_list marker;
331
                va_start( marker, format );
332
                vsprintf( buffer, format, marker );
333
                va_end( marker );
334
 
335
                BRDC_fprintf( stderr, "%s", buffer );
336
 
337
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.