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