Fawkes API Fawkes Development Version
|
00001 00002 /*************************************************************************** 00003 * shm_lut.h - shared memory lookup table 00004 * 00005 * Generated: Thu Feb 09 16:57:40 2006 00006 * Copyright 2005-2007 Tim Niemueller [www.niemueller.de] 00007 * 00008 ****************************************************************************/ 00009 00010 /* This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. A runtime exception applies to 00014 * this software (see LICENSE.GPL_WRE file mentioned below for details). 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Library General Public License for more details. 00020 * 00021 * Read the full text in the LICENSE.GPL_WRE file in the doc directory. 00022 */ 00023 00024 #ifndef __FIREVISION_FVUTILS_IPC_SHM_LUT_H_ 00025 #define __FIREVISION_FVUTILS_IPC_SHM_LUT_H_ 00026 00027 #include <utils/ipc/shm.h> 00028 #include <utils/ipc/shm_lister.h> 00029 #include <fvutils/ipc/defs.h> 00030 #include <stdint.h> 00031 00032 // Magic token to identify FireVision shared memory LUTs 00033 #define FIREVISION_SHM_LUT_MAGIC_TOKEN "FireVision LUT" 00034 00035 namespace firevision { 00036 #if 0 /* just to make Emacs auto-indent happy */ 00037 } 00038 #endif 00039 00040 /** Shared memory lookup table header struct. */ 00041 typedef struct { 00042 char lut_id[LUT_ID_MAX_LENGTH]; /**< LUT ID */ 00043 uint32_t width; /**< LUT width */ 00044 uint32_t height; /**< LUT height */ 00045 uint32_t depth; /**< LUT depth */ 00046 uint32_t bytes_per_cell; /**< Bytes per cell */ 00047 } SharedMemoryLookupTable_header_t; 00048 00049 00050 class SharedMemoryLookupTableHeader : public fawkes::SharedMemoryHeader 00051 { 00052 public: 00053 SharedMemoryLookupTableHeader(); 00054 SharedMemoryLookupTableHeader(const char *lut_id, 00055 unsigned int width, 00056 unsigned int height, 00057 unsigned int bytes_per_cell); 00058 SharedMemoryLookupTableHeader(const char *lut_id, 00059 unsigned int width, 00060 unsigned int height, 00061 unsigned int depth, 00062 unsigned int bytes_per_cell); 00063 SharedMemoryLookupTableHeader(const SharedMemoryLookupTableHeader *h); 00064 virtual ~SharedMemoryLookupTableHeader(); 00065 00066 virtual fawkes::SharedMemoryHeader * clone() const; 00067 virtual bool matches(void *memptr); 00068 virtual size_t size(); 00069 virtual bool create(); 00070 virtual void initialize(void *memptr); 00071 virtual void set(void *memptr); 00072 virtual void reset(); 00073 virtual size_t data_size(); 00074 virtual bool operator==(const fawkes::SharedMemoryHeader & s) const; 00075 00076 virtual void print_info(); 00077 00078 const char * lut_id() const; 00079 void set_lut_id(const char *lut_id); 00080 unsigned int width() const; 00081 unsigned int height() const; 00082 unsigned int depth() const; 00083 unsigned int bytes_per_cell() const; 00084 00085 SharedMemoryLookupTable_header_t * raw_header(); 00086 00087 private: 00088 SharedMemoryLookupTable_header_t *__header; 00089 00090 char *__lut_id; 00091 unsigned int __width; 00092 unsigned int __height; 00093 unsigned int __depth; 00094 unsigned int __bytes_per_cell; 00095 }; 00096 00097 class SharedMemoryLookupTableLister : public fawkes::SharedMemoryLister 00098 { 00099 public: 00100 SharedMemoryLookupTableLister(); 00101 virtual ~SharedMemoryLookupTableLister(); 00102 00103 virtual void print_header(); 00104 virtual void print_footer(); 00105 virtual void print_no_segments(); 00106 virtual void print_no_orphaned_segments(); 00107 virtual void print_info(const fawkes::SharedMemoryHeader *header, 00108 int shm_id, int semaphore, unsigned int mem_size, 00109 const void *memptr); 00110 }; 00111 00112 00113 class SharedMemoryLookupTable : public fawkes::SharedMemory 00114 { 00115 00116 public: 00117 00118 SharedMemoryLookupTable( const char *lut_id, 00119 unsigned int width, unsigned int height, 00120 unsigned int depth = 1, 00121 unsigned int bytes_per_cell = 1 00122 ); 00123 SharedMemoryLookupTable(const char *lut_id , bool is_read_only = true); 00124 ~SharedMemoryLookupTable(); 00125 00126 const char * lut_id() const; 00127 bool set_lut_id(const char *lut_id); 00128 unsigned char * buffer() const; 00129 unsigned int width() const; 00130 unsigned int height() const; 00131 unsigned int depth() const; 00132 unsigned int bytes_per_cell() const; 00133 00134 static void list(); 00135 static void cleanup(bool use_lister = true); 00136 static bool exists(const char *lut_id); 00137 static void wipe(const char *lut_id); 00138 00139 private: 00140 void constructor(const char *lut_id, 00141 unsigned int width, unsigned int height, unsigned int depth, 00142 unsigned int bytes_per_cell, 00143 bool is_read_only); 00144 00145 SharedMemoryLookupTableHeader *__priv_header; 00146 SharedMemoryLookupTable_header_t *__raw_header; 00147 00148 char *__lut_id; 00149 unsigned int __width; 00150 unsigned int __height; 00151 unsigned int __depth; 00152 unsigned int __bytes_per_cell; 00153 00154 }; 00155 00156 } // end namespace firevision 00157 00158 #endif