Tải bản đầy đủ (.docx) (45 trang)

Lab 3 kết nối hai telosb mote

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (139.85 KB, 45 trang )

Báo Cáo Công Nghệ IoT Hiện Đại
LAB3: Kết nối hai TelosB Mote

Mục lục

1


I TrafficLight1 (4đ)
Sử dụng 2 telosb motes mô phỏng hệ thống đèn tại ngã tư hoạt động như sau:
Thời gian
(s)
5
1
5
1

Node0
(master)

Node1
(slave)

Hướng dẫn:
-

Xây dựng một ứng dụng chung cho cả 2 mote, sử dụng TOS_NODE_ID để phân biệt master
và slave.

-


Thiết đặt TOS_NODE_ID cho telosb mote tại bước nạp code vào mote

make telosb reinstall,<TOS_NODE_ID> bsl,/dev/ttyUSB0

-

Sử dụng thêm biến counter để xử lý bật/tắt đèn theo thời gian.

-

Các thao tác send message trong event MilliTimer.fired() chỉ nên được thực hiện tại master
(kiểm tra TOS_NODE_ID trước khi cho thực hiện nội dung bên trong MilliTimer.fired()).

-

Các thao tác xử lý message nhận được trong event Receive.receive() chỉ nên được thực hiện
tại slave (kiểm tra TOS_NODE_ID trước khi cho thực hiện nội dung bên trong
Receive.receive()).

-

Nên xây dựng một hàm riêng để xử lý bật/tắt đèn. VD: void processLeds(uint16_t counter)
{…}. Hàm này có thể được gọi trong MilliTimer.fired() (đối với node master) và trong
Receive.receive() (đối với node slave). Cách khai báo một hàm mới trong component:
void processLeds(uint16_t counter);

void processLeds(uint16_t counter)
{

}


2


Bài giải
File RadioCountToLeds.h
/*
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright (c) 2002-2003 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.
*/
#ifndef RADIO_COUNT_TO_LEDS_H
#define RADIO_COUNT_TO_LEDS_H

3


typedef nx_struct radio_count_msg {
nx_uint16_t counter;
nx_uint16_t master_id;
} radio_count_msg_t;
enum {
AM_RADIO_COUNT_MSG = 6,
};
#endif


File RadioCountToLedsAppC.nc

// $Id: RadioCountToLedsAppC.nc,v 1.5 2010-06-29 22:07:17 scipio Exp $

/*
* Copyright (c) 2000-2005 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
4


* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND

FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright (c) 2002-2003 Intel Corporation
5


* 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.
*/


#include "RadioCountToLeds.h"

/**
* Configuration for the RadioCountToLeds application. RadioCountToLeds
* maintains a 4Hz counter, broadcasting its value in an AM packet
* every time it gets updated. A RadioCountToLeds node that hears a counter
* displays the bottom three bits on its LEDs. This application is a useful
* test to show that basic AM communication and timers work.
*
* @author Philip Levis
* @date June 6 2005
*/

configuration RadioCountToLedsAppC {}
implementation {
components MainC, RadioCountToLedsC as App, LedsC;
components new AMSenderC(AM_RADIO_COUNT_MSG);
components new AMReceiverC(AM_RADIO_COUNT_MSG);
6


components new TimerMilliC();
components ActiveMessageC;

App.Boot -> MainC.Boot;

App.Receive -> AMReceiverC;
App.AMSend -> AMSenderC;
App.AMControl -> ActiveMessageC;
App.Leds -> LedsC;

App.MilliTimer -> TimerMilliC;
App.Packet -> AMSenderC;
}

File RadioCountToLedsC.nc
#include "Timer.h"
#include "RadioCountToLeds.h"

