CORDET Framework - C2 Implementation
CrPsLptUpInterCmd.c
Go to the documentation of this file.
1 
24 #include "CrPsLptUpInterCmd.h"
25 
26 /* CrFramework includes */
27 #include <Pckt/CrFwPckt.h>
29 #include <OutCmp/CrFwOutCmp.h>
31 #include <CrFwCmpData.h>
32 
33 /* FwProfile includes */
34 #include "FwSmConstants.h"
35 #include "FwSmConfig.h"
36 #include "FwSmCore.h"
37 #include "FwPrDCreate.h"
38 #include "FwPrConfig.h"
39 #include "FwPrCore.h"
40 #include "FwPrConstants.h"
41 
42 #include <CrPsUtilitiesServLpt.h>
47 #include <CrPsUserConstants.h>
48 #include <DataPool/CrPsDpServLpt.h>
49 
50 #include <time.h>
51 
52 
58 void CrPsLptUpInterCmdStartAction(FwSmDesc_t smDesc)
59 {
60  /* Set prData of procedure */
61  /* initial setting of prData */
62  FwPrSetData(getPrDescLptUpCmdStart(), smDesc);
63 
64  FwPrRun(getPrDescLptUpCmdStart());
65 
66  return;
67 }
68 
76 void CrPsLptUpInterCmdProgressAction(FwSmDesc_t smDesc)
77 {
78  CrFwCmpData_t *cmpData;
79  CrFwInCmdData_t *cmpSpecificData;
80  CrFwPckt_t pckt;
81  uint32_t dataSize, pos;
82  uint32_t *lptMemStartAddr;
83  CrPsNumberU4_t PartSeqNmb;
84  CrPsSize_t partSize;
85  CrFwTimeStamp_t ts;
86  time_t coarse;
87  uint16_t fine;
88  CrPsTid_t Tid;
89  uint32_t LptBufferId;
90 
91  /* Get inPckt */
92  cmpData = (CrFwCmpData_t*) FwSmGetData(smDesc);
93  cmpSpecificData = (CrFwInCmdData_t *) cmpData->cmpSpecificData;
94  pckt = cmpSpecificData->pckt;
95 
96  Tid = getLptUpInterCmdTid(pckt);
97  LptBufferId = Tid % LPT_N_BUF;
98 
99  /* Get packet size and calculate amount of data */
100  dataSize = CrFwPcktGetLength(pckt) - (sizeof(TcHeader_t) + sizeof(CrPsTid_t) + sizeof(CrPsNumberU4_t) + CRC_LENGTH);
101 
102  /* Get PartSeqNum to determine memory address */
103  PartSeqNmb = getLptUpFirstCmdPartSeqNmb(pckt);
104 
105  /* Copy the up-transfer data to LPT Buffer */
106  lptMemStartAddr = getLptMemStartAddr(LptBufferId);
107  partSize = (CR_FW_MAX_PCKT_LENGTH - (sizeof(TcHeader_t) + sizeof(CrPsTid_t) + sizeof(CrPsNumberU4_t) + CRC_LENGTH));
108  pos = sizeof(TcHeader_t)+sizeof(CrPsTid_t) + sizeof(CrPsNumberU4_t);
109  memcpy((uint8_t *)lptMemStartAddr + (PartSeqNmb-1)*partSize, &((uint8_t*)pckt)[pos], dataSize);
110 
111  /* Increment lptSize by the amount of copied data */
112  setDplptSizeItem(LptBufferId, getDplptSizeItem(LptBufferId) + (CrPsSize_t)dataSize);
113 
114  /* Set lptTime to the current time */
116  coarse = (ts.t[0] << 24) | (ts.t[1] << 16) | (ts.t[2] << 8) | ts.t[3];
117  fine = (ts.t[4] << 7) | (ts.t[5] & 0xfe);
118  setDplptTimeItem(LptBufferId, ts);
119 
120  /* Set patSeqNmb to the part sequence number carried by the command */
121  setDppartSeqNmbItem(LptBufferId, PartSeqNmb);
122 
123  cmpData->outcome = 1;
124 
125  /*TODO*/
126  CRFW_UNUSED(coarse);
127  CRFW_UNUSED(fine);
128 
129  return;
130 }
131 
137 void CrPsLptUpInterCmdTerminationAction(FwSmDesc_t smDesc)
138 {
139  CrFwCmpData_t *inData;
140 
141  /* Set action outcome to 'success' */
142 
143  /* Get in data */
144  inData = (CrFwCmpData_t*)FwSmGetData(smDesc);
145 
146  inData->outcome = 1;
147 
148  return;
149 }
Type for the Framework Component Data (FCD).
CrFwOutcome_t outcome
The outcome of an action or check executed by a state machine or by one of its procedures.
FwPrDesc_t getPrDescLptUpCmdStart()
Getter for LptUpCmdStart procedure descriptor.
static CrPsNumberU4_t getLptUpFirstCmdPartSeqNmb(void *p)
Get "PartSeqNmb" from "LptUpFirstCmd" packet.
#define CR_FW_MAX_PCKT_LENGTH
The maximum size in number of bytes of a packet.
#define CRFW_UNUSED(x)
A macro that can be used to specify that a function parameter is not used.
Definition: CrFwConstants.h:27
#define CRC_LENGTH
The length of CRC.
Interface for accessing data pool items.
Header file to define all user-configurable constants and types for the IASW Application.
Definition of the OutFactory component.
CrFwPckt_t pckt
Packet holding the InCommand.
static void setDplptSizeItem(int i, CrPsSize_t lptSize)
Sets the value of the i-th element in the datapool array lptSize.
Header file to define all service and packet identifiers.
static void setDplptTimeItem(int i, CrFwTimeStamp_t lptTime)
Sets the value of the i-th element in the datapool array lptTime.
Interface for creating and accessing a report or command packet.
Interface through which applications can initialize and execute framework PUS extension components...
Create one instance of the CrPsLpt state machine.
void CrPsLptUpInterCmdTerminationAction(FwSmDesc_t smDesc)
Termination action of TC(13,10) LptUpInterCmd.
CrFwPcktLength_t CrFwPcktGetLength(CrFwPckt_t pckt)
Return the length (in number of bytes) of a packet.
CrPsTid_t Tid
CrPsLptUpCmdStart function definitions.
void * cmpSpecificData
Derived data which are specific to each type of framework component.
Interface for accessing fields in packets of service "ServLPT".
void CrPsLptUpInterCmdProgressAction(FwSmDesc_t smDesc)
Progress action of TC(13,10) LptUpInterCmd.
static CrPsSize_t getDplptSizeItem(int i)
Gets the value of the i-th element in the datapool array lptSize.
uint32_t * getLptMemStartAddr(uint32_t LptBuffer)
Getter function for the Address of the Data.
char * CrFwPckt_t
Type for packets (see CrFwPckt.h).
Definition: CrFwConstants.h:36
Definition of the OutComponent Component of the framework.
auxiliary Interface for accessing fields in packets of service "ServLPT".
void CrPsLptUpInterCmdStartAction(FwSmDesc_t smDesc)
Start action of TC(13,10) LptUpInterCmd.
Implementation of TC(13,10) LptUpInterCmd.
Type for the data describing an InCommand.
static void setDppartSeqNmbItem(int i, CrFwCounterU4_t partSeqNmb)
Sets the value of the i-th element in the datapool array partSeqNmb.
static CrPsTid_t getLptUpInterCmdTid(void *p)
Get "Tid" from "LptUpInterCmd" packet.
Definition of the OutLoader component.
CrFwTimeStamp_t CrFwGetCurrentTimeServer()
Provide the current time.
unsigned int CrFwTimeStamp_t
Type used for the time stamp of a command or report.
P&P Software GmbH, Copyright 2012-2013, All Rights Reserved