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 6

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

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

powered by: WebSVN 2.1.0

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