00001 #include <iostream>
00002 #include <assert.h>
00003 #include <stdlib.h>
00004 #include <stdio.h>
00005 #include <string.h>
00006
00007
00008 #include "EEdsm1.h"
00009
00010
00011
00012
00013 EEdsm1 :: EEdsm1() {
00014 type=0;
00015 clear();
00016 mYear=2005;
00017 }
00018
00019
00020
00021 EEdsm1::~EEdsm1() { }
00022
00023
00024
00025 void
00026 EEdsm1::clear() {
00027 memset(data,0,sizeof(data));
00028 memset(intJP11bit,0,sizeof(intJP11bit));
00029 intJPsum13bit=0;
00030 outJPsum5bit=0;
00031 outHTTP1bit=0;
00032 outTP1bit=0;
00033 outJP2bit=0;
00034 outHT2bit=0;
00035 }
00036
00037
00038 void EEdsm1::setYear(int y, int *JPth, int TPthrSelc, int HTTPthrSelc){
00039 mYear=y;
00040 int i;
00041 for( i=0; i<mxTh; i++){
00042 JPthr[i]=JPth[i];
00043 }
00044 TPthrSelect=TPthrSelc;
00045 HTTPthrSelect=HTTPthrSelc;
00046 }
00047
00048
00049
00050
00051 void EEdsm1::setWord(int ch, ushort val){
00052
00053 assert(ch>=0 && ch<nc);
00054 data[ch]=val;
00055 }
00056
00057
00058
00059
00060 int
00061 EEdsm1::getInp16bit(int ch) const {
00062 assert(ch>=0 && ch<nc);
00063 ushort val=data[ch];
00064 return val;
00065 }
00066
00067
00068
00069 int
00070 EEdsm1::getInpHT2bit(int ch) const {
00071 assert(ch>=0 && ch<nc);
00072 ushort val=(data[ch]& 0xfff) >>10;
00073 return val;
00074 }
00075
00076
00077
00078
00079
00080
00081
00082
00083 int
00084 EEdsm1::getInpTP2bit(int ch) const {
00085 assert(ch>=0 && ch<nc);
00086 assert(mYear>=2006);
00087 ushort val=data[ch] >>12;
00088 return val&3;
00089 }
00090
00091
00092
00093 int
00094 EEdsm1::getInpHTTP2bit(int ch) const {
00095 assert(ch>=0 && ch<nc);
00096 assert(mYear>=2006);
00097 ushort val=data[ch] >>14;
00098 return val&3;
00099 }
00100
00101
00102
00103 int
00104 EEdsm1::getInpTPsum(int ch) const {
00105 assert(ch>=0 && ch<nc);
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 ushort val=0xfff;
00117
00118 if (type == 1) {
00119 switch (ch) {
00120 case 0:
00121 case 3:
00122 case 4:
00123 val=data[ch]& 0x3ff;
00124 break;
00125 case 1:
00126 case 2:
00127 case 5:
00128 val=data[ch]& 0x1ff;
00129 break;
00130 }
00131 }
00132 else if (type == 2) {
00133 switch (ch) {
00134 case 1:
00135 case 2:
00136 case 5:
00137 val=data[ch]& 0x3ff;
00138 break;
00139 case 0:
00140 case 3:
00141 case 4:
00142 val=data[ch]& 0x1ff;
00143 break;
00144 }
00145 }
00146 else assert (1==2);
00147
00148 return val;
00149
00150 }
00151
00152
00153
00154
00155 void
00156 EEdsm1::compute() {
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 assert(mYear>=2006);
00168 int combHT2bit=0, combTP2bit=0, combHTTP2bit=0;
00169 int i;
00170 for ( i=0; i<nc; i++ ){
00171 int iJP=i/2;
00172 intJP11bit[iJP]+=getInpTPsum(i);
00173 intJPsum13bit +=getInpTPsum(i);
00174 if ( combHT2bit <= getInpHT2bit(i) ) combHT2bit = getInpHT2bit(i);
00175 if ( combTP2bit <= getInpTP2bit(i) ) combTP2bit = getInpTP2bit(i);
00176 if ( combHTTP2bit <= getInpHTTP2bit(i) ) combHTTP2bit = getInpHTTP2bit(i);
00177 }
00178
00179 outHT2bit = combHT2bit;
00180
00181
00182
00183
00184 if ( combTP2bit >= TPthrSelect ) outTP1bit=1;
00185 else outTP1bit=0;
00186
00187 if ( combHTTP2bit >= HTTPthrSelect ) outHTTP1bit=1;
00188 else outHTTP1bit=0;
00189
00190 int mxJP=0;
00191 int j;
00192 for ( j=0; j<nJP; j++ ){
00193 if ( mxJP <= intJP11bit[j] ) mxJP = intJP11bit[j];
00194 }
00195
00196 if ( mxJP <= JPthr[0]) outJP2bit=0;
00197 if ( mxJP > JPthr[0] && mxJP <= JPthr[1] ) outJP2bit=1;
00198 if ( mxJP > JPthr[1] && mxJP <= JPthr[2] ) outJP2bit=2;
00199 if ( mxJP > JPthr[2] ) outJP2bit=3;
00200
00201 int flag;
00202 flag =( intJPsum13bit >>7 ) & 0x3f;
00203 if ( flag > 0 ) outJPsum5bit = 31;
00204 else outJPsum5bit = ( intJPsum13bit >>2 ) & 0x1f;
00205
00206 out16bit= outJPsum5bit + ( outHTTP1bit << 7 ) + ( outTP1bit << 9 ) + ( outJP2bit << 10 ) + ( outHT2bit << 12 );
00207
00208
00209
00210 }
00211
00212
00213
00214 void
00215 EEdsm1::print( int k ) const {
00216 printf("EEdsm1:: print() INPUTS, year=%d \n",mYear);
00217 int i;
00218
00219 printf("\nch = ");
00220 for(i=nc-1;i>=0;i--) printf(" %4d ",i);
00221 printf("\nword = ");
00222 for(i=nc-1;i>=0;i--) printf(" x%4.4x ", data[i] );
00223
00224 printf("\nTPsum = ");
00225 for(i=nc-1;i>=0;i--) printf(" %4d ", getInpTPsum(i));
00226
00227 printf("\nJPsum = ");
00228 for(i=2;i>=0;i--) printf(" %8d ", intJP11bit[i]);
00229
00230 printf("\nHT2bit= ");
00231 for(i=nc-1;i>=0;i--) printf(" %4d ", getInpHT2bit(i));
00232
00233 if(mYear>=2006) {
00234 printf("\nTP2bit= ");
00235 for(i=nc-1;i>=0;i--) printf(" %4d ", getInpTP2bit(i));
00236
00237 printf("\nHTTP2bit=");
00238 for(i=nc-1;i>=0;i--) printf(" %4d ", getInpHTTP2bit(i));
00239 }
00240
00241 printf("\n output: HT2bit=%d, JP2bit=%d, TP1bit=%d, HTTP1bit=%d, JPsum5bit=%d\n", outHT2bit ,outJP2bit, outTP1bit ,outHTTP1bit,outJPsum5bit);
00242
00243 }
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272