module RadioCountToLedsC @safe() {
uses {
interface Leds;
interface Boot;
interface Receive;
interface AMSend;
interface Timer<TMilli> as MilliTimer;
interface SplitControl as AMControl;
7


interface Packet;
}

}
implementation {
message_t packet;
bool locked;
uint16_t counter = 0;
void processLeds(uint16_t counter);

event void Boot.booted() {

call AMControl.start();
}

event void AMControl.startDone(error_t err) {

if (err == SUCCESS) {
call MilliTimer.startPeriodic(1000);
}

else {
call AMControl.start();
}

}

8


event void AMControl.stopDone(error_t err) {
// do nothing
}

event void MilliTimer.fired() {
if(TOS_NODE_ID != 0) return;

counter++;
dbg("RadioCountToLedsC", "RadioCountToLedsC: timer fired, counter is
%hu.\n", counter);
if (locked) {
return;

}
else {
radio_count_msg_t* rcm =
Packet.getPayload(&packet, sizeof(radio_count_msg_t));

(radio_count_msg_t*)call

if (rcm == NULL) {
return;
}
rcm->counter = counter;
if (call AMSend.send(AM_BROADCAST_ADDR,
sizeof(radio_count_msg_t)) == SUCCESS) {
dbg("RadioCountToLedsC",

"RadioCountToLedsC:

counter);
locked = TRUE;
}
9

packet

&packet,
sent.\n",


processLeds(rcm->counter);
}


if(counter >= 12) counter =0;
}

event message_t* Receive.receive(message_t* bufPtr,
void* payload, uint8_t len) {
if(TOS_NODE_ID == 0) return;
dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len);
if (len != sizeof(radio_count_msg_t)) {return bufPtr;}
else {
radio_count_msg_t* rcm = (radio_count_msg_t*)payload;
processLeds(rcm->counter);
return bufPtr;
}
}

event void AMSend.sendDone(message_t* bufPtr, error_t error) {
if (&packet == bufPtr) {
locked = FALSE;
}
}

void processLeds(uint16_t counter){
if(counter == 1){
10


if(TOS_NODE_ID == 0){
call Leds.led0On();
call Leds.led1Off();

}
else{
call Leds.led2On();
call Leds.led0Off();
}
}
if(counter == 6){
if(TOS_NODE_ID != 0){
call Leds.led1On();
call Leds.led2Off();
}
}
if(counter == 7){
if(TOS_NODE_ID == 0){
call Leds.led2On();
call Leds.led0Off();
}
else{
call Leds.led0On();
call Leds.led1Off();
}
}

11


if(counter == 12){
if(TOS_NODE_ID == 0){
call Leds.led1On();
call Leds.led2Off();

}
}
}
}
II TrafficLight3 (2đ)
Sử dụng 3 telosb motes mô phỏng hệ thống đèn tại ngã sáu hoạt động như sau:
Thời gian
(s)

Node0
(master)

Node1
(slave)

Node2
(slave)

5
1
5
1
3
1

Bài giải
File RadioCountToLeds.h
/*
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.

*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright

12


* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED

* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright (c) 2002-2003 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.
*/
#ifndef RADIO_COUNT_TO_LEDS_H
#define RADIO_COUNT_TO_LEDS_H
typedef nx_struct radio_count_msg {
nx_uint16_t counter;
} radio_count_msg_t;
enum {
AM_RADIO_COUNT_MSG = 6,
};
#endif

File RadioCountToLedsAppC.nc
13


// $Id: RadioCountToLedsAppC.nc,v 1.5 2010-06-29 22:07:17 scipio Exp $

/*
* Copyright (c) 2000-2005 The Regents of the University of California.
* All rights reserved.
*

* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT

14


* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE

GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright (c) 2002-2003 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.
*/
15


#include "RadioCountToLeds.h"

/**
* Configuration for the RadioCountToLeds application. RadioCountToLeds
* maintains a 4Hz counter, broadcasting its value in an AM packet
* every time it gets updated. A RadioCountToLeds node that hears a counter
* displays the bottom three bits on its LEDs. This application is a useful
* test to show that basic AM communication and timers work.

*
* @author Philip Levis
* @date June 6 2005
*/

configuration RadioCountToLedsAppC {}
implementation {
components MainC, RadioCountToLedsC as App, LedsC;
components new AMSenderC(AM_RADIO_COUNT_MSG);
components new AMReceiverC(AM_RADIO_COUNT_MSG);
components new TimerMilliC();
components ActiveMessageC;

App.Boot -> MainC.Boot;

App.Receive -> AMReceiverC;
App.AMSend -> AMSenderC;
16


App.AMControl -> ActiveMessageC;
App.Leds -> LedsC;
App.MilliTimer -> TimerMilliC;
App.Packet -> AMSenderC;
}
File RadioCountToLedsC.nc
#include "Timer.h"
#include "RadioCountToLeds.h"

