9 #define _POSIX_C_SOURCE 199506L
12 #if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 199506L
13 #error "Add -D_POSIX_C_SOURCE=199506L to the compile line"
20 #include "carma/szaarrayutils/lprintf.h"
21 #include "carma/szaarrayutils/control.h"
22 #include "carma/szaarrayutils/list.h"
29 #include "carma/szaarrayutils/regmap.h"
30 #include "carma/szaarrayutils/rtcnetcoms.h"
32 #include "carma/szaarrayutils/regdata.h"
33 #include "carma/szaarrayutils/control.h"
38 #include "carma/szautil/Directives.h"
39 #include "carma/szautil/MonitorPoint.h"
52 #define SZACONTROL_INIT_SCRIPT "$SZA_DIR/conf/szaArrayControl.init"
54 #define SZACONTROL_INIT_SCRIPT "$SZA_UDIR/conf/szaArrayControl.init"
61 #define CP_SHUTDOWN_TIMEOUT 5
70 #if FILENAME_MAX + 16 > PIPE_BUF
71 #define CP_FILENAME_MAX (PIPE_BUF - 16)
73 #define CP_FILENAME_MAX FILENAME_MAX
76 #define CP_REGNAME_MAX CP_FILENAME_MAX/2
81 typedef struct ControlProg ControlProg;
99 void *cp_ThreadData(ControlProg *cp, CpThreadId
id);
106 #define CP_NEW_FN(fn) void *(fn)(ControlProg *cp, sza::util::Pipe *pipe)
110 #define CP_DEL_FN(fn) void *(fn)(void *obj)
114 #define CP_THREAD_FN(fn) void *(fn)(void *arg)
120 #define CP_STOP_FN(fn) int (fn)(ControlProg *cp)
126 typedef struct Logger Logger;
127 typedef struct Logger SzaArrayLogger;
129 CP_THREAD_FN(logger_thread);
130 CP_NEW_FN(new_Logger);
131 CP_DEL_FN(del_Logger);
132 CP_STOP_FN(stop_Logger);
162 LoggerMessageType type;
166 char dir[CP_FILENAME_MAX+1];
170 char dir[CP_FILENAME_MAX+1];
178 sza::array::LogStream nature;
179 char text[LOG_MSGLEN+1];
187 char catalog[CP_FILENAME_MAX+1];
193 char device[sza::array::TransactionManager::DEV_NAME_MAX+1];
195 char serial[sza::array::TransactionManager::SERIAL_NAME_MAX+1];
197 char location[sza::array::TransactionManager::LOCATION_NAME_MAX+1];
201 char who[sza::array::TransactionManager::WHO_NAME_MAX+1];
203 char comment[LOG_MSGLEN-sza::array::TransactionManager::PREFIX_LEN+1];
208 char address[CP_FILENAME_MAX+1];
217 int pack_logger_shutdown(LoggerMessage *msg);
218 int pack_logger_chdir(LoggerMessage *msg,
char *dir);
219 int pack_logger_open(LoggerMessage *msg,
char *dir);
220 int pack_logger_flush(LoggerMessage *msg);
221 int pack_logger_close(LoggerMessage *msg);
223 int pack_logger_message(LoggerMessage *msg,
char *text,
224 sza::array::LogStream nature,
225 unsigned seq=0,
bool end=
true,
bool interactive=
false);
227 int pack_logger_add_client(LoggerMessage *msg,
sza::util::Pipe *client);
228 int pack_logger_rem_client(LoggerMessage *msg,
sza::util::Pipe *client);
230 int pack_logger_transaction_catalog(LoggerMessage *msg,
char *path,
bool clear);
231 int pack_logger_log_transaction(LoggerMessage *msg,
char *device,
char* serial,
232 char* location,
double date,
char* who,
234 int pack_logger_transaction_email(LoggerMessage *msg,
bool add,
char *email);
238 bool log_isValidDevice(Logger* log,
char* device);
244 PipeState send_LoggerMessage(ControlProg *cp, LoggerMessage *msg,
247 int sendLoggerMessage(ControlProg* cp, std::string message,
bool isErr,
bool interactive);
253 int log_thread_stream(ControlProg *cp, FILE *stream);
258 std::vector<std::string>* getTransactionEmailList(ControlProg *cp);
264 typedef struct Archiver Archiver;
266 CP_THREAD_FN(archiver_thread);
267 CP_NEW_FN(new_Archiver);
268 CP_DEL_FN(del_Archiver);
269 CP_STOP_FN(stop_Archiver);
301 } ArchiverMessageType;
309 ArchiverMessageType type;
312 char dir[CP_FILENAME_MAX+1];
315 char dir[CP_FILENAME_MAX+1];
350 int pack_archiver_frame(ArchiverMessage *msg);
351 int pack_archiver_shutdown(ArchiverMessage *msg);
352 int pack_archiver_chdir(ArchiverMessage *msg,
char *dir);
353 int pack_archiver_open(ArchiverMessage *msg,
char *dir);
354 int pack_archiver_flush(ArchiverMessage *msg);
355 int pack_archiver_close(ArchiverMessage *msg);
356 int pack_archiver_sampling(ArchiverMessage *msg,
unsigned nframe,
unsigned seq);
357 int pack_archiver_filter(ArchiverMessage *msg,
int enable);
358 int pack_archiver_file_size(ArchiverMessage *msg,
unsigned nframe);
361 int pack_archiver_add_client(ArchiverMessage *msg, Pipe *client);
362 int pack_archiver_rem_client(ArchiverMessage *msg, Pipe *client);
364 int pack_archiver_add_client(ArchiverMessage *msg,
sza::util::Pipe *client);
365 int pack_archiver_rem_client(ArchiverMessage *msg,
sza::util::Pipe *client);
368 int pack_archiver_tv_offset_done(ArchiverMessage *msg,
unsigned seq);
369 int pack_archiver_newFrame(ArchiverMessage *msg,
unsigned seq);
374 PipeState send_ArchiverMessage(ControlProg *cp, ArchiverMessage *msg,
380 int arc_integrate_frame(ControlProg *cp, RegRawData *frame);
381 int arc_integrate_frame_old(ControlProg *cp, RegRawData *frame);
386 enum {ARC_DEF_NFRAME=10};
392 typedef struct Scheduler Scheduler;
394 Scheduler *cp_Scheduler(ControlProg *cp);
396 CP_THREAD_FN(scheduler_thread);
397 CP_NEW_FN(new_Scheduler);
398 CP_DEL_FN(del_Scheduler);
399 CP_STOP_FN(stop_Scheduler);
419 } SchedulerMessageType;
427 SchedulerMessageType type;
431 char string[sza::array::CC_CMD_MAX+1];
450 sza::array::NetMsgId id;
451 sza::array::RtcNetMsg msg;
475 char dir[CP_FILENAME_MAX] ;
493 int pack_scheduler_shutdown(SchedulerMessage *msg);
494 int pack_scheduler_rtc_state(SchedulerMessage *msg,
int online);
497 int pack_scheduler_command(SchedulerMessage *msg,
char *command, Pipe *client);
498 int pack_scheduler_add_client(SchedulerMessage *msg, Pipe *client);
499 int pack_scheduler_rem_client(SchedulerMessage *msg, Pipe *client);
501 int pack_scheduler_command(SchedulerMessage *msg,
char *command,
sza::util::Pipe *client);
502 int pack_scheduler_add_client(SchedulerMessage *msg,
sza::util::Pipe *client);
503 int pack_scheduler_rem_client(SchedulerMessage *msg,
sza::util::Pipe *client);
506 int pack_scheduler_rtcnetmsg(SchedulerMessage *msg, sza::array::NetMsgId
id,
507 sza::array::RtcNetMsg *rtcmsg);
508 int pack_scheduler_mark_done(SchedulerMessage *msg,
unsigned seq);
509 int pack_scheduler_grab_done(SchedulerMessage *msg,
unsigned seq);
510 int pack_scheduler_setreg_done(SchedulerMessage *msg,
unsigned seq);
511 int pack_scheduler_tv_offset_done(SchedulerMessage *msg,
unsigned seq);
512 int pack_scheduler_frame_done(SchedulerMessage *msg,
unsigned seq);
518 PipeState send_SchedulerMessage(ControlProg *cp, SchedulerMessage *msg,
523 int send_paging_state(ControlProg* cp,
bool allow);
525 void listPager(ControlProg* cp, ListNode* node=0);
527 int sendPagingState(ControlProg* cp,
int allow,
528 unsigned mask=sza::array::PAGE_ENABLE,
char* msg=0, ListNode* node=0);
530 int sendPagerCondition(ControlProg* cp,
unsigned mode,
533 int sendCmdTimeoutConfiguration(ControlProg* cp,
unsigned seconds, ListNode* node=0);
534 int sendCmdTimeoutConfiguration(ControlProg* cp,
bool active, ListNode* node=0);
538 int sendArrayConfiguration(ControlProg* cp, ListNode* node,
540 unsigned array = sza::util::CarmaConfig::NONE,
541 unsigned config = sza::util::CarmaConfig::NONE);
543 int sendAddArrayAntenna(ControlProg* cp, ListNode* node,
549 int sendRemArrayAntenna(ControlProg* cp, ListNode* node,
550 unsigned array,
unsigned iPad);
552 void listArrayConfig(ControlProg* cp, ListNode* node,
unsigned config);
559 typedef struct Navigator Navigator;
562 Navigator *cp_Navigator(ControlProg *cp);
564 CP_THREAD_FN(navigator_thread);
565 CP_NEW_FN(new_Navigator);
566 CP_DEL_FN(del_Navigator);
567 CP_STOP_FN(stop_Navigator);
579 } NavigatorMessageType;
596 NavigatorMessageType type;
599 char catalog[CP_FILENAME_MAX+1];
600 char scan_catalog[CP_FILENAME_MAX+1];
601 char ut1utc[CP_FILENAME_MAX+1];
609 int pack_navigator_shutdown(NavigatorMessage *msg);
610 int pack_navigator_rtc_state(NavigatorMessage *msg,
int online);
611 int pack_navigator_catalog(NavigatorMessage *msg,
char *path);
612 int pack_navigator_scan_catalog(NavigatorMessage *msg,
char *path);
613 int pack_navigator_ut1utc(NavigatorMessage *msg,
char *path);
614 int pack_navigator_site(NavigatorMessage *msg,
double longitude,
615 double latitude,
double altitude);
620 PipeState send_NavigatorMessage(ControlProg *cp, NavigatorMessage *msg,
627 typedef struct Grabber Grabber;
629 CP_THREAD_FN(grabber_thread);
630 CP_NEW_FN(new_Grabber);
631 CP_DEL_FN(del_Grabber);
632 CP_STOP_FN(stop_Grabber);
650 } GrabberMessageType;
658 GrabberMessageType type;
661 char dir[CP_FILENAME_MAX+1];
664 char dir[CP_FILENAME_MAX+1];
673 int pack_grabber_image(GrabberMessage *msg);
674 int pack_grabber_shutdown(GrabberMessage *msg);
675 int pack_grabber_chdir(GrabberMessage *msg,
char *dir);
676 int pack_grabber_open(GrabberMessage *msg,
char *dir);
677 int pack_grabber_flush(GrabberMessage *msg);
678 int pack_grabber_close(GrabberMessage *msg);
684 PipeState send_GrabberMessage(ControlProg *cp, GrabberMessage *msg,
691 int grabber_save_image(ControlProg *cp,
unsigned short *image,
692 unsigned long utc[2],
signed actual[3],
699 typedef struct Term Term;
701 CP_THREAD_FN(term_thread);
704 CP_STOP_FN(stop_Term);
736 TermMessageType type;
739 char ip[CP_FILENAME_MAX+1];
743 char address[CP_FILENAME_MAX+1];
749 char msg[CP_FILENAME_MAX+1];
750 char comment[CP_FILENAME_MAX+1];
775 int pack_term_shutdown(TermMessage *msg);
776 int pack_term_reg_page(TermMessage *msg,
char* reg=NULL,
char* comment=NULL,
bool on=
true);
777 int pack_term_msg_page(TermMessage *msg, std::string txt,
bool on=
true);
778 int pack_pager_ip(TermMessage *msg, PagerDev dev,
char *ip);
779 int pack_pager_email(TermMessage *msg,
bool add,
char *email);
780 int pack_pager_enable(TermMessage *msg,
bool enable);
781 int packPagerAutoEnable(TermMessage *msg,
bool enable);
782 int packPagerAutoEnable(TermMessage *msg,
unsigned seconds);
784 int send_reg_page_msg(ControlProg* cp,
char* reg,
char* comment=0);
786 MONITOR_CONDITION_HANDLER(sendRegPage);
792 PipeState send_TermMessage(ControlProg *cp, TermMessage *msg,
798 std::vector<std::string>* getPagerEmailList(ControlProg *cp);
814 ArrayMap *cp_ArrayMap(ControlProg *cp);
834 sza::array::CcNetMsgId id;
835 sza::array::CcNetMsg msg;
839 int queue_cc_message(Pipe *client, CcPipeMsg *msg);
850 int queue_rtc_command(ControlProg *cp, sza::array::RtcNetCmd *cmd,
851 sza::array::NetCmdId type,
bool deactivateTimeout=
true);
856 int cp_rtc_online(ControlProg *cp);
861 int cp_request_shutdown(ControlProg *cp);
862 int cp_request_restart(ControlProg *cp);
863 int cp_report_exit(ControlProg *cp);
864 int cp_initialized(ControlProg *cp);
866 void configureCmdTimeout(ControlProg* cp,
unsigned int seconds);
867 void configureCmdTimeout(ControlProg* cp,
bool activate);
868 void allowTimeOutPaging(ControlProg* cp,
bool allow);
870 std::string cp_startupScript(ControlProg *cp);
872 int sendClearPagerMsg(ControlProg* cp);
873 int sendResetPagerMsg(ControlProg* cp);
874 int sendListPagerMsg(ControlProg* cp);
875 int sendEnablePagerMsg(ControlProg* cp,
bool enable);
877 int sendAddPagerRegisterMsg(ControlProg* cp, std::string regName,
878 double min,
double max,
bool delta,
unsigned nFrame,
879 bool outOfRange,
char* comment);
881 int sendRemPagerRegisterMsg(ControlProg* cp, std::string regName);
884 ControlProg* new_ControlProg();
885 ControlProg* new_ControlProgViewerServer();
887 double getRegVal(ControlProg* cp, sza::util::RegDescription& regDesc);
891 int sendArrayConfigMsg(ControlProg* cp,
unsigned array,
unsigned config);
893 int sendAddArrayAntennaMsg(ControlProg* cp,
unsigned array,
unsigned iPad,
894 unsigned antType,
int iAnt);
896 int sendRemArrayAntennaMsg(ControlProg* cp,
unsigned array,
unsigned iPad);
898 sza::util::CarmaConfig* getArrayConfig(ControlProg* cp,
unsigned array);
900 ControlProg* new_ControlProg(std::string startupScript);
901 ControlProg* del_ControlProg(ControlProg* cp);
902 int cp_event_loop(ControlProg* cp);
903 int cp_event_loop_MonitorServer(ControlProg* cp);
914 CpWhatNext whatNext(ControlProg* cp);
923 class ViewerServer :
public sza::util::NetMonitorFrameServer {
926 ViewerServer(
bool spawnThread,
unsigned port, sza::util::NetMonitorFrame* nmf,
int fdRead);
933 void registerReceiptOfFrame();
A class to enumerate a single Antenna, or a set of Antennas.
Tagged: Wed Jun 16 22:25:23 UTC 2004.
Tagged: Mon May 23 15:48:44 PDT 2011.
Tagged: Thu Aug 28 15:18:31 PDT 2008.
Tagged: Fri Nov 14 12:39:31 UTC 2003.
A class to encapsulate a pipe.
Tagged: Mon May 23 16:22:59 PDT 2011.
Tagged: Fri Nov 14 12:39:34 UTC 2003.