firebug-cvs Mailing List for FireBug: wireless wildfire monitoring (Page 37)
Brought to you by:
doolin
You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(36) |
Jun
(45) |
Jul
(108) |
Aug
(31) |
Sep
(2) |
Oct
(4) |
Nov
(113) |
Dec
(20) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(63) |
Feb
(37) |
Mar
(24) |
Apr
(6) |
May
(5) |
Jun
(5) |
Jul
(71) |
Aug
(42) |
Sep
(7) |
Oct
|
Nov
|
Dec
|
| 2005 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
(64) |
Jun
(71) |
Jul
(51) |
Aug
(89) |
Sep
(24) |
Oct
(1) |
Nov
(1) |
Dec
(2) |
| 2006 |
Jan
|
Feb
|
Mar
(3) |
Apr
(2) |
May
|
Jun
|
Jul
(21) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
|
From: <che...@us...> - 2003-06-12 21:17:07
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv15923 Modified Files: tos_retreat_2003.ppt Log Message: high-solution pic Index: tos_retreat_2003.ppt =================================================================== RCS file: /cvsroot/firebug/firebug/web/tos_retreat_2003.ppt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 Binary files /tmp/cvs6tR2ic and /tmp/cvsQfQzyn differ |
|
From: <do...@us...> - 2003-06-12 15:25:47
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv10753
Modified Files:
menu.html publications.html
Log Message:
Fixed NEST poster reference.
Index: menu.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/menu.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** menu.html 12 Jun 2003 02:17:02 -0000 1.3
--- menu.html 12 Jun 2003 15:25:40 -0000 1.4
***************
*** 20,26 ****
<tr>
<td>
! <table width="155" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0">
! <tr bgcolor="#CCCCCC" class="NavHiliteRow">
<td class="NavHilite" onClick="goTo('./introduction.html')">
<div class="NavText">
--- 20,26 ----
<tr>
<td>
! <table width="155" bgcolor="#EEFFEE" border="0" cellpadding="0" cellspacing="0">
! <tr bgcolor="#CCFFFC" class="NavHiliteRow">
<td class="NavHilite" onClick="goTo('./introduction.html')">
<div class="NavText">
Index: publications.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/publications.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** publications.html 11 Jun 2003 22:47:34 -0000 1.1
--- publications.html 12 Jun 2003 15:25:40 -0000 1.2
***************
*** 5,10 ****
<head>
<link type="text/css" rel="stylesheet" href="firebug.css" />
! <link rel="SHORTCUT ICON" href="./images/favicon.ico"/>
! <title>FireBug publications</title>
</head>
--- 5,10 ----
<head>
<link type="text/css" rel="stylesheet" href="firebug.css" />
! <link rel="SHORTCUT ICON" href="./images/favicon.ico"/>
! <title>FireBug publications</title>
</head>
***************
*** 12,21 ****
<h1>FireBug publications</h1>
! <ul>
! <li>
! 17 June 2003: FireBug project
! <a href="tos_retreat_2003.ppt" alt="poster">Poster</a> (ppt).
! </li>
! </ul>
--- 12,30 ----
<h1>FireBug publications</h1>
! <ul>
!
! <li>
! M. M. Chen, C. Majidi, D. M. Doolin, S. Glaser
! and N. Sitar.
! <a href="./tos_retreat.ppt" alt="NEST Poster">
! Design and construction of a wildfire instrumentation
! system using networked sensors (Poster).
! </a>
! Network Embedded Systems Technology (NEST)
! Retreat, June 17-18, 2003, Oakland
! California.
! </li>
!
! </ul>
|
|
From: <tr...@us...> - 2003-06-12 03:45:02
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv32432
Modified Files:
main.css
Log Message:
Changed menu color
Index: main.css
===================================================================
RCS file: /cvsroot/firebug/firebug/web/main.css,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** main.css 11 Jun 2003 17:03:23 -0000 1.1
--- main.css 12 Jun 2003 03:44:57 -0000 1.2
***************
*** 139,143 ****
.Nav {
! background-color: #384C72;
color: #fff;
cursor: pointer;
--- 139,143 ----
.Nav {
! background-color: #384ccc;
color: #fff;
cursor: pointer;
|
|
From: <do...@us...> - 2003-06-12 02:17:07
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv8330
Modified Files:
menu.html
Added Files:
contact.html
Log Message:
Fixed targets.
--- NEW FILE: contact.html ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link type="text/css" rel="stylesheet" href="firebug.css" />
<link rel="SHORTCUT ICON" href="./images/favicon.ico" />
<title>FireBug contacts</title>
</head>
<body>
<h1>FireBug contacts</h1>
</body>
</html>
Index: menu.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/menu.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** menu.html 11 Jun 2003 22:47:34 -0000 1.2
--- menu.html 12 Jun 2003 02:17:02 -0000 1.3
***************
*** 6,53 ****
<link type="text/css" rel="stylesheet" href="main.css" />
! <link type="text/css" rel="stylesheet" href="firebug.css" />
! <script language="JavaScript1.2" src="/main.js" type="text/javascript"></script>
! <link rel="SHORTCUT ICON" href="./images/favicon.ico" />
! <title>FireBug navigation menu</title>
</head>
! <body>
! <h2>Destinations</h2>
! <table width="160" height="100%" bgcolor="#EDE7DB">
! <tr>
! <td>
! <table width="155" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0">
! <tr bgcolor="#CCCCCC" class="NavHiliteRow"><td class="NavHilite" onClick="goTo('./introduction.html')"><div class="NavText"><a href="./introduction.html">Introduction</a></div></td></tr>
! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./overview.html')"><div class="NavText"><a href="./overview.html">Overview</a></div></td></tr>
! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./architecture.html')"><div class="NavText"><a href="./arch.html">Network arch.</a></div></td></tr>
! <tr class="NavRow">
! <td class="Nav">
! <div class="NavText"><a href="./sensorarch.html" target="main">Network architecture</a></div>
! </td>
! </tr>
! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./publications.html')"><div class="NavText"><a href="./publications.html">Publications</a></div></td></tr>
! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./people.html')"><div class="NavText"><a href="./people.html">People</a></div></td></tr>
! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./contact.html')"><div class="NavText"><a href="./contact.html">Contact</a></div></td></tr>
! </table>
! </td>
! </tr>
! <tr>
! <td align="center"> <br> <br>
<a href="http://www-laep.ced.berkeley.edu/~itr/"><img src="./images/laep-fire.jpg" border="0" alt="Click to visit Cal Fire"></a>
<p>
<a href="http://www.nsf.gov/"><img src="./images/nsf01.gif" border="0" alt="Click to visit NSF"></a>
! <p>
! </td>
! </tr>
! </table>
! </body>
</html>
--- 6,90 ----
<link type="text/css" rel="stylesheet" href="main.css" />
! <link type="text/css" rel="stylesheet" href="firebug.css" />
! <script language="JavaScript1.2" src="/main.js" type="text/javascript"></script>
! <link rel="SHORTCUT ICON" href="./images/favicon.ico" />
! <title>FireBug navigation menu</title>
</head>
! <body>
! <h2>Destinations</h2>
! <table width="160" height="100%" bgcolor="#EDE7DB">
! <tr>
! <td>
! <table width="155" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0">
! <tr bgcolor="#CCCCCC" class="NavHiliteRow">
! <td class="NavHilite" onClick="goTo('./introduction.html')">
! <div class="NavText">
! <a href="./introduction.html">Introduction</a>
! </div>
! </td>
! </tr>
! <tr class="NavRow">
! <td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./overview.html')"><div class="NavText"><a href="./overview.html">Overview</a></div></td></tr>
! <tr class="NavRow">
! <td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./architecture.html')"><div class="NavText">
! <a href="./arch.html" target="main">Network arch.</a>
! </div>
! </td>
! </tr>
! <tr class="NavRow">
! <td class="Nav">
! <div class="NavText">
! <a href="./sensorarch.html" target="main">Network architecture</a>
! </div>
! </td>
! </tr>
!
! <tr class="NavRow">
! <td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./publications.html')">
! <div class="NavText">
! <a href="./publications.html" target="main">Publications</a>
! </div>
! </td>
! </tr>
!
! <tr class="NavRow">
! <td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./people.html')">
! <div class="NavText">
! <a href="./people.html" target="main">People</a>
! </div>
! </td>
! </tr>
!
! <tr class="NavRow">
! <td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./contact.html')">
! <div class="NavText">
! <a href="./contact.html" target="main">Contact</a>
! </div>
! </td>
! </tr>
!
! </table>
! </td>
! </tr>
!
! <tr>
! <td align="center"> <br> <br>
<a href="http://www-laep.ced.berkeley.edu/~itr/"><img src="./images/laep-fire.jpg" border="0" alt="Click to visit Cal Fire"></a>
<p>
<a href="http://www.nsf.gov/"><img src="./images/nsf01.gif" border="0" alt="Click to visit NSF"></a>
! <p>
! </td>
! </tr>
! </table>
! </body>
</html>
|
|
From: <do...@us...> - 2003-06-11 22:47:38
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv30982 Modified Files: index_new.html menu.html people.html Added Files: publications.html Log Message: More work on new web pages. --- NEW FILE: publications.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html> <head> <link type="text/css" rel="stylesheet" href="firebug.css" /> <link rel="SHORTCUT ICON" href="./images/favicon.ico"/> <title>FireBug publications</title> </head> <body> <h1>FireBug publications</h1> <ul> <li> 17 June 2003: FireBug project <a href="tos_retreat_2003.ppt" alt="poster">Poster</a> (ppt). </li> </ul> </body> </html> Index: index_new.html =================================================================== RCS file: /cvsroot/firebug/firebug/web/index_new.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** index_new.html 11 Jun 2003 17:01:47 -0000 1.1 --- index_new.html 11 Jun 2003 22:47:34 -0000 1.2 *************** *** 4,27 **** <html> <head> ! <link type="text/css" rel="stylesheet" href="firebug.css" /> ! <link rel="SHORTCUT ICON" href="./images/favicon.ico" /> ! ! <title> ! FireBug Wildland fire monitoring system ! </title> </head> ! <frameset rows="10%,90%" cols="100%" frame> ! ! <frame frameborder="0" /> <frameset cols="190,90%"> ! <frame frameborder="1" src="./menu.html" noresize> ! <frame frameborder="1" src="./index.html"> </frameset> ! </frame> ! ! </frameset> </html> - --- 4,24 ---- <html> <head> ! <link type="text/css" rel="stylesheet" href="firebug.css" /> ! <link rel="SHORTCUT ICON" href="./images/favicon.ico"/> ! <title> ! FireBug Wildland fire monitoring system ! </title> </head> ! <frameset rows="10%,90%" cols="100%"> ! ! <frame frameborder="0" /> <frameset cols="190,90%"> ! <frame frameborder="0" src="./menu.html" noresize /> ! <frame frameborder="0" src="./index.html" name="main"/> </frameset> ! ! </frameset> </html> Index: menu.html =================================================================== RCS file: /cvsroot/firebug/firebug/web/menu.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** menu.html 11 Jun 2003 17:02:19 -0000 1.1 --- menu.html 11 Jun 2003 22:47:34 -0000 1.2 *************** *** 24,28 **** <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./overview.html')"><div class="NavText"><a href="./overview.html">Overview</a></div></td></tr> ! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./architecture.html')"><div class="NavText"><a href="/about_us/budget.html">Network architecture</a></div></td></tr> <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./people.html')"><div class="NavText"><a href="./people.html">People</a></div></td></tr> <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./contact.html')"><div class="NavText"><a href="./contact.html">Contact</a></div></td></tr> --- 24,36 ---- <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./overview.html')"><div class="NavText"><a href="./overview.html">Overview</a></div></td></tr> ! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./architecture.html')"><div class="NavText"><a href="./arch.html">Network arch.</a></div></td></tr> ! ! <tr class="NavRow"> ! <td class="Nav"> ! <div class="NavText"><a href="./sensorarch.html" target="main">Network architecture</a></div> ! </td> ! </tr> ! ! <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./publications.html')"><div class="NavText"><a href="./publications.html">Publications</a></div></td></tr> <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./people.html')"><div class="NavText"><a href="./people.html">People</a></div></td></tr> <tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./contact.html')"><div class="NavText"><a href="./contact.html">Contact</a></div></td></tr> Index: people.html =================================================================== RCS file: /cvsroot/firebug/firebug/web/people.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** people.html 11 Jun 2003 17:03:23 -0000 1.1 --- people.html 11 Jun 2003 22:47:34 -0000 1.2 *************** *** 1,5 **** ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>FireBugs</title> </head> --- 1,12 ---- ! ! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ! "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> ! ! <html> <head> + <link type="text/css" rel="stylesheet" href="firebug.css" /> + <link rel="SHORTCUT ICON" href="./images/favicon.ico"/> + <title>FireBugs</title> </head> *************** *** 8,12 **** <h1>FireBug Folks</h1> ! --- 15,47 ---- <h1>FireBug Folks</h1> ! <p> ! FireBug is an interdisciplinary project drawing professors ! and students ! from the <a href="http://www.ce.berkeley.edu/"> ! Departments of Civil and Environmental Engineering</a>, ! <a href="http://www-laep.ced.berkeley.edu/"> ! Landscape Architecture and Environmental Planning</a>, ! the <a href="http://eps.berkeley.edu/www/index.html"> ! Department of Earth and Planetary Sciences</a>, and ! the <a href="http://www.eecs.berkeley.edu/"> ! Department of Electrical Engineering and Computer Science</a> ! </p> ! ! ! <p> ! <ul> ! <li>Prof. Nicholas Sitar</li> ! <li>Prof. George Brimhall</li> ! <li>Prof. Steve Glaser</li> ! <li>Prof. John Radke</li> ! <li>Prof. Raja Sengupta</li> ! <li>David M. Doolin</li> ! <li>Carmel Majidi</li> ! <li>(Max) Min Chen</li> ! <li>Anshuman Sharma</li> ! <li>Wei Luo</li> ! <li>JinChuan Xu</li> ! <li>Tracy Yang</li> ! </ul> |
|
From: <do...@us...> - 2003-06-11 17:03:26
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv977
Added Files:
main.css people.html
Log Message:
Sub pages for main web page.
--- NEW FILE: main.css ---
BODY, TD, P {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;}
.black {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
color: #000000;}
.grey {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
color: #676767;}
.white {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
font-weight: bold;
color: #FFFFFF;}
a.white {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
font-weight:bold;
color: #FFFFFF;}
.orange {color: #FF6600;}
.titlered {color: #960707; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-weight:bold;}
.titleorange {color: #CC6633; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-weight:bold;}
.red {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
color: #990000;}
.small {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; font-weight:normal;}
a.nav-main {
font-size: 10px;
color: #FFFFFF;
font-weight:bold;
text-decoration:none;
}
a.nav-main:hover {
font-size: 10px;
color: #FFF;
font-weight:bold;
text-decoration:none;
}
a.nav-sub {
font-size: 10px;
color: #FFFFFF;
text-decoration:none;
}
a.nav-sub:hover {
font-size: 10px;
color: #CCCCCC;
text-decoration:none;
}
A {
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #0066CC;}
A:HOVER {
color: #FF9900;
text-decoration: underline;}
A:HOVER.white {
color: #FFFFDD;
text-decoration: underline;}
A:HOVER.black {
color: #FF9900;
text-decoration: underline;}
A:HOVER.orange {
color: #993300;
text-decoration: underline;}
A.small {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #0066CC;}
.topnav { font-size: 10px;}
.topnav_active {background-color:#FDCD85; color:#394D73; font-weight: bold; font-size: 10px;}
a.topnav{font-weight: bold; text-decoration:none; color:#394D73;}
a.topnav:hover{background-color:#FDCD85; color:#394D73; text-decoration:none;}
.header {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 15px;
color: #000000;
font-weight: bold;}
.headerwhite {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 15px;
color: #FFFFFF;
font-weight: bold;}
.wl {font-family:verdana, Helvetica, Sans-Serif;
font-size: 12px;
font-weight:bold;
color:#666633;}
.wlt {font-family:verdana, Helvetica, Sans-Serif; font-size: 11px; color:#666633;}
.blueh {font-family:verdana, Helvetica, Sans-Serif; font-size: 13px;font-weight:bold;color:#336699;}
.bluet {font-family:verdana, Helvetica, Sans-Serif; font-size: 12px;color:#336699;}
.bluetsml {font-family:verdana, Helvetica, Sans-Serif; font-size: 10px; color:#336699;}
.bluetout {font-family:verdana, Helvetica, Sans-Serif; font-size: 10px;color:#336699;}
.boldsmall {font-family:verdana, Helvetica, Sans-Serif; font-size: 10px;color:#000000; font-weight:bold}
.spacer1p {margin-top:1px;}
.spacer2p {margin-top:2px;}
.spacer4p {margin-top:4px;}
.spacer5p {margin-top:5px;}
.spacer7p {margin-top:7px;}
.spacer10p {margin-top:10px;}
.spacer12p {margin-top:12px;}
.spacer15p {margin-top:15px;}
.spacer20p {margin-top:20px;}
.spacer25p {margin-top:25px;}
.navbox {margin-top:2px;}
TR.NavRow TD {
vertical-align: middle;
border: 1px solid;
border-color: #369 #003 #003;
border-left: none;
cursor: pointer;
}
.Nav {
background-color: #384C72;
color: #fff;
cursor: pointer;
}
.NavText, .NavHighlightText, .NavGroupText {
font-family: verdana, arial, sans-serif;
font-size: 10px;
font-weight: bold;
line-height: 14px;
padding-left: 6px;
text-decoration: none;
}
.Nav A:link, .Nav A:visited { color: #fff; Text-decoration: none;}
.NavHilite {
background-color: #5A6B94;
color: #fff;
}
.NavHilite A:link, .NavHilite A:visited {
color: #fff;
}
TR TD.NavHilite A:link, TR TD.NavHilite A:visited {
text-decoration: none;
}
TR.NavHiliteRow TD {
vertical-align: middle;
border: 1px solid;
border-color: #000 #5A6B94 #000;
border-left: none;
}
--- NEW FILE: people.html ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>FireBugs</title>
</head>
<body>
<h1>FireBug Folks</h1>
</body>
</html>
|
|
From: <do...@us...> - 2003-06-11 17:02:23
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv486
Modified Files:
firebug.css
Added Files:
main.js menu.html
Log Message:
More files for new web pages.
--- NEW FILE: main.js ---
function navBar( tableCellRef, hoverFlag, navStyle ) {
if ( hoverFlag ) {
switch ( navStyle ) {
case 1:
tableCellRef.style.backgroundColor = '#5A6B94';
break;
default:
if ( document.getElementsByTagName ) {
tableCellRef.getElementsByTagName( 'a' )[0].style.color = '#c00';
}
}
} else {
switch ( navStyle ) {
case 1:
tableCellRef.style.backgroundColor = '#384C72';
break;
default:
if ( document.getElementsByTagName ) {
tableCellRef.getElementsByTagName( 'a' )[0].style.color = '#000';
}
}
}
}
function navBarClick( tableCellRef, navStyle, url ) {
navBar( tableCellRef, 0, navStyle );
goTo( url );
}
function goTo( url ) {
window.location.href = url;
}
function validateSearch() {
if (document.searchform.search.value=='Search for...' || document.searchform.search.value=='') {
alert('Wait, you need to enter what you\'re looking for in the "Search for..." box.'); return false;
} else {
document.searchform.submit();}
}
--- NEW FILE: menu.html ---
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<link type="text/css" rel="stylesheet" href="main.css" />
<link type="text/css" rel="stylesheet" href="firebug.css" />
<script language="JavaScript1.2" src="/main.js" type="text/javascript"></script>
<link rel="SHORTCUT ICON" href="./images/favicon.ico" />
<title>FireBug navigation menu</title>
</head>
<body>
<h2>Destinations</h2>
<table width="160" height="100%" bgcolor="#EDE7DB">
<tr>
<td>
<table width="155" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0">
<tr bgcolor="#CCCCCC" class="NavHiliteRow"><td class="NavHilite" onClick="goTo('./introduction.html')"><div class="NavText"><a href="./introduction.html">Introduction</a></div></td></tr>
<tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./overview.html')"><div class="NavText"><a href="./overview.html">Overview</a></div></td></tr>
<tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./architecture.html')"><div class="NavText"><a href="/about_us/budget.html">Network architecture</a></div></td></tr>
<tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./people.html')"><div class="NavText"><a href="./people.html">People</a></div></td></tr>
<tr class="NavRow"><td class="Nav" onMouseOver="navBar(this,1,1)" onMouseOut="navBar(this,0,1)" onClick="navBarClick(this,1,'./contact.html')"><div class="NavText"><a href="./contact.html">Contact</a></div></td></tr>
</table>
</td>
</tr>
<tr>
<td align="center"> <br> <br>
<a href="http://www-laep.ced.berkeley.edu/~itr/"><img src="./images/laep-fire.jpg" border="0" alt="Click to visit Cal Fire"></a>
<p>
<a href="http://www.nsf.gov/"><img src="./images/nsf01.gif" border="0" alt="Click to visit NSF"></a>
<p>
</td>
</tr>
</table>
</body>
</html>
Index: firebug.css
===================================================================
RCS file: /cvsroot/firebug/firebug/web/firebug.css,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** firebug.css 22 May 2003 04:40:32 -0000 1.10
--- firebug.css 11 Jun 2003 17:02:19 -0000 1.11
***************
*** 21,24 ****
--- 21,29 ----
}
+ table.new {
+ width:50%;
+ }
+
+
tr.code {
/*background-color:#ffff66; */
***************
*** 109,110 ****
--- 114,172 ----
*/
+
+ /************************************************/
+
+ body {
+ margin:9px 9px 0 9px;
+ padding:0;
+ background-color:#ffffff;
+ }
+
+ #level0{
+ background-color:#ffcc00;
+ }
+
+ #level1 {
+ margin-left:143px;
+ padding-left:9px;
+ background-color:#FFFFFF;
+ }
+ #level2 {
+ background:#FFF3AC;
+ position:relative;
+ }
+
+ #level3 {
+ margin-right:143px;
+ padding-right:9px;
+ background:#FFFFFF;
+ }
+ #main {
+ background:#fff3ac;
+ }
+ #topBar {
+ background:#ffffff;
+ }
+ #advBar {
+ background:#fff3ac;
+ }
+
+ #tipDay {
+ float:right;
+ width:175px;
+ background:#FFF3AC;
+ }
+
+ #lftBar {
+ position:absolute;
+ width:143px;
+ top:9px;
+ left:9px;
+ }
+
+ #rgtBar {
+ position:absolute;
+ width:143px;
+ top:0;
+ right:0;
+ }
\ No newline at end of file
|
|
From: <do...@us...> - 2003-06-11 17:01:50
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv32605 Added Files: index_new.html Log Message: New index page uses framesets for layout. --- NEW FILE: index_new.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html> <head> <link type="text/css" rel="stylesheet" href="firebug.css" /> <link rel="SHORTCUT ICON" href="./images/favicon.ico" /> <title> FireBug Wildland fire monitoring system </title> </head> <frameset rows="10%,90%" cols="100%" frame> <frame frameborder="0" /> <frameset cols="190,90%"> <frame frameborder="1" src="./menu.html" noresize> <frame frameborder="1" src="./index.html"> </frameset> </frame> </frameset> </html> |
|
From: <do...@us...> - 2003-06-11 16:58:45
|
Update of /cvsroot/firebug/firebug/web/images In directory sc8-pr-cvs1:/tmp/cvs-serv31233 Added Files: laep-fire.jpg nsf_small.gif Log Message: Added more images for new web page. --- NEW FILE: laep-fire.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: nsf_small.gif --- (This appears to be a binary file; contents omitted.) |
|
From: <do...@us...> - 2003-06-11 16:27:12
|
Update of /cvsroot/firebug/firebug/web/images In directory sc8-pr-cvs1:/tmp/cvs-serv14775 Added Files: nsf01.gif Log Message: Added nsf logo for web page use. --- NEW FILE: nsf01.gif --- (This appears to be a binary file; contents omitted.) |
|
From: David D. <do...@al...> - 2003-06-11 13:07:22
|
On Thu, 22 May 2003 cs...@us... wrote: > Update of /cvsroot/firebug/firebug/project/src/gps > In directory sc8-pr-cvs1:/tmp/cvs-serv32544 > > Modified Files: > gps.nc gpsM.nc > Added Files: > LogMsg.class LogMsg.java gpsBcast.class gpsBcast.java > gpsCmd.nc gpsCmdM.nc gpsCmdMsg.class gpsCmdMsg.h > gpsCmdMsg.java gpsRetrieve.nc Let's get these java files into the java side of the source tree and into the firebug.jar file. I can show you that works sometime today. -dmd > Removed Files: > Makefile > Log Message: > gps only runs on mica2 |
|
From: <do...@us...> - 2003-06-10 00:29:55
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv32413 Modified Files: tos_retreat_2003.ppt Log Message: Changed a couple of words in the captions. Index: tos_retreat_2003.ppt =================================================================== RCS file: /cvsroot/firebug/firebug/web/tos_retreat_2003.ppt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 Binary files /tmp/cvs2S0vOe and /tmp/cvsTMDJlj differ |
|
From: <che...@us...> - 2003-06-10 00:03:49
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv20822 Modified Files: tos_retreat_2003.ppt Log Message: add fire pics Index: tos_retreat_2003.ppt =================================================================== RCS file: /cvsroot/firebug/firebug/web/tos_retreat_2003.ppt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 Binary files /tmp/cvsHNiuAn and /tmp/cvsw6b4SG differ |
|
From: <cs...@us...> - 2003-06-09 17:53:22
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv5915
Modified Files:
gps_driver.html
Log Message:
correct gps_driver link
Index: gps_driver.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/gps_driver.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** gps_driver.html 9 Jun 2003 17:45:46 -0000 1.5
--- gps_driver.html 9 Jun 2003 17:53:18 -0000 1.6
***************
*** 12,17 ****
<meta name="author" content="Carmel Majidi, UC Berkeley" /="">
</head>
!
! <body>
<h1>FireBug --- GPS Driver</h1>
<p> FireBug uses the <tt>gps</tt> driver to interface with a GPS receiver
--- 12,16 ----
<meta name="author" content="Carmel Majidi, UC Berkeley" /="">
</head>
! <body>
<h1>FireBug --- GPS Driver</h1>
<p> FireBug uses the <tt>gps</tt> driver to interface with a GPS receiver
***************
*** 19,53 ****
<h2>Introduction</h2>
<p> The current driver implements standard NMEA protocol to interact
! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on the
! client mote initializes the receiver for GPS Fix Data (GGA) reception.
! Incoming GGA data is checked by the client for validity, parsed,
! and then stored in its EEPROM flash memory. </p>
<h2>How <tt>gps</tt> works</h2>
<p> GPS receivers provide location and time information in a variety
! of data formats. At initialization, the client's UART is set
! to the same baud rate as the GPS receiver. Next, <tt>clearGPS()</tt>
! is called, which commands the receiver to block all output.
! The receiver requires several seconds before it can start processing
! NMEA commands following power on. For this reason, the first command
! in <tt>clearGPS()</tt> is sent 100 times until the receiver has
! warmed up.</p>
<p>For this application, a single GGA message is required. To acquire this,
! <tt>getGPS()</tt> is called, which requests GGA data at 1 Hz.
! The number of satellites used in constructing each GGA message
is then determined. When this number exceeds three, the corresponding
! message is parsed and stored in the client's EEPROM.</p>
<p> Values stored in the client's memory can the be retrieved and broadcasted
! over the radio at any time with <tt>GenericBase</tt>. Instructions
! on this are given at the end of this guide. </p>
<h2>Sending Commands to the Receiver</h2>
<p> Communication between the client and receiver is handled by <tt>
! gpsM.nc</tt>. After the client's second UART
! (UART1) is set to 4800 baud, NMEA commands may be sent to the gps
! receiver. For SiRF chips, these generally have the form:</p>
<center>
<p>$PSRF,103,<b>Message type</b>,00,<b>Rate</b>,01,*<b>Checksum</b></p>
</center>
<p>followed by a carriage return ('\r') and linefeed ('\n'). There are six
! message types: </p>
<center>
<p>GGA=00, GLL=01, GSA=02, GSV=03, RMC=04, VTG=05</p>
--- 18,52 ----
<h2>Introduction</h2>
<p> The current driver implements standard NMEA protocol to interact
! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on
! the client mote initializes the receiver for GPS Fix Data (GGA)
! reception. Incoming GGA data is checked by the client for validity,
! parsed, and then stored in its EEPROM flash memory. </p>
<h2>How <tt>gps</tt> works</h2>
<p> GPS receivers provide location and time information in a variety
! of data formats. At initialization, the client's UART is
! set to the same baud rate as the GPS receiver. Next, <tt>clearGPS()</tt>
! is called, which commands the receiver to block all output.
! The receiver requires several seconds before it can start processing
! NMEA commands following power on. For this reason, the first command
! in <tt>clearGPS()</tt> is sent 100 times until the receiver has
! warmed up.</p>
<p>For this application, a single GGA message is required. To acquire this,
! <tt>getGPS()</tt> is called, which requests GGA data at 1 Hz.
! The number of satellites used in constructing each GGA message
is then determined. When this number exceeds three, the corresponding
! message is parsed and stored in the client's EEPROM.</p>
<p> Values stored in the client's memory can the be retrieved and broadcasted
! over the radio at any time with <tt>GenericBase</tt>. Instructions
! on this are given at the end of this guide. </p>
<h2>Sending Commands to the Receiver</h2>
<p> Communication between the client and receiver is handled by <tt>
! gpsM.nc</tt>. After the client's second UART
! (UART1) is set to 4800 baud, NMEA commands may be sent to the
! gps receiver. For SiRF chips, these generally have the form:</p>
<center>
<p>$PSRF,103,<b>Message type</b>,00,<b>Rate</b>,01,*<b>Checksum</b></p>
</center>
<p>followed by a carriage return ('\r') and linefeed ('\n'). There are six
! message types: </p>
<center>
<p>GGA=00, GLL=01, GSA=02, GSV=03, RMC=04, VTG=05</p>
***************
*** 57,61 ****
on all characters, including the comma delimiters, between $ and *. Each
character of the above string is contained as an element in the array <tt>
! cmd_msg</tt>, which is used throughout <tt>gpsM.nc</tt>. By changing
array entries, different commands can be sent to the receiver, as shown
below:</p>
--- 56,60 ----
on all characters, including the comma delimiters, between $ and *. Each
character of the above string is contained as an element in the array <tt>
! cmd_msg</tt>, which is used throughout <tt>gpsM.nc</tt>. By changing
array entries, different commands can be sent to the receiver, as shown
below:</p>
***************
*** 72,92 ****
</center>
<p>Here, the command outb(UDR1,cmd_msg[i]) sends the byte at entry <i>i</i>
! of <tt>cmd_msg</tt> out to UART1. </p>
<h2>Receiving Data from GPS Module</h2>
<p>Data enters into the client from the receiver via UART1. Messages from
! the receiver are collected byte by byte with the command <tt>inp(UDR1)</tt>
! and temporarily stored in an array, <tt>rxBuffer</tt>.
! Data is collected only after the GGA start sequence, <tt>$GPGGA</tt>
! , is completed. Collection stops when the * delimiter is reached,
! after which point, the 40th and 41st entries of the buffer are combined
! to determine the number of satellites, i.e.</p>
<center>
<p>num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0');</p>
</center>
<p>If <tt>num_satellite</tt> < 4, <tt>rxBuffer</tt> is cleared and the
! client waits again for the GGA start sequence to pass in the subsequent
! message until it resumes data collection. Otherwise, the data stored
! in the buffer is parsed and stored in EEPRROM using <tt>logGPS</tt>
! .</p>
<center>
<table class="code">
--- 71,91 ----
</center>
<p>Here, the command outb(UDR1,cmd_msg[i]) sends the byte at entry <i>i</i>
! of <tt>cmd_msg</tt> out to UART1. </p>
<h2>Receiving Data from GPS Module</h2>
<p>Data enters into the client from the receiver via UART1. Messages from
! the receiver are collected byte by byte with the command <tt>inp(UDR1)</tt>
! and temporarily stored in an array, <tt>rxBuffer</tt>
! . Data is collected only after the GGA start sequence, <tt>$GPGGA</tt>
! , is completed. Collection stops when the * delimiter is reached,
! after which point, the 40th and 41st entries of the buffer are combined
! to determine the number of satellites, i.e.</p>
<center>
<p>num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0');</p>
</center>
<p>If <tt>num_satellite</tt> < 4, <tt>rxBuffer</tt> is cleared and the
! client waits again for the GGA start sequence to pass in the subsequent
! message until it resumes data collection. Otherwise, the data stored
! in the buffer is parsed and stored in EEPRROM using <tt>logGPS</tt>
! .</p>
<center>
<table class="code">
***************
*** 102,106 ****
<h2>Logging and Retrieving Data</h2>
<p>Fields in the GGA message are comma delimited. These are parsed with
! <tt> logGPS()</tt>, which simultaneously stores the data into the
client's EEPROM using <tt>LoggerWrite.write</tt>. One line of memory
is reserved for each field, and these are numbered as follows:<br>
--- 101,105 ----
<h2>Logging and Retrieving Data</h2>
<p>Fields in the GGA message are comma delimited. These are parsed with
! <tt> logGPS()</tt>, which simultaneously stores the data into the
client's EEPROM using <tt>LoggerWrite.write</tt>. One line of memory
is reserved for each field, and these are numbered as follows:<br>
***************
*** 194,198 ****
</center>
<p> To retrieve data, load a second mote with <code>GenericBase</code> and
! perform the following: </p>
<ol>
<li>Leaving the GenericBase mote connected to the programming board,
--- 193,197 ----
</center>
<p> To retrieve data, load a second mote with <code>GenericBase</code> and
! perform the following: </p>
<ol>
<li>Leaving the GenericBase mote connected to the programming board,
***************
*** 200,207 ****
<code>java net.tinyos.sf.SerialForward</code></li>
<li>Broadcast retrieve command over the radio: <code>java net.tinyos.tools.gpsBcast
! <group ID> <b>Field Name</b> <gps
! mote ID></code></li>
<li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field. </li>
</ol>
<h2>Instructions for Use</h2>
--- 199,206 ----
<code>java net.tinyos.sf.SerialForward</code></li>
<li>Broadcast retrieve command over the radio: <code>java net.tinyos.tools.gpsBcast
! <group ID> <b>Field Name</b> <gps
! mote ID></code></li>
<li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field. </li>
</ol>
<h2>Instructions for Use</h2>
***************
*** 216,239 ****
</li>
<li>Run gpsBcast to have gps data sent to the GenericBase mote (base station)
! over the radio. From the <tt>firebug/project/java</tt> directory, type
! <br>
<center><code>./gpsrun.sh <group ID> <b>Field Name</b>
<gps mote ID></code></center>
</li>
<li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field.</li>
</ol>
! Alternatively, the gps driver can be connected directly to the PC via the
! programming board. GPS data could be sent to UART and displayed on
! the PC with a java application. .<br>
<h2>Useful Links</h2>
! <p><a href="http://nmviewogc.cr.usgs.gov/viewer">USGS National Map Viewer</a>
! -- use <i>Identify</i> tool to get Long/Lat coordinates of any point in
! the U.S.A.</p>
<p><a href="http://www.topozone.com">www.topozone.com</a>
! -- interactive USGS topo map of the entire U.S.A.</p>
<hr /="">
<p> Last updated: $Date$ by $Author$.
! </p>
</body>
</html>
--- 215,238 ----
</li>
<li>Run gpsBcast to have gps data sent to the GenericBase mote (base station)
! over the radio. From the <tt>firebug/project/java</tt> directory, type
! <br>
<center><code>./gpsrun.sh <group ID> <b>Field Name</b>
<gps mote ID></code></center>
</li>
<li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field.</li>
</ol>
! Alternatively, the gps driver can be connected directly to the PC via
! the programming board. GPS data could be sent to UART and displayed
! on the PC with a java application. .<br>
<h2>Useful Links</h2>
! <p><a href="http://nmviewogc.cr.usgs.gov/viewer.htm">USGS National Map Viewer</a>
! -- use <i>Identify</i> tool to get Long/Lat coordinates of any point
! in the U.S.A.</p>
<p><a href="http://www.topozone.com">www.topozone.com</a>
! -- interactive USGS topo map of the entire U.S.A.</p>
<hr /="">
<p> Last updated: $Date$ by $Author$.
! </p>
</body>
</html>
|
|
From: <cs...@us...> - 2003-06-09 17:50:43
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv4345
Modified Files:
index.html
Log Message:
update gps_driver link
Index: index.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/index.html,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** index.html 2 May 2003 18:18:30 -0000 1.15
--- index.html 9 Jun 2003 17:50:38 -0000 1.16
***************
*** 76,80 ****
<p>
GPS capabilities are explained <a href=
! "./gps_driver.html">here</a>.
</p>
--- 76,80 ----
<p>
GPS capabilities are explained <a href=
! "gps_driver.html">here</a>.
</p>
|
|
From: <cs...@us...> - 2003-06-09 17:45:49
|
Update of /cvsroot/firebug/firebug/web
In directory sc8-pr-cvs1:/tmp/cvs-serv2212
Modified Files:
gps_driver.html
Log Message:
added topo links to gps_driver
Index: gps_driver.html
===================================================================
RCS file: /cvsroot/firebug/firebug/web/gps_driver.html,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** gps_driver.html 23 May 2003 15:15:21 -0000 1.4
--- gps_driver.html 9 Jun 2003 17:45:46 -0000 1.5
***************
*** 13,64 ****
</head>
!
!
! <body>
<h1>FireBug --- GPS Driver</h1>
! <p> FireBug uses the <tt>gps</tt> driver to interface with a GPS
! receiver and handle location information. </p>
<h2>Introduction</h2>
! <p> The current driver implements standard NMEA protocol to interact
! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on the client
! mote initializes the receiver for GPS Fix Data (GGA) reception. Incoming
! GGA data is checked by the client for validity, parsed, and then stored
! in its EEPROM flash memory. </p>
<h2>How <tt>gps</tt> works</h2>
! <p> GPS receivers provide location and time information in a variety
! of data formats. At initialization, the client's UART is set to
! the same baud rate as the GPS receiver. Next, <tt>clearGPS()</tt> is
! called, which commands the receiver to block all output. The receiver
! requires several seconds before it can start processing NMEA commands
! following power on. For this reason, the first command in <tt>clearGPS()</tt>
! is sent 100 times until the receiver has warmed up.</p>
! <p>For this application, a single GGA message is required. To acquire this,
! <tt>getGPS()</tt> is called, which requests GGA data at 1 Hz. The
! number of satellites used in constructing each GGA message is then determined.
! When this number exceeds three, the corresponding message is parsed
! and stored in the client's EEPROM.</p>
! <p> Values stored in the client's memory can the be retrieved and broadcasted
! over the radio at any time with <tt>GenericBase</tt>. Instructions
! on this are given at the end of this guide. </p>
<h2>Sending Commands to the Receiver</h2>
<p> Communication between the client and receiver is handled by <tt>
! gpsM.nc</tt>. After the client's second UART (UART1) is
! set to 4800 baud, NMEA commands may be sent to the gps receiver. For
! SiRF chips, these generally have the form:</p>
<center>
<p>$PSRF,103,<b>Message type</b>,00,<b>Rate</b>,01,*<b>Checksum</b></p>
</center>
! <p>followed by a carriage return ('\r') and linefeed ('\n'). There are six
! message types: </p>
<center>
<p>GGA=00, GLL=01, GSA=02, GSV=03, RMC=04, VTG=05</p>
</center>
! <p> To block output of a certain message type, set Rate = 00. Rate = 01
! corresponds to a 1 Hz output. Finally, the checksum is computed by performing
! an XOR on all characters, including the comma delimiters, between $ and *.
! Each character of the above string is contained as an element in the array
! <tt> cmd_msg</tt>, which is used throughout <tt>gpsM.nc</tt>. By changing
! array entries, different commands can be sent to the receiver, as shown
! below:</p>
<center>
<table class="code">
--- 13,63 ----
</head>
! <body>
<h1>FireBug --- GPS Driver</h1>
! <p> FireBug uses the <tt>gps</tt> driver to interface with a GPS receiver
! and handle location information. </p>
<h2>Introduction</h2>
! <p> The current driver implements standard NMEA protocol to interact
! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on the
! client mote initializes the receiver for GPS Fix Data (GGA) reception.
! Incoming GGA data is checked by the client for validity, parsed,
! and then stored in its EEPROM flash memory. </p>
<h2>How <tt>gps</tt> works</h2>
! <p> GPS receivers provide location and time information in a variety
! of data formats. At initialization, the client's UART is set
! to the same baud rate as the GPS receiver. Next, <tt>clearGPS()</tt>
! is called, which commands the receiver to block all output.
! The receiver requires several seconds before it can start processing
! NMEA commands following power on. For this reason, the first command
! in <tt>clearGPS()</tt> is sent 100 times until the receiver has
! warmed up.</p>
! <p>For this application, a single GGA message is required. To acquire this,
! <tt>getGPS()</tt> is called, which requests GGA data at 1 Hz.
! The number of satellites used in constructing each GGA message
! is then determined. When this number exceeds three, the corresponding
! message is parsed and stored in the client's EEPROM.</p>
! <p> Values stored in the client's memory can the be retrieved and broadcasted
! over the radio at any time with <tt>GenericBase</tt>. Instructions
! on this are given at the end of this guide. </p>
<h2>Sending Commands to the Receiver</h2>
<p> Communication between the client and receiver is handled by <tt>
! gpsM.nc</tt>. After the client's second UART
! (UART1) is set to 4800 baud, NMEA commands may be sent to the gps
! receiver. For SiRF chips, these generally have the form:</p>
<center>
<p>$PSRF,103,<b>Message type</b>,00,<b>Rate</b>,01,*<b>Checksum</b></p>
</center>
! <p>followed by a carriage return ('\r') and linefeed ('\n'). There are six
! message types: </p>
<center>
<p>GGA=00, GLL=01, GSA=02, GSV=03, RMC=04, VTG=05</p>
</center>
! <p> To block output of a certain message type, set Rate = 00. Rate = 01 corresponds
! to a 1 Hz output. Finally, the checksum is computed by performing an XOR
! on all characters, including the comma delimiters, between $ and *. Each
! character of the above string is contained as an element in the array <tt>
! cmd_msg</tt>, which is used throughout <tt>gpsM.nc</tt>. By changing
! array entries, different commands can be sent to the receiver, as shown
! below:</p>
<center>
<table class="code">
***************
*** 73,92 ****
</center>
<p>Here, the command outb(UDR1,cmd_msg[i]) sends the byte at entry <i>i</i>
! of <tt>cmd_msg</tt> out to UART1. </p>
<h2>Receiving Data from GPS Module</h2>
! <p>Data enters into the client from the receiver via UART1. Messages from
! the receiver are collected byte by byte with the command <tt>inp(UDR1)</tt>
! and temporarily stored in an array, <tt>rxBuffer</tt>. Data is
! collected only after the GGA start sequence, <tt>$GPGGA</tt>, is completed.
! Collection stops when the * delimiter is reached, after which point,
! the 40th and 41st entries of the buffer are combined to determine the number
! of satellites, i.e.</p>
<center>
<p>num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0');</p>
</center>
! <p>If <tt>num_satellite</tt> < 4, <tt>rxBuffer</tt> is cleared and the
! client waits again for the GGA start sequence to pass in the subsequent
! message until it resumes data collection. Otherwise, the data stored in
! the buffer is parsed and stored in EEPRROM using <tt>logGPS</tt>.</p>
<center>
<table class="code">
--- 72,92 ----
</center>
<p>Here, the command outb(UDR1,cmd_msg[i]) sends the byte at entry <i>i</i>
! of <tt>cmd_msg</tt> out to UART1. </p>
<h2>Receiving Data from GPS Module</h2>
! <p>Data enters into the client from the receiver via UART1. Messages from
! the receiver are collected byte by byte with the command <tt>inp(UDR1)</tt>
! and temporarily stored in an array, <tt>rxBuffer</tt>.
! Data is collected only after the GGA start sequence, <tt>$GPGGA</tt>
! , is completed. Collection stops when the * delimiter is reached,
! after which point, the 40th and 41st entries of the buffer are combined
! to determine the number of satellites, i.e.</p>
<center>
<p>num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0');</p>
</center>
! <p>If <tt>num_satellite</tt> < 4, <tt>rxBuffer</tt> is cleared and the
! client waits again for the GGA start sequence to pass in the subsequent
! message until it resumes data collection. Otherwise, the data stored
! in the buffer is parsed and stored in EEPRROM using <tt>logGPS</tt>
! .</p>
<center>
<table class="code">
***************
*** 101,108 ****
</center>
<h2>Logging and Retrieving Data</h2>
! <p>Fields in the GGA message are comma delimited. These are parsed with <tt>
! logGPS()</tt>, which simultaneously stores the data into the client's EEPROM
! using <tt>LoggerWrite.write</tt>. One line of memory is reserved for each
! field, and these are numbered as follows:<br>
<br>
</p>
--- 101,108 ----
</center>
<h2>Logging and Retrieving Data</h2>
! <p>Fields in the GGA message are comma delimited. These are parsed with
! <tt> logGPS()</tt>, which simultaneously stores the data into the
! client's EEPROM using <tt>LoggerWrite.write</tt>. One line of memory
! is reserved for each field, and these are numbered as follows:<br>
<br>
</p>
***************
*** 193,211 ****
</table>
</center>
! <p> To retrieve data, load a second mote with <code>GenericBase</code> and
! perform the following: </p>
<ol>
<li>Leaving the GenericBase mote connected to the programming board,
start the serial port forwarding service using the command
<code>java net.tinyos.sf.SerialForward</code></li>
! <li>Broadcast retrieve command over the radio: <code>java net.tinyos.tools.gpsBcast
! <group ID> <b>Field Name</b> <gps mote
! ID></code></li>
! <li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field. </li>
</ol>
<hr /="">
! <p> Last updated: $Date$ by $Author$.
! </p>
</body>
</html>
--- 193,239 ----
</table>
</center>
! <p> To retrieve data, load a second mote with <code>GenericBase</code> and
! perform the following: </p>
<ol>
<li>Leaving the GenericBase mote connected to the programming board,
start the serial port forwarding service using the command
<code>java net.tinyos.sf.SerialForward</code></li>
! <li>Broadcast retrieve command over the radio: <code>java net.tinyos.tools.gpsBcast
! <group ID> <b>Field Name</b> <gps
! mote ID></code></li>
! <li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field. </li>
! </ol>
! <h2>Instructions for Use</h2>
! <p>NOTE: gps.nc only runs on the mica2 platform</p>
! <ol>
! <li>Load gps into mica2</li>
! <li>Mica2 will take several minutes to lock on to satellites</li>
! <li>Load a second mote with GenericBase</li>
! <li>Leaving the GenericBase mote connected to the programming board,
! start the serial port forwarding service using the command <br>
! <center><code>java net.tinyos.sf.SerialForward</code></center>
! </li>
! <li>Run gpsBcast to have gps data sent to the GenericBase mote (base station)
! over the radio. From the <tt>firebug/project/java</tt> directory, type
! <br>
! <center><code>./gpsrun.sh <group ID> <b>Field Name</b>
! <gps mote ID></code></center>
! </li>
! <li>Packet is sent to the base station via radio. Contained in the packet
! payload is the data for the selected field.</li>
</ol>
+ Alternatively, the gps driver can be connected directly to the PC via the
+ programming board. GPS data could be sent to UART and displayed on
+ the PC with a java application. .<br>
+ <h2>Useful Links</h2>
+ <p><a href="http://nmviewogc.cr.usgs.gov/viewer">USGS National Map Viewer</a>
+ -- use <i>Identify</i> tool to get Long/Lat coordinates of any point in
+ the U.S.A.</p>
+ <p><a href="http://www.topozone.com">www.topozone.com</a>
+ -- interactive USGS topo map of the entire U.S.A.</p>
<hr /="">
! <p> Last updated: $Date$ by $Author$.
! </p>
</body>
</html>
|
|
From: <che...@us...> - 2003-05-30 22:40:05
|
Update of /cvsroot/firebug/firebug/web/images In directory sc8-pr-cvs1:/tmp/cvs-serv27875/images Added Files: basestation.jpg browser.jpg deploy.jpg deploy3.jpg monitoring.jpg mote.jpg Log Message: pics for poster upload --- NEW FILE: basestation.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: browser.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: deploy.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: deploy3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: monitoring.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mote.jpg --- (This appears to be a binary file; contents omitted.) |
|
From: <che...@us...> - 2003-05-30 22:40:05
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv27875 Modified Files: tos_retreat_2003.ppt Log Message: pics for poster upload Index: tos_retreat_2003.ppt =================================================================== RCS file: /cvsroot/firebug/firebug/web/tos_retreat_2003.ppt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvsfLMfHK and /tmp/cvsMwxmYp differ |
|
From: <che...@us...> - 2003-05-30 21:18:35
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv29152 Modified Files: tos_retreat_2003.ppt Log Message: . Index: tos_retreat_2003.ppt =================================================================== RCS file: /cvsroot/firebug/firebug/web/tos_retreat_2003.ppt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsSLXmno and /tmp/cvsQLB0w5 differ |
|
From: <do...@us...> - 2003-05-29 18:57:48
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv2803 Added Files: tos_retreat_2003.ppt Log Message: Added retreat poster. --- NEW FILE: tos_retreat_2003.ppt --- (This appears to be a binary file; contents omitted.) |
|
From: <do...@us...> - 2003-05-24 00:18:50
|
Update of /cvsroot/firebug/firebug/project/src/gps In directory sc8-pr-cvs1:/tmp/cvs-serv24979 Removed Files: LogMsg.java gpsBcast.java gpsCmdMsg.java Log Message: GPS Java files have been moved to the org.firebug package tree. --- LogMsg.java DELETED --- --- gpsBcast.java DELETED --- --- gpsCmdMsg.java DELETED --- |
|
From: <do...@us...> - 2003-05-23 23:18:33
|
Update of /cvsroot/firebug/firebug/project/src/gps In directory sc8-pr-cvs1:/tmp/cvs-serv24443 Removed Files: LogMsg.class gpsBcast.class gpsCmdMsg.class Log Message: Generally, object/class files should not be committed to the repository because the time stamp and structure of such files change with every modification of the source files. --- LogMsg.class DELETED --- --- gpsBcast.class DELETED --- --- gpsCmdMsg.class DELETED --- |
|
From: <cs...@us...> - 2003-05-23 17:16:02
|
Update of /cvsroot/firebug/firebug/project/java/src/org/firebug/gps In directory sc8-pr-cvs1:/tmp/cvs-serv8109 Modified Files: gpsBcast.java Log Message: fixed typo in var names Index: gpsBcast.java =================================================================== RCS file: /cvsroot/firebug/firebug/project/java/src/org/firebug/gps/gpsBcast.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** gpsBcast.java 23 May 2003 15:30:44 -0000 1.1 --- gpsBcast.java 23 May 2003 17:15:59 -0000 1.2 *************** *** 1,158 **** ! package org.firebug.gps; ! ! import net.tinyos.util.*; ! import java.io.*; ! import java.util.Properties; ! import net.tinyos.message.*; ! ! public class gpsBcast implements MessageListener { ! static Properties p = new Properties(); ! public static final byte UTC = 1; ! public static final byte LONGITUDE = 2; ! public static final byte NS_INDICATOR = 3; ! public static final byte LATITUDE = 4; ! public static final byte EW_INDICATOR = 5; ! ! public boolean read_log_done = false; ! ! public static final short TOS_BCAST_ADDR = (short) 0xffff; ! ! public static void usage() { ! System.err.println("Usage: java net.tinyos.tools.gpsBcast"+ ! " <group_id> <command> [arguments]"); ! System.err.println("\twhere <command> and [arguments] can be one of the following:"); ! System.err.println("\t\tUTC [dest_address]"); ! System.err.println("\t\tLONGITUDE [dest_address]"); ! System.err.println("\t\tNS_INDICATOR [dest_address]"); ! System.err.println("\t\tLATITUDE [dest_address]"); ! System.err.println("\t\tEW_INDICATOR [dest_address]"); ! } ! ! public static byte restoreSequenceNo() { ! try { ! FileInputStream fis = new FileInputStream("bcast.properties"); ! p.load(fis); ! byte i = (byte)Integer.parseInt(p.getProperty("sequenceNo", "1")); ! fis.close(); ! return i; ! } catch (IOException e) { ! p.setProperty("sequenceNo", "1"); ! return 1; ! } ! } ! public static void saveSequenceNo(int i) { ! try { ! FileOutputStream fos = new FileOutputStream("bcast.properties"); ! p.setProperty("sequenceNo", Integer.toString(i)); ! p.store(fos, "#Properties for gpsBcast\n"); ! } catch (IOException e) { ! System.err.println("Exception while saving sequence number" + ! e); ! e.printStackTrace(); ! } ! } ! ! public static void main(String[] argv) throws IOException{ ! String cmd; ! byte group_id = 0; ! byte sequenceNo = 0; ! ! if (argv.length < 2) { ! usage(); ! System.exit(-1); ! } ! ! try { ! group_id = (byte)(Integer.parseInt(argv[0]) & 0xff); ! } catch (NumberFormatException nfe) { ! usage(); ! System.exit(-1); ! } ! ! cmd = argv[1]; ! ! gpsCmdMsg packet = new gpsCmdMsg(); ! ! sequenceNo = restoreSequenceNo(); ! packet.set_seqno(sequenceNo); ! packet.set_hop_count((short)0); ! packet.set_source(0); ! ! if (cmd.equals("UTC")) { ! packet.set_action(UTC); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("LONGITUDE")) { ! packet.set_action(LONGITUDE); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("NS_INDICATOR")) { ! packet.set_action(NS_INDICATOR); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("LATITUDE")) { ! packet.set_action(LATITUDE); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("EW_INDICATOR")) { ! packet.set_action(EW_INDICATOR); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else { ! usage(); ! System.exit(-1); ! } ! ! try { ! System.err.print("Sending payload: "); ! for (int i = 0; i < packet.dataLength(); i++) { ! System.err.print(Integer.toHexString(packet.dataGet()[i] & 0xff)+ " "); ! } ! System.err.println(); ! ! MoteIF mote = new MoteIF("127.0.0.1", 9000, group_id); ! ! gpsBcast bc = null; ! bc = new gpsBcast(); ! mote.registerListener(new LogMsg(), bc); ! mote.start(); ! mote.send(TOS_BCAST_ADDR, packet); ! ! synchronized (bc) { ! if (bc.read_log_done == false) { ! System.err.println("Waiting for response to read_log..."); ! bc.wait(10000); ! } ! if (bc.read_log_done == false) { ! System.err.println("Warning: Timed out waiting for response to read_log command!"); ! } ! } ! ! saveSequenceNo(sequenceNo+1); ! System.exit(0); ! ! } catch(Exception e) { ! e.printStackTrace(); ! } ! ! } ! ! public void messageReceived(int dest_addr, Message m) { ! LogMsg lm = (LogMsg) m; ! System.err.println("Received log message: "+lm); ! ! System.err.print("Log values: "); ! for (int i = 0; i < lm.numElements_log(); i++) { ! short val = lm.getElement_log(i); ! System.err.print(Integer.toHexString((int)val)+" "); ! } ! System.err.println(""); ! ! synchronized (this) { ! read_log_done = true; ! this.notifyAll(); ! } ! } ! ! } ! --- 1,158 ---- ! package org.firebug.gps; ! ! import net.tinyos.util.*; ! import java.io.*; ! import java.util.Properties; ! import net.tinyos.message.*; ! ! public class gpsBcast implements MessageListener { ! static Properties p = new Properties(); ! public static final byte UTC = 1; ! public static final byte LATITUDE = 2; ! public static final byte NS_INDICATOR = 3; ! public static final byte LONGITUDE = 4; ! public static final byte EW_INDICATOR = 5; ! ! public boolean read_log_done = false; ! ! public static final short TOS_BCAST_ADDR = (short) 0xffff; ! ! public static void usage() { ! System.err.println("Usage: java net.tinyos.tools.gpsBcast"+ ! " <group_id> <command> [arguments]"); ! System.err.println("\twhere <command> and [arguments] can be one of the following:"); ! System.err.println("\t\tUTC [dest_address]"); ! System.err.println("\t\tLATITUDE [dest_address]"); ! System.err.println("\t\tNS_INDICATOR [dest_address]"); ! System.err.println("\t\tLONGITUDE [dest_address]"); ! System.err.println("\t\tEW_INDICATOR [dest_address]"); ! } ! ! public static byte restoreSequenceNo() { ! try { ! FileInputStream fis = new FileInputStream("bcast.properties"); ! p.load(fis); ! byte i = (byte)Integer.parseInt(p.getProperty("sequenceNo", "1")); ! fis.close(); ! return i; ! } catch (IOException e) { ! p.setProperty("sequenceNo", "1"); ! return 1; ! } ! } ! public static void saveSequenceNo(int i) { ! try { ! FileOutputStream fos = new FileOutputStream("bcast.properties"); ! p.setProperty("sequenceNo", Integer.toString(i)); ! p.store(fos, "#Properties for gpsBcast\n"); ! } catch (IOException e) { ! System.err.println("Exception while saving sequence number" + ! e); ! e.printStackTrace(); ! } ! } ! ! public static void main(String[] argv) throws IOException{ ! String cmd; ! byte group_id = 0; ! byte sequenceNo = 0; ! ! if (argv.length < 2) { ! usage(); ! System.exit(-1); ! } ! ! try { ! group_id = (byte)(Integer.parseInt(argv[0]) & 0xff); ! } catch (NumberFormatException nfe) { ! usage(); ! System.exit(-1); ! } ! ! cmd = argv[1]; ! ! gpsCmdMsg packet = new gpsCmdMsg(); ! ! sequenceNo = restoreSequenceNo(); ! packet.set_seqno(sequenceNo); ! packet.set_hop_count((short)0); ! packet.set_source(0); ! ! if (cmd.equals("UTC")) { ! packet.set_action(UTC); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("LONGITUDE")) { ! packet.set_action(LONGITUDE); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("NS_INDICATOR")) { ! packet.set_action(NS_INDICATOR); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("LATITUDE")) { ! packet.set_action(LATITUDE); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else if (cmd.equals("EW_INDICATOR")) { ! packet.set_action(EW_INDICATOR); ! short address = (short)Integer.parseInt(argv[2]); ! packet.set_args_rl_args_destaddr(address); ! } else { ! usage(); ! System.exit(-1); ! } ! ! try { ! System.err.print("Sending payload: "); ! for (int i = 0; i < packet.dataLength(); i++) { ! System.err.print(Integer.toHexString(packet.dataGet()[i] & 0xff)+ " "); ! } ! System.err.println(); ! ! MoteIF mote = new MoteIF("127.0.0.1", 9000, group_id); ! ! gpsBcast bc = null; ! bc = new gpsBcast(); ! mote.registerListener(new LogMsg(), bc); ! mote.start(); ! mote.send(TOS_BCAST_ADDR, packet); ! ! synchronized (bc) { ! if (bc.read_log_done == false) { ! System.err.println("Waiting for response to read_log..."); ! bc.wait(10000); ! } ! if (bc.read_log_done == false) { ! System.err.println("Warning: Timed out waiting for response to read_log command!"); ! } ! } ! ! saveSequenceNo(sequenceNo+1); ! System.exit(0); ! ! } catch(Exception e) { ! e.printStackTrace(); ! } ! ! } ! ! public void messageReceived(int dest_addr, Message m) { ! LogMsg lm = (LogMsg) m; ! System.err.println("Received log message: "+lm); ! ! System.err.print("Log values: "); ! for (int i = 0; i < lm.numElements_log(); i++) { ! short val = lm.getElement_log(i); ! System.err.print(Integer.toHexString((int)val)+" "); ! } ! System.err.println(""); ! ! synchronized (this) { ! read_log_done = true; ! this.notifyAll(); ! } ! } ! ! } ! |
|
From: <cs...@us...> - 2003-05-23 15:46:48
|
Update of /cvsroot/firebug/firebug/web In directory sc8-pr-cvs1:/tmp/cvs-serv7036 Modified Files: gps_driver.html Log Message: updated gps doc Index: gps_driver.html =================================================================== RCS file: /cvsroot/firebug/firebug/web/gps_driver.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** gps_driver.html 2 May 2003 17:52:13 -0000 1.3 --- gps_driver.html 23 May 2003 15:15:21 -0000 1.4 *************** *** 1,246 **** ! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ! <html xmlns="http://www.w3.org/1999/xhtml"> ! ! <head> ! <link type="text/css" rel="stylesheet" href="firebug.css"> ! <link rel="SHORTCUT ICON" href="./images/favicon.ico"> ! <title>FireBug --- GPS Driver</title> ! <meta name="author" content="Carmel Majidi, UC Berkeley" /=""> ! </head> ! ! <body> ! ! ! ! <h1>FireBug --- GPS Driver</h1> ! ! ! <p> ! FireBug uses the <tt>gps</tt> driver to interface with a GPS receiver ! and handle location information. ! </p> ! ! <h2>Introduction</h2> ! ! <p> ! The current driver implements standard NMEA protocol to interact ! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on the client mote ! initializes the receiver for GPS Fix Data (GGA) reception. Incoming GGA data ! is checked by the client for validity, parsed, and then stored in its EEPROM ! flash memory. ! </p> ! ! ! <h2>How <tt>gps</tt> works</h2> ! ! <p> ! GPS receivers provide location and time information in a variety ! of data formats. At initialization, the receiver's UART is configured for ! a prescribed baud rate and the desired data format (in our case, GGA) is ! defined. Next, the client's UART is set to the same baud. When the GPS ! module has collected sufficient data to assemble a GGA message it sends ! a start indicator to the client followed by the data sequence and terminator ! over the UART. The location data is extracted and stored in a line of the ! client's EEPROM. ! </p> ! ! <p> ! Values stored in the client's memory can be retrieved and broadcasted over ! the radio at any time with <tt>GenericBase</tt>. Instructions on this are ! given at the end of this guide. ! </p> ! ! <h2>Sending Commands to the Receiver (Initialization)</h2> ! ! <p> ! Communication between the client and receiver is handled by ! <tt>gps_packet.nc</tt>. UART configuration and ! NMEA operational mode messages are sent out via serial using ! the HPLUART interface. To set the receiver to 9600 baud and NMEA ! data format, each character of the command string is first placed ! as an array entry in the buffer, TxBuffer. If nothing else is ! being transmitted at that moment (i.e. TState == GPS_TX_IDLE), ! the message is uploaded to the reciever using the command ! <tt>txPacket</tt> in <tt>gps_packetM.nc</tt>, ! which utilizes the <tt> HPLUART.put</tt> command. ! </p> ! ! ! ! <center> ! <table class="code"> ! <tbody> ! <tr> ! <td width="100%"><b>gps_packetM.nc</b> ! <pre> ...<br> command result_t Packet.gpsSet() {<br> ...<br> pTx = (char *) &TxBuffer;<br> i = (char)strlen(TxBuffer);<br> call txPacket((char *)pTx, i);<br> return SUCCESS;<br> }<br><br> command result_t txPacket(char *msg, uint8 NofBytes){<br> if(TState == GPS_TX_IDLE) {<br> send_ptr = (char*)msg; //save pointer, will pass back at end<br> pTx = (char*)msg; <br> TxMsgLength = NofBytes;<br> tx_count = 1; //first byte being sent<br> TState = GPS_TX_GO;<br> if(call HPLUART.put(pTx[0])) {<br> return SUCCESS;<br> }<br> else {<br> TState = GPS_TX_IDLE;<br> tx_count = 0;<br> return FAIL;<br> }<br> }<br> else{<br> return FAIL;<br> }<br> } ...</pre> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! <p> When UART byte transmission is completed, the event <tt>HPLUART.putDone</tt> ! is signaled, which sets TState back to GPS_TX_IDLE. ! </p> ! ! ! ! ! <h2>Receiving Data from GPS Module</h2> ! ! ! <p> ! When data comes in from the GPS receiver through the UART, the ! event <tt>HPLUART.get(uint8_t data)</tt> is signalled, starting a sequence ! of operations in which the received data is checked, parsed, and the ultimately ! stored. <tt>HPLUART.get</tt> signals <tt>rxPacket</tt> ! in <tt>gps_packetM.nc</tt>, which uses the local function ! <tt>fgpsParse</tt> to extract data from the GGA message and ! build a GPSdataStruct data structure. GPSdataStruct is defined ! in <tt>gps.h</tt>. ! </p> ! ! <center> ! <table class="code"> ! <tbody> ! <tr> ! <td width="100%"><b>gps.h </b> ! <pre> struct GPSMsg {<br> char LatDegrees; //(0-90)<br> char LatMinutes; //(0-59)<br> int LatSeconds; //2 bytes (0-59999)<br> char LongDegrees; //(0-180)<br> char LongMinutes; //(0-59)<br> int LongSeconds; //2 bytes<br> char Status; //(SE=00, SW=01, NE=10, NW=11);<br> };<br></pre> ! <b>gps_packetM.nc</b> ! <pre> ...<br> GPSdataStruct *pGPS;<br> ...<br> void fgpsParse(char *pGGA) {<br><br> pGGA++;<br><br> NS = (pGGA[23]=='N') ? 1 : 0;<br> EW = (pGGA[46]=='W') ? 1 : 0;<br><br> pGPS->LatDegrees = 10*(pGGA[18]-'0') + (pGGA[15]-'0');<br> pGPS->LatMinutes = 10*(pGGA[19]-'0') + (pGGA[17]-'0');<br> pGPS->LatSeconds = 1000*(pGGA[21]-'0') + 100*(pGGA[22]-'0') + 10*(pGGA[23]-'0') + (pGGA[20]-'0');<br> pGPS->LongDegrees = 100*(pGGA[24]-'0') + 10*(pGGA[28]-'0') + (pGGA[25]-'0');<br> pGPS->LongMinutes = 10*(pGGA[29]-'0') + (pGGA[27]-'0');<br> pGPS->LongSeconds = 1000*(pGGA[30]-'0') + 100*(pGGA[31]-'0') + 10*(pGGA[32]-'0') + (pGGA[33]-'0');<br> pGPS->Status = EW | (NS<<4); <br> } <br></pre> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! ! <p><tt>rxPacket</tt> then uses a mask to determine whether the message is ! valid ! </p> ! ! <pre> pGPS = (GPSdataStruct *) &pTOS->data[7];<br> if( pGPS->Status & FIXMASK ) {<br> nmea_ready = TRUE;<br> }<br></pre> ! <p> where pTOS is a TOS_MsgPtr, and nmea_ready is a flag that indicates whether ! the received data can be stored. The command <tt>gpsLog</tt> stores location ! data with <tt>Logger.write(line_number, (char *)gps_data)</tt> .<br> ! </p> ! ! ! ! <h2>Switch Statement</h2> ! ! ! <p> ! GPS initialization and message handling are implemented through a switch ! statement, which allows for the appropriate time delay between successive ! commands. ! </p> ! ! ! <center> ! <table class="code"> ! <tbody> ! <tr class="code"> ! <td width="100%"><b>gpsM.nc</b> ! <pre> command result_t StdControl.start() { ! ClockTickDivider = 0; ! Ticksper100mSec = 12; ! cGPSState = GPS_POWERON; ! call Clock.setRate(TOS_CLK_DIV,2); ! return call SubControl.start(); ! }<br><br> event result_t Clock.fire() { ! ! if (cGPSState == GPS_IDLE) { ! return SUCCESS; ! } ! ! //Handler for high rate user clocks ! ClockTickDivider++; ! if (ClockTickDivider < Ticksper100mSec){ ! return SUCCESS; ! } ! ClockTickDivider = 0; <br><br> switch (cGPSState) { ! ! case GPS_POWERON: ! TOSH_CLR_PW1_PIN(); // Poweron GPS ! call SetBaud(GPS_BAUD4800); ! NextGPSState = GPS_WAKEUP; ! break; ! ! case GPS_WAKEUP: ! call Packet.gpsSet(); // set GPS to 9600 baud, NMEA format ! NextGPSState = GPS_INIT; ! break; ! ! case GPS_INIT: ! call SetBaud(GPS_BAUD9600); ! call Leds.greenOn(); // DEBUG: GPS Initialized ! NextGPSState = GPS_LOCATE; ! break; ! ! case GPS_LOCATE: ! if (call Packet.nmeaReady()) { ! call Packet.gpsLog(); ! NextGPSState = GPS_POWEROFF; ! } ! break; ! ! case GPS_POWEROFF: ! TOSH_SET_PW1_PIN(); // Poweroff GPS ! NextGPSState = GPS_IDLE; ! break; ! } ! ! cGPSState = NextGPSState; ! return SUCCESS; ! }</pre> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! <p>The commands TOSH_CLR_PW1_PIN() and TOSH_CLR_PW1_PIN() power the ! GPS receiver on and off by clearing and setting the first pin on the serial ! port, respectively. Here, TOS_CLK_DIV = 32; hence, the command ! <tt> Clock.SetRate(TOS_CLK_DIV,2)</tt> means that there will be 32 ticks ! per clock firing and 4096 ticks per second -> one clock firing every ! 8 milliseconds. The statement <tt>if(ClockTickDivider < Ticksper100mSec)...</tt> ! is a handler for high rate user clocks. Ticksper100mSec must be set correctly. ! For Ticksper100mSec = 12, the switch statement will be called every ! 12 clock fires (i.e. every 100 msec). That is, subsequent implementation ! commands will occur every 100 msec. </p> ! <p><tt><br> ! </tt></p> ! ! ! <h2>Retrieving Location Information from Client</h2> ! ! ! ! <p> ! To retrieve data, load a second mote with <code>GenericBase</code> and ! perform the following: ! </p> ! ! <ol> ! <li>Leaving the GenericBase mote connected to the programming board, ! start the serial port forwarding service using the command ! <code>java net.tinyos.sf.SerialForward</code> ! </li> ! ! <li>Broadcast retrieve command over the radio: ! <code>java net.tinyos.tools.BcastInject ! <group ID> read_log ! <gps mote ID></code> ! </li> ! ! <li>Packet is sent to the base station via radio ! </li> ! </ol> ! ! <hr /> ! ! <p> ! Last updated: $Date$ by $Author$. ! </p> ! ! </body> ! </html> --- 1,211 ---- ! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ! <html xmlns="http://www.w3.org/1999/xhtml"> ! <head name="author" content="Carmel Majidi, UC Berkeley" /="" type="text/css" rel="stylesheet" href="firebug.css"> ! <title>FireBug --- GPS Driver</title> ! ! <meta name="author" content="Carmel Majidi, UC Berkeley" /=""> ! ! <link type="text/css" rel="stylesheet" href="firebug.css"> ! ! <link rel="SHORTCUT ICON" href="./images/favicon.ico"> ! ! <meta name="author" content="Carmel Majidi, UC Berkeley" /=""> ! </head> ! ! ! ! <body> ! <h1>FireBug --- GPS Driver</h1> ! <p> FireBug uses the <tt>gps</tt> driver to interface with a GPS ! receiver and handle location information. </p> ! <h2>Introduction</h2> ! <p> The current driver implements standard NMEA protocol to interact ! with an AXIOM GPS receiver. Running <tt>gpsM.nc</tt> on the client ! mote initializes the receiver for GPS Fix Data (GGA) reception. Incoming ! GGA data is checked by the client for validity, parsed, and then stored ! in its EEPROM flash memory. </p> ! <h2>How <tt>gps</tt> works</h2> ! <p> GPS receivers provide location and time information in a variety ! of data formats. At initialization, the client's UART is set to ! the same baud rate as the GPS receiver. Next, <tt>clearGPS()</tt> is ! called, which commands the receiver to block all output. The receiver ! requires several seconds before it can start processing NMEA commands ! following power on. For this reason, the first command in <tt>clearGPS()</tt> ! is sent 100 times until the receiver has warmed up.</p> ! <p>For this application, a single GGA message is required. To acquire this, ! <tt>getGPS()</tt> is called, which requests GGA data at 1 Hz. The ! number of satellites used in constructing each GGA message is then determined. ! When this number exceeds three, the corresponding message is parsed ! and stored in the client's EEPROM.</p> ! <p> Values stored in the client's memory can the be retrieved and broadcasted ! over the radio at any time with <tt>GenericBase</tt>. Instructions ! on this are given at the end of this guide. </p> ! <h2>Sending Commands to the Receiver</h2> ! <p> Communication between the client and receiver is handled by <tt> ! gpsM.nc</tt>. After the client's second UART (UART1) is ! set to 4800 baud, NMEA commands may be sent to the gps receiver. For ! SiRF chips, these generally have the form:</p> ! <center> ! <p>$PSRF,103,<b>Message type</b>,00,<b>Rate</b>,01,*<b>Checksum</b></p> ! </center> ! <p>followed by a carriage return ('\r') and linefeed ('\n'). There are six ! message types: </p> ! <center> ! <p>GGA=00, GLL=01, GSA=02, GSV=03, RMC=04, VTG=05</p> ! </center> ! <p> To block output of a certain message type, set Rate = 00. Rate = 01 ! corresponds to a 1 Hz output. Finally, the checksum is computed by performing ! an XOR on all characters, including the comma delimiters, between $ and *. ! Each character of the above string is contained as an element in the array ! <tt> cmd_msg</tt>, which is used throughout <tt>gpsM.nc</tt>. By changing ! array entries, different commands can be sent to the receiver, as shown ! below:</p> ! <center> ! <table class="code"> ! <tbody> ! <tr> ! <td width="100%"><b>gpsM.nc</b> ! <pre> command result_t StdControl.start() {<br><br> j = 0;<br><br> cmd_msg[j++] = '$';<br> cmd_msg[j++] = 'P';<br> cmd_msg[j++] = 'S';<br> cmd_msg[j++] = 'R';<br> cmd_msg[j++] = 'F';<br> cmd_msg[j++] = '1';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = '3';<br> cmd_msg[j++] = ',';<br> cmd_msg[j++] = '0';<br> j++;<br> cmd_msg[j++] = ',';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = ',';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = ',';<br> cmd_msg[j++] = '0';<br> cmd_msg[j++] = '1';<br> cmd_msg[j++] = '*';<br> cmd_msg[j++] = '2';<br> j++;<br> cmd_msg[j++] = '\r';<br> cmd_msg[j++] = '\n';<br> cmd_msg[j++] = 0x00;<br><br> call clearGPS();<br> call getGPS();<br> return call SubControl.start();<br> }<br><br> command result_t clearGPS() { <br> ...<br> // Clear GLL<br> cmd_msg[10] = '1';<br> cmd_msg[22] = '5';<br> for (i = 0; i < j; i++){<br> loop_until_bit_is_set(UCSR1A, UDRE);<br> outb(UDR1,cmd_msg[i]);<br> }<br> ...<br> }<br><br> command result_t getGPS() { <br> ...<br> // Request GGA data at 1 Hz<br> cmd_msg[10] = '0';<br> cmd_msg[16] = '1';<br> cmd_msg[22] = '5';<br> for (i = 0; i < j; i++){<br> loop_until_bit_is_set(UCSR1A, UDRE);<br> outb(UDR1,cmd_msg[i]);<br> }<br> ...<br> }<br></pre> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! <p>Here, the command outb(UDR1,cmd_msg[i]) sends the byte at entry <i>i</i> ! of <tt>cmd_msg</tt> out to UART1. </p> ! <h2>Receiving Data from GPS Module</h2> ! <p>Data enters into the client from the receiver via UART1. Messages from ! the receiver are collected byte by byte with the command <tt>inp(UDR1)</tt> ! and temporarily stored in an array, <tt>rxBuffer</tt>. Data is ! collected only after the GGA start sequence, <tt>$GPGGA</tt>, is completed. ! Collection stops when the * delimiter is reached, after which point, ! the 40th and 41st entries of the buffer are combined to determine the number ! of satellites, i.e.</p> ! <center> ! <p>num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0');</p> ! </center> ! <p>If <tt>num_satellite</tt> < 4, <tt>rxBuffer</tt> is cleared and the ! client waits again for the GGA start sequence to pass in the subsequent ! message until it resumes data collection. Otherwise, the data stored in ! the buffer is parsed and stored in EEPRROM using <tt>logGPS</tt>.</p> ! <center> ! <table class="code"> ! <tbody> ! <tr> ! <td width="100%"> ! <pre> command result_t getGPS() {<br> ... <br> while(num_satellites < 4) {<br> k = 0;<br> incoming = TRUE;<br> call waitGPS();<br> while(incoming) {<br> if (inp(UCSR1A) & (1 << RXC)){<br> data = inp(UDR1);<br> if (data == '*') {<br> incoming = FALSE;<br> }<br> rxBuffer[k++] = data;<br> }<br> }<br> num_satellites = 10*(rxBuffer[40] - '0') + (rxBuffer[41] - '0'); <br> }<br><br> // Parse and store input<br> call logGPS(rxBuffer);<br> return SUCCESS;<br> }<br><br> command result_t waitGPS() {<br> uint8_t last[3]; // array of last 3 characters from GPS <br> bool waiting = TRUE;<br> <br> while(waiting) {<br> last[3] = last[2];<br> last[2] = last[1];<br> if (inp(UCSR1A) & (1 << RXC)) {<br> last[1] = inp(UDR1);<br> }<br> if(last[3]=='G') {<br> if(last[2]=='G') {<br> if(last[1]=='A') {<br> waiting = FALSE;<br> }<br> }<br> }<br> }<br> return SUCCESS;<br> }<br></pre> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! <h2>Logging and Retrieving Data</h2> ! <p>Fields in the GGA message are comma delimited. These are parsed with <tt> ! logGPS()</tt>, which simultaneously stores the data into the client's EEPROM ! using <tt>LoggerWrite.write</tt>. One line of memory is reserved for each ! field, and these are numbered as follows:<br> ! <br> ! </p> ! <center> ! <table class="code"> ! <tbody> ! <tr> ! <td valign="Top"><b>Field</b><br> ! </td> ! <td valign="Top"><b>Line #<br> ! </b></td> ! <td valign="Top"><b>Field<br> ! </b></td> ! <td valign="Top"><b>Line #</b><br> ! </td> ! </tr> ! <tr> ! <td valign="Top">UTC Position<br> ! </td> ! <td valign="Top">25<br> ! </td> ! <td valign="Top">HDOP<br> ! </td> ! <td valign="Top">32<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">Latitude<br> ! </td> ! <td valign="Top">26<br> ! </td> ! <td valign="Top">MSL Altitude<br> ! </td> ! <td valign="Top">33<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">N/S Indicator<br> ! </td> ! <td valign="Top">27<br> ! </td> ! <td valign="Top">Altitude Units<br> ! </td> ! <td valign="Top">34<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">Longitude<br> ! </td> ! <td valign="Top">28<br> ! </td> ! <td valign="Top">Geoid Separation<br> ! </td> ! <td valign="Top">35<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">E/W Indicator<br> ! </td> ! <td valign="Top">29<br> ! </td> ! <td valign="Top">Separation Units<br> ! </td> ! <td valign="Top">36<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">Position Fix Indicator<br> ! </td> ! <td valign="Top">30<br> ! </td> ! <td valign="Top">Age of DGPS Correlation<br> ! </td> ! <td valign="Top">37<br> ! </td> ! </tr> ! <tr> ! <td valign="Top">Satellites Used<br> ! </td> ! <td valign="Top">31<br> ! </td> ! <td valign="Top">DGPS Reference Station ID<br> ! </td> ! <td valign="Top">39<br> ! </td> ! </tr> ! </tbody> ! </table> ! </center> ! <p> To retrieve data, load a second mote with <code>GenericBase</code> and ! perform the following: </p> ! <ol> ! <li>Leaving the GenericBase mote connected to the programming board, ! start the serial port forwarding service using the command ! <code>java net.tinyos.sf.SerialForward</code></li> ! <li>Broadcast retrieve command over the radio: <code>java net.tinyos.tools.gpsBcast ! <group ID> <b>Field Name</b> <gps mote ! ID></code></li> ! <li>Packet is sent to the base station via radio. Contained in the packet ! payload is the data for the selected field. </li> ! </ol> ! <hr /=""> ! <p> Last updated: $Date$ by $Author$. ! </p> ! </body> ! </html> |
|
From: <cs...@us...> - 2003-05-23 15:44:57
|
Update of /cvsroot/firebug/firebug/project/java/src/org/firebug/gps
In directory sc8-pr-cvs1:/tmp/cvs-serv14871
Added Files:
LogMsg.java gpsBcast.java gpsCmdMsg.java
Log Message:
gps java files added
--- NEW FILE: LogMsg.java ---
/**
* This class is automatically generated by mig. DO NOT EDIT THIS FILE.
* This class implements a Java interface to the 'LogMsg'
* message type.
*/
package org.firebug.gps;
public class LogMsg extends net.tinyos.message.Message {
/** The default size of this message type in bytes. */
public static final int DEFAULT_MESSAGE_SIZE = 18;
/** The Active Message type associated with this message. */
public static final int AM_TYPE = 9;
/** Create a new LogMsg of size 18. */
public LogMsg() {
super(DEFAULT_MESSAGE_SIZE);
amTypeSet(AM_TYPE);
}
/** Create a new LogMsg of the given data_length. */
public LogMsg(int data_length) {
super(data_length);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg with the given data_length
* and base offset.
*/
public LogMsg(int data_length, int base_offset) {
super(data_length, base_offset);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg using the given byte array
* as backing store.
*/
public LogMsg(byte[] data) {
super(data);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg using the given byte array
* as backing store, with the given base offset.
*/
public LogMsg(byte[] data, int base_offset) {
super(data, base_offset);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg using the given byte array
* as backing store, with the given base offset and data length.
*/
public LogMsg(byte[] data, int base_offset, int data_length) {
super(data, base_offset, data_length);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg embedded in the given message
* at the given base offset.
*/
public LogMsg(net.tinyos.message.Message msg, int base_offset) {
super(msg, base_offset, DEFAULT_MESSAGE_SIZE);
amTypeSet(AM_TYPE);
}
/**
* Create a new LogMsg embedded in the given message
* at the given base offset and length.
*/
public LogMsg(net.tinyos.message.Message msg, int base_offset, int data_length) {
super(msg, base_offset, data_length);
amTypeSet(AM_TYPE);
}
/**
/* Return a String representation of this message. Includes the
* message type name and the non-indexed field values.
*/
public String toString() {
String s = "Message <LogMsg> \n";
try {
s += " [sourceaddr=0x"+Long.toHexString(get_sourceaddr())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [log=";
for (int i = 0; i < 16; i++) {
s += "0x"+Long.toHexString(getElement_log(i) & 0xff)+" ";
}
s += "]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
return s;
}
// Message-type-specific access methods appear below.
/////////////////////////////////////////////////////////
// Accessor methods for field: sourceaddr
// Field type: int, unsigned
// Offset (bits): 0
// Size (bits): 16
/////////////////////////////////////////////////////////
/**
* Return whether the field 'sourceaddr' is signed (false).
*/
public static boolean isSigned_sourceaddr() {
return false;
}
/**
* Return whether the field 'sourceaddr' is an array (false).
*/
public static boolean isArray_sourceaddr() {
return false;
}
/**
* Return the offset (in bytes) of the field 'sourceaddr'
*/
public static int offset_sourceaddr() {
return (0 / 8);
}
/**
* Return the offset (in bits) of the field 'sourceaddr'
*/
public static int offsetBits_sourceaddr() {
return 0;
}
/**
* Return the value (as a int) of the field 'sourceaddr'
*/
public int get_sourceaddr() {
return (int)getUIntElement(offsetBits_sourceaddr(), 16);
}
/**
* Set the value of the field 'sourceaddr'
*/
public void set_sourceaddr(int value) {
setUIntElement(offsetBits_sourceaddr(), 16, value);
}
/**
* Return the size, in bytes, of the field 'sourceaddr'
*/
public static int size_sourceaddr() {
return (16 / 8);
}
/**
* Return the size, in bits, of the field 'sourceaddr'
*/
public static int sizeBits_sourceaddr() {
return 16;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: log
// Field type: short[], unsigned
// Offset (bits): 16
// Size of each element (bits): 8
/////////////////////////////////////////////////////////
/**
* Return whether the field 'log' is signed (false).
*/
public static boolean isSigned_log() {
return false;
}
/**
* Return whether the field 'log' is an array (true).
*/
public static boolean isArray_log() {
return true;
}
/**
* Return the offset (in bytes) of the field 'log'
*/
public static int offset_log(int index1) {
int offset = 16;
if (index1 < 0 || index1 >= 16) throw new ArrayIndexOutOfBoundsException();
offset += 0 + index1 * 8;
return (offset / 8);
}
/**
* Return the offset (in bits) of the field 'log'
*/
public static int offsetBits_log(int index1) {
int offset = 16;
if (index1 < 0 || index1 >= 16) throw new ArrayIndexOutOfBoundsException();
offset += 0 + index1 * 8;
return offset;
}
/**
* Return the entire array 'log' as a short[]
*/
public short[] get_log() {
short[] tmp = new short[16];
for (int index0 = 0; index0 < numElements_log(0); index0++) {
tmp[index0] = getElement_log(index0);
}
return tmp;
}
/**
* Set the contents of the array 'log' from the given short[]
*/
public void set_log(short[] value) {
for (int index0 = 0; index0 < value.length; index0++) {
setElement_log(index0, value[index0]);
}
}
/**
* Return an element (as a short) of the array 'log'
*/
public short getElement_log(int index1) {
return (short)getUIntElement(offsetBits_log(index1), 8);
}
/**
* Set an element of the array 'log'
*/
public void setElement_log(int index1, short value) {
setUIntElement(offsetBits_log(index1), 8, value);
}
/**
* Return the total size, in bytes, of the array 'log'
*/
public static int totalSize_log() {
return (128 / 8);
}
/**
* Return the total size, in bits, of the array 'log'
*/
public static int totalSizeBits_log() {
return 128;
}
/**
* Return the size, in bytes, of each element of the array 'log'
*/
public static int elementSize_log() {
return (8 / 8);
}
/**
* Return the size, in bits, of each element of the array 'log'
*/
public static int elementSizeBits_log() {
return 8;
}
/**
* Return the number of dimensions in the array 'log'
*/
public static int numDimensions_log() {
return 1;
}
/**
* Return the number of elements in the array 'log'
*/
public static int numElements_log() {
return 16;
}
/**
* Return the number of elements in the array 'log'
* for the given dimension.
*/
public static int numElements_log(int dimension) {
int array_dims[] = { 16, };
if (dimension < 0 || dimension >= 1) throw new ArrayIndexOutOfBoundsException();
if (array_dims[dimension] == 0) throw new IllegalArgumentException("Array dimension "+dimension+" has unknown size");
return array_dims[dimension];
}
/**
* Fill in the array 'log' with a String
*/
public void setString_log(String s) {
int len = s.length();
int i;
for (i = 0; i < len; i++) {
setElement_log(i, (short)s.charAt(i));
}
setElement_log(i, (short)0); //null terminate
}
/**
* Read the array 'log' as a String
*/
public String getString_log() {
char carr[] = new char[Math.min(net.tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH,16)];
int i;
for (i = 0; i < carr.length; i++) {
if ((char)getElement_log(i) == (char)0) break;
carr[i] = (char)getElement_log(i);
}
return new String(carr,0,i);
}
}
--- NEW FILE: gpsBcast.java ---
package org.firebug.gps;
import net.tinyos.util.*;
import java.io.*;
import java.util.Properties;
import net.tinyos.message.*;
public class gpsBcast implements MessageListener {
static Properties p = new Properties();
public static final byte UTC = 1;
public static final byte LONGITUDE = 2;
public static final byte NS_INDICATOR = 3;
public static final byte LATITUDE = 4;
public static final byte EW_INDICATOR = 5;
public boolean read_log_done = false;
public static final short TOS_BCAST_ADDR = (short) 0xffff;
public static void usage() {
System.err.println("Usage: java net.tinyos.tools.gpsBcast"+
" <group_id> <command> [arguments]");
System.err.println("\twhere <command> and [arguments] can be one of the following:");
System.err.println("\t\tUTC [dest_address]");
System.err.println("\t\tLONGITUDE [dest_address]");
System.err.println("\t\tNS_INDICATOR [dest_address]");
System.err.println("\t\tLATITUDE [dest_address]");
System.err.println("\t\tEW_INDICATOR [dest_address]");
}
public static byte restoreSequenceNo() {
try {
FileInputStream fis = new FileInputStream("bcast.properties");
p.load(fis);
byte i = (byte)Integer.parseInt(p.getProperty("sequenceNo", "1"));
fis.close();
return i;
} catch (IOException e) {
p.setProperty("sequenceNo", "1");
return 1;
}
}
public static void saveSequenceNo(int i) {
try {
FileOutputStream fos = new FileOutputStream("bcast.properties");
p.setProperty("sequenceNo", Integer.toString(i));
p.store(fos, "#Properties for gpsBcast\n");
} catch (IOException e) {
System.err.println("Exception while saving sequence number" +
e);
e.printStackTrace();
}
}
public static void main(String[] argv) throws IOException{
String cmd;
byte group_id = 0;
byte sequenceNo = 0;
if (argv.length < 2) {
usage();
System.exit(-1);
}
try {
group_id = (byte)(Integer.parseInt(argv[0]) & 0xff);
} catch (NumberFormatException nfe) {
usage();
System.exit(-1);
}
cmd = argv[1];
gpsCmdMsg packet = new gpsCmdMsg();
sequenceNo = restoreSequenceNo();
packet.set_seqno(sequenceNo);
packet.set_hop_count((short)0);
packet.set_source(0);
if (cmd.equals("UTC")) {
packet.set_action(UTC);
short address = (short)Integer.parseInt(argv[2]);
packet.set_args_rl_args_destaddr(address);
} else if (cmd.equals("LONGITUDE")) {
packet.set_action(LONGITUDE);
short address = (short)Integer.parseInt(argv[2]);
packet.set_args_rl_args_destaddr(address);
} else if (cmd.equals("NS_INDICATOR")) {
packet.set_action(NS_INDICATOR);
short address = (short)Integer.parseInt(argv[2]);
packet.set_args_rl_args_destaddr(address);
} else if (cmd.equals("LATITUDE")) {
packet.set_action(LATITUDE);
short address = (short)Integer.parseInt(argv[2]);
packet.set_args_rl_args_destaddr(address);
} else if (cmd.equals("EW_INDICATOR")) {
packet.set_action(EW_INDICATOR);
short address = (short)Integer.parseInt(argv[2]);
packet.set_args_rl_args_destaddr(address);
} else {
usage();
System.exit(-1);
}
try {
System.err.print("Sending payload: ");
for (int i = 0; i < packet.dataLength(); i++) {
System.err.print(Integer.toHexString(packet.dataGet()[i] & 0xff)+ " ");
}
System.err.println();
MoteIF mote = new MoteIF("127.0.0.1", 9000, group_id);
gpsBcast bc = null;
bc = new gpsBcast();
mote.registerListener(new LogMsg(), bc);
mote.start();
mote.send(TOS_BCAST_ADDR, packet);
synchronized (bc) {
if (bc.read_log_done == false) {
System.err.println("Waiting for response to read_log...");
bc.wait(10000);
}
if (bc.read_log_done == false) {
System.err.println("Warning: Timed out waiting for response to read_log command!");
}
}
saveSequenceNo(sequenceNo+1);
System.exit(0);
} catch(Exception e) {
e.printStackTrace();
}
}
public void messageReceived(int dest_addr, Message m) {
LogMsg lm = (LogMsg) m;
System.err.println("Received log message: "+lm);
System.err.print("Log values: ");
for (int i = 0; i < lm.numElements_log(); i++) {
short val = lm.getElement_log(i);
System.err.print(Integer.toHexString((int)val)+" ");
}
System.err.println("");
synchronized (this) {
read_log_done = true;
this.notifyAll();
}
}
}
--- NEW FILE: gpsCmdMsg.java ---
/**
* This class is automatically generated by mig. DO NOT EDIT THIS FILE.
* This class implements a Java interface to the 'gpsCmdMsg'
* message type.
*/
package org.firebug.gps;
public class gpsCmdMsg extends net.tinyos.message.Message {
/** The default size of this message type in bytes. */
public static final int DEFAULT_MESSAGE_SIZE = 11;
/** The Active Message type associated with this message. */
public static final int AM_TYPE = 8;
/** Create a new gpsCmdMsg of size 11. */
public gpsCmdMsg() {
super(DEFAULT_MESSAGE_SIZE);
amTypeSet(AM_TYPE);
}
/** Create a new gpsCmdMsg of the given data_length. */
public gpsCmdMsg(int data_length) {
super(data_length);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg with the given data_length
* and base offset.
*/
public gpsCmdMsg(int data_length, int base_offset) {
super(data_length, base_offset);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg using the given byte array
* as backing store.
*/
public gpsCmdMsg(byte[] data) {
super(data);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg using the given byte array
* as backing store, with the given base offset.
*/
public gpsCmdMsg(byte[] data, int base_offset) {
super(data, base_offset);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg using the given byte array
* as backing store, with the given base offset and data length.
*/
public gpsCmdMsg(byte[] data, int base_offset, int data_length) {
super(data, base_offset, data_length);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg embedded in the given message
* at the given base offset.
*/
public gpsCmdMsg(net.tinyos.message.Message msg, int base_offset) {
super(msg, base_offset, DEFAULT_MESSAGE_SIZE);
amTypeSet(AM_TYPE);
}
/**
* Create a new gpsCmdMsg embedded in the given message
* at the given base offset and length.
*/
public gpsCmdMsg(net.tinyos.message.Message msg, int base_offset, int data_length) {
super(msg, base_offset, data_length);
amTypeSet(AM_TYPE);
}
/**
/* Return a String representation of this message. Includes the
* message type name and the non-indexed field values.
*/
public String toString() {
String s = "Message <gpsCmdMsg> \n";
try {
s += " [seqno=0x"+Long.toHexString(get_seqno())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [action=0x"+Long.toHexString(get_action())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [source=0x"+Long.toHexString(get_source())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [hop_count=0x"+Long.toHexString(get_hop_count())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [args.ss_args.nsamples=0x"+Long.toHexString(get_args_ss_args_nsamples())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [args.ss_args.interval=0x"+Long.toHexString(get_args_ss_args_interval())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
s += " [args.rl_args.destaddr=0x"+Long.toHexString(get_args_rl_args_destaddr())+"]\n";
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
try {
} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }
return s;
}
// Message-type-specific access methods appear below.
/////////////////////////////////////////////////////////
// Accessor methods for field: seqno
// Field type: byte
// Offset (bits): 0
// Size (bits): 8
/////////////////////////////////////////////////////////
/**
* Return whether the field 'seqno' is signed (false).
*/
public static boolean isSigned_seqno() {
return false;
}
/**
* Return whether the field 'seqno' is an array (false).
*/
public static boolean isArray_seqno() {
return false;
}
/**
* Return the offset (in bytes) of the field 'seqno'
*/
public static int offset_seqno() {
return (0 / 8);
}
/**
* Return the offset (in bits) of the field 'seqno'
*/
public static int offsetBits_seqno() {
return 0;
}
/**
* Return the value (as a byte) of the field 'seqno'
*/
public byte get_seqno() {
return (byte)getSIntElement(offsetBits_seqno(), 8);
}
/**
* Set the value of the field 'seqno'
*/
public void set_seqno(byte value) {
setSIntElement(offsetBits_seqno(), 8, value);
}
/**
* Return the size, in bytes, of the field 'seqno'
*/
public static int size_seqno() {
return (8 / 8);
}
/**
* Return the size, in bits, of the field 'seqno'
*/
public static int sizeBits_seqno() {
return 8;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: action
// Field type: byte
// Offset (bits): 8
// Size (bits): 8
/////////////////////////////////////////////////////////
/**
* Return whether the field 'action' is signed (false).
*/
public static boolean isSigned_action() {
return false;
}
/**
* Return whether the field 'action' is an array (false).
*/
public static boolean isArray_action() {
return false;
}
/**
* Return the offset (in bytes) of the field 'action'
*/
public static int offset_action() {
return (8 / 8);
}
/**
* Return the offset (in bits) of the field 'action'
*/
public static int offsetBits_action() {
return 8;
}
/**
* Return the value (as a byte) of the field 'action'
*/
public byte get_action() {
return (byte)getSIntElement(offsetBits_action(), 8);
}
/**
* Set the value of the field 'action'
*/
public void set_action(byte value) {
setSIntElement(offsetBits_action(), 8, value);
}
/**
* Return the size, in bytes, of the field 'action'
*/
public static int size_action() {
return (8 / 8);
}
/**
* Return the size, in bits, of the field 'action'
*/
public static int sizeBits_action() {
return 8;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: source
// Field type: int
// Offset (bits): 16
// Size (bits): 16
/////////////////////////////////////////////////////////
/**
* Return whether the field 'source' is signed (false).
*/
public static boolean isSigned_source() {
return false;
}
/**
* Return whether the field 'source' is an array (false).
*/
public static boolean isArray_source() {
return false;
}
/**
* Return the offset (in bytes) of the field 'source'
*/
public static int offset_source() {
return (16 / 8);
}
/**
* Return the offset (in bits) of the field 'source'
*/
public static int offsetBits_source() {
return 16;
}
/**
* Return the value (as a int) of the field 'source'
*/
public int get_source() {
return (int)getUIntElement(offsetBits_source(), 16);
}
/**
* Set the value of the field 'source'
*/
public void set_source(int value) {
setUIntElement(offsetBits_source(), 16, value);
}
/**
* Return the size, in bytes, of the field 'source'
*/
public static int size_source() {
return (16 / 8);
}
/**
* Return the size, in bits, of the field 'source'
*/
public static int sizeBits_source() {
return 16;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: hop_count
// Field type: short
// Offset (bits): 32
// Size (bits): 8
/////////////////////////////////////////////////////////
/**
* Return whether the field 'hop_count' is signed (false).
*/
public static boolean isSigned_hop_count() {
return false;
}
/**
* Return whether the field 'hop_count' is an array (false).
*/
public static boolean isArray_hop_count() {
return false;
}
/**
* Return the offset (in bytes) of the field 'hop_count'
*/
public static int offset_hop_count() {
return (32 / 8);
}
/**
* Return the offset (in bits) of the field 'hop_count'
*/
public static int offsetBits_hop_count() {
return 32;
}
/**
* Return the value (as a short) of the field 'hop_count'
*/
public short get_hop_count() {
return (short)getUIntElement(offsetBits_hop_count(), 8);
}
/**
* Set the value of the field 'hop_count'
*/
public void set_hop_count(short value) {
setUIntElement(offsetBits_hop_count(), 8, value);
}
/**
* Return the size, in bytes, of the field 'hop_count'
*/
public static int size_hop_count() {
return (8 / 8);
}
/**
* Return the size, in bits, of the field 'hop_count'
*/
public static int sizeBits_hop_count() {
return 8;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: args.ss_args.nsamples
// Field type: short
// Offset (bits): 40
// Size (bits): 16
/////////////////////////////////////////////////////////
/**
* Return whether the field 'args.ss_args.nsamples' is signed (false).
*/
public static boolean isSigned_args_ss_args_nsamples() {
return false;
}
/**
* Return whether the field 'args.ss_args.nsamples' is an array (false).
*/
public static boolean isArray_args_ss_args_nsamples() {
return false;
}
/**
* Return the offset (in bytes) of the field 'args.ss_args.nsamples'
*/
public static int offset_args_ss_args_nsamples() {
return (40 / 8);
}
/**
* Return the offset (in bits) of the field 'args.ss_args.nsamples'
*/
public static int offsetBits_args_ss_args_nsamples() {
return 40;
}
/**
* Return the value (as a short) of the field 'args.ss_args.nsamples'
*/
public short get_args_ss_args_nsamples() {
return (short)getSIntElement(offsetBits_args_ss_args_nsamples(), 16);
}
/**
* Set the value of the field 'args.ss_args.nsamples'
*/
public void set_args_ss_args_nsamples(short value) {
setSIntElement(offsetBits_args_ss_args_nsamples(), 16, value);
}
/**
* Return the size, in bytes, of the field 'args.ss_args.nsamples'
*/
public static int size_args_ss_args_nsamples() {
return (16 / 8);
}
/**
* Return the size, in bits, of the field 'args.ss_args.nsamples'
*/
public static int sizeBits_args_ss_args_nsamples() {
return 16;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: args.ss_args.interval
// Field type: long
// Offset (bits): 56
// Size (bits): 32
/////////////////////////////////////////////////////////
/**
* Return whether the field 'args.ss_args.interval' is signed (false).
*/
public static boolean isSigned_args_ss_args_interval() {
return false;
}
/**
* Return whether the field 'args.ss_args.interval' is an array (false).
*/
public static boolean isArray_args_ss_args_interval() {
return false;
}
/**
* Return the offset (in bytes) of the field 'args.ss_args.interval'
*/
public static int offset_args_ss_args_interval() {
return (56 / 8);
}
/**
* Return the offset (in bits) of the field 'args.ss_args.interval'
*/
public static int offsetBits_args_ss_args_interval() {
return 56;
}
/**
* Return the value (as a long) of the field 'args.ss_args.interval'
*/
public long get_args_ss_args_interval() {
return (long)getUIntElement(offsetBits_args_ss_args_interval(), 32);
}
/**
* Set the value of the field 'args.ss_args.interval'
*/
public void set_args_ss_args_interval(long value) {
setUIntElement(offsetBits_args_ss_args_interval(), 32, value);
}
/**
* Return the size, in bytes, of the field 'args.ss_args.interval'
*/
public static int size_args_ss_args_interval() {
return (32 / 8);
}
/**
* Return the size, in bits, of the field 'args.ss_args.interval'
*/
public static int sizeBits_args_ss_args_interval() {
return 32;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: args.rl_args.destaddr
// Field type: int
// Offset (bits): 40
// Size (bits): 16
/////////////////////////////////////////////////////////
/**
* Return whether the field 'args.rl_args.destaddr' is signed (false).
*/
public static boolean isSigned_args_rl_args_destaddr() {
return false;
}
/**
* Return whether the field 'args.rl_args.destaddr' is an array (false).
*/
public static boolean isArray_args_rl_args_destaddr() {
return false;
}
/**
* Return the offset (in bytes) of the field 'args.rl_args.destaddr'
*/
public static int offset_args_rl_args_destaddr() {
return (40 / 8);
}
/**
* Return the offset (in bits) of the field 'args.rl_args.destaddr'
*/
public static int offsetBits_args_rl_args_destaddr() {
return 40;
}
/**
* Return the value (as a int) of the field 'args.rl_args.destaddr'
*/
public int get_args_rl_args_destaddr() {
return (int)getUIntElement(offsetBits_args_rl_args_destaddr(), 16);
}
/**
* Set the value of the field 'args.rl_args.destaddr'
*/
public void set_args_rl_args_destaddr(int value) {
setUIntElement(offsetBits_args_rl_args_destaddr(), 16, value);
}
/**
* Return the size, in bytes, of the field 'args.rl_args.destaddr'
*/
public static int size_args_rl_args_destaddr() {
return (16 / 8);
}
/**
* Return the size, in bits, of the field 'args.rl_args.destaddr'
*/
public static int sizeBits_args_rl_args_destaddr() {
return 16;
}
/////////////////////////////////////////////////////////
// Accessor methods for field: args.untyped_args
// Field type: short[]
// Offset (bits): 40
// Size of each element (bits): 8
/////////////////////////////////////////////////////////
/**
* Return whether the field 'args.untyped_args' is signed (false).
*/
public static boolean isSigned_args_untyped_args() {
return false;
}
/**
* Return whether the field 'args.untyped_args' is an array (true).
*/
public static boolean isArray_args_untyped_args() {
return true;
}
/**
* Return the offset (in bytes) of the field 'args.untyped_args'
*/
public static int offset_args_untyped_args(int index1) {
int offset = 40;
if (index1 < 0) throw new ArrayIndexOutOfBoundsException();
offset += 0 + index1 * 8;
return (offset / 8);
}
/**
* Return the offset (in bits) of the field 'args.untyped_args'
*/
public static int offsetBits_args_untyped_args(int index1) {
int offset = 40;
if (index1 < 0) throw new ArrayIndexOutOfBoundsException();
offset += 0 + index1 * 8;
return offset;
}
/**
* Return the entire array 'args.untyped_args' as a short[]
*/
public short[] get_args_untyped_args() {
throw new IllegalArgumentException("Cannot get field as array - unknown size");
}
/**
* Set the contents of the array 'args.untyped_args' from the given short[]
*/
public void set_args_untyped_args(short[] value) {
for (int index0 = 0; index0 < value.length; index0++) {
setElement_args_untyped_args(index0, value[index0]);
}
}
/**
* Return an element (as a short) of the array 'args.untyped_args'
*/
public short getElement_args_untyped_args(int index1) {
return (short)getUIntElement(offsetBits_args_untyped_args(index1), 8);
}
/**
* Set an element of the array 'args.untyped_args'
*/
public void setElement_args_untyped_args(int index1, short value) {
setUIntElement(offsetBits_args_untyped_args(index1), 8, value);
}
/**
* Return the size, in bytes, of each element of the array 'args.untyped_args'
*/
public static int elementSize_args_untyped_args() {
return (8 / 8);
}
/**
* Return the size, in bits, of each element of the array 'args.untyped_args'
*/
public static int elementSizeBits_args_untyped_args() {
return 8;
}
/**
* Return the number of dimensions in the array 'args.untyped_args'
*/
public static int numDimensions_args_untyped_args() {
return 1;
}
/**
* Return the number of elements in the array 'args.untyped_args'
* for the given dimension.
*/
public static int numElements_args_untyped_args(int dimension) {
int array_dims[] = { 0, };
if (dimension < 0 || dimension >= 1) throw new ArrayIndexOutOfBoundsException();
if (array_dims[dimension] == 0) throw new IllegalArgumentException("Array dimension "+dimension+" has unknown size");
return array_dims[dimension];
}
/**
* Fill in the array 'args.untyped_args' with a String
*/
public void setString_args_untyped_args(String s) {
int len = s.length();
int i;
for (i = 0; i < len; i++) {
setElement_args_untyped_args(i, (short)s.charAt(i));
}
setElement_args_untyped_args(i, (short)0); //null terminate
}
/**
* Read the array 'args.untyped_args' as a String
*/
public String getString_args_untyped_args() {
char carr[] = new char[net.tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH];
int i;
for (i = 0; i < carr.length; i++) {
if ((char)getElement_args_untyped_args(i) == (char)0) break;
carr[i] = (char)getElement_args_untyped_args(i);
}
return new String(carr,0,i);
}
}
|