module RadioCountToLedsC @safe() {

uses {
interface Leds;
interface Boot;
interface Receive;
interface AMSend;
interface Timer<TMilli> as MilliTimer;
interface SplitControl as AMControl;
interface Packet;
}
}
implementation {

message_t packet;

bool locked;
uint16_t counter1 = 0;
17


void processLeds(uint16_t counter);

event void Boot.booted() {
call AMControl.start();
}

event void AMControl.startDone(error_t err) {
if (err == SUCCESS) {
call MilliTimer.startPeriodic(1000);
}
else {

call AMControl.start();
}
}

event void AMControl.stopDone(error_t err) {
// do nothing
}
event void MilliTimer.fired() {
if(TOS_NODE_ID != 0) return;
counter1++;
dbg("RadioCountToLedsC", "RadioCountToLedsC: timer fired, counter is %hu.\n",
counter);
18


if (locked) {
return;
}
else {
radio_count_msg_t* rcm = (radio_count_msg_t*)call Packet.getPayload(&packet,
sizeof(radio_count_msg_t));
if (rcm == NULL) {
return;
}

rcm->counter = counter1;
if (call AMSend.send(AM_BROADCAST_ADDR, &packet,
sizeof(radio_count_msg_t)) == SUCCESS) {
dbg("RadioCountToLedsC", "RadioCountToLedsC: packet sent.\n", counter);
locked = TRUE;

processLeds(rcm->counter);
}
}

if(counter1 >= 16) counter1 =0;
}

event message_t* Receive.receive(message_t* bufPtr,
void* payload, uint8_t len) {
if(TOS_NODE_ID == 0) return;
dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len);
if (len != sizeof(radio_count_msg_t)) {return bufPtr;}
19


else {
radio_count_msg_t* rcm = (radio_count_msg_t*)payload;
processLeds(rcm->counter);
return bufPtr;
}
}

event void AMSend.sendDone(message_t* bufPtr, error_t error) {
if (&packet == bufPtr) {
locked = FALSE;
}
}

void processLeds(uint16_t counter){
if(counter == 1){

if(TOS_NODE_ID == 0){
call Leds.led2On();
call Leds.led0Off();
}
else if(TOS_NODE_ID == 1){
call Leds.led0On();
}
else if(TOS_NODE_ID == 2){
call Leds.led0On();
call Leds.led1Off();
}
}
20


if(counter == 6){
if(TOS_NODE_ID == 0){
call Leds.led1On();
call Leds.led2Off();
}
}
if(counter == 7){
if(TOS_NODE_ID == 0){
call Leds.led0On();
call Leds.led1Off();
}
else if(TOS_NODE_ID == 1){
call Leds.led2On();
call Leds.led0Off();
}

}
if(counter == 12){
if(TOS_NODE_ID == 1){
call Leds.led1On();
call Leds.led2Off();
}
}
if(counter == 13){
if(TOS_NODE_ID == 1){
call Leds.led0On();
call Leds.led1Off();
}
21


else if(TOS_NODE_ID == 2){
call Leds.led2On();
call Leds.led0Off();
}
}
if(counter == 16){
if(TOS_NODE_ID == 2){
call Leds.led1On();
call Leds.led2Off();
}
}
}
}
III TrafficLight2 (2đ)
Dựa trên TrafficLight1, sinh viên phát triển thêm để xử lý trường hợp: khi master

node ngưng hoạt động (slave chờ 20s liên tục không nhận được message từ master), slave
sẽ chuyển qua tự hoạt động độc lập (bật/tắt các đèn) cho đến khi master hoạt động trở lại.
Gợi ý:
-

Có thể dùng một biến đếm thời gian expiration_time = 20.

-

Hàm MilliTimer.fired() liên tục giảm giá trị của expiration_time sau mỗi
giây. Trong khi đó, mỗi lần nhận được message trong Receive.receive(), biến
expiration_time được reset về 20.
Bài giải

File RadioCountToLeds.h
/*
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
*

22


* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright

* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright (c) 2002-2003 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.
*/
#ifndef RADIO_COUNT_TO_LEDS_H
#define RADIO_COUNT_TO_LEDS_H

typedef nx_struct radio_count_msg {
nx_uint16_t counter;
} radio_count_msg_t;
enum {
AM_RADIO_COUNT_MSG = 6,

23


};
#endif

File RadioCountToLedsAppC.nc

// $Id: RadioCountToLedsAppC.nc,v 1.5 2010-06-29 22:07:17 scipio Exp $

/*
* Copyright (c) 2000-2005 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.

* - Neither the name of the University of California nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*

24


* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.

*
* Copyright (c) 2002-2003 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
25


×