sown code report: aggregation tracking group management

Post on 09-Feb-2016

55 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Sown Code Report: Aggregation Tracking Group Management. Pascal A. Vicaire University of Virginia pv9f@cs.virginia.edu. Sensing. Std Control. SensingC. Report Comm. Std Control. Report CommC. Leds. LedsC. Tracking Timer. TimerC. Tracking. TrackingM. Sens. Sens Control. - PowerPoint PPT Presentation

TRANSCRIPT

Sown Code Report:Aggregation

TrackingGroup Management

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

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