rllib  1
rlcanopenclient.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           rlcanopen.cpp  -  description
00003                              -------------------
00004     begin     : Tue March 03 2004
00005     copyright : (C) 2004 by Marc Br�tigam, Christian Wilmes, Rainer Lehrig
00006     email     : lehrig@t-online.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as        *
00013  *   published by the Free Software Foundation                             *
00014  *                                                                         *
00015  ***************************************************************************/
00016 #include <stdio.h>
00017 #include <stdlib.h>
00018 #include <sys/types.h>
00019 #include <unistd.h>
00020 #include "rlsocket.h"
00021 #include "rlthread.h"
00022 #include "rlcutil.h"
00023 #include "rlwthread.h"
00024 
00025 #include "rlcanopentypes.h"
00026 
00028 
00034 class rlCanOpenClient
00035 {
00036 public:
00037 
00038   enum rl_msg {
00039     MSG_SEND      = 0,
00040     MSG_RECEIVE   = 1,
00041     MSG_SDO_READ = 0,
00042     MSG_SDO_WRITE = 1,
00043     MSG_PDO_RECEIVE = 3,
00044     MSG_CONNECT = 5,
00045     MSG_DISCONNECT = 6,
00046     MSG_PDO_TRANSMIT = 4,
00047     MSG_NMT_TRANSMIT = 7,
00048     MSG_RESTART_BOARD = 8,
00049     MSG_GET_NODE_STATE = 9
00050   };
00051 
00053   rlCanOpenClient();
00055   rlCanOpenClient(int _port, char* _remoteadress);
00057   ~rlCanOpenClient();
00059   int connect();
00061   int disconnect();
00062   
00063 
00069   int sdo_read( int _boardnr, 
00070                 int _nodeid,int _objectindex, 
00071                 int _subindex, 
00072                 rlCanOpenTypes &_sdo_data); 
00073 
00079   int sdo_write(int _boardnr, 
00080                 int _nodeid,int _objectindex, 
00081                 int _subindex, 
00082                 rlCanOpenTypes &_sdo_data); 
00083   
00088   int pdo_receive(int _boardnr, 
00089                   int _nodeid,int _pdonr, 
00090                   int _mappingnr, 
00091                   rlCanOpenTypes &_pdo_data);
00092 
00097   int pdo_receive(int _boardnr, 
00098                   int _nodeid,int _pdonr, 
00099                   rlCanOpenTypes &_pdo_data);
00100 
00105   int pdo_transmit(int _boardnr, 
00106                    int _nodeid,int _pdonr, 
00107                    int _mappingnr, 
00108                    rlCanOpenTypes &_pdo_data);
00109 
00114   int pdo_transmit(int _boardnr, 
00115                    int _nodeid,
00116                    int _pdonr, 
00117                    rlCanOpenTypes &_pdo_data);
00118 
00120   int sendNMTCommand(   int _boardnr, 
00121                         int _nodeid, 
00122                         unsigned char _cmd, 
00123                         bool &returnstate);
00124   
00126   int restartBoard(int _boardnr, int _restarttype, bool &returnstate);
00127   
00129   int getNodeState(int _boardnr, int _nodeid,rlCanOpenTypes &_data);
00130   
00132   void setPort(int _port);
00133   
00135   void setAdr(char* _adr);
00136 
00137 private:
00139   int pid;
00140 
00142   bool connected;
00143 
00145   int port;
00146 
00148   char remoteadress[40];
00149 
00151   rlSocket* socket;
00153   int client_timeout;
00154 };
00155 
00156 //#####################################################################################      
00157 // convenience class for client users
00158 class rlCanClient : public rlCanOpenClient
00159 {
00160 public:
00161   rlCanClient(int _port, char* _remoteadress, int _boardnr);
00162   ~rlCanClient();
00163   int sdo_read(int _nodeid, int _objectindex, int _subindex, rlCanOpenTypes &_sdo_data); 
00164   int sdo_write(int _nodeid,int _objectindex, int _subindex, rlCanOpenTypes &_sdo_data); 
00165   int pdo_receive(int _nodeid, int _pdonr, int _mappingnr, rlCanOpenTypes &_pdo_data);
00166   int pdo_receive(int _nodeid, int _pdonr, rlCanOpenTypes &_pdo_data);
00167   int pdo_transmit(int _nodeid, int _pdonr, int _mappingnr, rlCanOpenTypes &_pdo_data);
00168   int pdo_transmit(int _nodeid, int _pdonr, rlCanOpenTypes &_pdo_data);
00169   int sendNMTCommand(int _nodeid, unsigned char _cmd, bool &returnstate);
00170   int restartBoard(int _restarttype, bool &returnstate);
00171   int getNodeState(int _nodeid, rlCanOpenTypes &_data);
00172 private:
00173   int boardnr;  
00174 };