fuse_lutlist_content.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <fvutils/net/fuse_lutlist_content.h>
00025 #include <netcomm/utils/dynamic_buffer.h>
00026
00027 #include <core/exceptions/software.h>
00028
00029 #include <cstdlib>
00030 #include <cstring>
00031 #include <netinet/in.h>
00032
00033 using namespace fawkes;
00034
00035 namespace firevision {
00036 #if 0
00037 }
00038 #endif
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 FuseLutListContent::FuseLutListContent()
00053 {
00054 __list = new DynamicBuffer(&(__lutlist_msg.lut_list));
00055
00056 _payload_size = 0;
00057 _payload = NULL;
00058 }
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 FuseLutListContent::FuseLutListContent(uint32_t type, void *payload, size_t payload_size)
00069 {
00070 FUSE_lutlist_message_t *tmsg = (FUSE_lutlist_message_t *)payload;
00071 void *list_payload = (void *)((size_t)payload + sizeof(FUSE_lutlist_message_t));
00072 __list = new DynamicBuffer(&(tmsg->lut_list), list_payload,
00073 payload_size - sizeof(FUSE_lutlist_message_t));
00074 }
00075
00076
00077
00078 FuseLutListContent::~FuseLutListContent()
00079 {
00080 delete __list;
00081 }
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 void
00092 FuseLutListContent::add_lutinfo(const char *lut_id,
00093 unsigned int width, unsigned int height,
00094 unsigned int depth, unsigned int bytes_per_cell)
00095 {
00096 FUSE_lutinfo_t lutinfo;
00097 memset(&lutinfo, 0, sizeof(lutinfo));
00098
00099 strncpy(lutinfo.lut_id, lut_id, LUT_ID_MAX_LENGTH);
00100 lutinfo.width = ntohl(width);
00101 lutinfo.height = ntohl(height);
00102 lutinfo.depth = ntohl(depth);
00103 lutinfo.bytes_per_cell = ntohl(bytes_per_cell);
00104
00105 __list->append(&lutinfo, sizeof(lutinfo));
00106 }
00107
00108
00109
00110 void
00111 FuseLutListContent::reset_iterator()
00112 {
00113 __list->reset_iterator();
00114 }
00115
00116
00117
00118
00119
00120 bool
00121 FuseLutListContent::has_next()
00122 {
00123 return __list->has_next();
00124 }
00125
00126
00127
00128
00129
00130
00131
00132 FUSE_lutinfo_t *
00133 FuseLutListContent::next()
00134 {
00135 size_t size;
00136 void *tmp = __list->next(&size);
00137 if ( size != sizeof(FUSE_lutinfo_t) ) {
00138 throw TypeMismatchException("Lut list content contains element that is of an "
00139 "unexpected size");
00140 }
00141
00142 return (FUSE_lutinfo_t *)tmp;
00143 }
00144
00145
00146 void
00147 FuseLutListContent::serialize()
00148 {
00149 _payload_size = sizeof(FUSE_lutlist_message_t) + __list->buffer_size();
00150 _payload = malloc(_payload_size);
00151
00152 copy_payload(0, &__lutlist_msg, sizeof(FUSE_lutlist_message_t));
00153 copy_payload(sizeof(FUSE_lutlist_message_t), __list->buffer(), __list->buffer_size());
00154 }
00155
00156 }