Sown Code Report: Aggregation Tracking Group Management Pascal A. Vicaire University of Virginia pv9f@cs.virginia.edu.

Post on 27-Dec-2015

213 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

Sown Code Report:Aggregation

TrackingGroup Management

Pascal A. VicaireUniversity of Virginiapv9f@cs.virginia.edu

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