int main(int argc, char **argv) { int len, ret=EXIT_FAILURE; ubx_node_info_t ni; ubx_block_t *webif; ubx_data_t *d; /* initalize the node */ ubx_node_init(&ni, "c-only"); /* load the standard types */ if(ubx_module_load(&ni, "std_types/stdtypes/stdtypes.so") != 0) goto out; /* load the web-interface block */ if(ubx_module_load(&ni, "std_blocks/webif/webif.so") != 0) goto out; /* create a webserver block */ if((webif = ubx_block_create(&ni, "webif/webif", "webif1"))==NULL) goto out; /* Configure port of webserver block * this gets the ubx_data_t pointer */ d = ubx_config_get_data(webif, "port"); len = strlen(WEBIF_PORT)+1; /* resize the char array as necessary and copy the port string */ ubx_data_resize(d, len); strncpy(d->data, WEBIF_PORT, len); /* init and start the block */ if(ubx_block_init(webif) != 0) { ERR("failed to init webif"); goto out; } if(ubx_block_start(webif) != 0) { ERR("failed to start webif"); goto out; } printf("webif block lauched on port %s, hit enter to quit\n", WEBIF_PORT); getchar(); ret=EXIT_SUCCESS; out: /* this cleans up all blocks and unloads all modules */ ubx_node_cleanup(&ni); exit(ret); }
void WorldModel::initializeMicroblx() { #ifdef BRICS_MICROBLX_ENABLE this->microBlxPath = MICROBLX_ROOT_DIR; /* init microblx */ microBlxNodeHandle = new ubx_node_info_t(); // holds all microblx std::string microBlxNodeName = "functionBlocks"; LOG(DEBUG) << "WorldModel::initializeMicroblx handle with name " << microBlxNodeName << " created."; if (ubx_node_init(microBlxNodeHandle, microBlxNodeName.c_str()) != 0 ) { //segfaults if started from ubx lua LOG(ERROR) << "WorldModel::initialize: Cannot initialize the microblx node handle."; microBlxNodeHandle = 0; } LOG(DEBUG) << "WorldModel::initializeMicroblx ubx node created."; /* load the standard types */ std::string moduleFile = microBlxPath + "std_types/stdtypes/stdtypes.so"; if(ubx_module_load(microBlxNodeHandle, moduleFile.c_str()) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot load the stdtypes."; } /* load the standard types */ moduleFile = "/home/sblume/sandbox/brics_3d_function_blocks/lib/rsg_types.so"; if(ubx_module_load(microBlxNodeHandle, moduleFile.c_str()) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot load the rsgtypes."; } /* load a standard interaction block for sending data */ moduleFile = microBlxPath + "std_blocks/lfds_buffers/lfds_cyclic.so"; if(ubx_module_load(microBlxNodeHandle, moduleFile.c_str()) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot load the lfds_buffer."; } /* * Create a single (dummy) fifo interaction block to be used * as default input for any function block */ /* create the input fifo block */ std::string name = "inputFifo"; std::string inputModuleName = "lfds_buffers/cyclic"; if((inputBlock = ubx_block_create(microBlxNodeHandle, inputModuleName.c_str(), name.c_str())) == 0){ LOG(ERROR) << "WorldModel::loadFunctionBlock: Cannot create the module "<< name; return; } LOG(DEBUG) << "WorldModel::initialize: Created block with name = " << inputBlock->name; /* configure the fifo block */ // { .name="type_name", .type_name = "char", .doc="name of registered microblx type to transport" }, // { .name="data_len", .type_name = "uint32_t", .doc="array length (multiplier) of data (default: 1)" }, // { .name="buffer_len", .type_name = "uint32_t", .doc="max. number of data elements the buffer shall hold" }, uint32_t dataSize = sizeof(struct rsg_ids); // sizeof(uint32_t); // sizeof(struct rsg_ids); uint32_t bufferSize = 4; ubx_data_t* fifoData = ubx_config_get_data(inputBlock, "data_len"); memcpy(fifoData->data, &dataSize, sizeof(dataSize)); fifoData = ubx_config_get_data(inputBlock, "buffer_len"); memcpy(fifoData->data, &bufferSize, sizeof(bufferSize)); fifoData = ubx_config_get_data(inputBlock, "type_name"); int len = strlen("struct rsg_ids")+1; ubx_data_resize(fifoData, len); strncpy((char*)fifoData->data, "struct rsg_ids", len); /* initialize the block */ if(ubx_block_init(inputBlock) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot initialize the module "<< name; return; } /* start the block */ if(ubx_block_start(inputBlock) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot start the module "<< name; return; } /* * Create a second (dummy) fifo interaction block to be used * as default output for any function block */ /* create the output fifo block */ name = "outputFifo"; inputModuleName = "lfds_buffers/cyclic"; if((outputBlock = ubx_block_create(microBlxNodeHandle, inputModuleName.c_str(), name.c_str())) == 0){ LOG(ERROR) << "WorldModel::loadFunctionBlock: Cannot create the module "<< name; return; } LOG(DEBUG) << "WorldModel::initialize: Created block with name = " << outputBlock->name; dataSize = sizeof(struct rsg_ids); bufferSize = 4; ubx_data_t* outputFifoData = ubx_config_get_data(outputBlock, "data_len"); memcpy(outputFifoData->data, &dataSize, sizeof(dataSize)); outputFifoData = ubx_config_get_data(outputBlock, "buffer_len"); memcpy(outputFifoData->data, &bufferSize, sizeof(bufferSize)); outputFifoData = ubx_config_get_data(outputBlock, "type_name"); len = strlen("struct rsg_ids")+1; //'rsg_ids' but should be 'struct rsg_ids' ubx_data_resize(outputFifoData, len); strncpy((char*)outputFifoData->data, "struct rsg_ids", len); /* initialize the block */ if(ubx_block_init(outputBlock) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot initialize the module "<< name; return; } /* start the block */ if(ubx_block_start(outputBlock) != 0){ LOG(ERROR) << "WorldModel::initialize: Cannot start the module "<< name; return; } outputBlockCopy = outputBlock; // WorldModel::microBlxWmHandle = this; #endif }