Advanced Robot Control System  5.1-REV.51SF170515
UDPReceiver.hh
[詳解]
1 // UDP受信器クラス
2 // 2016/08/24 Yuki YOKOKURA
3 //
4 // 指定したIPアドレスおよびPort番号へUDPで配列変数値を飛ばすクラス
5 //
6 // 注意!:このクラスはエンディアン依存である。異なるエンディアン同士の端末では通信できない!
7 //
8 // Copyright (C) 2011-2016 Yuki YOKOKURA
9 // This program is free software;
10 // you can redistribute it and/or modify it under the terms of the GNU General Public License
11 // as published by the Free Software Foundation; either version 3 of the License, or any later version.
12 // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 // See the GNU General Public License for more details <http://www.gnu.org/licenses/>.
15 // In addition, you can negotiate about other options of licenses instead of GPL.
16 // If you would like to get other licenses, please contact us <yokokura(a)vos.nagaokaut.ac.jp>.
17 
18 #ifndef UDPRECV
19 #define UDPRECV
20 
21 namespace ARCS { // ARCS名前空間
22  class UDPReceiver {
23  public:
24  // 受信データの型の設定用定義
25  enum VarType {
26  UDP_INT16_T, // int16_t型
27  UDP_INT32_T, // int32_t型
28  UDP_UINT16_T, // uint16_t型
29  UDP_UINT32_T, // uint32_t型
30  UDP_DOUBLE // double型
31  };
32  // コンストラクタ
33  // PortNum : 待受Port番号, TypeOfVar : 受信する変数の型(ヘッダの定義を参照せよ)
34  // NumOfVar : 受信する変数の数
35  UDPReceiver(const unsigned short PortNum, VarType TypeOfVar, unsigned int NumOfVar);
36  UDPReceiver(const char* IPaddress, const unsigned short PortNum, VarType TypeOfVar, unsigned int NumOfVar);
37  ~UDPReceiver(); // デストラクタ
38  volatile bool GetReceiveFlag(void); // 受信フラグを取得する関数
39  volatile bool ReBind(void); // バインドし直す関数
40  // 変数値と実際に受信した要素数を取得する関数(オーバーロード)
41  unsigned int Receive(int16_t* Data);
42  unsigned int Receive(int32_t* Data);
43  unsigned int Receive(uint16_t* Data);
44  unsigned int Receive(uint32_t* Data);
45  unsigned int Receive(double* Data);
46 
47  private:
48  UDPReceiver(const UDPReceiver&); // コピーコンストラクタ使用禁止
49  const UDPReceiver& operator=(const UDPReceiver&); // 代入演算子使用禁止
50  static const unsigned int TimeToReBind = 100000; // [us] バインド再試行周期
51  static void ReceiveThread(UDPReceiver *p); // 受信スレッド
52  int sock; // ソケットファイルディスクリプタ
53  struct sockaddr_in addr; // ソケット構造体
54  VarType VariableType; // 受信するデータの型
55  unsigned int VarNum; // 受信する変数の数
56  char* RecvData; // 受信バイナリデータ
57  size_t RecvBytes; // 受信バイナリデータのバイト数
58  ssize_t ActRecvBytes; // 実際に受信したバイナリデータのバイト数(若しくはエラー番号)
59  pthread_t ThreadID; // スレッドID
60  volatile bool ReceiveFlag; // 受信フラグ 受信時にtrue,未受信時にfalseとなる。リセットはGetReceiveFlagから行う。
61  static size_t CalcRecvBytes(VarType TypeOfVar, unsigned int NumOfVar); // 受信するデータの型からバイト数を計算する関数
62 
63  };
64 }
65 
66 #endif
67 
68 
69 
static size_t CalcRecvBytes(VarType TypeOfVar, unsigned int NumOfVar)
Definition: UDPReceiver.cc:84
volatile bool GetReceiveFlag(void)
Definition: UDPReceiver.cc:128
char * RecvData
Definition: UDPReceiver.hh:56
struct sockaddr_in addr
Definition: UDPReceiver.hh:53
Definition: UDPReceiver.hh:29
static const unsigned int TimeToReBind
Definition: UDPReceiver.hh:50
Definition: UDPReceiver.hh:28
pthread_t ThreadID
Definition: UDPReceiver.hh:59
Definition: UDPReceiver.hh:22
Definition: UDPReceiver.hh:27
const UDPReceiver & operator=(const UDPReceiver &)
unsigned int VarNum
Definition: UDPReceiver.hh:55
unsigned int Receive(int16_t *Data)
Definition: UDPReceiver.cc:144
volatile bool ReceiveFlag
Definition: UDPReceiver.hh:60
VarType
Definition: UDPReceiver.hh:25
Definition: ControlFunctions.hh:17
VarType VariableType
Definition: UDPReceiver.hh:54
int sock
Definition: UDPReceiver.hh:52
ssize_t ActRecvBytes
Definition: UDPReceiver.hh:58
static void ReceiveThread(UDPReceiver *p)
Definition: UDPReceiver.cc:111
Definition: UDPReceiver.hh:30
volatile bool ReBind(void)
Definition: UDPReceiver.cc:135
Definition: UDPReceiver.hh:26
UDPReceiver(const unsigned short PortNum, VarType TypeOfVar, unsigned int NumOfVar)
Definition: UDPReceiver.cc:30
~UDPReceiver()
Definition: UDPReceiver.cc:75
size_t RecvBytes
Definition: UDPReceiver.hh:57