DEMO 1: How to create hardware

A simple example to illustrate the usage of the FwHw framework: Two hardware types are created with a set of registers (board and channel). Several 'channels' are inserted into the 'board' type. An instance is formed and the settings are defined. Later on all registers are subscribed to allow communication with the server.

  (...)

   
   // ======================================
   //  VARIABLES USED IN THE SCRIPT
   // ======================================
   dyn_dyn_anytype defaultSpecificSettingsList;
   dyn_anytype     defaultCommonSettingsList;
   dyn_string      registersNameList;
   dyn_int         registersTypeList;
   dyn_dyn_anytype SpecificSettingsList;
   int i; 
   int j; 
   string dummy; 
   dyn_string      registersNameListDP;


   // ===========================================
   //  CREATE HARDWARE TYPE 'CHANNEL'
   // ===========================================
   if (fwHw_createType("CHANNEL", FWHW_CCPC))
      DebugTN("Hardware type 'CHANNEL' created!");
   else
      DebugTN("Error when creating hardware type 'CHANNEL'!");


   // ===========================================
   //  CREATE REGISTER(S) FOR HARDWARE TYPE 'CHANNEL'
   // ===========================================
   dynClear(registersNameList);
   dynClear(registersTypeList);
   dynAppend(registersNameList, "ADC0");
   dynAppend(registersTypeList, FWHW_LBUS);
   dynAppend(registersNameList, "ADC1");
   dynAppend(registersTypeList, FWHW_LBUS);
   dynAppend(registersNameList, "ADC2");
   dynAppend(registersTypeList, FWHW_LBUS);
   dynAppend(registersNameList, "ADC3");
   dynAppend(registersTypeList, FWHW_LBUS);
   dynAppend(registersNameList, "ID");
   dynAppend(registersTypeList, FWHW_I2C);
   if (fwHw_createRegisters("CHANNEL", registersNameList, registersTypeList))
      DebugTN("Register(s) of hardware type 'CHANNEL' created!");
   else
      DebugTN("Error when creating register(s) for hardware type 'CHANNEL'!");


   // ===========================================
   //  SET DEFAULT COMMON SETTINGS FOR HARDWARE TYPE 'CHANNEL'
   // ===========================================
   dynClear(defaultCommonSettingsList);
   defaultCommonSettingsList = makeDynAnytype("pctell07");
   if (fwHw_setDefaultCommonSettings("CHANNEL", defaultCommonSettingsList))
      DebugTN("The default common settings of hardware type 'CHANNEL' have been set!");
   else
      DebugTN("Error when setting default common settings for hardware type 'CHANNEL'!");


   // ===========================================
   //  SET DEFAULT SPECIFIC SETTINGS FOR HARDWARE TYPE 'CHANNEL'
   // ===========================================
   dynClear(defaultSpecificSettingsList);
   defaultSpecificSettingsList[1] = makeDynAnytype(0x1000000, "4", "1", "5", "1");
   defaultSpecificSettingsList[2] = makeDynAnytype(0x1000010, "4", "1", "5", "1");
   defaultSpecificSettingsList[3] = makeDynAnytype(0x1000020, "4", "1", "5", "1");
   defaultSpecificSettingsList[4] = makeDynAnytype(0x1000030, "4", "1", "5", "1");
   defaultSpecificSettingsList[5] = makeDynAnytype("0", 0x50, "0", "8", "", "1", "0", "0", "0");
   if (fwHw_setDefaultSpecificSettings("CHANNEL", registersNameList, defaultSpecificSettingsList))
      DebugTN("The default specific settings of hardware type 'CHANNEL' have been set!");
   else
      DebugTN("Error when setting default specific settings for hardware type 'CHANNEL'!");


   // ===========================================
   //  CREATE HARDWARE TYPE 'BOARD'
   // ===========================================
   if (fwHw_createType("BOARD", FWHW_CCPC))
      DebugTN("Hardware type 'BOARD' created!");
   else
      DebugTN("Error when creating hardware type 'BOARD'!");


   // ===========================================
   //  CREATE REGISTER(S) FOR HARDWARE TYPE 'BOARD'
   // ===========================================
   dynClear(registersNameList);
   dynClear(registersTypeList);
   dynAppend(registersNameList, "ID");
   dynAppend(registersTypeList, FWHW_I2C);
   if (fwHw_createRegisters("BOARD", registersNameList, registersTypeList))
      DebugTN("Register(s) of hardware type 'BOARD' created!");
   else
      DebugTN("Error when creating register(s) for hardware type 'BOARD'!");


   // ===========================================
   //  SET DEFAULT COMMON SETTINGS FOR HARDWARE TYPE 'BOARD'
   // ===========================================
   dynClear(defaultCommonSettingsList);
   defaultCommonSettingsList = makeDynAnytype("pctell07");
   if (fwHw_setDefaultCommonSettings("BOARD", defaultCommonSettingsList))
      DebugTN("The default common settings of hardware type 'BOARD' have been set!");
   else
      DebugTN("Error when setting default common settings for hardware type 'BOARD'!");


   // ===========================================
   //  SET DEFAULT SPECIFIC SETTINGS FOR HARDWARE TYPE 'BOARD'
   // ===========================================
   dynClear(defaultSpecificSettingsList);
   defaultSpecificSettingsList[1] = makeDynAnytype("0", 0x50, "0", "1", "", "1", "0", "0", "0");
   if (fwHw_setDefaultSpecificSettings("BOARD", registersNameList, defaultSpecificSettingsList))
      DebugTN("The default specific settings of hardware type 'BOARD' have been set!");
   else
      DebugTN("Error when setting default specific settings for hardware type 'BOARD'!");


   // ===========================================
   //  INSERT HARDWARE 'CHANNEL0' (OF TYPE 'CHANNEL') IN HARDWARE TYPE 'BOARD'
   // ===========================================
   if (fwHw_insert("BOARD", "CHANNEL", "CHANNEL0"))
      DebugTN("Hardware 'CHANNEL0' (of type 'CHANNEL') inserted in hardware type 'BOARD'!");
   else
      DebugTN("Error when inserting hardware 'CHANNEL0' (of type 'CHANNEL') in hardware type 'BOARD'!");


   // ===========================================
   //  INSERT HARDWARE 'CHANNEL1' (OF TYPE 'CHANNEL') IN HARDWARE TYPE 'BOARD'
   // ===========================================
   if (fwHw_insert("BOARD", "CHANNEL", "CHANNEL1"))
      DebugTN("Hardware 'CHANNEL1' (of type 'CHANNEL') inserted in hardware type 'BOARD'!");
   else
      DebugTN("Error when inserting hardware 'CHANNEL1' (of type 'CHANNEL') in hardware type 'BOARD'!");


   // ===========================================
   //  INSERT HARDWARE 'CHANNEL2' (OF TYPE 'CHANNEL') IN HARDWARE TYPE 'BOARD'
   // ===========================================
   if (fwHw_insert("BOARD", "CHANNEL", "CHANNEL2"))
      DebugTN("Hardware 'CHANNEL2' (of type 'CHANNEL') inserted in hardware type 'BOARD'!");
   else
      DebugTN("Error when inserting hardware 'CHANNEL2' (of type 'CHANNEL') in hardware type 'BOARD'!");



 
 //So far the script was just dealing with hardware types. A complete board type with inserted channels was created.
 //In the next step an 'instance' is derived. Note: that the addresses change from channel to channel so the default
 //settings alone are not applicable.



   // ===========================================
   //  DERIVE HARDWARE 'myBOARD' FROM HARDWARE TYPE 'BOARD'
   // ===========================================
   if (fwHw_create("BOARD", "myBOARD"))
      DebugTN("Hardware 'myBOARD' of hardware type 'BOARD' created successfully!");
   else
      DebugTN("Creating hardware 'myBOARD' of hardware type 'BOARD' failed!");


   // ===========================================
   //  APPLY DEFAULT COMMON AND SPECIFIC SETTINGS
   // ===========================================
   if (fwHw_applyDefaultSettings("BOARD", "myBOARD"))
      DebugTN("Default settings applied to hardware 'myBOARD' successfuly!");
   else
      DebugTN("Applying default settings to hardware 'myBOARD' failed!");


   // =========================================== 
   //  MODIFY ADDRESSES FOR THE VARIOUS CHANNELS 
   // =========================================== 
   dynClear(registersNameList); 
   dynAppend(registersNameList,"ADC0"); 
   dynAppend(registersNameList,"ADC1"); 
   dynAppend(registersNameList,"ADC2"); 
   dynAppend(registersNameList,"ADC3"); 
 
   for(j = 0; j < 3; j++){ 
      dummy = "myBOARD.CHANNEL" + j; 
      if (fwHw_getSpecificSettings(dummy, registersNameList, SpecificSettingsList)){ 
         for(i = 1; i <= 4; i++) 
            SpecificSettingsList[i][1] = (int) SpecificSettingsList[i][1] + j * 0x1000000;  
         DebugTN(dummy); 
         DebugTN(SpecificSettingsList);
         fwHw_setSpecificSettings(dummy, registersNameList, SpecificSettingsList); 
      } 
      else 
         DebugTN("Could not retrieve the specific settings!"); 
   } 
 


 //Finally all the registers are subscribed and the communication with the server is established.
 //The FwCcpc library has to be used to access the registers. In this example the monitoring service is called.
 //The registers of the ADC channels were defined to be read every 5 seconds (refreshrate) but data is just sent
 //to the client if the value actually has changed since the last reading (Data change = 1).

   // ===========================================
   //  SUBSCRIBE TO ALL REGISTERS AND START MONITORING
   // ===========================================
   if (fwHw_subscribe("myBOARD"))
      DebugTN("All registers from hardware 'myBOARD' subscribed!");
   else
      DebugTN("Registers from hardware 'myBOARD' could not be subscribed!");

   
   DebugTN("Register list with full datapoint name as required by fwCcpc_startMonitoring:");
   for (j = 0; j < 3; j++){
      dynClear(registersNameListDP);
      for (i = 1; i <= 4; i++){
         dynAppend(registersNameListDP, "myBOARD.CHANNEL" + j + "." + registersNameList[i]);
      }
      DebugTN(registersNameListDP);    
   }      

   fwCcpc_startMonitoring(registersNameListDP);  //it will evaluate the current settings for refreshrate and update
 
 (...)

Generated on Mon Jan 28 10:40:20 2008 for FwHw by  doxygen 1.4.7