00001
00002
00003 #include "rcs.hh"
00004
00005 extern "C"
00006 {
00007
00008 #include "bbd.h"
00009
00010 int NMLInit ();
00011 int NMLReadInit ();
00012 int NMLWriteInit ();
00013 int NMLWrite ();
00014 int NMLRead ();
00015 int NMLExit ();
00016 int NMLReadExit ();
00017 int NMLWriteExit ();
00018 int BBDInit ();
00019 int BBDRead ();
00020 int BBDWrite ();
00021 int BBDExit ();
00022 int NBTest ();
00023
00024 }
00025
00026
00027 struct bbd_struct
00028 {
00029 int i;
00030 double d;
00031 char c;
00032 };
00033
00034 #define NML_BBD_MSG_TYPE ((NMLTYPE) 101)
00035
00036 class NML_BBD_MSG:public NMLmsg
00037 {
00038 public:
00039 NML_BBD_MSG ():NMLmsg (NML_BBD_MSG_TYPE, sizeof (NML_BBD_MSG))
00040 {
00041 };
00042
00043 void update (CMS *);
00044
00045 bbd_struct internal_bbd;
00046 };
00047
00048 int
00049 nmlbbdFormat (NMLTYPE type, void *buf, CMS * cms)
00050 {
00051 switch (type)
00052 {
00053 case NML_BBD_MSG_TYPE:
00054 ((NML_BBD_MSG *) buf)->update (cms);
00055 return 1;
00056
00057 default:
00058 break;
00059 }
00060 return -1;
00061 }
00062
00063 void
00064 NML_BBD_MSG::update (CMS * cms)
00065 {
00066 cms->update (internal_bbd.i);
00067 cms->update (internal_bbd.d);
00068 cms->update (internal_bbd.c);
00069 };
00070
00071
00072 NML *nml_read = NULL;
00073 NML *nml_write = NULL;
00074 BBD bbd_read = NULL;
00075 BBD bbd_write = NULL;
00076
00077 int
00078 NMLBBDNULL ()
00079 {
00080 nml_read = NULL;
00081 nml_write = NULL;
00082 bbd_read = NULL;
00083 bbd_write = NULL;
00084 }
00085
00086
00087 int
00088 NMLInit ()
00089 {
00090 nml_read = NULL;
00091 nml_write = NULL;
00092 NMLWriteInit ();
00093 NMLReadInit ();
00094 }
00095
00096 int
00097 NMLReadInit ()
00098 {
00099 nml_read = NULL;
00100 rcs_print ("NMLReadInit():\n");
00101
00102 nml_read =
00103 new NML (nmlbbdFormat, "buf", "reader", "/users/shackle/rcslib/test.nml");
00104
00105 if (NULL == nml_read)
00106 {
00107 return -1;
00108 }
00109 if (!nml_read->valid ())
00110 {
00111 return -1;
00112 }
00113 return 0;
00114 }
00115
00116 int
00117 NMLWriteInit ()
00118 {
00119 nml_read = NULL;
00120 nml_write = NULL;
00121
00122 rcs_print ("NMLWriteInit():\n");
00123 nml_write =
00124 new NML (nmlbbdFormat, "buf", "writer", "/users/shackle/rcslib/test.nml");
00125
00126 if (NULL == nml_write)
00127 {
00128 return -1;
00129 }
00130 if (!nml_write->valid ())
00131 {
00132 return -1;
00133 }
00134 return 0;
00135 }
00136
00137
00138 int
00139 NMLExit ()
00140 {
00141 rcs_print ("NMLExit():\n");
00142 NMLReadExit ();
00143 NMLWriteExit ();
00144 return 0;
00145 }
00146
00147 int
00148 NMLReadExit ()
00149 {
00150 rcs_print ("NMLReadExit():\n");
00151 if (NULL != nml_read)
00152 {
00153 delete nml_read;
00154 nml_read = NULL;
00155 }
00156 return 0;
00157 }
00158
00159 int
00160 NMLWriteExit ()
00161 {
00162 rcs_print ("NMLWriteExit():\n");
00163 if (NULL != nml_write)
00164 {
00165 delete nml_write;
00166 nml_write = NULL;
00167 }
00168 return 0;
00169 }
00170
00171 int
00172 NMLRead ()
00173 {
00174 rcs_print ("NMLRead():\n");
00175 if (NULL == nml_read)
00176 {
00177 rcs_print_error ("nml_read is NULL.\n");
00178 return -1;
00179 }
00180
00181 NMLTYPE type = nml_read->read ();
00182 NML_BBD_MSG *bbd_msg = (NML_BBD_MSG *) nml_read->get_address ();
00183
00184 rcs_print ("type = %d\n", type);
00185 if (NULL == bbd_msg)
00186 {
00187 rcs_print_error ("bbd_msg == NULL\n");
00188 return -1;
00189 }
00190 rcs_print ("i = %d\n", bbd_msg->internal_bbd.i);
00191 rcs_print ("d = %lf\n", bbd_msg->internal_bbd.d);
00192 return type;
00193 }
00194
00195 int
00196 NMLWrite ()
00197 {
00198 rcs_print ("NMLWrite():\n");
00199 if (NULL == nml_write)
00200 {
00201 rcs_print_error ("nml_write is NULL.\n");
00202 return -1;
00203 }
00204
00205 static int nml_write_count = 0;
00206 nml_write_count++;
00207 NML_BBD_MSG bbd_msg;
00208 bbd_msg.internal_bbd.i = nml_write_count;
00209 bbd_msg.internal_bbd.c = nml_write_count;
00210 bbd_msg.internal_bbd.d = nml_write_count;
00211
00212 return nml_write->write (&bbd_msg);
00213
00214 }
00215
00216
00217 int
00218 BBDInit ()
00219 {
00220 rcs_print ("BBDInit():\n");
00221 bbd_write = bbdConnect ("buf", BBD_MULT_WRITER, 0x100);
00222
00223 bbd_read = bbdConnect ("buf", BBD_MULT_READER, 0x100);
00224
00225 if (NULL == bbd_write)
00226 {
00227 return -1;
00228 }
00229 if (NULL == bbd_read)
00230 {
00231 return -1;
00232 }
00233 return 0;
00234 }
00235
00236
00237 int
00238 BBDExit ()
00239 {
00240 rcs_print ("BBDExit():\n");
00241 if (NULL != bbd_read)
00242 {
00243 bbdDelete (bbd_read);
00244 bbd_read = NULL;
00245 }
00246 if (NULL != bbd_write)
00247 {
00248 bbd_write = NULL;
00249 }
00250 return 0;
00251 }
00252
00253 int
00254 BBDRead ()
00255 {
00256 rcs_print ("BBDRead():\n");
00257 if (NULL == bbd_read)
00258 {
00259 rcs_print_error ("bbd_read is NULL.\n");
00260 return -1;
00261 }
00262
00263 bbd_struct bbd_msg;
00264
00265 if (bbdRead (bbd_read, &bbd_msg, BBD_PLAIN_READ, NO_WAIT) != OK)
00266 {
00267 return -1;
00268 }
00269
00270 rcs_print ("i = %d\n", bbd_msg.i);
00271 rcs_print ("d = %lf\n", bbd_msg.d);
00272 return 0;
00273 }
00274
00275 int
00276 BBDWrite ()
00277 {
00278 rcs_print ("BBDWrite():\n");
00279 if (NULL == bbd_write)
00280 {
00281 rcs_print_error ("bbd_write is NULL.\n");
00282 return -1;
00283 }
00284
00285
00286
00287 static int bbd_write_count = 0;
00288 bbd_write_count++;
00289 bbd_struct bbd_msg;
00290 bbd_msg.i = bbd_write_count;
00291 bbd_msg.c = bbd_write_count;
00292 bbd_msg.d = bbd_write_count;
00293
00294 if (bbdWrite (bbd_write, &bbd_msg, BBD_PLAIN_WRITE, NO_WAIT) != OK)
00295 {
00296 return -1;
00297 }
00298
00299 return 0;
00300
00301 }