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