dbconn.h
1 /*
2  * Player - One Hell of a Robot Server
3  * Copyright (C) 2007
4  * Ben Morelli
5  *
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef __DBCONN_H_
23 #define __DBCONN_H_
24 
25 #include <libpq-fe.h>
26 #include <libplayercore/playercore.h>
27 #include <libplayerwkb/playerwkb.h>
28 #include <vector>
29 #include <string>
30 #include <cstring>
31 #include <cstddef>
32 
33 #define MAX_PSQL_STRING 256
34 
35 using namespace std;
36 
37 typedef struct
38 {
39  double x0, y0, x1, y1;
40 } BoundingBox;
41 
42 #define BBOX(ptr) (reinterpret_cast<BoundingBox *>(ptr))
43 
45 {
46  public:
47  FeatureDataHolder() { memset(&feature_data, 0, sizeof feature_data); }
49  {
50  memset(&feature_data, 0, sizeof feature_data);
51  name = orig.name;
52  wkb = orig.wkb;
53  attrib = orig.attrib;
54  }
55  virtual ~FeatureDataHolder();
56  FeatureDataHolder(string name)
57  {
58  memset(&feature_data, 0, sizeof feature_data);
59  this->name = name;
60  }
62  {
63  memset(&feature_data, 0, sizeof feature_data);
64  name = string(feature->name);
65  attrib = string(feature->attrib);
66  wkb.assign(feature->wkb, (feature->wkb) + (feature->wkb_count));
67  }
68 
69  const player_vectormap_feature_data_t* Convert();
70 
71  string name;
72  vector<uint8_t> wkb;
73  string attrib;
75 };
76 
78 {
79  public:
80  LayerInfoHolder() { memset(&layer_info,0,sizeof(layer_info)); memset(&extent, 0, sizeof(extent)); };
81  LayerInfoHolder(const LayerInfoHolder & orig)
82  {
83  memset(&layer_info,0,sizeof(layer_info));
84  name = orig.name;
85  extent = orig.extent;
86  }
87  LayerInfoHolder(string name)
88  {
89  memset(&layer_info,0,sizeof(layer_info));
90  this->name = name;
91  memset(&extent, 0, sizeof(extent));
92  };
93  virtual ~LayerInfoHolder()
94  {
95  free(layer_info.name);
96  }
97 
98  const player_vectormap_layer_info_t* Convert();
99 
100  string name;
101  BoundingBox extent;
103 };
104 
106 {
107  public:
108  LayerDataHolder() { memset(&layer_data, 0, sizeof layer_data); }
109  LayerDataHolder(const LayerDataHolder & orig)
110  {
111  memset(&layer_data, 0, sizeof layer_data);
112  name = orig.name;
113  features = orig.features;
114  }
115  LayerDataHolder(string name)
116  {
117  memset(&layer_data,0,sizeof(layer_data));
118  this->name = name;
119  }
121  {
122  memset(&layer_data, 0, sizeof layer_data);
123  name = string(layer->name);
124  for (uint32_t ii = 0; ii < layer->features_count; ii++)
125  {
126  FeatureDataHolder fd(&(layer->features[ii]));
127  features.push_back(fd);
128  }
129  }
130  virtual ~LayerDataHolder();
131 
132  const player_vectormap_layer_data_t* Convert();
133 
134  vector<FeatureDataHolder> features;
136  string name;
137 };
138 
140 {
141  public:
142  VectorMapInfoHolder() { memset(&info, 0, sizeof info); memset(&extent, 0, sizeof extent); };
144  {
145  memset(&info, 0, sizeof info);
146  srid = orig.srid; layers = orig.layers; extent = orig.extent;
147  }
148  virtual ~VectorMapInfoHolder();
149  VectorMapInfoHolder(uint32_t srid, BoundingBox extent)
150  {
151  this->srid = srid; this->extent = extent;
152  memset(&info, 0, sizeof info);
153  };
154 
155  const player_vectormap_info_t* Convert();
156 
157  uint32_t srid;
158  vector<LayerInfoHolder> layers;
159  BoundingBox extent;
161 };
162 
164 {
165  public:
166  PostgresConn(int debug = 0){ this->wkbprocessor = player_wkb_create_processor(); this->conn = NULL; this->debug = debug; };
167  virtual ~PostgresConn(){ if (Connected()) Disconnect(); player_wkb_destroy_processor(this->wkbprocessor); };
168  bool Connect(const char* dbname, const char* host, const char* user, const char* password, const char* port);
169  bool Disconnect();
170  bool Connected() { return (conn != NULL) && (PQstatus(conn) != CONNECTION_BAD); };
171 
172  VectorMapInfoHolder GetVectorMapInfo(vector<string> layerNames);
173  LayerInfoHolder GetLayerInfo(const char *layer_name);
174  LayerDataHolder GetLayerData(const char *layer_name);
175  int WriteLayerData(LayerDataHolder & data);
176 
177  private:
178  BoundingBox BinaryToBBox(const uint8_t *binary, uint32_t length);
179  uint32_t Text2Bin(const char * text, unsigned char * bin, uint32_t maxlen);
180  playerwkbprocessor_t wkbprocessor;
181  PGconn *conn;
182  int debug;
183  static void bbcb(void * bbox, double x0, double y0, double x1, double y1);
184 };
185 
186 #endif /* __DBCONN_H_ */
Definition: dbconn.h:139
#define PLAYER_BUMPER_REQ_GET_GEOM
Data: state (PLAYER_BUMPER_DATA_GEOM)
Definition: player_interfaces.h:1916
#define PLAYER_WARN1(msg, a)
Error message macros.
Definition: error.h:90
position 2d velocity command
Definition: player_interfaces.h:617
uint32_t bumpers_count
the number of valid bumper readings
Definition: player_interfaces.h:1925
const player_vectormap_feature_data_t * Convert()
Definition: dbconn.cc:389
char * name
Identifier for the geometric shape.
Definition: player_interfaces.h:5148
#define PLAYER_POWER_MASK_JOULES
Data subtype: voltage.
Definition: player_interfaces.h:284
player_pose2d_t vel
translational velocities [m/s,m/s,rad/s] (x, y, yaw)
Definition: player_interfaces.h:620
#define PLAYER_IR_DATA_RANGES
Data subtype: ranges.
Definition: player_interfaces.h:2108
static bool MatchMessage(player_msghdr_t *hdr, int type, int subtype, player_devaddr_t addr)
Helper for message processing.
Definition: message.h:159
player_vectormap_feature_data_t * features
Array of map features.
Definition: player_interfaces.h:5180
player_bumper_define_t * bumper_def
geometry of each bumper
Definition: player_interfaces.h:1953
double px
X [m].
Definition: player.h:231
uint32_t valid
Status bits.
Definition: player_interfaces.h:296
Definition: dbconn.h:163
uint32_t poses_count
the number of ir samples returned by this robot
Definition: player_interfaces.h:2133
Data AND Request/reply: bumper geometry.
Definition: player_interfaces.h:1948
Generic message header.
Definition: player.h:161
virtual int MainSetup(void)
Sets up the resources needed by the driver thread.
Definition: driver.h:658
uint32_t compression
Image compression; PLAYER_CAMERA_COMPRESS_RAW indicates no compression.
Definition: player_interfaces.h:2966
#define PLAYER_CAMERA_REQ_GET_IMAGE
Request/reply subtype: get current image frame.
Definition: player_interfaces.h:2931
#define PLAYER_WARN5(msg, a, b, c, d, e)
Error message macros.
Definition: error.h:94
virtual void MainQuit(void)
Cleanup method for driver thread (called when main exits)
Definition: driver.h:664
uint32_t width
Image dimensions [pixels].
Definition: player_interfaces.h:2953
#define PLAYER_IR_REQ_POSE
Request/reply subtype: get pose.
Definition: player_interfaces.h:2102
#define PLAYER_CAMERA_FORMAT_RGB888
Image format : 24-bit color (8 bits R, 8 bits G, 8 bits B).
Definition: player_interfaces.h:2942
const char * ReadString(int section, const char *name, const char *value)
Read a string value.
#define PLAYER_POSITION2D_REQ_MOTOR_POWER
Request/reply: Motor power.
Definition: player_interfaces.h:496
double px
X [m].
Definition: player.h:220
Request/reply: get pose.
Definition: player_interfaces.h:2130
#define PLAYER_POWER_DATA_STATE
Data subtype: voltage.
Definition: player_interfaces.h:274
#define PLAYER_POWER_MASK_VOLTS
bit masks for the player_power_data_t mask field
Definition: player_interfaces.h:282
#define PLAYER_POSITION2D_CMD_VEL
Command: velocity (PLAYER_POSITION2D_CMD_VEL)
Definition: player_interfaces.h:581
uint32_t fdiv
Some images (such as disparity maps) use scaled pixel values; for these images, fdiv specifies the sc...
Definition: player_interfaces.h:2963
double pyaw
yaw [rad]
Definition: player.h:241
Vectormap data.
Definition: player_interfaces.h:5171
virtual void Main(void)=0
Main method for driver thread.
uint32_t image_count
Size of image data as stored in image buffer (bytes)
Definition: player_interfaces.h:2968
int ReadInt(int section, const char *name, int value)
Read an integer value.
#define PLAYER_POWER_MASK_WATTS
Data subtype: voltage.
Definition: player_interfaces.h:283
#define PLAYER_OPAQUE_DATA_STATE
Data subtype: generic state.
Definition: player_interfaces.h:3429
player_pose3d_t * poses
the pose of each IR detector on this robot
Definition: player_interfaces.h:2135
#define PLAYER_MSGTYPE_DATA
A data message.
Definition: player.h:95
double py
Y [m].
Definition: player.h:222
float radius
radius of curvature [m] - zero for straight lines
Definition: player_interfaces.h:1938
uint8_t state
The gripper's state.
Definition: player_interfaces.h:421
uint32_t bumper_def_count
The number of valid bumper definitions.
Definition: player_interfaces.h:1951
#define PLAYER_MSGTYPE_RESP_ACK
A positive response message.
Definition: player.h:112
Definition: dbconn.h:77
#define PLAYER_WARN2(msg, a, b)
Error message macros.
Definition: error.h:91
#define PLAYER_CAMERA_DATA_STATE
Data subtype: state.
Definition: player_interfaces.h:2922
float * ranges
ranges [m]
Definition: player_interfaces.h:2124
char * attrib
Attrib data for the feature.
Definition: player_interfaces.h:5157
uint8_t * image
Compressed image data (byte-aligned, row major order).
Definition: player_interfaces.h:2972
Data: state (PLAYER_GRIPPER_DATA_STATE)
Definition: player_interfaces.h:418
#define PLAYER_GRIPPER_CMD_OPEN
Command: Open (PLAYER_GRIPPER_CMD_OPEN)
Definition: player_interfaces.h:373
#define PLAYER_OPAQUE_REQ
Data subtype: generic state.
Definition: player_interfaces.h:3440
#define PLAYER_POSITION2D_REQ_GET_GEOM
Request/reply: geometry.
Definition: player_interfaces.h:483
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Message handler.
#define PLAYER_OPAQUE_CMD
Data subtype: generic state.
Definition: player_interfaces.h:3441
Data: state (PLAYER_BUMPER_DATA_GEOM)
Definition: player_interfaces.h:1922
float watts
estimated current energy consumption (negative values) or aquisition (positive values) [W].
Definition: player_interfaces.h:306
#define PLAYER_MSGTYPE_REQ
A request message.
Definition: player.h:106
Definition: dbconn.h:105
Vectormap info.
Definition: player_interfaces.h:5184
double sl
Length [m].
Definition: player.h:259
Data: voltage (PLAYER_POWER_DATA_STATE)
Definition: player_interfaces.h:291
uint32_t wkb_count
Length of data in bytes.
Definition: player_interfaces.h:5150
int ReadDeviceAddr(player_devaddr_t *addr, int section, const char *name, int code, int index, const char *key)
Read a device id.
Data: state (PLAYER_CAMERA_DATA_STATE)
Definition: player_interfaces.h:2950
#define PLAYER_BUMPER_DATA_STATE
Data: state (PLAYER_BUMPER_DATA_GEOM)
Definition: player_interfaces.h:1910
Class for loading configuration file information.
Definition: configfile.h:196
int ReadTupleInt(int section, const char *name, int index, int value)
Read an integer from a tuple field.
double sw
Width [m].
Definition: player.h:257
int32_t charging
charge exchange status: if 1, the device is currently receiving charge from another energy device.
Definition: player_interfaces.h:311
#define PLAYER_CAPABILITIES_REQ
Capability request message type.
Definition: player.h:397
A device address.
Definition: player.h:145
#define PLAYER_POSITION2D_REQ_RESET_ODOM
Request/reply: Reset odometry.
Definition: player_interfaces.h:541
An autopointer for the message queue.
Definition: message.h:73
double py
Y [m].
Definition: player.h:233
uint8_t * bumpers
array of bumper values
Definition: player_interfaces.h:1927
uint32_t format
Image format (must be compatible with depth).
Definition: player_interfaces.h:2959
Definition: create_comms.h:98
char * name
Identifier for the layer.
Definition: player_interfaces.h:5176
position2d data
Definition: player_interfaces.h:606
#define PLAYER_ERROR1(msg, a)
Error message macros.
Definition: error.h:82
position2d geom
Definition: player_interfaces.h:655
A pose in space.
Definition: player.h:228
#define PLAYER_POWER_MASK_CHARGING
Data subtype: voltage.
Definition: player_interfaces.h:286
#define PLAYER_CAMERA_COMPRESS_RAW
Compression method: raw.
Definition: player_interfaces.h:2945
uint8_t stored
Number of currently stored objects.
Definition: player_interfaces.h:425
#define PLAYER_ERROR(msg)
Error message macros.
Definition: error.h:81
Base class for drivers which oeprate with a thread.
Definition: driver.h:552
uint32_t ranges_count
number of samples
Definition: player_interfaces.h:2122
#define PLAYER_GRIPPER_CMD_CLOSE
Command: Close (PLAYER_GRIPPER_CMD_CLOSE)
Definition: player_interfaces.h:378
float joules
energy stored [J].
Definition: player_interfaces.h:303
#define PLAYER_CAMERA_FORMAT_MONO8
Image format : 8-bit monochrome.
Definition: player_interfaces.h:2936
Definition: dbconn.h:44
#define PLAYER_POSITION2D_DATA_STATE
Data: state (PLAYER_POSITION2D_DATA_STATE)
Definition: player_interfaces.h:568
float percent
Percent of full charge [%].
Definition: player_interfaces.h:301
player_pose2d_t pos
position [m,m,rad] (x, y, yaw)
Definition: player_interfaces.h:609
Data: ranges (PLAYER_IR_DATA_RANGES)
Definition: player_interfaces.h:2115
Definition: player_interfaces.h:5160
uint32_t beams
The position of the object in the gripper.
Definition: player_interfaces.h:423
uint32_t features_count
The number of map features.
Definition: player_interfaces.h:5178
float volts
Battery voltage [V].
Definition: player_interfaces.h:299
float length
length of the sensor [m]
Definition: player_interfaces.h:1936
uint8_t * wkb
Well known binary describing the geometric shape.
Definition: player_interfaces.h:5152
#define PLAYER_MSGTYPE_CMD
A command message.
Definition: player.h:99
data
Definition: player_interfaces.h:3444
double pa
yaw [rad]
Definition: player.h:224
Base class for all drivers.
Definition: driver.h:108
#define PLAYER_POWER_MASK_PERCENT
Data subtype: voltage.
Definition: player_interfaces.h:285
Vectormap feature data.
Definition: player_interfaces.h:5143
#define PLAYER_GRIPPER_DATA_STATE
Data subtype: state.
Definition: player_interfaces.h:365
#define PLAYER_WARN4(msg, a, b, c, d)
Error message macros.
Definition: error.h:93
#define PLAYER_MSG2(level, msg, a, b)
Error message macros.
Definition: error.h:107
player_bbox3d_t size
Dimensions of the base (m).
Definition: player_interfaces.h:660
uint32_t height
Image dimensions [pixels].
Definition: player_interfaces.h:2955
Definition: dbconn.h:37
The geometry of a single bumper.
Definition: player_interfaces.h:1931
#define PLAYER_MSGQUEUE_DEFAULT_MAXLEN
Default maximum length for a message queue.
Definition: player.h:76
T max(T a, T b)
Return the maximum of a, b.
Definition: utility.h:126
#define PLAYER_POSITION2D_REQ_SET_ODOM
Request/reply: Set odometry.
Definition: player_interfaces.h:535
player_pose3d_t pose
the local pose of a single bumper
Definition: player_interfaces.h:1934
uint8_t * data
The data we will be sending.
Definition: player_interfaces.h:3449
uint32_t bpp
Image bits-per-pixel (8, 16, 24, 32).
Definition: player_interfaces.h:2957