| I reduced the parameter space a little bit and I think the problem is somewhere in the framework. What I did is first to make a short program which accesses the ODB and I was able to access the Settings record. Everything seems to work fine, if parts or all of the record is missing then it is created automatically, etc. Then I reduced my frontend to essentially a few lines in the frontend_init() which are identical to what I did in the small test program. Still when running the frontend it doesn't work and db_create_record() returns the error DB_OPEN_RECORD. I have tried something crazy, i.e. to disconnect the experiment and then reconnect in the frontend_init() and I was able to write the Settings record in the ODB! I have checked in mfe.c and odb.c and I think when my frontend_init() gets called, the record is already open! Does anybody skilled with Midas know what I can do to solve or investigate this problem further? This is the small program that can successfully access the ODB and create the Settings record. // test program
 #include <stdio.h>
 #include <stdlib.h>
 #include "midas.h"
 #include "v1740_daq_settings.h"
 
 V1740_DAQ_CONF_STR(v1740_conf_str);
 
 int main(void)
 {
   int status;
   HNDLE hDB;
   char temp_name[NAME_LENGTH];
   
   status = cm_connect_experiment("", "", "test", NULL);
   if (status != CM_SUCCESS) {
     printf("Oups could not connect to the experiment\n");
     
     return 1;
   }
   cm_get_experiment_database(&hDB, NULL);
   status = db_create_record(hDB, 0, OWNER_EQUIPMENT, v1740_conf_str);
   if (status != DB_SUCCESS) {
     printf("Oups failed to create DB record!\nCall to db_create_record() has returned %d", status);
     cm_disconnect_experiment();
     
     return 2;
   }
   
   cm_get_experiment_name(temp_name, NAME_LENGTH-1);
   cm_msg(MINFO, "test", "experiment name is <|%s|>", temp_name);
   printf("The test is successful!\nNo errors occurred!\n");
   cm_disconnect_experiment();
   
   return 0;
 }
 This is the frontend_init() part (there is nothing left in the frontend anyway). This is exactly the same code like the previous one, but it won't work! So I concluded that the problem is already present when frontend_init() gets call in mfe.c #include <stdio.h>
 #include <stdlib.h>
 #include "midas.h"
 #include "v1740_daq_settings.h"
 
 
 /* make frontend functions callable from the C framework */
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*-- Globals -------------------------------------------------------*/
 
 /* The frontend name (client name) as seen by other MIDAS clients   */
 char *frontend_name = "Charge Frontend";
 /* The frontend file name, don't change it */
 char *frontend_file_name = __FILE__;
 
 /* frontend_loop is called periodically if this variable is TRUE    */
 BOOL frontend_call_loop = FALSE;
 
 /* a frontend status page is displayed with this frequency in ms */
 INT display_period = 2100;
 
 /* maximum event size produced by this frontend */
 INT max_event_size = 2304 * 1024 + 128;
 
 /* maximum event size for fragmented events (EQ_FRAGMENTED) */
 INT max_event_size_frag = 5 * 1024 * 1024;
 
 /* buffer size to hold events */
 INT event_buffer_size = 64 * (2304 * 1024 + 128);
 
 V1740_DAQ_CONF_STR(v1740_conf_str); // string representation for the database record for the configuration of the v1740 DAQ board 
 HNDLE hDB = 0; // handle on database
 HNDLE hConf = 0; // handle for the configuration section
 
 
 /*-- Function declarations -----------------------------------------*/
 
 INT frontend_init();
 // ... etc ...
 
 /*-- Equipment list ------------------------------------------------*/
 
 #undef USE_INT
 
 EQUIPMENT equipment[] = {
   
   {"CAEN_V1740",                // equipment name
     {1, 0,                      // event ID, trigger mask
     "SYSTEM",                   // event buffer
     EQ_POLLED | EQ_MANUAL_TRIG, // equipment type
     LAM_SOURCE(0, 0xFFFFFF),    // event source crate 0, all stations
     "MIDAS",                    // data format
     TRUE,                       // equipment enabled
     RO_RUNNING,                 // read only when running and update ODB
     500,                        // poll for 500 ms
     0,                          // stop run after this event limit
     0,                          // number of sub events
     0,                          // don't log history
     "", "", "",
     },
     read_CAEN_V1740_event,         // readout routine
   },
 
   {""}
 };
 
 #ifdef __cplusplus
 }
 #endif
 
 
 INT frontend_init()
 {
   INT rstat = SUCCESS; // temp variable for Midas func. return codes
   char temp_name[NAME_LENGTH];
   
 //   cm_disconnect_experiment();
 //   cm_msg(MINFO, frontend_name, " *** DISCONNECTED FROM THE EXPERIMENT *** ");
 //   rstat = cm_connect_experiment("", "", frontend_name, NULL);
 //   if (rstat != CM_SUCCESS) {
 //     cm_msg(MERROR, frontend_name, "Oups could not connect to the experiment");
 //     
 //     return rstat;
 //   }
 //   cm_msg(MINFO, frontend_name, " *** CONNECTED AGAIN TO THE EXPERIMENT *** ");
   
   // get handle on database
   cm_get_experiment_database(&hDB, NULL);
   // create or check for configuration data structure
   rstat = db_create_record(hDB, 0, OWNER_EQUIPMENT, v1740_conf_str);
   if (rstat != DB_SUCCESS) {
     cm_msg(MERROR, frontend_name, "could not create record for the V1740 DAQ configuration");
     cm_msg(MERROR, frontend_name, "call to db_create_record returned %d", rstat);
     cm_get_experiment_name(temp_name, NAME_LENGTH-1);
     cm_msg(MERROR, frontend_name, "experiment name is <|%s|>", temp_name);
   
     return rstat;
   }
   cm_msg(MINFO, frontend_name, " *** SUCCESSFULLY CREATED THE RECORD IN ODB *** ");
 
   
   return 11;
 //  return SUCCESS;
 }
   |