k_serctr.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:3k
源码类别:

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = k_serctr.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. #include "parmfile.h"
  7. #include "k_serctr.h"
  8. #include "typedefs.h"
  9. #include "model_graph.h"
  10. #include "syst_graph.h"
  11. extern ParmFile *ParmInput;
  12. extern ofstream *DebugFile;
  13. extern SystemGraph CommSystGraph;
  14. extern int PassNumber;
  15. extern int MaxPassNumber;
  16. //======================================================
  17. // constructor - parms read from ParmFile
  18. k_SerCounter::k_SerCounter( char* instance_name )
  19. {
  20.   Instance_Name = new char[strlen(instance_name)];
  21.   strcpy(Instance_Name, instance_name);
  22.   OPEN_PARM_BLOCK;
  23.   GET_INT_PARM(Num_Holdoff_Passes);
  24.   GET_INT_PARM(Report_Intvl_In_Blocks);
  25.   Symb_Count = 0;
  26.   Error_Count = 0;
  27. }
  28. //==============================================
  29. k_SerCounter::k_SerCounter( char* instance_name,
  30.                             int num_holdoff_passes,
  31.                             int report_intvl_in_blocks)
  32. {
  33.   Instance_Name = new char[strlen(instance_name)];
  34.   strcpy(Instance_Name, instance_name);
  35.   Num_Holdoff_Passes = num_holdoff_passes;
  36.   Report_Intvl_In_Blocks = report_intvl_in_blocks;
  37.   Symb_Count = 0;
  38.   Error_Count = 0;
  39. }
  40. //==============================================
  41. k_SerCounter::~k_SerCounter( void ){ };
  42. //==============================================
  43. void k_SerCounter::Initialize(void)
  44. {
  45. };
  46. //==============================================
  47. int k_SerCounter::Execute(  byte_t *in_sig_ptr,
  48.                             byte_t *ref_sig_ptr,
  49.                             byte_t *error_seq_ptr,
  50.                             int block_size )
  51. {
  52.   byte_t symb_val, ref_val;
  53.   int symb_count, error_count;
  54.   byte_t *symbs_in;
  55.   byte_t *symbs_ref;
  56.   byte_t *error_tags;
  57.   int is;
  58.   if(PassNumber < Num_Holdoff_Passes ) return(_MES_AOK);
  59.   symbs_in = in_sig_ptr;
  60.   symbs_ref = ref_sig_ptr;
  61.   error_tags = error_seq_ptr;
  62.   symb_count = Symb_Count;
  63.   error_count = Error_Count;
  64.   bool error_found = false;
  65.   for (is=0; is < block_size; is++)
  66.     {
  67.     symb_val = *symbs_in++;
  68.     ref_val = *symbs_ref++;
  69.     symb_count++;
  70.     if(symb_val != ref_val) 
  71.       {
  72.       error_found = true;
  73.       *error_tags++ = 16;
  74.       error_count++;
  75.       }
  76.     else
  77.       {
  78.       *error_tags++ = 0;
  79.       }
  80.     }
  81. //  if(PassNumber == MaxPassNumber)
  82.   if( ((PassNumber - Num_Holdoff_Passes) % Report_Intvl_In_Blocks) == 0)
  83.     {
  84.     BasicResults << Instance_Name << ": "
  85.               << PassNumber << "  Ser = " << (float(error_count)/float(symb_count)) << " -- "
  86.               << error_count << " errors in " << symb_count << " symbols" << endl;
  87.     }
  88.   Symb_Count = symb_count;
  89.   Error_Count = error_count;
  90.   return(_MES_AOK);
  91. }