00001
00002 #include <global_amp_rw.h>
00003
00004 #include <string.h>
00005 #include <stdlib.h>
00006 #include <stdio.h>
00007
00008 #include <kom.h>
00009
00010
00011
00012
00013
00014 #define GLOBAL_AMP_VERSION (short)1
00015
00016
00017
00018
00019 GLOBAL_MSG_STATUS InitGlobalAmp( GLOBAL_AMP_STRUCT * p_struct )
00020 {
00021 if ( p_struct == NULL )
00022 {
00023 return GLOBAL_MSG_NULL;
00024 }
00025 p_struct->version = GLOBAL_AMP_VERSION;
00026 p_struct->logo.instid = 0;
00027 p_struct->logo.mod = 0;
00028 p_struct->logo.type = 0;
00029 p_struct->sequence = 0;
00030 strcpy( p_struct->station, "?" );
00031 strcpy( p_struct->channel, "?" );
00032 strcpy( p_struct->network, "?" );
00033 strcpy( p_struct->location, "?" );
00034 strcpy( p_struct->amp_time, "?" );
00035 p_struct->amptype = AMPTYPE_NONE;
00036 p_struct->adcounts = 0.0;
00037 p_struct->period = 0.0;
00038
00039 return GLOBAL_MSG_SUCCESS;
00040 }
00041
00042
00043
00044 GLOBAL_MSG_STATUS WriteAmpToBuffer( GLOBAL_AMP_STRUCT * p_struct
00045 , char * p_buffer
00046 , unsigned int p_length
00047 )
00048 {
00049 char _author[10];
00050
00051 if ( p_struct == NULL )
00052 {
00053 return GLOBAL_MSG_NULL;
00054 }
00055
00056 if ( p_buffer == NULL )
00057 {
00058 return GLOBAL_MSG_BADPARAM;
00059 }
00060
00061 if ( p_length < GLOBAL_AMP_MAXBUFSIZE )
00062 {
00063 return GLOBAL_MSG_TOOSMALL;
00064 }
00065
00066 if ( p_struct->version != GLOBAL_AMP_VERSION )
00067 {
00068 return GLOBAL_MSG_VERSINVALID;
00069 }
00070
00071 EncodeAuthor( p_struct->logo, _author );
00072
00073 sprintf( p_buffer
00074 , "%s %d %d %s %s %s %s %s %d %1.4f %1.4f\n"
00075 , _author
00076 , p_struct->sequence
00077 , p_struct->version
00078 , p_struct->station
00079 , p_struct->channel
00080 , p_struct->network
00081 , p_struct->location
00082 , p_struct->amp_time
00083 , p_struct->amptype
00084 , p_struct->adcounts
00085 , p_struct->period
00086 );
00087
00088 return GLOBAL_MSG_SUCCESS;
00089 }
00090
00091
00092
00093 GLOBAL_MSG_STATUS StringToAmp( GLOBAL_AMP_STRUCT * p_struct, char * p_string )
00094 {
00095 char _str[80];
00096
00097 if ( p_struct == NULL )
00098 {
00099 return GLOBAL_MSG_NULL;
00100 }
00101
00102 if ( p_struct->version != GLOBAL_AMP_VERSION )
00103 {
00104 return GLOBAL_MSG_VERSINVALID;
00105 }
00106
00107 if ( p_string == NULL )
00108 {
00109 return GLOBAL_MSG_BADPARAM;
00110 }
00111
00112 InitGlobalAmp(p_struct);
00113
00114 k_put(p_string);
00115
00116
00117 strcpy( _str , k_str() );
00118 if ( strlen(_str) == 0 )
00119 {
00120 return GLOBAL_MSG_FORMATERROR;
00121 }
00122
00123 if ( DecodeAuthor( &(p_struct->logo), _str ) != GLOBAL_MSG_SUCCESS )
00124 {
00125 return GLOBAL_MSG_FORMATERROR;
00126 }
00127
00128
00129 p_struct->sequence = k_long();
00130 if ( k_err() != 0 )
00131 {
00132 return GLOBAL_MSG_FORMATERROR;
00133 }
00134
00135
00136 p_struct->version = (short)k_long();
00137 if ( k_err() != 0 )
00138 {
00139 return GLOBAL_MSG_FORMATERROR;
00140 }
00141
00142 if ( p_struct->version != GLOBAL_AMP_VERSION )
00143 {
00144 return GLOBAL_MSG_VERSINVALID;
00145 }
00146
00147
00148 strcpy( p_struct->station , k_str() );
00149 if ( strlen(p_struct->station) == 0 )
00150 {
00151 return GLOBAL_MSG_FORMATERROR;
00152 }
00153
00154
00155 strcpy( p_struct->channel , k_str() );
00156 if ( strlen(p_struct->channel) == 0 )
00157 {
00158 return GLOBAL_MSG_FORMATERROR;
00159 }
00160
00161
00162 strcpy( p_struct->network , k_str() );
00163 if ( strlen(p_struct->network) == 0 )
00164 {
00165 return GLOBAL_MSG_FORMATERROR;
00166 }
00167
00168
00169 strcpy( p_struct->location , k_str() );
00170 if ( strlen(p_struct->location) == 0 )
00171 {
00172 return GLOBAL_MSG_FORMATERROR;
00173 }
00174
00175
00176 strcpy( p_struct->amp_time , k_str() );
00177 if ( strlen(p_struct->amp_time) == 0 )
00178 {
00179 return GLOBAL_MSG_FORMATERROR;
00180 }
00181
00182
00183 p_struct->amptype = (int)k_long();
00184 if ( k_err() != 0 )
00185 {
00186 return GLOBAL_MSG_FORMATERROR;
00187 }
00188
00189 if ( p_struct->amptype < 0 || AMPTYPE_COUNT <= p_struct->amptype )
00190 {
00191 return GLOBAL_MSG_FORMATERROR;
00192 }
00193
00194
00195 p_struct->adcounts = k_val();
00196 if ( k_err() != 0 )
00197 {
00198 return GLOBAL_MSG_FORMATERROR;
00199 }
00200
00201
00202 p_struct->period = k_val();
00203 if ( k_err() != 0 )
00204 {
00205 return GLOBAL_MSG_FORMATERROR;
00206 }
00207
00208 return GLOBAL_MSG_SUCCESS;
00209 }
00210