1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     rdt_Segment.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 #include "stdafx.h"
17 
18 #ifndef NN_LIBRARIES_RDT_CTR_RDT_SEGMENT_H_
19 #define NN_LIBRARIES_RDT_CTR_RDT_SEGMENT_H_
20 
21 #include "rdt_Header.h"
22 
23 namespace nn { namespace rdt { namespace CTR {
24 
25 /* Please see man pages for details
26 
27 */
28 struct Segment{
29 public:
30     // In the uds_Api.h, there was a description "@param[in] bufferSize   This is a buffer size. Requires received data size + 10 bytes." Accordingly, that amount was subtracted. Subtract 12 (not 10) because of padding.
31     //
32     //
33     static const size_t PAYLOAD_SIZE = 1476 - sizeof(Header) - 12;
34 /* Please see man pages for details
35 
36 */
SegmentSegment37     Segment(void){}
38 
39 
40 /* Please see man pages for details
41 
42 */
IsValidSegment43     bool IsValid(void) const { return header.magicNum==Header::MAGIC_NUMBER; }
44 
45 /* Please see man pages for details
46 
47 
48 */
IsAckSegment49     bool IsAck(void) const { return (header.controlBit & Header::BIT_ACK)!=0; }
IsSynSegment50     bool IsSyn(void) const { return (header.controlBit & Header::BIT_SYN)!=0; }
IsFinSegment51     bool IsFin(void) const { return (header.controlBit & Header::BIT_FIN)!=0; }
IsRstSegment52     bool IsRst(void) const { return (header.controlBit & Header::BIT_RST)!=0; }
53 
54 /* Please see man pages for details
55 
56 */
SetSynSegment57     void SetSyn(void) { header.controlBit |= Header::BIT_SYN; }
SetFinSegment58     void SetFin(void) { header.controlBit |= Header::BIT_FIN; }
SetRstSegment59     void SetRst(void) { header.controlBit |= Header::BIT_RST; }
60 
SetSrvSegment61     void SetSrv(void) { header.controlBit |= Header::BIT_SRV; }
SetCliSegment62     void SetCli(void) { header.controlBit |= Header::BIT_CLI; }
63 
64 /* Please see man pages for details
65 
66 */
GetAckNumberSegment67     u32  GetAckNumber(void) const { return header.ackNum; }
68 
69 /* Please see man pages for details
70 
71 */
SetAckNumberSegment72     void SetAckNumber(u32 ack) { header.ackNum = ack; header.controlBit |= Header::BIT_ACK;}
73 
74 /* Please see man pages for details
75 
76 */
GetSeqNumberSegment77     u32  GetSeqNumber(void) const { return header.seqNum; }
78 
79 /* Please see man pages for details
80 
81 */
82     u32  GetLastSeqNumber(void) const;
83 
84 /* Please see man pages for details
85 
86 */
SetSeqNumberSegment87     void SetSeqNumber(u32 seq) { header.seqNum = seq; }
88 
89 /* Please see man pages for details
90 
91 */
92     void SetData(const void *pBuf, u32 len);
93 
94 /* Please see man pages for details
95 
96 
97 */
98     u32  GetData(      void *pBuf, u32 len) const;
99 
100 /* Please see man pages for details
101 
102 */
IsDataSegment103     bool IsData(void) const { return header.dataLength > 0; }
104 
105 /* Please see man pages for details
106 
107 */
GetDataLengthSegment108     u32  GetDataLength(void) const { return header.dataLength; }
109 
110 /* Please see man pages for details
111 
112 */
113     u32  GetSegmentLength(void) const;
114 
115 /* Please see man pages for details
116 
117 
118 */
SetWindowSizeSegment119     void SetWindowSize(u16 n) { header.windowSize = n; }
120 
121 /* Please see man pages for details
122 
123 */
GetWindowSizeSegment124     u16  GetWindowSize(void) const { return header.windowSize; }
125 
126 /* Please see man pages for details
127 
128 */
129     void Clear(void);
130 
131 /* Please see man pages for details
132 
133 */
134     void ClearHeader(void);
135 
136 /* Please see man pages for details
137 
138 */
139     bool IsResendRequired(void) const;
140 
141 /* Please see man pages for details
142 
143 */
144     void PrintDebugInfo(void) const;
145 
146     Header header;
147     u8     payload[PAYLOAD_SIZE];
148 };
149 
150 }}} // namespace nn::rdt::CTR
151 
152 #endif  // end of NN_LIBRARIES_RDT_CTR_RDT_SEGMENT_H_
153