2/2
Mediator Layer changes on bicep1
2/3
fix NetMsgHandler
Mediator layer
Instances of NetCommHandler
Instances of NetMsgHandler
Instances of NetCmdHandler
Instances of RtcNetCmd
Instances of RtcNetMsg
Create svn directory
Class ideas from Tom
2/4
Add new stuff to svn:
Try running gcp_1.31 with real sync box
Add second half of Message and Command stuff to svn
Integrate Msg and Cmd changes into the Mediator
Undo bad cvs commit:
Check out My current gcp from svn
2/6
svn commit Mediator layer work, revision 9.
Move all Comm Base activity to antenna/control/bicep/netcommBase/
Possible Msg Problems
"Final" Mediator Layer commit to svn
2/9
Mediator Layer Errors
2/10
Mediator Layer Errors (cont)
NET_INIT_CMD
Check in current version into svn
Walt's masutils
MASD layer
2/11
RtcNetCmd: change NetMask receiver
RtcNetMsg: change NetUint receiver
NewNetMsg: change unsigned int receiver
svn commit revision 12
Mce Data system (MceRx thread)
2/12
Registers in Antenna layer
Registers in Masd layer
Pack a data frame in Masd
2/13
Makefile for MASD
2/16
How we connect the Antenna to the Mediator
Fix NET_INIT_CMD stuff
svn commit revision 14: MASD compiles
2/17
Debug and DBPRINT statements
Masd connecting to the Mediator Layer
2/18
svn commit revision 16: Masd runs! No masutils yet.
Check out Walt's masutils from bicep0
2/19
Walt's Masutils: first look
2/20
2/23
2/24
Make clean "stub" version for Walt to add masutils
Description of MASD classes
DataFrameManager inheritance
Doxygen for current gcp
2/25
Check out fresh revision 16
2/27
NET_READ_HANDLER

2/2

Mediator Layer changes on bicep1

copy the masd directory from spudws2 over to bicep1

Edit Mediator Layer files.

Change NetMsg::packAntGreetingMsg(). Trace this through:

util/NetMsgHandler:
    Old Methods
  - void packGreetingMsg() -> FIXED
util/common/NetMsgHandler.cc : x
util/common/NetMsg.h : x
mediator/AntennaConsumerNormal.cc : x
mediator/MceConsumer.cc : x
mediator/AntennaControl.cc -> DONE : x
mediator/MceControl.cc -> DONE : x

  - void packNetMsg() -> FIXED
masd/MasdControl.h, .cc : x
antenna/control/AntennaControl.h, .cc : x
util/common/NetMsgHandler.cc : x
util/common/NetCommHandler.cc : x
mediator/Control.h, cc : x
grabber/common/Control.h, cc : x

  - nssID sendNetMsg() -> FIXED
masd/MasdControl.cc : x
antenna/control/AntennaControl.cc : x
util/common/NetMsgHandler.h, cc -> DONE : x
util/common/NetCommHandler.h, cc : x
mediator/AntennaConsumerNormal.cc : x
mediator/MceConsumer.cc : x
mediator/Control.cc : x

  - void readNetMsg() -> FIXED
masd/MasdControl.cc : x
antenna/control/AntennaControl.cc : x
util/common/NetMsgHandler.h, .cc : x
util/common/NetCommHandler.h, .cc : x
mediator/AntennaConsumerNormal.cc : x
mediator/MceConsumer.cc : x
mediator/GrabberControl.h, .cc : x

  - void installReadHandler(...)

  - void installSendHandler(...)

  - void installErrorHandler(...)

  - New Methods
  - void packAntGreetingMsg() -> DONE
  - void packMceGreetingMsg() -> DONE
  - packMceIdMsg() -> Done
  - packAntNetMsg(NetMsg* msg) -> Done
  - sendAntNetMsg() -> Done
  - sendMceNetMsg() -> Done

  - NET_READ_HANDLER(antReadHandler)
  - NET_SEND_HANDLER(antSendHandler)
  - NET_ERROR_HANDLER(antErrorHandler)
  - NET_READ_HANDLER(mceReadHandler)
  - NET_SEND_HANDLER(mceSendHandler)
  - NET_ERROR_HANDLER(mceErrorHandler)

mediator/AntennaConsumerNormal::sendGreetingMsg() -> DONE : x
  - AntennaConsumerNormal::finalizeConnection() -> DONE : x
mediator/Mceconsumer::sendGreetingMsg() -> DONE : x
  - MceConsumer::finalizeConnection() -> DONE : x
mediator/AntennaControl::sendGreetingMsg() -> DONE : x
  - AntennaControl::finalizeConnection() -> DONE : x

First write MceControl.h, cc

I need two NetMsgHandler objects, one for antenna and one for masd.
Answer: The NetCommHandlers are part of AntennaControl and MceControl. Thus two sets of handlers are automatically generated.

Need to do:
  - put changes in Antenna Layer into projects-gcpBICEP2

2/3

fix NetMsgHandler

Add an enumerator rxType_ to NetMsgHandler, then put switch in appropriate methods.

Undo yesterday's damage:

util/common/NetMsgHandler.cc -> DONE
util/common/NetCommHandler
mediator/AntennaConsumerNormal.cc -> DONE
mediator/AntennaControl -> DONE
mediator/MceControl -> DONE
mediator/MceConsumer -> DONE

modified Method calls:
  - NetMsg::packGreetingMsg(...)


Soft link problem and grep
lrwxrwxrwx 1 kstory kstory 7 2009-02-02 07:34 gcp -> ../gcp/

Mediator layer

Need mediator/bicep/MceControlMsg.h, cc

Change all calls to NetMsgHandler constructor. -> ?? I can't find any?!??
antenna/control/AntennaControl.cc -> ok


In mediator/Control: Need communications handlers for both the Antenna and the MASD.
This is taken care of by AntennaControl and MceControl.

Need NetCommHandlers for both Antenna and Mce. New inherited class?

mediator/Control has threads:
  - AntennaControl , NetCommHandler, < NetCommHandler >
  - GrabberControl , NetCommHandler
  - StripControl, < StripCommunicator >
  - WxControl, WxCommunicator* , < WxCommunicator::WxData >
  - MceControl , NetCommHandler, < NetCommHandler >

All of these have NetCommHandler objects
  - NetCommHandler temporaryHandler_
  - < NetCommHandler > connectedHandlers_

NetCommHandler has a
  - NetMsgHandler
  - NetCmdHandler

Idea: put in enum rxType for all three of these.
Maybe later make a class inheritence structure

Potential problems with the Grabber:
NetCommHandler functions:
  - packRtcNetCmd() -> ok
  - getNetCmdHandler()->getSendFd() -> unmodified
  - getNetCmdHandler()->getReadFd() -> unmodified
  - readNetMsg() -> unmodified
  - sendNetCmd() -> unmodified
  - getLastReadNetMsg() -> unmodified
  - attach() -> unmodified
  - getNetMsgHandler()->installReadHandler() -> unmodified
  - getNetMsgHandler()->installErrorHandler() -> unmodified
  - getNetMsgHandler()->installSendHandler() -> unmodified

Check NetMsg.h -> ok
add RtcNetCmd field mces -> already done!

Instances of NetCommHandler

Where NetCommHandler is used:
Mediator:
  - Control
  - AntennaControl
  - AntennaConsumerNormal
  - GrabberControl
  - MceControl
  - MceConsumer
Antenna:
  - AntennaControl
Masd:
  - MasdControl
Grabber:
  - Control.h

Instances of NetMsgHandler

Where NetMsgHandler is used:
Mediator:
  - Control
  - AntennaControl
  - AntennaConsumerNormal
  - MceControl
  - MceConsumer
  - GrabberControl
Antenna:
  - AntennaControl
  - AntennaMonitor
Masd:
  - MasdMonitor
  - MasdControl
Grabber:
  - Control

Instances of NetCmdHandler

Where NetCmdHandler is used:
Mediator:
  - Control
  - AntennaControl
  - AntennaConsumerNormal
  - MceControl
  - MceConsumer
  - GrabberControl
Antenna:
  - AntennaControl
Masd:
  - MasdControl
Grabber:
  - Control

Idea: change body.antenna to body.rx
RtcNetMsg body

Instances of RtcNetCmd

Where RtcNetCmd is used:
  - antenna/control/AntNetCmdForwarder
  - control/code/unix/control_src/specific/specificscript.c
  - control/code/unix/control_src/common/genericcontrol.h
  - control/code/unix/control_src/common/genericscript.c
  - control/code/unix/control_src/common/navigator.c
  - control/code/unix/control_src/common/genericscheduler.c
  - control/code/unix/libunix_src/specific/rtcnetcoms.c
  - mediator/specific/ControlNetCmdForwarder.cc
  - mediator/specific/AntennaNetCmdForwarderNormal.cc
  - mediator/specific/AntennaControl.cc
  - mediator/specific/AntennaControlMsg.h
  - mediator/specific/GrabberControl.cc
  - mediator/specific/GrabberNetCmdForwarder.cc
  - mediator/specific/GrabberControlMsg.h
  - mediator/specific/StripNetCmdForwarder.cc
  - mediator/specific/ScannerNetCmdForwarder.cc
  - util/specific/AntennaNetCmdForwarder.cc
  - util/specific/ArrayNetCmdForwarder.cc
  - util/common/NetCommHandler.h
  - util/common/NetCmdHandler.h
  - util/common/NetCmd.h

