Sown Code Report:Aggregation
TrackingGroup Management
Pascal A. VicaireUniversity of [email protected]
Local
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
SensingCSensing Std
Control
BottomSensingC
BottomSensing
AttributeSensing
StdControl
GroupManagement
LocalM
AggregationC
BackboneC
TripWireM
ReceiveC
BaseStation
Aggregation StdControl
GroupManagementC
StaticLeader
TripWire
TimerC
TrackingTimer
LedsCLeds
ReportCommC
ReportComm
StdControl
TrackingC
ConfigurationProvided Interface
Used Interface
Module
Local
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
SensingCSensing Std
Control
BottomSensingC
BottomSensing
AttributeSensing
StdControl
GroupManagement
LocalM
AggregationC
BackboneC
TripWireM
ReceiveC
BaseStation
Aggregation StdControl
GroupManagementC
StaticLeader
TripWire
TimerC
TrackingTimer
LedsCLeds
ReportCommC
ReportComm
StdControl
TrackingC
StudiedModules &
Configurations
ConfigurationProvided Interface
Used Interface
Module
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
…
setParameters
setParameters setParameters
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Start: Sensing module. Group management module. Tracking timer. Report module. Aggregation module. Localization module.
start
start getX startstart startstartgetY
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Stop: Sensing module. Group management module. Tracking module. Report module. Aggregation module.
stop
stop stopstop stopstop
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Post sensing done task.
SensingDone
SenseDoneTask
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
This function does nothing.
aggrSendDone
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
ET_Position_senseDone
ET_ATTRIBUTES.ET_POSITION=value.
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Start group management heart beat.
GMTask
fireHeartBeart
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Initiate sensor reading
SenseTask
conditionSense
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
Only non base motes. Call aggregation module.
SendTask
sendData
Local
TrackingMTracking
Sens SensControl
BottomSensing GM GM
Control Leds TrackingTimer RC RC
ControlTripWire
StaticLeader
AggrControlAggrAttribute
SensingBase
Station
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 groupIf not sensing.
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
ReportCommC
RoutingC
RoutingSendByBroadcast[RC_ROUTING_PORT]
RoutingSendByAddress[RC_ROUTING_PORT]
RoutingReceive[RC_ROUTING_PORT]
BackboneM TripWireM
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Init some parameters
init
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
start
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
stop
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
…
sendReport
currentParentsendsend getCurrentTripWireIDreceive
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
sendDone
No message waiting to be sent.
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
sendDone
No message waiting to be sent.
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
receive
Post process receive message if no other message is already waiting to be processed.
ProcessReceiveMessage
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
If group leader, send report.
ProcessReceiveMessage
receiveReport sendReport
ReportCommMSendMsgByID TLedsTripWireBackboneReceiveRoutingMsgSendMsgByBct
ReportComm StdControl
Does nothing.
GenericReceive
ReceiveMSendToUART TLeds
baseStation
RoutingC
ReceiveC
RoutingSendByAddress[255]
Role: debugging messages?
ReceiveMSendToUART TLeds
baseStation
Return leaderID
processReport
ReceiveMSendToUART TLeds
baseStation
Does nothing.
reportPosition
ReceiveMSendToUART TLeds
baseStation
Does nothing.
sendDone
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
RoutingC
RoutingSendByBroadcast[AGGR_ROUTING_PORT]
RoutingReceive[AGGR_ROUTING_PORT]
AggregationC
GroupManagementC
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
Does nothing.
GM
StdControl
start
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
Does nothing.
GM
StdControl
stop
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
Uses averaging functions to aggregate sensing data. Return aggregation degree.
GM
StdControl
aggregate
AggregationMSendMsgByBctReceiveRoutingMsg
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
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
aggregationSendDone
sendDone
AggregationMSendMsgByBctReceiveRoutingMsg
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.
AggregationMSendMsgByBctReceiveRoutingMsg
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.
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
leader
Does nothing.
AggregationMSendMsgByBctReceiveRoutingMsg
Aggregation
GM
StdControl
member
Does nothing.
GroupManagementMRandom Local
Group Management
StaticLeader
StdControl
RandomLFSR LocalM BackboneMGroupManagementC
GroupManagementMRandom Local
Group Management
…
StaticLeader
StdControl
setParameters
GroupManagementMRandom Local
Group Management
StaticLeader
StdControl
init
init
GroupManagementMRandom Local
Group Management
StaticLeader
StdControl
start
getX getY
GroupManagementMRandom Local
Group Management
StaticLeader
StdControl
stop
GroupManagementMRandom Local
Group Management
Initiate group management timer.
StaticLeader
StdControl
fireHeartBeat
GroupManagementMRandom Local
Group Management
No status: node becomes member. Follower: node becomes member. Leader Candidate: node becomes leader.
StaticLeader
StdControl
join
NodeNumberrand
memberleader
GroupManagementMRandom Local
Group Management
Member: node becomes follower. Leader: node becomes leader candidate.
StaticLeader
StdControl
leave memberleader
GroupManagementMRandom Local
Group Management
…
StaticLeader
StdControl
setState
GroupManagementMRandom Local
Group Management
…
StaticLeader
StdControl
getState
GroupManagementMRandom 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
GroupManagementMRandom Local
Group Management
Check if already processing such a message.
StaticLeader
StdControl
ProcessRecuritMessage
receiveMessage
Top Related