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 34

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 19 dsmv
                        //*(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 19 dsmv
/*
175 2 dsmv
    *((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 19 dsmv
*/
213 2 dsmv
    return total;
214
}
215
 
216
//! Получение параметров из памяти
217
void TF_WorkParam::GetParamFromMemory( char* ptr )
218
{
219
    char *src=ptr;
220
    U32 len;
221
    U32 n;
222
    n=*((U32*)ptr);
223 6 v.karak
    U32 ii;
224 2 dsmv
    int total=4;
225 19 dsmv
/*
226 2 dsmv
    for( ii=0; ii<n; ii++ )
227
    {
228
        src=ptr+total;
229
        len=GetParamFromStr( src );
230
        total+=len;
231
    }
232 19 dsmv
*/
233 2 dsmv
}
234
 
235
 
236
//! Отображение параметров
237
void TF_WorkParam::ShowParam( void )
238
{
239 6 v.karak
    U32 ii;
240
    STR_CFG  *item;
241
    log_out( "\r\n\r\n\r\nParameters:\r\n\r\n" );
242
    for( ii=0; ii<max_item; ii++ )
243
    {
244
        item=array_cfg+ii;
245
        if( item->is_float==2 )
246
        {
247 2 dsmv
 
248 6 v.karak
            char **ptr=(char**)item->ptr;
249
            char *ps=*ptr;
250
            log_out( "%s  %s\r\n", item->name, ps );
251
        } else if( item->is_float==0 )
252
        {
253
            U32 ps=*((U32*)item->ptr);
254
            log_out( "%s  %d\r\n", item->name, ps );
255
        } else if( item->is_float==1 )
256
        {
257
            float ps=*((float*)item->ptr);
258
            log_out( "%s  %g\r\n", item->name, ps );
259
        } else if( item->is_float==3 )
260
        {
261
            U32 ps=*((U32*)item->ptr);
262
            if( ps ) log_out( "%s  %s\r\n", item->name, "true" );
263
            else log_out( "%s  %s\r\n", item->name, "false" );
264
        }
265
    }
266
    log_out( "\r\n\r\n\r\n" );
267 2 dsmv
 
268
}
269
 
270
 
271
void TF_WorkParam::log_out( const char* format, ... )
272
{
273
 
274 6 v.karak
    char buffer[2048];
275 2 dsmv
 
276 6 v.karak
    va_list marker;
277
    va_start( marker, format );
278
    vsprintf( buffer, format, marker );
279
    va_end( marker );
280 2 dsmv
 
281 6 v.karak
    printf( "%s", buffer );
282 2 dsmv
 
283
}

powered by: WebSVN 2.1.0

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