10 #ifndef __LIBELEC_TYPES_IMPL_H__ 
   11 #define __LIBELEC_TYPES_IMPL_H__ 
   14 #include <acfutils/dr.h> 
   16 #include <acfutils/htbl.h> 
   17 #include <acfutils/list.h> 
   18 #include <acfutils/worker.h> 
   19 #include <acfutils/thread.h> 
   21 #ifdef  LIBELEC_WITH_LIBSWITCH 
   22 #include <libswitch.h> 
   25 #ifdef  LIBELEC_WITH_NETLINK 
   26 #include "libelec_types_net.h" 
   35 #define LIBELEC_SER_START_MARKER \ 
   36     ALIGN_ATTR(16) int  __serialize_start_marker[1] 
   37 #define LIBELEC_SER_END_MARKER  \ 
   38     int __serialize_end_marker[1] 
   39 #define LIBELEC_SERIALIZE_DATA_V(data, ser, key, ...) \ 
   40     conf_set_data_v((ser), (key), &(data)->__serialize_start_marker, \ 
   41         ((uintptr_t)&(data)->__serialize_end_marker) - \ 
   42         ((uintptr_t)&(data)->__serialize_start_marker), __VA_ARGS__) 
   43 #define LIBELEC_DESERIALIZE_DATA_V(data, ser, key, ...) \ 
   45         size_t __len = ((uintptr_t)&(data)->__serialize_end_marker) - \ 
   46             ((uintptr_t)&(data)->__serialize_start_marker); \ 
   47         void *tmpbuf = safe_malloc(__len); \ 
   48         size_t __act_len = conf_get_data_v((ser), (key), tmpbuf, \ 
   49             __len, __VA_ARGS__); \ 
   50         if (__act_len != __len) { \ 
   51             logMsg("Error deserializing key " key ": " \
 
   52                 "data length mismatch, wanted %d bytes, got %d", \
 
   53                 __VA_ARGS__, (int)__len, (int)__act_len); \
 
   57         memcpy(&(data)->__serialize_start_marker, tmpbuf, __len); \
 
   65     mutex_t     worker_interlock;
 
   87     mutex_t     user_cbs_lock;
 
   91     elec_comp_t **comps_array;      
 
   97 #ifdef  LIBELEC_WITH_NETLINK 
  105         netlink_proto_t proto;
 
  111         netlink_proto_t proto;
 
  117     LIBELEC_SER_START_MARKER;
 
  121     LIBELEC_SER_END_MARKER;
 
  135     LIBELEC_SER_START_MARKER;
 
  138     double      stab_factor_U;
 
  139     double      stab_factor_f;
 
  140     LIBELEC_SER_END_MARKER;
 
  145     elec_comp_t *batt_conn;
 
  157     LIBELEC_SER_START_MARKER;
 
  160     double      random_load_factor;
 
  161     LIBELEC_SER_END_MARKER;
 
  169 #ifdef  LIBELEC_WITH_LIBSWITCH 
  172     LIBELEC_SER_START_MARKER;
 
  176     LIBELEC_SER_END_MARKER;
 
  197     double          out_amps[ELEC_MAX_SRCS];
 
  198     elec_comp_t     *srcs[ELEC_MAX_SRCS];
 
  218     LIBELEC_SER_START_MARKER;
 
  240     LIBELEC_SER_END_MARKER;
 
  242     double          src_int_cond_total; 
 
  244     elec_comp_t     *srcs[ELEC_MAX_SRCS];
 
  252     elec_comp_t     *srcs_ext[ELEC_MAX_SRCS];
 
  264 #ifdef  LIBELEC_WITH_DRS 
  275     list_node_t     comps_node;
 
  276     list_node_t     gens_batts_node;
 
  277     list_node_t     ties_node;
 
  278     avl_node_t      info2comp_node;
 
  279     avl_node_t      name2comp_node;