[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/tosthreads/chips/cc1000 CC1000ActiveMessageC.nc, NONE, 1.1 CC1000ActiveMessageP.nc, NONE, 1.1
Chieh-Jan Mike Liang
liang_mike at users.sourceforge.net
Fri Jul 11 19:26:01 PDT 2008
Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/tosthreads/chips/cc1000
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31983/tos/lib/tosthreads/chips/cc1000
Added Files:
CC1000ActiveMessageC.nc CC1000ActiveMessageP.nc
Log Message:
Fix the CC2420 Receive.receive and Snoop.receive fan-out warnings. This happened when both TinyOS services and TOSThreads
apps want to use the radio. Now, TinyOS services have priority over TOSThreads apps on which AM ID they want to use.
--- NEW FILE: CC1000ActiveMessageC.nc ---
// $Id: CC1000ActiveMessageC.nc,v 1.1 2008/07/12 02:25:59 liang_mike Exp $
/*
* "Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
*
* Copyright (c) 2004-2005 Intel Corporation
* All rights reserved.
*
* This file is distributed under the terms in the attached INTEL-LICENSE
* file. If you do not find these files, copies can be found by writing to
* Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,
* 94704. Attention: Intel License Inquiry.
*/
/**
*
* The Active Message layer for the CC1000 radio. This configuration
* just layers the AM dispatch (CC1000ActiveMessageM) on top of the
* underlying CC1000 radio packet (CC1000CsmaRadioC), which is
* inherently an AM packet (acknowledgements based on AM destination
* addr and group).
*
* @author Philip Levis
* @date June 19 2005
*/
configuration CC1000ActiveMessageC {
provides {
interface SplitControl;
interface AMSend[am_id_t id];
interface Receive[am_id_t id];
interface Receive as ReceiveDefault[am_id_t id];
interface Receive as Snoop[am_id_t id];
interface Receive as SnoopDefault[am_id_t id];
interface AMPacket;
interface Packet;
interface PacketAcknowledgements;
interface LinkPacketMetadata;
}
}
implementation {
components CC1000ActiveMessageP as AM, CC1000CsmaRadioC as Radio;
components ActiveMessageAddressC as Address;
SplitControl = Radio;
Packet = Radio;
PacketAcknowledgements = Radio;
LinkPacketMetadata = Radio;
AMSend = AM;
Receive = AM.Receive;
ReceiveDefault = AM.ReceiveDefault;
Snoop = AM.Snoop;
SnoopDefault = AM.SnoopDefault;
AMPacket = AM;
AM.SubSend -> Radio.Send;
AM.SubReceive -> Radio.Receive;
AM.amAddress -> Address;
AM.Packet -> Radio;
}
--- NEW FILE: CC1000ActiveMessageP.nc ---
// $Id: CC1000ActiveMessageP.nc,v 1.1 2008/07/12 02:25:59 liang_mike Exp $
/*
* "Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
*
* Copyright (c) 2004-2005 Intel Corporation
* All rights reserved.
*
* This file is distributed under the terms in the attached INTEL-LICENSE
* file. If you do not find these files, copies can be found by writing to
* Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,
* 94704. Attention: Intel License Inquiry.
*/
/**
* Implementation component for CC1000ActiveMessageC.
*
* @author Philip Levis
* @date June 19 2006
*/
module CC1000ActiveMessageP @safe() {
provides {
interface AMSend[am_id_t id];
interface Receive[am_id_t id];
interface Receive as ReceiveDefault[am_id_t id];
interface Receive as Snoop[am_id_t id];
interface Receive as SnoopDefault[am_id_t id];
interface AMPacket;
}
uses {
interface Send as SubSend;
interface Receive as SubReceive;
interface Packet as Packet;
command am_addr_t amAddress();
}
}
implementation {
cc1000_header_t* ONE getHeader(message_t* ONE amsg) {
return TCAST(cc1000_header_t* ONE, (uint8_t*)amsg + offsetof(message_t, data) - sizeof(cc1000_header_t));
}
cc1000_footer_t *getFooter(message_t *amsg) {
return (cc1000_footer_t *)(amsg->footer);
}
command error_t AMSend.send[am_id_t id](am_addr_t addr,
message_t* amsg,
uint8_t len) {
cc1000_header_t* header = getHeader(amsg);
header->type = id;
header->dest = addr;
header->source = call AMPacket.address();
header->group = TOS_AM_GROUP;
return call SubSend.send(amsg, len);
}
command error_t AMSend.cancel[am_id_t id](message_t* msg) {
return call SubSend.cancel(msg);
}
event void SubSend.sendDone(message_t* msg, error_t result) {
signal AMSend.sendDone[call AMPacket.type(msg)](msg, result);
}
command uint8_t AMSend.maxPayloadLength[am_id_t id]() {
return call Packet.maxPayloadLength();
}
command void* AMSend.getPayload[am_id_t id](message_t* m, uint8_t len) {
return call Packet.getPayload(m, len);
}
/* Receiving a packet */
event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) {
cc1000_footer_t* msg_footer = getFooter(msg);
if(msg_footer->crc == 1) {
if (call AMPacket.isForMe(msg)) {
return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len);
}
else {
return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len);
}
}
return msg;
}
command am_addr_t AMPacket.address() {
return call amAddress();
}
command am_addr_t AMPacket.destination(message_t* amsg) {
cc1000_header_t* header = getHeader(amsg);
return header->dest;
}
command am_addr_t AMPacket.source(message_t* amsg) {
cc1000_header_t* header = getHeader(amsg);
return header->source;
}
command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) {
cc1000_header_t* header = getHeader(amsg);
header->dest = addr;
}
command void AMPacket.setSource(message_t* amsg, am_addr_t addr) {
cc1000_header_t* header = getHeader(amsg);
header->source = addr;
}
command bool AMPacket.isForMe(message_t* amsg) {
return (call AMPacket.destination(amsg) == call AMPacket.address() ||
call AMPacket.destination(amsg) == AM_BROADCAST_ADDR);
}
command am_id_t AMPacket.type(message_t* amsg) {
cc1000_header_t* header = getHeader(amsg);
return header->type;
}
command void AMPacket.setType(message_t* amsg, am_id_t type) {
cc1000_header_t* header = getHeader(amsg);
header->type = type;
}
command void AMPacket.setGroup(message_t* msg, am_group_t group) {
cc1000_header_t* header = getHeader(msg);
header->group = group;
}
command am_group_t AMPacket.group(message_t* msg) {
cc1000_header_t* header = getHeader(msg);
return header->group;
}
command am_group_t AMPacket.localGroup() {
return TOS_AM_GROUP;
}
default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return signal ReceiveDefault.receive[id](msg, payload, len);
}
default event message_t* ReceiveDefault.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return msg;
}
default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return signal SnoopDefault.receive[id](msg, payload, len);
}
default event message_t* SnoopDefault.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return msg;
}
default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) {
return;
}
}
More information about the Tinyos-2-commits
mailing list