1 /*--------------------------------------------------------------------------
2   Project:  HorizonSDK
3   File:     rdt_Segment.h
4   Copyright 2009 Nintendo. All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Date:: 2010-09-14#$
11   $Rev: 25753 $
12   $Author: hiratsu_daisuke $
13  *-------------------------------------------------------------------------
14 
15 
16 */
17 
18 #include "stdafx.h"
19 
20 #ifndef NN_RDT_SEGMENT_H_
21 #define NN_RDT_SEGMENT_H_
22 
23 #include "rdt_Header.h"
24 
25 namespace nn { namespace rdt { namespace CTR {
26 
27 /* Please see man pages for details
28 
29 */
30 struct Segment{
31 public:
32     // 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.
33     //
34     //
35     static const size_t PAYLOAD_SIZE = 1476 - sizeof(Header) - 12;
36 /* Please see man pages for details
37 
38 */
SegmentSegment39     Segment(void){}
40 
41 
42 /* Please see man pages for details
43 
44 */
IsValidSegment45     bool IsValid(void) const { return header.magicNum==Header::MAGIC_NUMBER; }
46 
47 /* Please see man pages for details
48 
49 
50 */
IsAckSegment51     bool IsAck(void) const { return (header.controlBit & Header::BIT_ACK)!=0; }
IsSynSegment52     bool IsSyn(void) const { return (header.controlBit & Header::BIT_SYN)!=0; }
IsFinSegment53     bool IsFin(void) const { return (header.controlBit & Header::BIT_FIN)!=0; }
IsRstSegment54     bool IsRst(void) const { return (header.controlBit & Header::BIT_RST)!=0; }
55 
56 /* Please see man pages for details
57 
58 */
SetSynSegment59     void SetSyn(void) { header.controlBit |= Header::BIT_SYN; }
SetFinSegment60     void SetFin(void) { header.controlBit |= Header::BIT_FIN; }
SetRstSegment61     void SetRst(void) { header.controlBit |= Header::BIT_RST; }
62 
SetSrvSegment63     void SetSrv(void) { header.controlBit |= Header::BIT_SRV; }
SetCliSegment64     void SetCli(void) { header.controlBit |= Header::BIT_CLI; }
65 
66 /* Please see man pages for details
67 
68 */
GetAckNumberSegment69     u32  GetAckNumber(void) const { return header.ackNum; }
70 
71 /* Please see man pages for details
72 
73 */
SetAckNumberSegment74     void SetAckNumber(u32 ack) { header.ackNum = ack; header.controlBit |= Header::BIT_ACK;}
75 
76 /* Please see man pages for details
77 
78 */
GetSeqNumberSegment79     u32  GetSeqNumber(void) const { return header.seqNum; }
80 
81 /* Please see man pages for details
82 
83 */
84     u32  GetLastSeqNumber(void) const;
85 
86 /* Please see man pages for details
87 
88 */
SetSeqNumberSegment89     void SetSeqNumber(u32 seq) { header.seqNum = seq; }
90 
91 /* Please see man pages for details
92 
93 */
94     void SetData(const void *pBuf, u32 len);
95 
96 /* Please see man pages for details
97 
98 
99 */
100     u32  GetData(      void *pBuf, u32 len) const;
101 
102 /* Please see man pages for details
103 
104 */
IsDataSegment105     bool IsData(void) const { return header.dataLength > 0; }
106 
107 /* Please see man pages for details
108 
109 */
GetDataLengthSegment110     u32  GetDataLength(void) const { return header.dataLength; }
111 
112 /* Please see man pages for details
113 
114 */
115     u32  GetSegmentLength(void) const;
116 
117 /* Please see man pages for details
118 
119 
120 */
SetWindowSizeSegment121     void SetWindowSize(u16 n) { header.windowSize = n; }
122 
123 /* Please see man pages for details
124 
125 */
GetWindowSizeSegment126     u16  GetWindowSize(void) const { return header.windowSize; }
127 
128 /* Please see man pages for details
129 
130 */
131     void Clear(void);
132 
133 /* Please see man pages for details
134 
135 */
136     void ClearHeader(void);
137 
138 /* Please see man pages for details
139 
140 */
141     bool IsResendRequired(void) const;
142 
143 /* Please see man pages for details
144 
145 */
146     void PrintDebugInfo(void) const;
147 
148     Header header;
149     u8     payload[PAYLOAD_SIZE];
150 };
151 
152 }}} // namespace nn::rdt::CTR
153 
154 #endif  // end of NN_RDT_SEGMENT_H_
155