/[PAMELA software]/chewbacca/PamOffLineSW/R3_FAFEDE_State.cpp
ViewVC logotype

Contents of /chewbacca/PamOffLineSW/R3_FAFEDE_State.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Sep 23 07:20:10 2008 UTC (16 years, 2 months ago) by mocchiut
Branch: v0r00, MAIN
CVS Tags: v1r02, v1r00, v1r01, start, v10RED, v9r00, v9r01, HEAD
Changes since 1.1: +0 -0 lines
Error occurred while calculating annotation data.
Imported sources, 23/09/2008

1 //where I am
2 #include "R3_FAFEDE_State.h"
3 //manager
4 #include "StateManager.h"
5 //home
6 #include "R0_Init_State.h"
7 //a step after
8 #include "R4_HEADER_State.h"
9
10 //to compute CRC
11 #include "CRC.h"
12
13 //to log something
14 //#include "Logger.h"
15
16 namespace PamOffLineSW
17 {
18 extern LogUtil* mainLogUtil;
19 extern long int iNumCadres; //cadre's number
20 extern unsigned long long int iByte_tot;// how many bytes I have read till now
21
22 R3_FAFEDE_State R3_FAFEDE_State::instance;
23 int R3_FAFEDE_State::posHeaderPKT=2;
24
25 R3_FAFEDE_State::R3_FAFEDE_State()
26 {
27 initHeaderPKT();
28 }
29
30 R3_FAFEDE_State::~R3_FAFEDE_State()
31 {
32 }
33
34 void R3_FAFEDE_State::initHeaderPKT()
35 {
36 for(int j=0; j<LENGTH_HEADER_PKT; j++)
37 {
38 headerPKT[j]=0;
39 }
40 headerPKT[0]=CODE_FA;
41 headerPKT[1]=CODE_FE;
42 headerPKT[2]=CODE_DE;
43
44 posHeaderPKT=2;
45 }
46
47 void R3_FAFEDE_State::resetHeaderPKT()
48 {
49 posHeaderPKT=2;
50 }
51
52 void R3_FAFEDE_State::readInput(char inputbyte)
53 {
54 //the three bytes before this one are 0xFA 0xFE 0xDE, we want to check if it is a Pamela Packet
55 //to do this we read 16 bytes starting from 0xFA and compute the CRC
56 posHeaderPKT++;
57 headerPKT[posHeaderPKT]=inputbyte;
58
59 //if we have read all the header
60 if(posHeaderPKT==(LENGTH_HEADER_PKT-1))
61 {
62 //TODO: maybe if ex_pkt_type_1 != ex_pkt_type_2 the pkt is not good? maybe it shuold be discarded?
63 // put this check here and if the pkt must can't be recognised
64
65 //here we check the CRC
66 short int CalcCheckSum=(short int)(unsigned char)CM_Compute_CRC16(0, (unsigned char*)&headerPKT, LENGTH_HEADER_PKT-1);
67
68 //bytes when the PKT starts
69 unsigned long long int wherePKT_start=iByte_tot-posHeaderPKT+1;
70
71 //I check also that pkt_type is correct? headerPKT[3]=header[4] ??
72 if ((headerPKT[3]==headerPKT[4])&&(CalcCheckSum==(short int)(unsigned char)(headerPKT[LENGTH_HEADER_PKT-1])))
73 {
74 //I have found 16 bytes that are a Pamela Packet Header
75 // I will pass it to state R4 and there I will add data to the Packet
76 R4_HEADER_State::getInstance().initBufferPKT(headerPKT);
77 StateManager::getInstance().changeState(&R4_HEADER_State::getInstance());
78 //just to be sure that always is clean
79 initHeaderPKT();
80 }
81 else
82 {
83 stringstream oss;
84 oss.str()="Packet Header skipped: ";
85 if (headerPKT[3]!=headerPKT[4])
86 {
87 oss<<"Packet Type mismatch ";
88 }
89 else
90 {
91 oss<<"Packet Header CRC check failed ";
92 }
93
94 oss<<"The packet header starts at byte: "<<wherePKT_start<<" in cadre "<<iNumCadres<<" restart the search";
95 string msg = oss.str();
96 mainLogUtil->logWarning(msg);
97
98 //the 16 bytes analized cannot be considered a correct Header for a Pamela Packet.
99 //I want to check if in this 16 bytes I can find a new candidate for a Pam Pkt Header, i.e. a new set of FA FE DE.
100 //to do this I go back to the R0 state, and start look for 0xFA
101 resetHeaderPKT();//here I don't clean the buffer with the header
102 //change to state R0, it means searching 0xFA
103 StateManager::getInstance().changeState(&R0_Init_State::getInstance());
104 for(int i=3;i<LENGTH_HEADER_PKT;i++)
105 {
106 //I am searching for byte 0xFA, if found I will check if it is the beginning of a new header
107 StateManager::getInstance().getCurrentState()->readInput(headerPKT[i]);
108 }
109 }
110 }
111 }
112
113 }

  ViewVC Help
Powered by ViewVC 1.1.23