TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

bb_core.h

Go to the documentation of this file.
00001 
00037 #ifndef _BB_H_
00038 #define _BB_H_
00039 
00040 #include <stdio.h>
00041 #include <sys/sem.h>
00042 #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
00043 /* union semun is defined by including <sys/sem.h> */
00044 #else
00045 #ifdef _SEM_SEMUN_UNDEFINED
00046 #undef _SEM_SEMUN_UNDEFINED
00047 
00052 union semun {
00053   int val;                           /* value for SETVAL */
00054   struct semid_ds *buf;              /* buffer for IPC_STAT & IPC_SET */
00055   unsigned short int *array;         /* array for GETALL & SETALL */
00056   struct seminfo *__buf;             /* buffer for IPC_INFO */
00057 };
00058 #endif
00059 #endif
00060 
00061 
00073 #define MAX_SYSMSG_SIZE     255
00074 
00075 #define BB_NAME_MAX_SIZE    255
00076 #define VARNAME_MAX_SIZE    150
00077 #define MSG_BB_MAX_SIZE     32
00078 #define BB_SHM_ACCESS_RIGHT 0770
00079 #define BB_SEM_ACCESS_RIGHT 0770
00080 #define BB_MSG_ACCESS_RIGHT 0770
00081 
00082 #define E_OK    0
00083 #define E_NOK  -1
00084 
00089 typedef enum {E_BB_DOUBLE=1, 
00090               E_BB_FLOAT,
00091               E_BB_INT8, 
00092               E_BB_INT16, 
00093               E_BB_INT32, 
00094               E_BB_INT64, 
00095               E_BB_UINT8, 
00096               E_BB_UINT16, 
00097               E_BB_UINT32, 
00098               E_BB_UINT64,
00099               E_BB_CHAR,
00100               E_BB_UCHAR,
00101               E_BB_USER} E_BB_TYPE_T;
00102               
00107 typedef struct S_BB_DATADESC {
00109   char name[VARNAME_MAX_SIZE+1];
00111   E_BB_TYPE_T type;
00116   int32_t dimension;
00122   size_t type_size;
00126   unsigned long data_offset;
00127 } S_BB_DATADESC_T;
00128 
00135 typedef struct S_BB_MSG {
00143   long mtype;
00148   unsigned char mtext[MSG_BB_MAX_SIZE];
00149 } S_BB_MSG_T;
00150 
00156 typedef struct S_BB {
00164   int semid;
00172   int msgid;
00174   char name[BB_NAME_MAX_SIZE+1];
00176   int32_t  max_data_desc_size;
00178   unsigned long  data_desc_offset; 
00183   int n_data;
00185   unsigned long max_data_size;
00187   unsigned long data_offset;
00192   unsigned long data_free_offset;
00198   int destroyed;
00199 } S_BB_T;
00200 
00201 
00211 int32_t
00212 bb_size(const int32_t n_data, const int32_t data_size);
00213 
00221 int32_t 
00222 bb_find(volatile S_BB_T* bb, const char* var_name);
00223 
00231 S_BB_DATADESC_T* 
00232 bb_data_desc(volatile S_BB_T* bb);
00233 
00241 void* 
00242 bb_data(volatile S_BB_T* bb);
00243 
00252 double
00253 bb_double_of(void *value, E_BB_TYPE_T bbtype);
00254 
00268 int32_t 
00269 bb_data_initialise(volatile S_BB_T* bb, S_BB_DATADESC_T* data_desc,void* default_value);
00270 
00271 int32_t
00272 bb_value_write(volatile S_BB_T* bb, S_BB_DATADESC_T data_desc,const char* value, int32_t idx);
00273 
00274 int32_t
00275 bb_data_header_print(S_BB_DATADESC_T data_desc, FILE* pf, int32_t idx);
00276 
00277 int32_t
00278 bb_data_footer_print(S_BB_DATADESC_T data_desc, FILE* pf, int32_t idx);
00279 
00280 int32_t 
00281 bb_value_print(volatile S_BB_T* bb, S_BB_DATADESC_T data_desc, FILE* pf, int32_t idx);
00282 
00291 int32_t 
00292 bb_data_print(volatile S_BB_T* bb, S_BB_DATADESC_T data_desc, FILE* pf);
00293 
00314 int32_t 
00315 bb_create(S_BB_T** bb, 
00316           const char* pc_bb_name,
00317           int n_data,
00318           int data_size);
00330 int32_t 
00331 bb_destroy(S_BB_T** bb);
00332 
00344 int32_t 
00345 bb_lock(volatile S_BB_T* bb);
00346 
00353 int32_t 
00354 bb_unlock(volatile S_BB_T* bb);
00355 
00365 int32_t 
00366 bb_attach(S_BB_T** bb, const char* bb_name);
00367 
00374 int32_t 
00375 bb_detach(S_BB_T** bb);
00376 
00390 void* 
00391 bb_publish(volatile S_BB_T *bb, S_BB_DATADESC_T* data_desc);
00392 
00403 void* 
00404 bb_subscribe(volatile S_BB_T *bb, S_BB_DATADESC_T* data_desc);
00405 
00414 int32_t 
00415 bb_dump(volatile S_BB_T *bb, FILE* filedesc);
00416 
00424 int
00425 bb_get_nb_max_item(volatile S_BB_T *bb);
00426 
00434 int
00435 bb_get_nb_item(volatile S_BB_T *bb);
00436 
00443 int
00444 bb_get_mem_size(volatile S_BB_T *bb);
00445 
00464 int32_t 
00465 bb_shadow_get(S_BB_T *bb_shadow, volatile S_BB_T *bb_src);
00466 
00476 int32_t 
00477 bb_shadow_update_data(S_BB_T *bb_shadow, volatile S_BB_T *bb_src);
00478 
00485 int32_t 
00486 bb_msg_id(volatile S_BB_T *bb);
00487 
00498 int32_t 
00499 bb_snd_msg(volatile S_BB_T *bb, S_BB_MSG_T* msg);
00500 
00501 
00513 int32_t 
00514 bb_rcv_msg(volatile S_BB_T *bb, S_BB_MSG_T* msg);
00515 #endif /* _BB_H_ */
Framework Home Page.

Beware !! TSP wave is coming...