Instances of RtcNetMsg

Where RtcNetMsg is used:
  - control/code/unix/control_src/specific/specificcontrol.c
  - control/code/unix/control_src/common/NewRtcNetMsg.c
  - control/code/unix/control_src/common/genericcontrol.h
  - control/code/unix/control_src/common/NewRtcNetMsg.h
  - control/code/unix/control_src/common/genericscheduler.c
  - control/code/unix/libunix_src/specific/rtcnetcoms.c
  - util/common/NetCommHandler.h
  - util/common/NetMsgHandler.cc
  - util/common/NewRtcNetMsg.h

Create svn directory

kstory@bicep1:~$ svnadmin create svnRepos/
kstory@bicep1:~$ svn import gcp/ file:///home/kstory/svnRepos/gcp
kstory@bicep1:~$ svn co file:///home/kstory/svnRepos/gcp

$ svn propedit svn:ignore ./
In file, type
  html

This ignores the html/ directory with svn.

Class ideas from Tom

NetMsgBase -> packGreeting() = 0 ?
AntNetMsg : NetMsgBase
MceNetMsg : MetMsgBase

NetCmdBase.h
AntNetCmd.h : NetCmdBase
AntNetCmd.cc
MceNetCmd.h : NetCmdBase
MceNetCmd.cc

NetCommHandlerBase.h, .cc
AntNetCommHandler.h : NetCommHandlerBase
AntNetCommHandler.cc
MceNetCommHandler.h : NetCommHandlerBase
MceNetCommHandler.cc

NetMsgHandlerBase.h, .cc
AntNetMsgHandler.h : NetMsgHandlerBase
AntNetMsgHandler.cc

Look into NetCommHandler depencdncy on NewRtcNetMsg, NewNetMsg


2/4

Add new stuff to svn:

Add the new files:
$ svn status
?      gcp/util/common/MceNetCmd.h
?      gcp/util/common/MceNetMsg.h
?      gcp/util/common/MceNetCommHandler.h
?      gcp/util/common/AntNetMsgHandler.h
?      gcp/util/common/AntNetCmd.h
?      gcp/util/common/MceNetCmd.cc
?      gcp/util/common/AntNetMsg.h
?      gcp/util/common/AntNetCommHandler.h
?      gcp/util/common/NetMsgHandlerBase.cc
?      gcp/util/common/AntNetCmd.cc
?      gcp/util/common/AntNetMsgHandler.cc
?      gcp/util/common/NetMsgBase.h
?      gcp/util/common/NetMsgHandlerBase.h
?      gcp/util/common/MceNetCommHandler.cc
?      gcp/util/common/NetCmdBase.h
?      gcp/util/common/NetCommHandlerBase.cc
?      gcp/util/common/NetCommHandlerBase.h
?      gcp/util/common/AntNetCommHandler.cc

$ svn add util/common/MceNetCmd.h
$ svn add AntNetCommHandler.h NetMsgHandlerBase.cc AntNetCmd.cc AntNetMsgHandler.cc NetMsgBase.h NetMsgHandlerBase.h MceNetCommHandler.cc NetCmdBase.h NetCommHandlerBase.cc NetCommHandlerBase.h AntNetCommHandler.cc
...
Commit the changes
$ svn commit

Try running gcp_1.31 with real sync box

Add initialization stuff to SyncBoard::initialize_bbcpci()
Compiles.

fix a few things.
compiles, runs.

kill walt's running gtkterm

$ ps aux grep gtkterm

(standard input):125:reuben 26993 0.0 0.2 156012 20520 pts/0 S Feb02 0:27 gtkterm

sudo kill 26993

$ sudo gtkterm -p /dev/bbc_sync/
(gtkterm:23017): GLib-CRITICAL : g_string_insert_c: assertion `pos <= string->len' failed
Control signals read: Inappropriate ioctl for device

(gtkterm:23017): GLib-CRITICAL
: g_string_insert_c: assertion `pos <= string->len' failed

