Sown Code Report:Aggregation
TrackingGroup Management
Pascal A. VicaireUniversity of [email protected]
Local
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
SensingC
SensingStd
Control
BottomSensingC
BottomSensing
AttributeSensing
StdControl
GroupManagement
LocalM
AggregationC
BackboneC
TripWireM
ReceiveC
BaseStation
AggregationStd
Control
GroupManagementC
StaticLeader
TripWire
TimerC
TrackingTimer
LedsC
Leds
ReportCommC
ReportComm
StdControl
TrackingC
ConfigurationProvided Interface
Used Interface
Module
Local
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
SensingC
SensingStd
Control
BottomSensingC
BottomSensing
AttributeSensing
StdControl
GroupManagement
LocalM
AggregationC
BackboneC
TripWireM
ReceiveC
BaseStation
AggregationStd
Control
GroupManagementC
StaticLeader
TripWire
TimerC
TrackingTimer
LedsC
Leds
ReportCommC
ReportComm
StdControl
TrackingC
StudiedModules &
Configurations
ConfigurationProvided Interface
Used Interface
Module
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
…
setParameters
setParameters setParameters
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Initialize: Sensing module. Group management module. ReportComm module. Aggregation module. Leader identifier. TripWire information.
init
init
ET_POSITION_Sense
init init init
whoIsMyLeader isTripWireBase
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Start: Sensing module. Group management module. Tracking timer. Report module. Aggregation module. Localization module.
start
start getX startstart startstartgetY
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Stop: Sensing module. Group management module. Tracking module. Report module. Aggregation module.
stop
stop stopstop stopstop
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
post GMTask(); if (!_isBaseLeader) { _senseCounter++; if (_senseCounter >=
SENSE_CNT_THRESHOLD/ENVIRO_WORKING_CLOCK) { _senseCounter = 0; post SenseTask(); } }
if (_newSensing) { ET_sendCount ++; if (ET_sendCount >=
(REFRESH_INTERVAL/ENVIRO_WORKING_CLOCK)) { ET_sendCount = 0; post sendTask(); } }
firedGMTask
senseTask
sendTask
aggrTask
if (_isLeader) { ET_aggrCount ++; if (ET_aggrCount >=
(REFRESH_INTERVAL/ENVIRO_WORKING_CLOCK)) { ET_aggrCount = 0; post aggrTask(); } }
Periodically
Post group management task for this
Tracking phase
Post sense taskIf not a base
Send Sensing Report(Only non base motes)
Aggregate received Data if leader
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Post sensing done task.
SensingDone
SenseDoneTask
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
The mote is a group leader if on_off is true. If it is a leader: green LED off, red LED on. If it is not a leader: green LED off, red LED off. Update variables.
Leader greenOff redOn
redOff
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
The mote is a group member if on_off is true. If it is a member: green LED on, red LED off. It it is not a member: green LED off, red LED off. Update variables.
Member greenOff redOff
greenOn
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
event result_t RC.receiveReport(RCReport *rcReport) { dbg(DBG_TRACKING, "TrackingM.RC.receiveReport\n"); if (_isBaseLeader) { baseStation_reportPosition_struct *temp; temp = (baseStation_reportPosition_struct*)(rcReport->data); call baseStation.reportPosition(temp);
} else { baseStation_reportPosition_struct *temp; temp = (baseStation_reportPosition_struct*)(rcReport->data); call GM.receiveMessage(1, temp->GMInformation); } return SUCCESS; }
receiveReport reportPositionreceiveMessage
Base mote reports to base station
Other motes (only leaders canReceive reports) call the group
Management module
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
This function does nothing.
aggrSendDone
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
ET_Position_senseDone
ET_ATTRIBUTES.ET_POSITION=value.
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Start group management heart beat.
GMTask
fireHeartBeart
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Initiate sensor reading
SenseTask
conditionSense
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
SenseDoneTask
join leave
if (_newSensing) { if (_sensing == FALSE) { _sensing = TRUE; call GM.join(); } } else { if (_sensing == TRUE) { _sensing = FALSE; if (!_isLeader || _sent) { call GM.leave(); } } }
If there is a new sensing report, and the mote was not currently sensing,
Seek to join group.
If there is no new sensing report,And the mote was currently sensing,
Seek to leave group.
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
Only non base motes. Call aggregation module.
SendTask
sendData
Local
TrackingM
Tracking
SensSens
ControlBottomSensing
GMGM
ControlLeds
TrackingTimer
RCRC
ControlTripWire
StaticLeader
AggrControl
AggrAttributeSensing
BaseStation
baseStation_reportPosition_struct temp; tos_time_t timeStamp; dbg(DBG_TRACKING, "TrackingM.aggrTask\n"); ET_AGGRATTRIBUTES = call Aggr.aggregate(); _GMInfo = call GM.getState(); if ((ET_AGGRATTRIBUTES.degreeA + _GMInfo.groupAge) <
DEGREE_OF_AGGREGATION) { if (!_sensing) { call GM.leave(); } return; }
aggrTask
aggregategetStateLeave sendReport
setState
_GMInfo.groupAge += ET_AGGRATTRIBUTES.degreeA; call GM.setState(_GMInfo); temp.GMInformation = _GMInfo; temp.position.x = (uint16_t)(ET_AGGRATTRIBUTES.A.x); temp.position.y = (uint16_t)(ET_AGGRATTRIBUTES.A.y); call GlobalAbsoluteTimer.getGlobalTime(&timeStamp); temp.timeStamp = timeStamp.low32/100; temp.leaderID = TOS_LOCAL_ADDRESS; temp.degreeOfAggregation = ET_AGGRATTRIBUTES.degreeA; temp.degreeOfMag = ET_AGGRATTRIBUTES.degreeA; temp.degreeOfPIR = 0; temp.degreeOfAccoustic = 0; if (_isLeader) { call RC.sendReport((char *)&temp, BROADCAST_TYPE); _sent = TRUE; if (!_sensing) { call GM.leave(); } }
Only Leader
Aggregate sensingData
If leader did not receive enough sensingData and is not currently sensing,
Leave group without sending report.
Otherwise, send Tracking report and leave group
If not sensing.
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
ReportCommC
RoutingC
RoutingSendByBroadcast[RC_ROUTING_PORT]
RoutingSendByAddress[RC_ROUTING_PORT]
RoutingReceive[RC_ROUTING_PORT]
BackboneM TripWireM
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Init some parameters
init
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
start
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
stop
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
…
sendReport
currentParentsendsend getCurrentTripWireIDreceive
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
sendDone
No message waiting to be sent.
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
sendDone
No message waiting to be sent.
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
receive
Post process receive message if no other message is already waiting to be processed.
ProcessReceiveMessage
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
If group leader, send report.
ProcessReceiveMessage
receiveReport sendReport
ReportCommM
SendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
GenericReceive
ReceiveM
SendToUART TLeds
baseStation
RoutingC
ReceiveC
RoutingSendByAddress[255]
Role: debugging messages?
ReceiveM
SendToUART TLeds
baseStation
Return leaderID
processReport
ReceiveM
SendToUART TLeds
baseStation
Does nothing.
reportPosition
ReceiveM
SendToUART TLeds
baseStation
Does nothing.
sendDone
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
RoutingC
RoutingSendByBroadcast[AGGR_ROUTING_PORT]
RoutingReceive[AGGR_ROUTING_PORT]
AggregationC
GroupManagementC
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
Does nothing.
GM
StdControl
start
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
Does nothing.
GM
StdControl
stop
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
Uses averaging functions to aggregate sensing data. Return aggregation degree.
GM
StdControl
aggregate
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
dbg(DBG_USR2, "AggregationM.sendData(leaderID:%d)\n", leaderID);
if ((leaderID == TOS_LOCAL_ADDRESS) && !_receivePending) { _receivePending = TRUE; RxBuffer = report; add(); _receivePending = FALSE; signal Aggregation.aggrSendDone(SUCCESS); return SUCCESS; } if (!_sendPending){ _sendPending = TRUE;
if ((TxBuffer = (AttrReport*)initRoutingMsg(&_TxMsg, sizeof(AttrReport))) == 0)
{
GM
StdControl
sendDataaggregationSendDone
send
dbg(DBG_USR2, "\t\tinitRoutingMsg fail\n");_sendPending = FALSE;return FAIL;
} *TxBuffer = *report; if (call SendMsgByBct.send(1, &_TxMsg) == FAIL) { dbg(DBG_USR2, "\t\tSendMsgByBct.sendto:%d fail\n", leaderID); _sendPending = FALSE; return FAIL; }dbg(DBG_TEMP, "RSEVENT: %i.%08i: SENDMSG: %d\n", (uint32_t)
(tos_state.tos_time / 4000000), (uint32_t) (tos_state.tos_time % 4000000 * 25), leaderID);
return SUCCESS; } else { dbg(DBG_USR2, "\t\t_sendPending fail\n"); return FAIL; }
If node is leader, do not send
Otherwise, send byBroadcast to leader
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
aggregationSendDone
sendDone
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
receive
ProcessReceiveAggr
dbg(DBG_USR2, "AggregationM.ReceiveRoutingMsg.receive\n");
if(!_receivePending) { TOS_MsgPtr p = _RxMsgP; _receivePending = TRUE; _RxMsgP = msg; if(!post ProcessReceiveAggr()) _receivePending = FALSE; return p; } else { return msg; }
Post processReceiveAggr taskIf no such task pending.
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
receiveMessage
ProcessReceiveAggr
dbg(DBG_USR2, "AggregationM.ProcessReceiveAggr task\n"); if ((RxBuffer = (AttrReport*)popFromRoutingMsg(_RxMsgP,
sizeof(AttrReport))) == 0) { dbg(DBG_USR2, "\tpopFromRoutingMsg fail\n"); _receivePending = FALSE; return; } call GM.receiveMessage(2, RxBuffer->GMInformation); if (RxBuffer->GMInformation.leaderID == TOS_LOCAL_ADDRESS) { dbg(DBG_USR2, "add!\n"); add(); } else { dbg(DBG_USR2, "not add!\n"); } _receivePending = FALSE;
Call Group Management
Message contents added to message tableIf node is leader.
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
leader
Does nothing.
AggregationM
SendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
member
Does nothing.
GroupManagementM
Random Local
Group Management
StaticLeader
StdControl
RandomLFSR LocalM BackboneM
GroupManagementC
GroupManagementM
Random Local
Group Management
…
StaticLeader
StdControl
setParameters
GroupManagementM
Random Local
Group Management
StaticLeader
StdControl
init
init
GroupManagementM
Random Local
Group Management
StaticLeader
StdControl
start
getX getY
GroupManagementM
Random Local
Group Management
StaticLeader
StdControl
stop
GroupManagementM
Random Local
Group Management
Initiate group management timer.
StaticLeader
StdControl
fireHeartBeat
GroupManagementM
Random Local
Group Management
No status: node becomes member. Follower: node becomes member. Leader Candidate: node becomes leader.
StaticLeader
StdControl
join
NodeNumberrand
memberleader
GroupManagementM
Random Local
Group Management
Member: node becomes follower. Leader: node becomes leader candidate.
StaticLeader
StdControl
leave memberleader
GroupManagementM
Random Local
Group Management
…
StaticLeader
StdControl
setState
GroupManagementM
Random Local
Group Management
…
StaticLeader
StdControl
getState
GroupManagementM
Random Local
Group Management
None: follower. Follower: check for group competition. Member: check for group competition. Leader candidate: check for group competition. Leader: check for group competition.
StaticLeader
StdControl
ProcessRecuritMessage
leader
GroupManagementM
Random Local
Group Management
Check if already processing such a message.
StaticLeader
StdControl
ProcessRecuritMessage
receiveMessage
Top Related