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); } } |