(gtkterm:23017): GLib-CRITICAL : g_string_insert_c: assertion `pos <= string->len' failed

Check out gcp back from svn:
$ cvs co file:///home/kstory/svnRepos/gcp
Copy 3 updated files to current directory.
Add them to svn:
$ cvs commit  DataNew.cc SyncBoard.h SyncBoard.cc

Look into gcp::util::NewRtcNetMsg

MceNetMsgHandler::packNewRtcNetMsg
  set to ThrowError -> DONE

AntNetMsg::packAntennaIdMsg()
MceNetMsg::packMceIdMsg()

Done defining classes.

Now look for where these classes are instaniated.

Add second half of Message and Command stuff to svn

$ svn status
M      antenna/control/bicep/CVS/Entries
?      runlogs/bicepTestAntennaControl157
M      mediator/bicep/CVS/Entries
?      util/common/NetCmdHandlerBase.cc
?      util/common/MceNetMsgHandler.cc
?      util/common/NetCmdBase.cc
?      util/common/MceNetCmdHandler.h
?      util/common/NetCmdHandlerBase.h
?      util/common/MceNetCmdHandler.cc
?      util/common/AntNetCmdHandler.cc
?      util/common/AntNetCmdHandler.h
?      util/common/MceNetMsgHandler.h
M      util/common/MceNetCmd.h
M      util/common/MceNetMsg.h
M      util/common/MceNetCommHandler.h
M      util/common/AntNetMsgHandler.h
M      util/common/AntNetCmd.h
M      util/common/MceNetCmd.cc
M      util/common/AntNetMsg.h
M      util/common/AntNetCommHandler.h
M      util/common/NetMsgHandlerBase.cc
M      util/common/AntNetCmd.cc
M      util/common/AntNetMsgHandler.cc
M      util/common/NetMsgBase.h
M      util/common/NetMsgHandlerBase.h
M      util/common/MceNetCommHandler.cc
M      util/common/NetCmdBase.h
M      util/common/NetCommHandlerBase.cc
M      util/common/NetCommHandlerBase.h
M      util/common/AntNetCommHandler.cc
Add the necessary files
kstory@bicep1:common$ svn add NetCmdHandlerBase.cc MceNetMsgHandler.cc NetCmdBase.cc MceNetCmdHandler.h NetCmdHandlerBase.h MceNetCmdHandler.cc AntNetCmdHandler.cc AntNetCmdHandler.h MceNetMsgHandler.h
A         NetCmdHandlerBase.cc
A         MceNetMsgHandler.cc
A         NetCmdBase.cc
A         MceNetCmdHandler.h
A         NetCmdHandlerBase.h
A         MceNetCmdHandler.cc
A         AntNetCmdHandler.cc
A         AntNetCmdHandler.h
A         MceNetMsgHandler.h

Commit the files
kstory@bicep1:common$ svn commit
Sending        common/AntNetCmd.cc
Sending        common/AntNetCmd.h
Adding         common/AntNetCmdHandler.cc
Adding         common/AntNetCmdHandler.h
Sending        common/AntNetCommHandler.cc
Sending        common/AntNetCommHandler.h
Sending        common/AntNetMsg.h
Sending        common/AntNetMsgHandler.cc
Sending        common/AntNetMsgHandler.h
Sending        common/MceNetCmd.cc
Sending        common/MceNetCmd.h
Adding         common/MceNetCmdHandler.cc
Adding         common/MceNetCmdHandler.h
Sending        common/MceNetCommHandler.cc
Sending        common/MceNetCommHandler.h
Sending        common/MceNetMsg.h
Adding         common/MceNetMsgHandler.cc
Adding         common/MceNetMsgHandler.h
Adding         common/NetCmdBase.cc
Sending        common/NetCmdBase.h
Adding         common/NetCmdHandlerBase.cc
Adding         common/NetCmdHandlerBase.h
Sending        common/NetCommHandlerBase.cc
Sending        common/NetCommHandlerBase.h
Sending        common/NetMsgBase.h
Sending        common/NetMsgHandlerBase.cc
Sending        common/NetMsgHandlerBase.h
Transmitting file data ...........................
Committed revision 5.

Integrate Msg and Cmd changes into the Mediator

Need
Class MceControlMsg
Class util/bicep/MceNetCmdForwarder -> DONE
Class mediator/bicep/MceNetCmdForwarder -> DONE

Undo bad cvs commit:

kstory@bicep1:bicep$ cvs commit -m "Make compatible with a working Sync Box."
cvs commit: Examining .
cvs commit: Examining Test
kstory@bicep0.caltech.edu's password:
cvs server: /home/bicep0/cvsroot/CVSROOT/config: unrecognized keyword 'UseNewInfoFmtStrings'
? Test/tsync_driver.cc
? Test/tsync_driver
? Test/bbc_sync.h
? Test/.svn
? SyncBoard.h
? SyncBoard.cc
? Makefile.rules
? .svn
Checking in AntennaControl.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaControl.cc,v <-- AntennaControl.cc
new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
done
Checking in AntennaMaster.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaMaster.cc,v <-- AntennaMaster.cc
new revision: 1.1.2.3.2.4; previous revision: 1.1.2.3.2.3
done
Checking in AntennaMaster.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaMaster.h,v <-- AntennaMaster.h
new revision: 1.1.2.2.2.3; previous revision: 1.1.2.2.2.2
done
Checking in AntennaMonitor.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaMonitor.cc,v <-- AntennaMonitor.cc
new revision: 1.1.2.3.2.1; previous revision: 1.1.2.3
done
Checking in AntennaRx.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaRx.cc,v <-- AntennaRx.cc
new revision: 1.1.2.2.2.3; previous revision: 1.1.2.2.2.2
done
Checking in AntennaRx.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaRx.h,v <-- AntennaRx.h
new revision: 1.1.2.1.2.1; previous revision: 1.1.2.1
done
Checking in CommandTask.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/CommandTask.cc,v <-- CommandTask.cc
new revision: 1.1.2.13.2.4; previous revision: 1.1.2.13.2.3
done
Checking in CommandTask.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/CommandTask.h,v <-- CommandTask.h
new revision: 1.1.2.5.2.3; previous revision: 1.1.2.5.2.2
done
Checking in Data.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/Data.cc,v <-- Data.cc
new revision: 1.1.2.1.2.1; previous revision: 1.1.2.1
done
Checking in DataBase.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/DataBase.cc,v <-- DataBase.cc
new revision: 1.1.2.5.2.4; previous revision: 1.1.2.5.2.3
done
Checking in DataBase.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/DataBase.h,v <-- DataBase.h
new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
done
Checking in DataNew.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/DataNew.cc,v <-- DataNew.cc
new revision: 1.1.2.9.2.6; previous revision: 1.1.2.9.2.5
done
Checking in DataNew.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/DataNew.h,v <-- DataNew.h
new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
done
Checking in NetDataBoard.h;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/NetDataBoard.h,v <-- NetDataBoard.h
new revision: 1.1.2.1.2.1; previous revision: 1.1.2.1
done
Checking in bin_AntennaControl.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/bin_AntennaControl.cc,v <-- bin_AntennaControl.cc
new revision: 1.1.2.3; previous revision: 1.1.2.2
done


AntennaControl.cc
kstory@bicep1:bicep$ cvs update -j 1.1.2.2.2.1 -j 1.1.2.2 AntennaControl.cc
kstory@bicep0.caltech.edu's password:
cvs server: /home/bicep0/cvsroot/CVSROOT/config: unrecognized keyword 'UseNewInfoFmtStrings'
RCS file: /home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaControl.cc,v
retrieving revision 1.1.2.2.2.1
retrieving revision 1.1.2.2
Merging differences between 1.1.2.2.2.1 and 1.1.2.2 into AntennaControl.cc
kstory@bicep1:bicep$ cvs commit AntennaControl.cc
kstory@bicep0.caltech.edu's password:
cvs server: /home/bicep0/cvsroot/CVSROOT/config: unrecognized keyword 'UseNewInfoFmtStrings'
Checking in AntennaControl.cc;
/home/bicep0/cvsroot/gcp/antenna/control/bicep/Attic/AntennaControl.cc,v  <--  AntennaControl.cc
new revision: 1.1.2.2.2.2; previous revision: 1.1.2.2.2.1
done

AntennaMaster.cc
# cvs update -j 1.1.2.3.2.4 -j 1.1.2.3.2.3 AntennaMaster.cc
$ cvs commit AntennaMaster.cc
AntennaMaster.h
$ cvs update -j 1.1.2.2.2.3 -j 1.1.2.2.2.2 AntennaMaster.h
$ cvs commit AntennaMaster.h
AntennaMonitor.cc
$ cvs update -j 1.1.2.3.2.1 -j 1.1.2.3 AntennaMonitor.cc
$ cvs commit AntennaMonitor.cc
AntennaRx.cc
$ cvs update -j 1.1.2.2.2.3 -j 1.1.2.2.2.2 AntennaRx.cc
$ cvs commit AntennaRx.cc
AntennaRx.h
$ cvs update -j 1.1.2.1.2.1 -j 1.1.2.1 AntennaRx.h
$ cvs commit AntennaRx.h
CommandTask.cc
$ cvs update -j 1.1.2.13.2.4 -j 1.1.2.13.2.3 CommandTask.cc
$ cvs commit CommandTask.cc
CommandTask.h
$ cvs update -j 1.1.2.5.2.3 -j 1.1.2.5.2.2 CommandTask.h
$ cvs commit CommandTask.h
Data.cc
$ cvs update -j 1.1.2.1.2.1 -j 1.1.2.1 Data.cc
$ cvs commit Data.cc
DataBase.cc
$ cvs update -j 1.1.2.5.2.4 -j 1.1.2.5.2.3 DataBase.cc
$ cvs commit DataBase.cc
DataBase.h
$ cvs update -j 1.1.2.2.2.1 -j 1.1.2.2 DataBase.h
$ cvs commit DataBase.h
DataNew.cc
$ cvs update -j 1.1.2.9.2.6 -j 1.1.2.9.2.5 DataNew.cc
$ cvs commit DataNew.cc
DataNew.h
$ cvs update -j 1.1.2.2.2.1 -j 1.1.2.2 DataNew.h
$ cvs commit DataNew.h
NetDataBoard.h
$ cvs update -j 1.1.2.1.2.1 -j 1.1.2.1 NetDataBoard.h
$ cvs commit NetDataBoard.h
bin_AntennaControl.cc
$ cvs update -j 1.1.2.3 -j 1.1.2.2 bin_AntennaControl.cc
$ cvs commit bin_AntennaControl.cc

Check out My current gcp from svn

$ svn co file:///home/kstory/svnRepos/gcp

In NetCommHandler
add new packAntNetCmd, packMceNetCmd,
packAntNetMsg, packMceNetMsg, etc.


For Tomorrow:
Document changes in:
  - NetCommHandler
  - NetMsgHandler
  - NetCmdHandler
  - NetMsg
  - NetCmd
  - rtcnetcoms.h

2/6

svn commit Mediator layer work, revision 9.

$ kstory@bicep1:gcp$ svn commit
Sending        TAGS
Sending        antenna/control/bicep/AntennaControl.cc
Sending        antenna/control/bicep/AntennaMonitor.cc
Sending        control/code/unix/lib/libtkpanel.a
Sending        control/code/unix/libunix_src/bicep/rtcnetcoms.h
Sending        lib/libGcpAntennaControlSpecific.so
Sending        lib/libGcpGrabberCommon.so
Sending        masd/bicep/MasdControl.cc
Sending        masd/bicep/MasdControlMsg.h
Sending        masd/bicep/MasdMasterMsg.h
Sending        masd/bicep/MasdMonitor.cc
Sending        mediator/bicep/AntennaConsumerNormal.cc
Sending        mediator/bicep/AntennaConsumerNormal.h
Sending        mediator/bicep/AntennaControl.cc
Sending        mediator/bicep/AntennaControlMsg.h
Sending        mediator/bicep/Control.cc
Sending        mediator/bicep/ControlMsg.h
Sending        mediator/bicep/ControlNetCmdForwarder.cc
Sending        mediator/bicep/MceConsumer.cc
Sending        mediator/bicep/MceControl.cc
Adding         mediator/bicep/MceControlMsg.h
Sending        mediator/bicep/Scanner.h
Sending        mediator/bicep/TransNetCmdForwarder.cc
Sending        util/bicep/AntennaNetCmdForwarder.cc
Sending        util/bicep/ArrayNetCmdForwarder.cc
Sending        util/bicep/MceNetCmdForwarder.cc
Sending        util/common/AntNetCmdHandler.cc
Sending        util/common/MceNetCmdHandler.cc
Sending        util/common/NetCmdHandler.cc
Sending        util/common/NetCmdHandler.h
Sending        util/common/NetCommHandler.cc
Sending        util/common/NetCommHandler.h
Sending        util/common/NetMsg.h
Sending        util/common/NetMsgBase.h
Sending        util/common/NetMsgHandler.cc
Sending        util/common/NetMsgHandler.h
Transmitting file data ....................................
Committed revision 9.

Move all Comm Base activity to antenna/control/bicep/netcommBase/

Possible Msg Problems

List of possible message problems where we call a generic function where we need a Ant or Mce function:
  - NetCmdHandler::packNetCmd()
  - NetCmdHandler::sendNetCmd()
  - MsgType NET_INIT_CMD
  - NET_CMD
  - ID
  - INIT

"Final" Mediator Layer commit to svn

kstory@bicep1:gcp$ svn commit
Sending        TAGS
Sending        antenna/control/bicep/AntennaControlMsg.h
Sending        antenna/control/bicep/DataMsg.h
Sending        control/code/unix/libunix_src/bicep/rtcnetcoms.h
Sending        control/code/unix/libunix_src/bicep/specificregs.c
Sending        help/registers.html
Sending        lib/libGcpAntennaControlSpecific.so
Sending        lib/libGcpControlCommon.so
Sending        lib/libGcpGrabberCommon.so
Sending        lib/libGcpMediatorSpecific.so
Sending        lib/libGcpShareSpecific.so
Sending        lib/libGcpUtilCommon.so
Sending        lib/libGcpUtilSpecific.so
Sending        masd/bicep/DataMsg.h
Deleting       masd/bicep/MasdData.h
Sending        masd/bicep/MasdMasterMsg.h
Sending        masd/bicep/MasdTask.h
Sending        mediator/bicep/Control.cc
Sending        mediator/bicep/ControlMsg.h
Sending        mediator/bicep/MceControl.cc
Sending        mediator/bicep/MceControl.h
Sending        mediator/bicep/MceControlMsg.h
Sending        mediator/bicep/Scanner.h
Sending        mediator/bicep/TransNetCmdForwarder.cc
Sending        util/bicep/MceNetCmdForwarder.cc
Sending        util/bicep/MceNetCmdForwarder.h
Deleting       util/common/AntNetCmd.cc
Deleting       util/common/AntNetCmd.h
Deleting       util/common/AntNetCmdHandler.cc
Deleting       util/common/AntNetCmdHandler.h
Deleting       util/common/AntNetCommHandler.cc
Deleting       util/common/AntNetCommHandler.h
Deleting       util/common/AntNetMsg.h
Deleting       util/common/AntNetMsgHandler.cc
Deleting       util/common/AntNetMsgHandler.h
Deleting       util/common/MceNetCmd.cc
Deleting       util/common/MceNetCmd.h
Deleting       util/common/MceNetCmdHandler.cc
Deleting       util/common/MceNetCmdHandler.h
Deleting       util/common/MceNetCommHandler.cc
Deleting       util/common/MceNetCommHandler.h
Deleting       util/common/MceNetMsg.h
Deleting       util/common/MceNetMsgHandler.cc
Deleting       util/common/MceNetMsgHandler.h
Deleting       util/common/NetCmdBase.cc
Deleting       util/common/NetCmdBase.h
Sending        util/common/NetCmdHandler.cc
Sending        util/common/NetCmdHandler.h
Deleting       util/common/NetCmdHandlerBase.cc
Deleting       util/common/NetCmdHandlerBase.h
Deleting       util/common/NetCommHandlerBase.cc
Deleting       util/common/NetCommHandlerBase.h
Deleting       util/common/NetMsgBase.h
Sending        util/common/NetMsgHandler.cc
Deleting       util/common/NetMsgHandlerBase.cc
Deleting       util/common/NetMsgHandlerBase.h
Deleting       util/common/NetMsgHandler_2-2.cc
Deleting       util/common/NetMsgHandler_2-2.h
Transmitting file data ............................
Committed revision 10.

2/9

Try to run newly compiled program:

Error 1:

Antenna Layer:
FrameNumber = 916277962, iSamp = 48
bufferFrameNumber: Frame number = 916277962

FrameNumber = 916277963, iSamp = 49
bufferFrameNumber: Frame number = 916277963
*** writeFrameNumber: 916277963

Successfully connected
09-FEB-2009 19:20:07.500: In static void* gcp::util::Thread::startThread(void*): Caught an exception in thread:
  Data (1112443216)): In void gcp::util::AxisRange::setTo(gcp::util::CoordAxes*, gcp::util::CoordRange*): NULL argument(s)

This is from util/common/Thread::startThread()

Another Error 2:

*** writeFrameNumber: 916577477

In void gcp::antenna::control::AntennaControl::parseGreetingMsg(gcp::util::NetMsg*): Register map mismatch wrt host
.
09-FEB-2009 19:32:37.009: In static void* gcp::util::Thread::startThread(void*): Caught an exception in thread: AntennaControl (1100507472)):
  In void gcp::antenna::control::AntennaControl::parseGreetingMsg(gcp::util::NetMsg*): Register map mismatch wrt host
.
...
FrameNumber = 916577500, iSamp = 22
bufferFrameNSegmentation fault

Look into Error 2.

Error 2.1:

FrameNumber = 916875172, iSamp = 36
msg->body.msg.greeting.nReg     != parent_->getShare()->getNreg()
bufferFrameNumber: Frame number = 916875172

Idea: the "Data" thread is not initializing properly, and the error message is just taking some time to propagate through the system. Maybe?

In AntennaRx.cc, put back in dataport_
No difference.

Track Error 2.1 backwords.
Problem in antenna/AntennaControl::parseGreeting(NetMsg* msg)

The problem seems to be in how the register maps are defined.
SyncBox registers look the same in specificregs.c as they did in the workingSyncBox version.
I have added mce registers:

static RegBlockTemp bicepMce[] = RBT("mcdRunFileTest"), RBT("mceDataFileTest"), RBT("received")

static RegBoardTemp bicep_antenna_boards[] = {
  ...
  {"syncBox", bicepSyncBox, ARRAY_DIM(bicepSyncBox), {0x0},
    "Frame number from the Sync Box and BlastBus PCI card"},
}

static RegBoardTemp bicep_mce_board[] = {
  {"mceBoard", bicepMce, ARRAY_DIM(bicepMce), {0x0},
    "BICEP mce receiver"},
}

Error 3:

...
In void gcp::antenna::control::AntennaMonitor::parseGreetingMsg(gcp::util::NetMsg*): Register map mismatch wrt host

*** writeFrameNumber: 918123544

Error is from antenna/AntennaMonitor::parseGreetingMsg()

Mediator Layer Errors

Error 1: on initizlization

09-FEB-2009 20:35:56.000: In virtual void gcp::util::ArrayNetCmdForwarder::forwardNetCmd(gcp::util::NetCmd*): Unknown command: 28received from control program.
09-FEB-2009 20:35:56.232: In virtual void gcp::util::ArrayNetCmdForwarder::forwardNetCmd(gcp::util::NetCmd*): Unknown command: 28received from control program.

This means that in util/bicep/ArrayNetCmdForwarder::ForwardNetCmd(NetCmd), the type was not recognized.

NetCmdId defined as an enum in gcp/control/code/unix/libunix_src/specific/rtcnetcoms.h
I bet it was a "NET_INIT_CMD".

to ArrayNetCmdForwarder::ForwardNetCmd()
add case NET_INIT_CMD

2/10

Mediator Layer Errors (cont)

Related Error 1: on initilization

10-FEB-2009 19:44:37.000: In virtual void gcp::mediator::ControlNetCmdForwarder::forwardNetCmd(gcp::util::NetCmd*): Unrecognized message: id = 28

Add case NET_INIT_CMD to ControlNetCmdForwarder.cc

No more error. Keep thinking about this.

NET_INIT_CMD

Everywhere were NET_INIT_CMD is used:

Everywhere were NET_INIT_ANT_CMD is used:

Leave this for now.

Where packNetCmd() is used: Defined:

Check in current version into svn

kstory@bicep1:gcp$ svn commit -m "Fixed NET_INIT_CMD problems"
Sending        TAGS
Sending        antenna/control/bicep/AntennaControl.cc
Sending        antenna/control/bicep/AntennaMonitor.cc
Sending        antenna/control/bicep/DataBase.cc
Sending        antenna/control/bicep/DataNew.cc
Sending        control/code/unix/libunix_src/bicep/specificregs.c
Sending        help/registers.html
Sending        lib/libGcpAntennaControlSpecific.so
Sending        lib/libGcpMediatorSpecific.so
Sending        lib/libGcpShareSpecific.so
Sending        lib/libGcpUtilSpecific.so
Adding         masd/bicep/CommandMsg.h
Sending        mediator/bicep/ControlNetCmdForwarder.cc
Sending        mediator/bicep/TransNetCmdForwarder.cc
Sending        util/bicep/AntennaNetCmdForwarder.cc
Sending        util/bicep/ArrayNetCmdForwarder.cc
Sending        util/common/NetCmdHandler.cc
Transmitting file data .................
Committed revision 11.

Walt's masutils

$ cvs -d kstory@bicep0.caltech.edu:/home/cvsroot co masutils

MASD layer

Look over old functions:
  - MasdMaster.h, .cc
  - BicepShare.h, .cc
  - CommandMsg.h
  - CommandTask.h, .cc
  - BicepTask.h, .cc
  - Board.h, .cc
  - FrameBoard.h, .cc

  - MasdControl.h, .cc
  - MasdMonitor.h, .cc

2/11

RtcNetCmd: change NetMask receiver

Where does changing the NetMask in RtcNetCmd struct effect anything?

Get rid of NetCmdHandler::packMceNetCmd, readMceNetCmd

RtcNetMsg: change NetUint receiver

Where does changing the NetUint in RtcNetMsg struct effect anything?

NewNetMsg: change unsigned int receiver

Where does changint the unsigned int field effect anything? Look for the changes. Done.

Need util/common/MceFrameBuffer.h, .cc

svn commit revision 12

kstory@bicep1:gcp$ svn commit -m "change RtcNetMsg to receiver, add masd Scanner"
Sending        TAGS
Sending        antenna/control/bicep/AntennaControl.cc
Sending        antenna/control/bicep/AntennaMonitor.cc
Sending        antenna/control/bicep/BicepShare.cc
Sending        control/code/unix/control_src/common/genericcontrol.c
Sending        control/code/unix/control_src/common/genericscheduler.c
Sending        control/code/unix/control_src/common/genericscript.c
Sending        control/code/unix/control_src/common/navigator.c
Sending        control/code/unix/libunix_src/bicep/rtcnetcoms.h
Sending        control/code/unix/libunix_src/bicep/specificregs.c
Sending        help/registers.html
Sending        lib/libGcpAntennaControlSpecific.so
Sending        lib/libGcpControlCommon.so
Sending        lib/libGcpGrabberCommon.so
Sending        lib/libGcpMediatorSpecific.so
Sending        lib/libGcpShareSpecific.so
Sending        lib/libGcpUtilCommon.so
Sending        masd/bicep/BicepShare.cc
Sending        masd/bicep/BicepShare.h
Adding         masd/bicep/BicepTask.cc
Sending        masd/bicep/CommandMsg.h
Adding         masd/bicep/CommandTask.cc
Adding         masd/bicep/CommandTask.h
Sending        masd/bicep/Data.cc
Sending        masd/bicep/Data.h
Sending        masd/bicep/DataBase.cc
Sending        masd/bicep/DataBase.h
Sending        masd/bicep/FrameBoard.cc
Sending        masd/bicep/FrameBoard.h
Sending        masd/bicep/MasdControl.cc
Sending        masd/bicep/MasdControl.h
Sending        masd/bicep/MasdMaster.cc
Sending        masd/bicep/MasdMaster.h
Sending        masd/bicep/MasdMonitor.cc
Sending        masd/bicep/MasdMonitor.h
Sending        masd/bicep/MceRx.cc
Sending        masd/bicep/MceRx.h
Adding         masd/bicep/Scanner.cc
Adding         masd/bicep/Scanner.h
Sending        mediator/bicep/AntennaConsumerNormal.cc
Sending        mediator/bicep/AntennaControl.cc
Sending        mediator/bicep/AntennaControlMsg.h
Sending        mediator/bicep/MceConsumer.cc
Sending        mediator/bicep/MceControl.cc
Sending        mediator/bicep/MceControlMsg.h
Sending        mediator/bicep/StripNetCmdForwarder.cc
Adding         util/common/MceFrameBuffer.cc
Adding         util/common/MceFrameBuffer.h
Sending        util/common/NetCmd.cc
Sending        util/common/NetCmdHandler.cc
Sending        util/common/NetCmdHandler.h
Sending        util/common/NetCommHandler.cc
Sending        util/common/NetCommHandler.h
Sending        util/common/NetMsg.h
Sending        util/common/NetMsgHandler.cc
Sending        util/common/NetMsgHandler.h
Sending        util/common/NewRtcNetMsg.cc
Sending        util/common/NewRtcNetMsg.h
Transmitting file data ..........................................................
Committed revision 12.

Mce Data system (MceRx thread)

No DataNew!
We already have DataBase and Data.

DataBase --> Data
  -> NetDataBoard
  -> NetDataParse

How is NetDataBoard used?
DataBase:
  - mce_->read_mce_sample(iSamp, dataBoard_)
DataNew:
  - dataBoard_->read()

Keep working through NetDataBoard

2/12

Registers in Antenna layer

FrameBoard: registers with info about the Frame. ??
  - RegMapBlock* nsnap_, record_, utc_, lst_, features_, markSeq_, walshstate_
NetDataBoard: temp structs for reading out data from the "boxes"
  - DataSystemBox* box
  - < BoxData > data_
NetDataParse: data registers
  - float* cosine, sine, ... tempreature_log,... irCurr
  - RegMapBlock* received_, cosine_,... irCurr_
Scanner:
  - struct Features
  - struct WalshState
  - FrameBoard* fb_
DataBase:
  - NetDataBoard* data_
  - NetDataParse* mce_

Registers in Masd layer

NetDataBoard:
  - struct RunFile
  - struct DataFile
  - struct MceData
NetDataParse:
  - float* mceRunFileTest, mceDataFileTest
  - uint* slowFrameTest
  - RegMapBlock* mceRunFileTest_ mceDataFileTest_, slowFrameTest_
DataBase:
  - NetDataBoard* dataBoard_
  - NetDataParse* mce_
Scanner: Does not deal with writing registers
  - MceFrameBuffer fb_

Pack a data frame in Masd

- Data::incrementSampleCount()
    calls MceRx->sendPackDataFrameMsg()
  - MceRx::sendPackDataFrameMsg()
    calls MasdMaster->sendPackDataFrameMsg()
  - MasdMaster::sendPackDataFrameMsg()
    pack MasdMasterMsg.getMonitorMsg()
      MasdMonitorMsg->packPackDataFrameMsg()
      MasdMonitorMsg::packPackDataFrameMsg()
        type = PACK_DATAFRAME
    forwardMonitorMsg(&masterMsg)
  - MasdMonitor::processMsg()
    calls packNextFrame()
  - MasdMonitor::packNextFrame()
    calls scanner_->packNextFrame()
    sendDispatchDataFrameMsg()
  - Scanner::packNextFrame()
    calls share_-> packFrame( fb_->getNextFrame() )
  - FrameBuffer::getNextFrame()
    returns DataFrameManager* fb_->getNextSlot()->frame_
  - BicepShare::packFrame(DataFrameManager* frame)
    *frame = *this (MceDataFrameManager)

  - MasdMonitor::sendDispatchDataFrameMsg()
    MasdMonitorMsg::packDispatchDataFrameMsg()
    sendTaskMsg(&msg)
  - MasdMonitorMsg::packDispatchDataFrameMsg()
    type = DISPATCH_DATAFRAME
  - MasdMonitor::processMsg()
    calls dispatchNextFrame()

  - MasdMonitor::dispatchNextFrame()
    DataFrameManager* frame = scanner_-> dispatchNextFrame()
    call packFrame(frame->frame())
    fdSet_.registerWriteFd(client_.getFd())
    note: in connect(), netMsgHandler_.attach(client_.getFd());
  - Scanner::dispatchNextFrame()
    return fb_.dispatchNextFrame()
  - FrameBuffer::dispatchNextFrame()
    returns a pointer to the next slot to be dispatched

  - MasdMonitor::packFrame()
    use NetSendStr to pack message into buffer
  - MasdMonitor::serviceMsgQ() called from link established in parseGreetingMsg()
    fdSet_.isSetInWrite(netDataFramehandler_.getSendFd()))
    netDataFrameHandler_.send();
  - NetHandler::send()
    return nss_->send()
  - NetSendStr::send()
    return privateSend(-1)
  - NetSendStr::privateSend(fd)
    nss_send_msg(netStream_)
    sendHandler_(sendArg_)
  - NetSendStr::nss_send_msg(netStream_)
    send the message. Defined in netbuf.h

  - NET_SEND_HANDLER(MasdMonitor::netDataFrameSentHandler)
    monitor->dispatchPending_ = false;
    monitor->fdSet_.clearFromWriteFdSet(monitor->netDataFrameHandler_.getSendFd());
    if(monitor->scanner_->getNframesInQueue() > 1)
      monitor->sendDispatchDataFrameMsg();


Places where client_ appears in MasdMonitor.cc:
TcpClient client_;
  - dispatchNextFrame()
    fdSet_.registerWriteFd(client_.getFd());
  - connectScanner()
    if(client_.isConnected())
      return;
  - connect()
    client_.connectToServer(...)
    client_.setBlocking(false)
    netMsgHandler_.attach(client_.getFd());
    fdSet_.registerReadFd(client_.getFd());
  - disconnect()
    client_.disconnect()

Places where netMsgHandler_ appears in MasdMonitor.cc
NetMsgHandler netMsgHandler_
  - serviceMsgQ()
    if(fdSet_.isSetInWrite(netMsgHandler_.getSendFd()))
      netMsgHandler_.send();
  - connect()
    netMsgHandler_.attach(client_.getFd());
    netMsgHandler_.installSendHandler(netMsgSentHandler, this);
    netMsgHandler_.installReadHandler(netMsgReadHandler, this);
    netMsgHandler_.installErrorHandler(netErrorHandler, this);
  - sendIdMsg()
    netMsgHandler_.packIdMsg(parent_->getMce()->getIntId());
    fdSet_.registerWriteFd(netMsgHandler_.getSendFd());
  - NET_READ_HANDLER(MasdMonitor::netMsgReadHandler)
    NetMsgHandler* handler = &monitor->netMsgHandler_;
    NetMsg* msg = handler->getLastReadNetMsg();
    switch(msg->type) {
    case NetMsg::GREETING:
      monitor->parseGreetingMsg(msg);
      break;
  - NET_SEND_HANDLER(MasdMonitor::netMsgSentHandler)
    NetMsgHandler* handler = &monitor->netMsgHandler_;
    monitor->fdSet_.clearFromWriteFdSet(handler->getSendFd());
      handler->attachSendStream(-1);
  - disconnect()
    netMsgHandler_.attach(-1);
  - parseGreeting()
    netDataFrameHandler_.attachSendStream(netMsgHandler_.getReadFd());
    fdSet_.clearFromReadFdSet(netMsgHandler_.getReadFd());
    netMsgHandler_.attachReadStream(-1);

Places where netDataFrameHandler_ appears in MasdMonitor.cc
NetHandler netDataFrameHandler_
  - serviceMsgQ()
    if(fdSet_.isSetInWrite(netDataFrameHandler_.getSendFd()))
      netDataFrameHandler_.send();
  - NET_SEND_HANDLER(MasdMonitor::netDataFrameSentHandler)
    monitor->fdSet_.clearFromWriteFdSet(monitor->netDataFrameHandler_.getSendFd());
  - disconnect()
    netDataFrameHandler_.attach(-1);
  - packFrame()
    NetSendStr* nss = netDataFrameHandler_.getSendStr();
  - parseGreetingMsg()
    netDataFrameHandler_.attachSendStream(netMsgHandler_.getReadFd());
    netDataFrameHandler_.installSendHandler(netDataFrameSentHandler, this);
    netDataFrameHandler_.installSendErrorHandler(netErrorHandler, this);


2/13

Emacs iswitchb-mode

M-x iswitchb-mode

C++ highlighting
(setq auto-mode-alist (cons '("\\.h$" . c++-mode) auto-mode-alist))

Makefile for MASD

gcp/Makefile

L96:
GCPLIBS += $(LIBDIR)/libGcpMasdSpecific.so

L169:
MAKE_OBJS = antenna/control antenna/canbus canbus grabber mediator masd \
        program util

L235:
LINK_OBJS = directives help control/conf control/code/unix/control_src \
        control/code/unix/libunix_src grabber masd mediator util scripts \
        antenna/control scripts

L299:
TAGSOBJ += $(TOP)/masd/specific/*.cc

gcp/masd/bicep/Makefile*** gcp/masd/bicep/Makefile.rules

Is this really necessary?

MasdControl -> AntennaControl
MasdMaster -> AnetnnaMaster
MceRx -> AntennaRx
MasdNetCmdForwarder -> AntNetCmdForwarder
BicepShare -> BicepShare
BicepTask -> BicepTask
bin_MasdControl -> bin_AntennaControl
Board -> Board
CommandTask -> CommandTask
DataBase -> DataBase
Data -> DataNew, Data
FrameBoard -> FrameBoard
NetDataBoard -> NetDataBoard
NetDataParse -> NetDataParse
Scanner -> Scanner


Try to compile.
Heehe..he...ahhhhh!!!

Look into TimeOut stuff in Data::serviceMsgQ()
READFILE_SIZE = 50 in devicemap.h What shoudl it be?
Where should the pipe_mas_ be?
Think about timers in MasdMaster
Think about timers in AntennaMaster

2/16

How we connect the Antenna to the Mediator

See 12/12

Antenna Layer
_bin_AntennaControl.cc_
  AntennaMaster master(...)
AntennaMaster::AntennaMaster(...)
  new Thread(&startAntennaMonitor ...)
  startThreads(...)
AntennaMonitor::AntennaMonitor(master)
  scanner_ = new Scanner(...) // some local initializations
  connectScanner(true)
AntennaMonitor::connectScanner(bool)
  if( connect() )
    sendScannerConnectedMsg(true)
AntennaMonitor::connect()
  client_.connectToServer( parent_->host(), TRANS_ANT_SCANNER_PORT, true)
  NetMsgHandler_.install[Send, Read, Error]Handler(..., this)
  connectionPending_ = true
  fdSet_.registerReadFd(client_.getFd())
  sendAntennaIdMsg()
TcpClient::connectToServer(...)
  fd_ = tcp_connect(host, port, doWait)

AntennaMonitor::sendAntennaIdMsg()
  netMsgHandler_.packAntennaIdMsg(...)
  fdSet_.registerWriteFd(netMsgHandler_.getSendFd())
NetMsgHandler::packAntennaIdMsg()
  NetMsg::packAntennaIdMsg()
  packNetMsg(&netMsg) // pack msg into buffer
NetMsg::packAntennaIdMsg()
  type = ID
  body.antenna = id

AntennaMonitor::serviceMsgQ()
  if( fdSet_.isSetInWrite( netMsgHandler_.getSendFd() ) )
    netMsgHandler_.send()
NetMsgHandler::send() // NetHandler::send() // nss_->send()



Mediator Layer
AntennaConsumerNormal::serviceMsgQ()
  if( fdSet_.isSetInRead( listener_->getFd()))
    itializeConnection()

Fix NET_INIT_CMD stuff

  • control/code/unix/libunix_src/specific/rtcnetcoms.h
  • control/code/unix/control_src/common/genericcontrol.c
  • control/code/unix/control_src/common/NewNetCmd.h
  • control/code/unix/control_src/common/genericscheduler.c
  • mediator/bicep/ControlNetCmdForwarder.cc Now only have one case for NET_INIT_CMD
  • mediator/bicep/ControlMsg.h change back to packInitMsg(bool start)
  • mediator/bicep/Control.cc change back to one case ControlMsg::INIT
  • mediator/bicep/AntennaControlMsg.h change back to packInitMsg(bool start)
  • mediator/bicep/AntennaControl.cc processMsg case AntennaControlMsg::INIT
  • mediator/TransNetCmdForwarder.cc forwardNetCmd(NetCmd) case NET_INIT_CMD
  • util/bicep/AntennaNetCmdForwarder.cc removed case NET_INIT_ANT_CMD
  • util/bicep/MceNetCmdForwarder removed case NET_INIT_MCE_CMD
  • util/bicep/ArrayNetCmdForwarder.cc remove case NET_INIT_ANT_CMD, NET_INIT_MCE_CMD
  • util/common/NetCmdHandler.cc remove print statement for NET_INIT_ANT_CMD

MASD compiles now. I'm scared.

svn commit revision 14: MASD compiles

kstory@bicep1:gcp$ svn commit -m "MASD compiles.  Fixed NET_INIT_CMD"
Sending        TAGS
Sending        control/code/unix/control_src/common/genericcontrol.c
Sending        control/code/unix/libunix_src/bicep/rtcnetcoms.h
Sending        lib/libGcpMediatorSpecific.so
Sending        lib/libGcpUtilCommon.so
Sending        lib/libGcpUtilSpecific.so
Sending        mediator/bicep/AntennaControl.cc
Sending        mediator/bicep/AntennaControlMsg.h
Sending        mediator/bicep/Control.cc
Sending        mediator/bicep/Control.h
Sending        mediator/bicep/ControlMsg.h
Sending        mediator/bicep/ControlNetCmdForwarder.cc
Sending        mediator/bicep/MceControl.cc
Sending        mediator/bicep/MceControlMsg.h
Sending        mediator/bicep/TransNetCmdForwarder.cc
Sending        util/bicep/AntennaNetCmdForwarder.cc
Sending        util/bicep/ArrayNetCmdForwarder.cc
Sending        util/bicep/MceNetCmdForwarder.cc
Sending        util/common/NetCmdHandler.cc
Transmitting file data ...................
Committed revision 14.

2/17

Debug and DBPRINT statements

Allow DBPRINT statements.

DBPRINT() function is defined inside of a

DIR_DEBUG

DBPRINT()...

statement. This is defined in
gcp/util/Directives.h:


DIR_DEBUG (COMPILE_WITH_DEBUG)


In gcp/directives/common
Makefile.directives
COMPILE_WITH_DEBUG = 1

Makefile.directives.last
COMPILE_WITH_DEBUG = 1

Makefile.directives.template
COMPILE_WITH_DEBUG = 0

Makefile.flags
Don't touch!

Masd connecting to the Mediator Layer

It works!!!

2/18

versioned item obstructed by some item of a different kind
http://oreilly.com/pub/a/mac/2004/08/10/subversion.html?page=last

svn commit revision 16: Masd runs! No masutils yet.

kstory@bicep1:gcp$ svn commit -m "Working version before integrating masutils."
Sending        TAGS
Sending        antenna/control/bicep/Makefile.rules
Sending        bin/bicepAntennaControl
Sending        bin/bicepGrabber
Sending        bin/bicepMediator
Sending        control/code/unix/control_src/bicep/specificscript.c
Sending        control/code/unix/control_src/common/Makefile.rules
Sending        control/code/unix/lib/libtkpanel.a
Sending        control/code/unix/lib/libtkpanel.so
Sending        control/code/unix/libmonitor_src/Makefile.rules
Sending        control/code/unix/libunix_src/bicep/Makefile.rules
Sending        control/code/unix/libunix_src/common/Makefile.rules
Sending        control/code/unix/viewer_src/Makefile.rules
Sending        directives/common/Makefile.directives
Sending        directives/common/Makefile.directives.last
Sending        grabber/common/Makefile.rules
Sending        help/registers.html
Sending        lib/libGcpAntennaControlSpecific.so
Sending        lib/libGcpControlCommon.so
Sending        lib/libGcpControlSpecific.so
Sending        lib/libGcpGrabberCommon.so
Adding  (bin)  lib/libGcpMasdSpecific.so
Sending        lib/libGcpMediatorSpecific.so
Sending        lib/libGcpMonitor.so
Sending        lib/libGcpProgramCommon.so
Sending        lib/libGcpQuadSrc.so
Sending        lib/libGcpScan.so
Sending        lib/libGcpScript.so
Sending        lib/libGcpShareCommon.so
Sending        lib/libGcpShareSpecific.so
Sending        lib/libGcpSla.so
Sending        lib/libGcpSrc.so
Sending        lib/libGcpTclControl.so
Sending        lib/libGcpTransaction.so
Sending        lib/libGcpUtilCommon.so
Sending        lib/libGcpUtilSpecific.so
Sending        masd/bicep/CommandTask.cc
Sending        masd/bicep/CommandTask.h
Sending        masd/bicep/Data.cc
Sending        masd/bicep/DataBase.cc
Sending        masd/bicep/DataBase.h
Sending        masd/bicep/MasdMaster.cc
Sending        masd/bicep/MasdMaster.h
Sending        masd/bicep/MceRx.cc
Sending        masd/bicep/NetDataBoard.cc
Sending        masd/bicep/NetDataBoard.h
Sending        masd/bicep/NetDataParse.cc
Sending        masd/bicep/NetDataParse.h
Adding         masd/bicep/bin_MasdControl.cc
Sending        mediator/bicep/Makefile.rules
Sending        mediator/bicep/MceConsumer.cc
Deleting       misc/scripts/bicep/20090119_210446.dat
Deleting       misc/scripts/bicep/20090119_211647.dat
Deleting       misc/scripts/bicep/20090119_225307.dat
Deleting       misc/scripts/bicep/20090119_232055.dat
Deleting       misc/scripts/bicep/20090119_235924.dat
Deleting       misc/scripts/bicep/20090120_000341.dat
Deleting       misc/scripts/bicep/20090120_000423.dat
Deleting       misc/scripts/bicep/20090120_001008.dat
Deleting       misc/scripts/bicep/20090120_001030.dat
Deleting       misc/scripts/bicep/20090121_202656.dat
Deleting       misc/scripts/bicep/20090121_204145.dat
Deleting       misc/scripts/bicep/20090121_204339.dat
Deleting       misc/scripts/bicep/20090121_204519.dat
Deleting       misc/scripts/bicep/20090123_162045.dat
Deleting       misc/scripts/bicep/20090123_175820.dat
Deleting       misc/scripts/bicep/20090124_202422.dat
Deleting       misc/scripts/bicep/20090126_164118.dat
Deleting       misc/scripts/bicep/20090126_170738.dat
Deleting       misc/scripts/bicep/20090126_221230.dat
Deleting       misc/scripts/bicep/20090126_235452.dat
Deleting       misc/scripts/bicep/20090127_185918.dat
Deleting       misc/scripts/bicep/20090127_203449.dat
Deleting       misc/scripts/bicep/20090127_213722.dat
Deleting       misc/scripts/bicep/20090127_214829.dat
Deleting       misc/scripts/bicep/20090129_194544.dat
Deleting       misc/scripts/bicep/20090129_194840.dat
Deleting       misc/scripts/bicep/20090131_195709.dat
Deleting       misc/scripts/bicep/20090131_201724.dat
Sending        misc/scripts/bicep/myclose
Sending        misc/scripts/bicep/mysimpleStartup
Sending        misc/scripts/bicep/startXterms
Sending        util/bicep/Makefile.rules
Sending        util/common/Makefile.rules
Transmitting file data ........................................................
Committed revision 16.

Check out Walt's masutils from bicep0

$ cvs -d kstory@bicep0.caltech.edu:/home/cvsroot co masutils
Compile:
kstory@spudws2:masutils> pwd
/home/kstory/work/syncBox/masutils
$ make
mas2dir.c:7:21: error: dirfile.h: No such file or directory
Get dirfile.h
kstory@spudws2:masutils> scp kstory@bicep0.caltech.edu:/export/raid/bicep0/pole_backups_200812/bicep1/usr/local/dirfile-0.87/src/dirfile/dirfile.h .
$  mv dirfile.h src/mas2dir/.

Compile:

Run:

2/19

Walt's Masutils: first look

Register Map File Format
Defined in masutils/regmap/bicep2_regmap.txt

Register lines:
  SOURCE REGISTER_NAME DATA_TYPE LENGTH

Sections:
SQUID
RegBlock bicepSquid[]

HEADER
RegBlock bicepPsc[]
RegBlock bicepCc[]
RegBlock bicepRc[]
RegBlock bicepBc[]
RegBlock bicepAc[]
RegBlock bicepSys[]
RegBlock bicepSq1[]
RegBlock bicepSq2[]
RegBlock bicepSa[]

FRAMEACQ
RegBlock bicepFrameAcq[]

DATA
RegBlock bicepData[]

All inside mce board:
RegBoardTemp bicep_mce_board[] = {
  - bicepPsc
  - bicepCC
  - bicepRC
  - bicepBC
  - bicepAC
  - bicepSYS
  - bicepSq1
  - bicepSq2
  - bicepSA
  - bicepFrameAcq
  - bicepData

mas daemon.c
struct mas_daemon {
  - int runfile_fd, data_dummy_fd, runfile_dummy_fd
  - mas_datafile data_reader
  - FILE* runfile_stream
  - fd_set rdfds, last_fds
  - int nfds
  - flat_regs* reg // in regmap.h, typedef char flat_regs
  - unit32_t regs_size
  - struct timeval timeout, last_wait
  - struct data_addrs da
  - uint32_t* dbuf
  - int dbuf_len
  - int spf
  - struct mode_key key
  - int on_sample
}

main()
{
  struct mas_daemon dd;
  int r;
  FILE* frames_out;

  init_mas_daemon(&dd);
  frames_out = fopen("slow_frames", "wb");

  while(1) {
    r = dd_select(&dd);
    r = dd_handle_runfile(&dd);
    if(r != 0)
      break
    r = dd_handle_data( &dd)
    if(r!=0) errors
      break
    if( dd.on_sample >= dd.spf )
      fwrite(dd.reg, dd.regs_size, 1, frames_out)
      dd.on_sample = 0
  }
  close_mas_daemon(&dd)
  fclose(frames_out)
  return 0
}

init mas daemon(struct mas daemon* dd)
  dd->data_dummy_fd = opn_dummy_writer("mas_data")
  ... see paper notebook


masutils/src/lib/datafile:
load_data.h, c
  struct mas_datafile
  functions for dealing with mas_datafile
Put all of this in DataFileHandler

data_mode.h, c
  struct mode_def
  struct mode_key
  UNPACK_DOUBLE_1(...)
  PACK_INT_1(...)
  int get_unpack_key(...)
  int get_pack_key(...)
  void pack_all(...)

endian.h
  int check_endianness()
  void swap_4(...)
  void swap_2(...)

2/20

Working on putting Registers into DataFileHandler.h

2/23

Even windows in emacs:
Ctr-x +

Make clean "stub" version for Walt to work from.

2/24

Make clean "stub" version for Walt to add masutils

Export:
$ svn export file:///home/kstory/svnRepos/gcp/ newGcp/

Description of MASD classes

Doxygen for a previous version of gcp: MASD is not complete in this, but most other things should be.
http://find.uchicago.edu/~kstory/doxygen/html/

Data class

Derrived class of DataBase.
Data is a thread of MceRx.
Fields:
  - TimeVal timeOut_
  - unsigned fastTimeOutMilliSeconds_
  - unsigned slowTimeOutSeconds_
  - FdSet fdSet_
  - ofstream* fout_

Methods:
  - serviceMsgQ() // This is the method with the loop over select()
  - incrementSampleCount() // This gets called when the data pipe is ready to be read, or we time out.
    It buffers data into the NetDataParse object, and starts the Frame Packing process.

DataBase class

Fields:
  - MceRx* parent_ // The parent thread of this (Data) thread
  - NetDataBoard* dataBoard_ // Deals with reading out data (from UDP originally)
  - NetDataParse* mce_ // Object that parses what NetDataBoard read into arrays and registers

Methods:
  - bufferRunFile() // Call NetDataParse::parse_runFile()
  - bufferDataFile() // Call NetDataParse::parse_dataFile()
  - writeMceData() // Call NetDataParse::pack_mce_frame()

NetDataBoard class

This class deals with reading data from an external source (UDP socket in BICEP1).

Fields:
  - const char* pipe_runFile_
  - const char* pipe_dataFile_
  - const char* pipe_command_
  - bool simData_

// These structs were analogous to what was used to read out of the UDP socket, and are probably not needed any more.
  - struct RunFile
  - struct DataFile
  - struct MceData

  - FdSet fdSet_ // I'm not sure what this is used for
  - fd_set read_set_
  - fd_set write_set_

// RunFile Pipe variables
  - char* runMsg_
  - size_t runFileSize_
  - int funFile_fd_

// DataFile Pipe variables
  - char* dataMsg_
  - size_t dataFileSize_
  - int dataFile_fd_

// Command Pipe variables
  - char* commandMsg_
  - int command_fd_

Methods:
  - initRunFileReadPipe( )
  - int readRunFile()
  - initDataFileReadPipe( )
  - readData()
  - initCommandPipe()
  - writeCommand()

NetDataParse class

This class parses what the NetDataBoard reads into arrays and finally the register.
Derrived class of type Board
Board provides the findReg(...) function
Fields:
  - float* mceRunFileTest;
  - float* mceDataFileTest;
  - unsigned int* slowFrameTest;
  - RegMapBlock* mceRunFileTest_
  - RegMapBlock* mceDataFileTest_
  - RegMapBlock* slowFrameTest_

Methods:
  - init_mce_registers() // sets size of arrays, and calls findReg(...)
  - parse_runFile(NetDataBoard) // This is a stub
  - parse_dataFile(unsigned, NetDataBoard) // This is a stub

BicepShare class

This class deals with creating registers.
Derrived class of gcp::util::MceDataFrameManager

Classes:
  - BicepRegDb // This class handles talking to the register data base
  - BicepClock // I probably don't need this here anymore
  -

Fields:
  - unsigned* tmpbuf_
  - string controlHosg_
  - BicepRegDb* regdb_
  - BicepClock* clock_

Methods:
  - grabRegs()
  - ungrabRegs()
  - flagBoard()
  - unflagBoard()
  - verifyBoard()
  - // clock stuff, probably don't need this
  - RegMapBoard* findRegMapBoard(string boardName)
  - unsigned int getNboard()
  - unsigned int getNarchived()
  - unsigned int getNreg()
  - unsigned int getNbyte()
  - void packFrame(gcp::util::DataFrameManager* )


DataFrameManager inheritance

DataFrameManager Doxygen page

DataFrameManager (gcp/util/common/DataFramemanager)

Deals with packing data frames
Main base class.
It has two classes derrived from it:
  - RegMapDataFrameManager
  - ArrayMapDataFrameManager

Fields:
  - DataFrame* frame_

Methods:
  - pack()
  - unpack()
  - fillBuffer()

RegMapDataFrameManager (gcp/util/common/RegMapDataFrameManager)

Derrived class of DataFrameManager
It has four classes derrived from it:
  - AntennaDataFrameManager
  - ArrayRegMapDataFraemManager
  - BoardDataFramemanager
  - MceDataFrameManager

Fields:
  - ArrayMap* arrayMap_
  - Regmap* regMap_

Methods:
  - writeBoard(), writeReg(), writeRegNoLock()
  - readReg(), readRegNoLock()
  - findReg(), findRegmapBoard(), getReg()
  - getTYPEptr(), TYPE = Char, Uchar, Short, Ushort, Uint, Int, Float, Double, Date
  - packData()

MceDataFrameManager (gcp/util/common/MceDataFrameManager.cc)

Derrived class of RegMapDataFrameManager

Fields:
  - MceDataFrame* mceFrame_

AntennaDataFrameManager (gcp/util/common/AntennaDataFrameManager.cc)

Derrived class of RegMapDataFrameManager

Fields:
  - AntDataFrame* antFrame_

ArrayMapDataFrameManager (gcp/util/common/ArrayMapDataFrameManager)

Derrived class of DataFrameManager
Fields:
  -ArrayMap* arrayMap_

Methods:
  - writeRegMap(0, writeReg()
  - readRegMap(), readReg()
  - packData(), unpackData()
  - getReg(), findReg()

ArrayDataFrameManager (gcp/util/common/ArrayDataFrameManager)

Derrived class of ArrayMapDataFrameManager
This is basically a wrapper class for ArrayMapDataFrameManager.
Methods:
  - writeAntennaRegMap()
  - writeMceRegMap()
  - ArrRegMap* findAntennaRegMap(AntennaDataFramemanager& fm)
  - ArrRegmap* findMceRegMap(MceDataFrameManager& fm)


NetMceDataFrameHandler (gcp/util/common/NetMceDataFrameHandler.cc)

Derrived class of NetHandler
Handles sending and receiving MceDataFrame's
Fields:
  - MceDataFramemanager frame_

MceDataFrame (gcp/util/common/MceDataFrame.cc)

Derrived class of DataFrameNormal : DataFrame
Fields:
  - MceNum mceNum_

MceNum (gcp/util/common/MceNum.cc)

Iterator for Mce's. BICEP2 will only have one mce (mce0).
Fields:
  - enum Id id_

MceFrameBuffer (gcp/util/common/MceFrameBuffer.cc)

Derrived class of FrameBuffer

For tonight:

  • Understand mediator/Scanner thread.
  • Understand how Mediator Layer packs Frames.

Doxygen for current gcp

Edit Doxygen.cfg file as documented in referenceNotes.muse

Run:

$ doxygen Doxygen.cfg
$ tar -cvf doxyhtml.tar html
$ sftp to find
$ unpack in public_html

2/25

Check out fresh revision 16

$ svn checkout file:///home/kstory/svnRepos/gcp/ gcp

Re-do Doxygen.cfg and re-run. See projects page for details.

Understand frame merge in Mediator Layer

mediator/Scanner::startNewFrame()
This function is where we will define a frame queue.

currentlyh looking at FrameBuffer::getFrame(uint, bool)

2/27

regmap.c -> "frame" board.

MceConsumer::serviceMsgQ options
1) msgqFd // Message queue
    processTaskMsg(&stop)
2) listener_->getFd() // Connection request from the Mce
    initializeConnection()
3) temporaryHandler_.getNetMsgHandler()->getSendFd() // send a Greeting Msg
    temporaryHandler_.sendNetMsg()
4) temporaryHandler_.getNetMsgHandler()->getReadFd() >= 0 // response from newly connected Mce
  4a) temporaryHandler_.getNetMsgHandler()->getReadFd() // initialization msg
      temporaryHandler_.readNetMsg()
  4b) timedOut() // timed out waiting for response from new Mce
      terminateConnection(&temporaryHandler_)
      listen(true);
5) for(iant)
    connectedHandlers_[iant]->getReadFd() // read data frame from Mce
    connectedHandlers_[iant]->read()

NET_READ_HANDLER

Working example:
MceConsumer::NET_READ_HANDLER(netMceDataFrameReadHandler)

MceConsumer::NET_SEND_HANDLER(netMsgSentHandler) {
  ...
  NetMceDataFrameHandler* handler =
    consumer_->connectedandlers_[mceNum.getIntId()];
  handler->installReadHandler(netMceDataFrameReadhandler, handler);
}

NetHandler::installReadhandler(NET_READ_HANDLER(* handler), void* arg) {
  nrs_->installReadHandler(handler, arg)
}

NetReadStr::installReadHandler(NET_READ_HANDLER(* handler), void* arg) {
  readhandler_ = handler;
  readArg_ = arg;
}

NetReadStr has a member
  NET_READ_HANDLER(* readHandler_)

NetReadStr::read() -> privateRead(int fd)

NetReadStr::privateRead(int fd) {
  // nrs_read_msg(netStream_)
  if(readState == NET_READ_DONE)
    if(readHandler_ != 0)
      readhandler_(readArg_);


To change:
  - RegMapDataFrameManager::getId(unsigned ) // needs to be based off of syncBox frame number.
  - ArrayMapDataFrameManager::getId(unsigned )
  - Scanner::checkDataFrames
  - follow through Scanner::sendDispatchDataFrameMsg() -> FrameBuffer::dispatchNextFrame()

To Check:
  - ArrayDataFrameManager::writeMceRegMap(...)
  - Scanner::setMceReceived()
  - antFrame->readReg(...) in Scanner::packAntennaFrame()
  - Initialization process of frame buffer in Scanner.cc. I think it is ok.

Questions:
  - What is constant: fast_regs / slow_frames OR rate of slow_frames? First is better.
  - Does any of this need to be dynamically allocated, or can it all be compiled in? Hopefully compiled in...
  - How many fast frames per slow frame? Right now it is 50.

I am currently at Scanner::packMceFrame(), and working through the data frame process.

Later:

  • Clean up antenna/control/bicep/DataBase, NetDataParse
  • Clean up antenna/control/bicep/DataNew
  • Proper register maps for mce data.
  • Timing lag in Antenna Layer between SyncBox interrupts and sampling
  • Gps in Antenna Layer
  • MASD_COMMAND_PIPE in devicemap.h
  • rtcnetcoms.c, datasystem_cmd_members // remove box, nbox
  • mediator/bicep/Control::cleanMceControl // sendStopMsg()
  • util/common/NetMsgHandler.cc // Lots of commented out functions; make sure it works! Questions:
  • How do I delete struct SquidRegs? is delete squidRegs_ enough?