http://andromeda.df.lu.lv/wiki/api.php?action=feedcontributions&user=Girts&feedformat=atomDiLab - User contributions [en]2024-03-28T11:14:48ZUser contributionsMediaWiki 1.31.0http://andromeda.df.lu.lv/wiki/index.php?title=Main_Page&diff=4001Main Page2012-10-29T09:24:22Z<p>Girts: /* Kursi */</p>
<hr />
<div>{{Google1|1|'''Sveiks DiLab-ā / Welcome to DILab Wiki'''}}<br />
{{TocRight}}<br />
{| <br />
| <br />
Datoru inženierijas,<br />
Iegulto sistēmu un sensoru laboratorija,<br />
Datorikas Fakultāte, <br />
Latvijas Universitāte<br />
| :: ::<br />
|<br />
Computer Engineering, Embedded Systems and Sensors Lab, <br />
Faculty of Computing, <br />
University of Latvia<br />
|}<br />
<br />
== Kursi == <br />
<br />
* [[Leo:Kursi | '''Mācību kursi''']] Latvijas Universitātē, Datorikas Fakultātes ietvaros''<br />
** 2011 rudens: <big> [[LU-LSP-b11 | LSP-b]], [[LU-DIP-b11 | DIP-b]], [[LU-BST-b12 | BST-b]], [[LU-VIV-m11 | VIV-m]], [[LU-OSI-m11 | OSI-m]]</big><br />
<br />
* [http://selavo.lv/df Datorikas Fakultāte] - neoficialā LU DF informācijas lapa (un oficiālais [http://www.df.lu.lv LU DF portāls])<br />
<br />
== Projekti ==<br />
<br />
* [[MansOS]]<br />
* LU DF [[Robotikas klubs]], un mūsu [[Roboti]], to izstrāde [http://www.eurobot.org/eng/ EuroBot], Robotikas un citām sacensībām<br />
* [[GCDC]] - gatavošanās dalībai Grand Cooperative Driving Challenge<br />
** [http://www.youtube.com/watch?v=se3FAM_yR2U&feature=player_embedded LU + EDI GCDC komandas video]<br />
** [http://www.gcdc.net/mainmenu/Home/news/Reuters%27_Reportage_has_been_broadcasted_on... GCDC Reuters video]<br />
** [http://www.edi.lv/en/home/events/gcdc/ GCDC-2011 EDI ziņās]<br />
* [[LynxNet]] - Sensori lūšu dzīves novērošanai<br />
* [[Smart-Buildings | Viedās ēkas]] - kiberfizikālās sistēmas komfortam, produktivitātei un energoefektivitātei.<br />
* [[SAD]] - Sensori Augļu Dārzā.<br />
<br />
* Senāki projekti<br />
** VIVE - Virtuālā vide (ViV kursa projekts)<br />
** [[AutoPilsēta]]<br />
<br />
== Cilvēki ==<br />
<br />
Pētnieki<br />
<br />
* [[User:Leo | Leo Seļāvo]] ''(Dr.dat.zin.)''<br />
* Ivars Driķis ''(Dr.fiz.)''<br />
<br />
<br />
Doktoranti un maģistranti<br />
<br />
* [[User:Girts | Ģirts Strazdiņš]] ''(dokt.stud.)''<br />
* [[User:Atis | Atis Elsts]] ''(dokt.stud.)''<br />
* [[User:Reinis | Reinholds Zviedris]] ''(dokt.stud.)''<br />
<br />
<!--Studenti (bakalauri)<br />
--><br />
<br />
Mācību (palīg)spēki<br />
* Artis Mednis<br />
* [[User:Girts | Ģirts Strazdiņš]]<br />
* [[User:CaptSolo | Uldis Bojārs]]<br />
<br />
<br />
Alumni<br />
<br />
* Jānis Timma<br />
* Rūdolfs Bundulis<br />
* Georgijs Kanonirs<br />
* Kārlis Priedītis<br />
<br />
== Saites ==<br />
<br />
* '''[[Jaunumi]] ārpus DiLab''', jaunākie sasniegumi datorinženierijā un robotikā<br />
<br />
<br />
* [http://www.lu.lv/studentiem/studijas/kalendars/akademiskais/ LU akadēmiiskais kalendārs<br />
<br />
<br />
----<br />
* [[MediaWiki piezīmes]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=Installing_MansOS&diff=3375Installing MansOS2012-02-10T08:20:11Z<p>Girts: /* Arduino/ATMega platform */</p>
<hr />
<div>{{TocRight}}<br />
When you install MansOS development environment you need to know two things:<br />
* What is the '''development host''' where you will compile your applications. All of the major desktop operating systems (Linux, Windows, MacOS) are supported as MansOS development hosts.<br />
* What is the '''target platform''' or platforms that you will be developing for. At least you should know what is the main micro controller. MansOS supports several popular target controller families: TI msp430, 8-bit Atmega controllers and Nordic Semiconductor nRF24LE1. One can also compile the application for the current PC host, for example, for simulation and debugging purposes.<br />
<br />
= Step 1: Prerequisites =<br />
<br />
In general, the following programs are needed:<br />
* Compiler and binutils<br />
** For example, ''msp430-gcc'' for TelosB and msp430 platforms or ''avr-gcc'' for Atmega platform<br />
* GNU make<br />
* Python<br />
If you already have them, you can skip this section.<br />
<br />
== Linux (e.g. Ubuntu) and *BSD ==<br />
As often, you have two options: installing (and compiling) the latest and greatest tools by hand, or have an automated installation of some fairly recent version.<br />
<br />
=== Using manual installation ===<br />
<br />
==== MSP430 ====<br />
For '''MSP430''' based platforms, MSP430 MCU GCC toolchain can be found here:<br />
<br />
* http://mspgcc.sourceforge.net/<br />
<br />
* Ubuntu 11.10 (Oneric) has the packages in the main repository. <br />
<br />
: To install for Ubuntu 11.10 or higher:<br />
sudo apt-get install gcc-msp430<br />
<br />
: You might also be interested in these debugger packages:<br />
sudo apt-get install gdb-msp430 mspdebug<br />
<br />
<br />
Unless you used apt-get install option, <br />
after installing ''msp430-gcc'' you'll need to set up you ''$PATH'' correctly. Add this line to your ''~/.bashrc'' file (assuming ''msp430-gcc'' is installed in ''/opt''):<br />
export PATH="/opt/msp430-gcc/bin:$PATH"<br />
<br />
==== Arduino and Atmega controllers ====<br />
'''Arduino''' platform requires AVR-GCC toolchain. Although it is included in [http://tinyos.net TinyOS], the version included is too old and does not support ATMega328P MCU, which is a part of [http://www.arduino.cc Arduino Duemillanove]. Therefore a manual procedure of AVR-GCC toolchain compilation must be performed to run MansOS application on Arduino Duemilanove or other ATMega328P-having platforms. Read [[AVR toolchain compilation]] instructions.<br />
<br />
==== Nordic Semiconductor (nRF) ====<br />
'''nRF''' platform for '''Nordic Semiconductors''' controllers with RF+MCU chips such as nrf24le1 may need [[SDCC]] compiler. <br />
Here are the [[SDCC | SDCC installation instructions]].<br />
<br />
=== Using package management software ===<br />
<br />
Install MSP430 tools:<br />
http://mansos.net/deb/binutils-msp430_2.17-2_i386.deb - MSP430 binutils<br />
http://mansos.net/deb/gcc-msp430_3.2.3-2_i386.deb - MSP430 GCC compiler<br />
http://mansos.net/deb/msp430-libc_20071026_i386.deb - MSP430 libc<br />
http://mansos.net/deb/msp430-tools_i386.deb - MSP430 tools metapackage<br />
<br />
Alternatively, you could install the tool packages provided by TinyOS.<br />
<br />
== MacOS X ==<br />
Developer tools must be installed to support compilation environment. It can be found either on MacOS X installation DVD, or on [http://developer.apple.com/technologies/tools/ Apple web page].<br />
<br />
=== TelosB/Epic/MSP430 platform ===<br />
MSP430 toolchain is required. The easiest way is to install MCP430 GCC v4, which has a pretty straightforward installation script prepared. Download it from http://mspgcc4.sourceforge.net/ .<br />
<br />
Alternatively there is a pre-built [http://www.sics.se/contiki/tutorials/tutorial-msp430-tools-with-installer-for-the-intel-mac.html Contiki OS package for MacOS X], provided by the Contiki Team at [http://www.sics.se SICS]. It includes MSP430 toolchain (version 3.3, works for TelosB) as part of Contiki OS.<br />
<br />
Also MSP430 toolchain is included in [http://tinyos.net TinyOS].<br />
<br />
=== Arduino/ATMega platform ===<br />
Arduino platform requires AVR-GCC toolchain. Although it is included in [http://tinyos.net TinyOS], the version included is too old and does not support ATMega328P MCU, which is a part of [http://www.arduino.cc Arduino Duemillanove]. Therefore there are two options. Please choose just one of them (not both at a time!):<br />
* a) Download a ready-to-use [http://www.obdev.at/products/crosspack/download-de.html AVR-CrossPack], install it and set up path, by adding the following line to your ~/.profile file:<br />
export PATH=/usr/local/CrossPack-AVR/bin:$PATH<br />
* b) manual AVR-GCC toolchain compilation. Read [[AVR toolchain compilation]] instructions.<br />
<br />
== Windows ==<br />
<br />
MansOS on Windows is supported using Cygwin. (It may also work with MinGW.)<br />
<br />
Download and install [http://www.cygwin.com Cygwin]. Here's a direct link to [http://www.cygwin.com/setup.exe the setup program].<br />
<br />
Make sure to select the following Cygwin packages, when prompted in the "Select packages" screen (it can be helpful to switch to the "Full" view first):<br />
* gcc<br />
* make<br />
* python <br />
* rpm<br />
* subversion (SVN)<br />
<br />
If write access to SVN is needed (e.g. for MansOS developers), also select:<br />
* openssh<br />
<br />
=== Installing msp430 tools ===<br />
<br />
After getting the general software you'll need to install the msp430 specific tools. There are two options for this:<br />
# Installing the tools manually<br />
# Installing the tools from RPM packages provided by TinyOS<br />
<br />
==== Manual installation ====<br />
<br />
Follow the instructions in ''mspgcc'' homepage.<br />
* http://mspgcc.sourceforge.net/ <br />
<br />
The simplest way is:<br />
# Download a pre-built package (archive) for Windows <br />
# Create a folder /opt/msp430-gcc (relative to Cygwin top directory, e.g. ''C:\cygwin\opt\msp430-gcc'')<br />
# Extract the downloaded archive in /opt/msp430-gcc<br />
<br />
==== Installation using RPM packages ====<br />
<br />
You may already have certain compilers and tools installed if you have TinyOS. Or you could install [http://www.tinyos.net/tinyos-2.x/doc/html/install-tinyos.html TinyOS rpm packages]. The RPM packages are available here:<br />
http://www.tinyos.net/dist-2.0.0/tools/windows/msp430tools-base-0.1-20050607.cygwin.i386.rpm<br />
http://www.tinyos.net/dist-2.0.0/tools/windows/msp430tools-python-tools-1.0-1.cygwin.noarch.rpm<br />
http://www.tinyos.net/dist-2.0.0/tools/windows/msp430tools-binutils-2.16-20050607.cygwin.i386.rpm<br />
http://www.tinyos.net/dist-2.0.0/tools/windows/msp430tools-gcc-3.2.3-20050607.cygwin.i386.rpm<br />
http://www.tinyos.net/dist-2.0.0/tools/windows/msp430tools-libc-20050308cvs-20050608.cygwin.i386.rpm<br />
<br />
Install the RPM packages:<br />
$ rpm -ivh --force --nodeps --ignoreos *.rpm<br />
<br />
=== Installing TinyOS tools ===<br />
<br />
At the moment TinyOS tools (i.e. ''motelist'' and ''tos-bsl'') also are required for MansOS on Cygwin. The recommended way of getting them is to download a .rpm package from http://tinyos.stanford.edu/tinyos-rpms/tinyos-tools-1.4.0-3.cygwin.i386.rpm and install it using <br />
$ rpm -ivh --force --nodeps --ignoreos tinyos-tools-1.4.0-3.cygwin.i386.rpm<br />
<br />
=== Finishing installation ===<br />
<br />
Set up you ''$PATH'' to point to ''msp430-gcc'' tools. Add this line to your ''~/.bashrc file'' (assuming ''msp430-gcc'' is installed in ''/opt''):<br />
export PATH="/opt/msp430-gcc/bin:$PATH"<br />
The .bashrc file can be found in your home directory, which is in a location like this: ''C:\cygwin\home\username\.bashrc''.<br />
<br />
=== Support for serial port interfacing with sensor nodes ===<br />
<br />
To upload compiled programs to a mote you'll need to install proper USB to serial port drivers first. The drivers are included in Tmote Sky driver CD. If you don't have the CD, download the drivers from [http://www.ftdichip.com/Drivers/VCP.htm here]. For more details consult the Tmote Sky Quick Start Guide, section USB Serial COM Driver Install (page 7). The guide is available at http://www.cems.uvm.edu/~crobinso/mote/tmote-sky-quickstart-110.pdf.<br />
<br />
Now install MansOS sources and check that ''motelist'' detects all motes attached to the Windows PC:<br />
$ motelist<br />
Reference CommPort Description<br />
---------- ---------- ----------------------------------<br />
M4AOQGBQ COM8 tmote sky<br />
<br />
Note: USB port driver is installed on first use of TMote Sky sensor node (or any other node, using FTDI USB to serial chip). If you get an error "error, could not open key HKLM\SYSTEM\CurrentControlSet\Enum\FTDIBUS", it means, that FTDI USB driver has not been loaded. To load it, plug in TMote Sky sensor node, and the driver will be loaded automatically.<br />
<br />
= Step 2: Getting MansOS sources =<br />
MansOS source code is available either using SVN version control or in a pre-packaged form.<br />
<br />
=== Using version control system ===<br />
<br />
MansOS sources are available for anonymous checkout from SVN:<br />
<pre><br />
$ svn co http://mansos.net/svn/mansos/ mansos<br />
A mansos/archive<br />
A mansos/archive/test<br />
...<br />
Checked out revision 732.<br />
</pre><br />
[[Image:mansos-svn.png]]<br />
<br />
If you also want to receive SVN write access, contact MansOS developers.<br />
<br />
=== Using package management software ===<br />
<br />
Get and install the MansOS Debian package: http://mansos.net/box/mansos-0.1.0_20101101_all.deb<br />
<br />
The package depends on either ''msp430-tools'' metapackage, ''tinyos-required-msp430'' package, or ''tinyos-required-avr'' package.<br />
<br />
= Step 3: Testing your installation =<br />
<br />
$ ls mansos<br />
apps archive CREDITS.txt doc mos pc README.txt USE_AND_DISCLAIMER.txt<br />
[[Image:mansos-ls.png]]<br />
<br />
To test building for TelosB (Tmote Sky):<br />
$ cd mansos/apps/demo/Blink<br />
$ make telosb<br />
[[Image:mansos-build.png]]<br />
<br />
If you have motes attached:<br />
$ make telosb upload<br />
[[Image:mansos-build-upload.png]]<br />
<br />
To test serial port output:<br />
$ cd mansos/apps/demo/CounterToSerial<br />
$ make telosb upload<br />
Now you can use a tool like ''minicom'' or ''putty'' (on Windows) to monitor the serial port. The settings: baudrate=38400, flow-control turned off.<br />
[[Image:mansos-serial.png]]<br />
<br />
To test the PC simulator:<br />
$ make pc<br />
$ make pc run<br />
[[Image:mansos-pc.png]]<br />
<br />
= Extras =<br />
<br />
For msp430-based sensor board debugging ''mspsim'' tool can be useful. MansOS has support for ''mspsim'' on '''telosb''' platform.<br />
<br />
To use ''mspsim'' (from Linux):<br />
# Download the source code from http://www.sics.se/project/mspsim and extract it to ''/opt/mspsim''<br />
# Build a MansOS application for ''telosb mspsim'' target. For example, to build Blink: <br />
$ cd mansos/apps/demo/Blink<br />
$ make telosb mspsim<br />
<br />
The expected result:<br />
{|align=left<br />
|<br />
[[Image:mansos-mspsim.jpg|thumb|alt=Blink on mspsim|Blink on mspsim]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3338MansOS Radio2012-01-16T12:25:48Z<p>Girts: /* Examples */</p>
<hr />
<div>__TOC__<br />
<br />
API header file: [http://code.google.com/p/mansos/source/browse/trunk/mos/hil/radio.h mos/hil/radio.h]<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
// Set radio channel to use for data transmission and reception<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For IEEE 802.15.4 compatible radios (such as the CC2420)<br />
// there are 16 channels available in the 2.4 GHz band<br />
// in 5 MHz steps, numbered 11 through 26<br />
void radioSetChannel(int channel)<br />
<br />
// Transmit power control.<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For CC2420, a value in range [0 .. 31] is expected,<br />
// where 0 corresponds to the minimal transmit power and 31 - to the maximum<br />
void radioSetTxPower(uint8_t power)<br />
<br />
// Returns true if Clear Channel Assessment (CCA) detects that transmission medium is free.<br />
// Always returns true if the chip does not have support for hardware CCA.<br />
bool radioIsChannelClear()<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
apps/demo/SimpleRadioCountToLeds<br />
<br />
<source lang="c"><br />
<br />
//-----------------------------------------------------------------------------<br />
// Counter exchange application<br />
// Mote broadcasts its counter which gets incremented every second.<br />
// When receiving a counter value, mote displays it on leds.<br />
// Implementation without threads and sockets<br />
//-----------------------------------------------------------------------------<br />
<br />
#include "stdmansos.h"<br />
#include "dprint.h"<br />
<br />
// Called when radio packet received - display received counter on LEDs<br />
void radioReceived() {<br />
static uint16_t counter;<br />
int16_t len;<br />
len = radioRecv(&counter, sizeof(counter)); // Read counter - 2 bytes<br />
if (len > 0) {<br />
setLeds(counter); // display it on LEDs<br />
} else if (len < 0 ) {<br />
// Error - reception failed<br />
}<br />
}<br />
<br />
<br />
//-------------------------------------------<br />
// Entry point for the application<br />
//-------------------------------------------<br />
void appMain(void)<br />
{<br />
radioInit();<br />
radioOn();<br />
<br />
// when a radio packet is received, call radioReceived() function<br />
radioSetReceiveHandle(radioReceived);<br />
<br />
sendCounter();<br />
}<br />
<br />
<br />
// Send an incrementing counter every second<br />
void sendCounter() {<br />
uint16_t counter = 0;<br />
<br />
// repeat continuously<br />
while (1)<br />
{<br />
// send counter over radio<br />
if (radioSend(&counter, sizeof(counter)) != 0) {<br />
// radio sending failed - handle it!<br />
}<br />
msleep(1000); // sleep one second<br />
++counter;<br />
}<br />
}<br />
</source></div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3337MansOS Radio2012-01-16T12:21:37Z<p>Girts: </p>
<hr />
<div>__TOC__<br />
<br />
API header file: [http://code.google.com/p/mansos/source/browse/trunk/mos/hil/radio.h mos/hil/radio.h]<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
// Set radio channel to use for data transmission and reception<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For IEEE 802.15.4 compatible radios (such as the CC2420)<br />
// there are 16 channels available in the 2.4 GHz band<br />
// in 5 MHz steps, numbered 11 through 26<br />
void radioSetChannel(int channel)<br />
<br />
// Transmit power control.<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For CC2420, a value in range [0 .. 31] is expected,<br />
// where 0 corresponds to the minimal transmit power and 31 - to the maximum<br />
void radioSetTxPower(uint8_t power)<br />
<br />
// Returns true if Clear Channel Assessment (CCA) detects that transmission medium is free.<br />
// Always returns true if the chip does not have support for hardware CCA.<br />
bool radioIsChannelClear()<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
<source lang="c"><br />
<br />
//-----------------------------------------------------------------------------<br />
// Counter exchange application<br />
// Mote broadcasts its counter which gets incremented every second.<br />
// When receiving a counter value, mote displays it on leds.<br />
// Implementation without threads and sockets<br />
//-----------------------------------------------------------------------------<br />
<br />
#include "stdmansos.h"<br />
#include "dprint.h"<br />
<br />
// Called when radio packet received - display received counter on LEDs<br />
void radioReceived() {<br />
static uint16_t counter;<br />
int16_t len;<br />
len = radioRecv(&counter, sizeof(counter)); // Read counter - 2 bytes<br />
if (len > 0) {<br />
setLeds(counter); // display it on LEDs<br />
} else if (len < 0 ) {<br />
// Error - reception failed<br />
}<br />
}<br />
<br />
<br />
//-------------------------------------------<br />
// Entry point for the application<br />
//-------------------------------------------<br />
void appMain(void)<br />
{<br />
radioInit();<br />
radioOn();<br />
<br />
// when a radio packet is received, call radioReceived() function<br />
radioSetReceiveHandle(radioReceived);<br />
<br />
sendCounter();<br />
}<br />
<br />
<br />
// Send an incrementing counter every second<br />
void sendCounter() {<br />
uint16_t counter = 0;<br />
<br />
// repeat continuously<br />
while (1)<br />
{<br />
// send counter over radio<br />
if (radioSend(&counter, sizeof(counter)) != 0) {<br />
// radio sending failed - handle it!<br />
}<br />
msleep(1000); // sleep one second<br />
++counter;<br />
}<br />
}<br />
</source></div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3336MansOS Radio2012-01-13T08:14:05Z<p>Girts: /* Examples */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
// Set radio channel to use for data transmission and reception<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For IEEE 802.15.4 compatible radios (such as the CC2420)<br />
// there are 16 channels available in the 2.4 GHz band<br />
// in 5 MHz steps, numbered 11 through 26<br />
void radioSetChannel(int channel)<br />
<br />
// Transmit power control.<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For CC2420, a value in range [0 .. 31] is expected,<br />
// where 0 corresponds to the minimal transmit power and 31 - to the maximum<br />
void radioSetTxPower(uint8_t power)<br />
<br />
// Returns true if Clear Channel Assessment (CCA) detects that transmission medium is free.<br />
// Always returns true if the chip does not have support for hardware CCA.<br />
bool radioIsChannelClear()<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
<source lang="c"><br />
<br />
//-----------------------------------------------------------------------------<br />
// Counter exchange application<br />
// Mote broadcasts its counter which gets incremented every second.<br />
// When receiving a counter value, mote displays it on leds.<br />
// Implementation without threads and sockets<br />
//-----------------------------------------------------------------------------<br />
<br />
#include "stdmansos.h"<br />
#include "dprint.h"<br />
<br />
// Called when radio packet received - display received counter on LEDs<br />
void radioReceived() {<br />
static uint16_t counter;<br />
int16_t len;<br />
len = radioRecv(&counter, sizeof(counter)); // Read counter - 2 bytes<br />
if (len > 0) {<br />
setLeds(counter); // display it on LEDs<br />
} else if (len < 0 ) {<br />
// Error - reception failed<br />
}<br />
}<br />
<br />
<br />
//-------------------------------------------<br />
// Entry point for the application<br />
//-------------------------------------------<br />
void appMain(void)<br />
{<br />
radioInit();<br />
radioOn();<br />
<br />
// when a radio packet is received, call radioReceived() function<br />
radioSetReceiveHandle(radioReceived);<br />
<br />
sendCounter();<br />
}<br />
<br />
<br />
// Send an incrementing counter every second<br />
void sendCounter() {<br />
uint16_t counter = 0;<br />
<br />
// repeat continuously<br />
while (1)<br />
{<br />
// send counter over radio<br />
if (radioSend(&counter, sizeof(counter)) != 0) {<br />
// radio sending failed - handle it!<br />
}<br />
msleep(1000); // sleep one second<br />
++counter;<br />
}<br />
}<br />
</source></div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B:index&diff=3335LU-BST-B:index2012-01-12T13:20:20Z<p>Girts: /* Rezultāti */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
LU FMF DN kurss, bakalaura programma, 2008.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/kursi/bst/BST_anotacija_09_lv.pdf LV]], <br />
[[http://jupiter.cs.fmf.lu.lv/kursi/bst/BST_anotacija_09_en.pdf EN]]<br />
<br />
Pasniedzējs: asoc.prof. [[User:Leo | Leo Seļāvo]]<br />
<br />
Asistents: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
|-<br />
| 25.08.2008. - 31.08.2008. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 02.09.2008.<br />
| 1. Lekcija: Ievadlekcija<br />
|-<br />
| 03.09.2008.<br />
| [[LU-BST-B:PD#PD1 | 1. Praktiskie darbi]]: Blink aplikācija TinyOS vidē<br />
Izsludināts [[LU-BST-B:MD#MD1 | 1. Mājas darbs]]<br />
|-<br />
| 09.09.2008.<br />
| [[LU-BST-B:LC#2. Lekcija | 2. Lekcija]]: TinyOS: ideoloģija, radio un seriāla porta komunikācija<br />
|-<br />
| 10.09.2008.<br />
| [[LU-BST-B:PD#PD2 | 2. Praktiskie darbi]]: TinyOS radio komunikācija<br />
|-<br />
| 16.09.2008. <br />
| [[LU-BST-B:LC#3. Lekcija | 3. Lekcija]]: Sensoru apskats, iedalījums, savienojums ar mikrokontrolieri, lasīšanas iespējas<br />
|-<br />
| 17.09.2008.<br />
| [[LU-BST-B:PD#PD3 | 3. Praktiskie darbi]]: Sensoru lasīšana TinyOS vidē<br />
|-<br />
| 23.09.2008.<br />
| 4. Lekcija: Radio realitāte<br />
Termiņš [[LU-BST-B:MD#MD1 | 1. Mājas darbam]] (iesūtīt līdz 12:00)<br />
|-<br />
| 24.09.2008.<br />
| [[LU-BST-B:PD#PD4 | 4. Praktiskie darbi]]: Sensoru lasīšana un radio komunikācija TinyOS vidē<br />
|-<br />
| 30.09.2008.<br />
| [[LU-BST-B:LC#5. Lekcija | 5. Lekcija]]: Laika sinhronizācija<br />
|-<br />
| 01.10.2008.<br />
| [[LU-BST-B:PD#PD5 | 5. Praktiskie darbi]]: Mājas darbu pārrunāšana, sensoru mezglu sinhronizācija TinyOS vidē<br />
Izsludināts [[LU-BST-B:MD#MD2 | 2. Mājas darbs]]<br />
|-<br />
| 07.10.2008.<br />
| 6. Lekcija: Laika sinhronizācija (turpinājums)<br />
Izsludināts [[LU-BST-B:MD#MD3 | 3. Mājas darbs]]<br />
|-<br />
| 08.10.2008.<br />
| 6. Praktiskie darbi: Sensoru mezglu sinhronizācija TinyOS vidē (turpinājums)<br />
|-<br />
| 14.10.2008.<br />
| 7. Lekcija: Iesūtīto projektu apskats. Lokalizācija (ievads)<br />
Termiņš [[LU-BST-B:MD#MD3 | 3. Mājas darbam]] (iesūtīt līdz 12:00)<br />
|-<br />
| 15.10.2008.<br />
| 7. Praktiskie darbi: Piemēra projekta pieteikums (Elektroniskā tāfele)<br />
Termiņš [[LU-BST-B:MD#MD2 | 2. Mājas darbam]] (iesūtīt līdz 12:00)<br />
|-<br />
| 21.10.2008.<br />
| 8. Lekcija: Lokalizācijas algoritmi<br />
|-<br />
| 22.10.2008.<br />
| 8. Praktiskie darbi: Lokalizācija, izmantojot radio signāla jaudas mērīšanu TinyOS vidē<br />
|-<br />
| 28.10.2008.<br />
| 9. Lekcija: MAC protokoli<br />
|-<br />
| 29.10.2008.<br />
| [[LU-BST-B:PD#PD9 | 9. Praktiskie darbi]]: Semestra vielas atkārtojums, gatavošanās kontroldarbam<br />
|-<br />
| 04.11.2008.<br />
| Vidus semestra kontroldarbs<br />
|-<br />
| 05.11.2008.<br />
| Praktiskie darbi pie individuālā projekta<br />
|-<br />
| 11.11.2008.<br />
| 10. Lekcija: Maršrutizācija<br />
|-<br />
| 12.11.2008.<br />
| [[LU-BST-B:PD#PD10 | 10. Praktiskie darbi]]: Maršrutizācijas protokola izstrāde<br />
|-<br />
| 18.11.2008.<br />
| Valsts svētku diena<br />
|-<br />
| 19.11.2008.<br />
| [[LU-BST-B:PD#PD11 | 11. Praktiskie darbi]]: Virtuālā mašīna bezvadu sensoru tīkliem<br />
|-<br />
| 25.11.2008.<br />
| [[LU-BST-B:LC#12. Lekcija | 12. Lekcija]]: Bezvadu sensoru tīklu virtuālās mašīnas, viens piemērs: Mate<br />
Izsludināts [[LU-BST-B:MD#MD4 | 4. Mājas darbs]]<br />
|-<br />
| 26.11.2008.<br />
| Praktiskie darbi nenotiek<br />
|-<br />
| 02.12.2008.<br />
| 13. Lekcija<br />
|-<br />
| 03.12.2008.<br />
| [[LU-BST-B:PD#PD13 | 13. Praktiskie darbi]]: Bezvadu sensoru tīklu drošība<br />
Termiņš [[LU-BST-B:MD#MD4 | 4. Mājas darbam]] (iesūtīt līdz 12:00)<br />
|-<br />
| 08.12.2008. - 14.12.2008.<br />
| Studijas<br />
|-<br />
| 15.12.2008. - 21.12.2008.<br />
| Studijas<br />
|-<br />
| 22.12.2008. - 04.01.2009.<br />
| Ziemassvētku un Jaungada brīvdienas<br />
|-<br />
| 07.01.2009.<br />
| Konsultācijas<br />
|-<br />
| 14.01.2009. 14:30<br />
| Gala eksāmena kontroldarbs<br />
|-<br />
| 21.01.2009. 14:30<br />
| Konsultācijas<br />
|-<br />
| 27.01.2009. 14:30<br />
| Konsultācijas<br />
|-<br />
| 28.01.2009. 14:30<br />
| Konsultācijas<br />
|-<br />
| 29.01.2009. 12:00<br />
| Projektu prezentācijas<br />
|}<br />
<br />
== Materiāli ==<br />
<br />
=== [[LU-BST-B:LC | Lekciju materiāli]] ===<br />
* [[LU-BST-B:LC#2. Lekcija | 2. Lekcija]]<br />
* [[LU-BST-B:LC#3. Lekcija | 3. Lekcija]]<br />
<br />
=== [[LU-BST-B:PD | Praktiskie darbi]] ===<br />
* [[LU-BST-B:PD#PD1 | PD1]]<br />
* [[LU-BST-B:PD#PD2 | PD2]]<br />
* [[LU-BST-B:PD#PD3 | PD3]]<br />
* [[LU-BST-B:PD#PD4 | PD4]]<br />
* [[LU-BST-B:PD#PD8 | PD8]]<br />
* [[LU-BST-B:PD#PD9 | PD9]]<br />
* [[LU-BST-B:PD#PD10 | PD10]]<br />
* [[LU-BST-B:PD#PD13 | PD13]]<br />
<br />
=== [[LU-BST-B:MD | Mājas darbi]] ===<br />
* [[LU-BST-B:MD#Formulējumi | Formulējumi]]<br />
<br />
<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B:Reitingu_tabulas&diff=3334LU-BST-B:Reitingu tabulas2012-01-12T13:20:05Z<p>Girts: Izņemts no aprites</p>
<hr />
<div></div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3333MansOS PC Emulation2012-01-09T08:32:42Z<p>Girts: </p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
cd mansos/pc/proxy<br />
make<br />
<br />
To run it after compilation:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
Compile your mote application for the pc platform:<br />
make pc<br />
<br />
After compilation run the virtual mote:<br />
make pc run<br />
<br />
It will automatically connect to the virtual cloud and exchange messages with it, if radio communication is used in the application.<br />
<br />
== Example ==<br />
<br />
To see this method in action, try <code>mansos/apps/demo/RadouCountToLeds</code> application, which sends counter over radio periodically and displays received counter on LEDs and serial port (print onto the screen on PC platform).</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3332MansOS PC Emulation2012-01-09T08:02:53Z<p>Girts: /* Step 2: Connect virtual motes to the cloud */</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
cd mansos/pc/proxy<br />
make<br />
<br />
To run it after compilation:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
Compile your mote application for the pc platform:<br />
make pc<br />
<br />
After compilation run the virtual mote:<br />
make pc run<br />
<br />
It will automatically connect to the virtual cloud and exchange messages with it, if radio communication is used in the application.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3331MansOS PC Emulation2012-01-09T08:02:01Z<p>Girts: /* Step 2: Connect virtual motes to the cloud */</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
cd mansos/pc/proxy<br />
make<br />
<br />
To run it after compilation:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
Compile your mote application for the pc platform:<br />
make pc<br />
<br />
After compilation run the virtual mote:<br />
make pc run<br />
<br />
It will automatically connect to the virtual cloud and exchange messages with it.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3330MansOS PC Emulation2012-01-09T08:01:02Z<p>Girts: /* Step 1: Create a virtual "cloud" */</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
cd mansos/pc/proxy<br />
make<br />
<br />
To run it after compilation:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3329MansOS PC Emulation2012-01-09T08:00:52Z<p>Girts: /* Step 1: Create a virtual "cloud" */</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
cd mansos/pc/proxy<br />
make<br />
<br />
To run it:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3328MansOS PC Emulation2012-01-09T08:00:39Z<p>Girts: /* Step 1: Create a virtual "cloud" */</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
<br />
To emulate radio communication medium, a virtual "cloud" proxy program is available under <code>mansos/pc/proxy</code>. To compile it:<br />
mansos/pc/proxy<br />
make<br />
<br />
To run it:<br />
make run<br />
<br />
It acts as a TCP server and opens socket for incoming connections. Administrator permissions may be required for it.<br />
<br />
The virtual cloud acts as a hub - it forwards a packet received from a virtual mote to all other virtual motes connected to the cloud.<br />
<br />
This proxy program must be running to allow virtual mote communication. It also displays some debug information about traveling packets. It can be terminated by pressing Ctrl+C.<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_PC_Emulation&diff=3327MansOS PC Emulation2012-01-09T07:46:47Z<p>Girts: New page: Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated. Two steps are required, described in the ...</p>
<hr />
<div>Before deploying sensor network application on real motes, MansOS allows program debugging on PC platform. Virtual mote network can be simulated.<br />
<br />
Two steps are required, described in the following sections<br />
<br />
== Step 1: Create a virtual "cloud" ==<br />
TODO<br />
<br />
== Step 2: Connect virtual motes to the cloud ==<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS&diff=3326MansOS2012-01-09T07:44:08Z<p>Girts: /* Development with MansOS - tools and techniques */</p>
<hr />
<div>{|align=right<br />
|__TOC__<br />
|<br />
[[Image:qr_mansos-net-s.png]]<br />
<br />
MansOS.net QR code<br />
|}<br />
<br />
[[Image:mansos_logo.png|thumb|alt=MansOS Logo|MansOS Logo]]<br />
<br />
<br />
''MansOS = Mobile agent netted sensor Operating System''.<br />
<br />
MansOS is an operating system for wireless sensor networks and netted embedded systems. It is designed for users familiar with C programming and Unix-like environment. MansOS supports various platforms and controllers, including TelosB and MSP430, Atmega controllers and Arduino, and others. Users may develop and test their systems on a PC as a virtual "mote". <br />
<br />
=== General information===<br />
<br />
* [[MansOS_Introduction | Introduction]]<br />
* [[MansOS_Philosophy | Philosophy]]<br />
* [[MansOS_Architecture | Architecture]]<br />
* [[MansOS features]] - a simple list of features supported by MansOS<br />
* [[MansOS tutorial]]<br />
* [[Declarative programming with MansOS]]<br />
<br />
=== Access (Download) ===<br />
<br />
* [[Installing MansOS]]<br />
<br />
* MansOS SVN quick access<br />
** Read-only access is open to public. For example, to get the whole MansOS tree in the current-directory/mansos do this:<br />
svn co http://mansos.net/svn/mansos/ mansos<br />
** Read-write access is open to authenticated developers via svn+ssh.<br />
svn co svn+ssh://yourloginname@mansos.net/svn/mansos mansos<br />
<br />
* Experimental development version of MansOS code is available at http://code.google.com/p/mansos/<br />
** Read-only access to the general public:<br />
svn checkout http://mansos.googlecode.com/svn/trunk/ mansos-read-only <br />
** Read-write access to MansOS commiters:<br />
svn checkout https://mansos.googlecode.com/svn/trunk/ mansos --username your.username@gmail.com<br />
<br />
=== Development with MansOS - tools and techniques ===<br />
<br />
* [[MansOS tutorial]]<br />
* [[Building MansOS]] - description of make targets.<br />
* [[MansOS configuration options]] - configuration file syntax and options.<br />
* [[MansOS_Platforms | MansOS platforms]] - List of supported platforms and platform specific notes, e.g.:<br />
** ''make'' syntax <br />
** dependencies for this platform, <br />
** where is the particular executable built<br />
** what options are available for this platform<br />
* [[MansOS_API | MansOS API]]<br />
* [[MansOS_Apps_examples | Application examples]]<br />
* [[MansOS_Makefiles | Setting up and using Makefiles]]<br />
* [[MansOS_Eclipse | Eclipse setup]]<br />
* [[MansOS_IAR | Compiling MansOS with IAR Embedded Workbench]]<br />
* [[MansOS_Testing | Debugging and testing]]<br />
* [[MansOS_PC_Emulation | Mote network emulation on PC]]<br />
* [[MansOS_FAQ | FAQ]]<br />
<br />
=== Developing the MansOS - notes ===<br />
<br />
* [[MansOS_Directory_Structure | Source directory structure]]<br />
* [[MansOS_Coding_Standard | Coding standard]]<br />
* [[MansOS_new_platform | Adapting a new hardware platform]]<br />
* Future developments - [[MansOS_Ref | Reference Guide]] for a simpler interface<br />
<br />
=== Hardware notes ===<br />
<br />
* An [[Ideal_mote]] should... | would have... (notes for future HW designs)<br />
<br />
Chips<br />
* [[Chips_msp430 | MCU: MSP430]]<br />
* [[Chips_cc2420 | Radio: CC2420]]<br />
* [[Chips_Atmega | Atmega chips]]<br />
* [[Chips_nrf24 | Nordic Sermiconductors chips family]]<br />
<br />
Platforms<br />
* [[MansOS_Platforms | Supported platforms]], such as telosb, Tmote Sky, Mini, Arduino, generic msp430, Atmel chips, etc.<br />
<br />
<br />
=== Related publications and papers ===<br />
<br />
* [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1462006 Flexible Hardware abstraction] describing the HPL - HAL - HIL architecture<br />
* [http://www.liteos.net/docs/IPSN_2008.pdf LiteOS paper], the original OS from which MansOS branched<br />
* [http://portal.acm.org/citation.cfm?id=1870057 MansOS poster abstract], presented at Sensys 2010 ([http://strazdins.lv/papers/strazdins2010mansos.pdf PDF])</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS&diff=3325MansOS2012-01-09T07:44:01Z<p>Girts: /* Development with MansOS - tools and techniques */</p>
<hr />
<div>{|align=right<br />
|__TOC__<br />
|<br />
[[Image:qr_mansos-net-s.png]]<br />
<br />
MansOS.net QR code<br />
|}<br />
<br />
[[Image:mansos_logo.png|thumb|alt=MansOS Logo|MansOS Logo]]<br />
<br />
<br />
''MansOS = Mobile agent netted sensor Operating System''.<br />
<br />
MansOS is an operating system for wireless sensor networks and netted embedded systems. It is designed for users familiar with C programming and Unix-like environment. MansOS supports various platforms and controllers, including TelosB and MSP430, Atmega controllers and Arduino, and others. Users may develop and test their systems on a PC as a virtual "mote". <br />
<br />
=== General information===<br />
<br />
* [[MansOS_Introduction | Introduction]]<br />
* [[MansOS_Philosophy | Philosophy]]<br />
* [[MansOS_Architecture | Architecture]]<br />
* [[MansOS features]] - a simple list of features supported by MansOS<br />
* [[MansOS tutorial]]<br />
* [[Declarative programming with MansOS]]<br />
<br />
=== Access (Download) ===<br />
<br />
* [[Installing MansOS]]<br />
<br />
* MansOS SVN quick access<br />
** Read-only access is open to public. For example, to get the whole MansOS tree in the current-directory/mansos do this:<br />
svn co http://mansos.net/svn/mansos/ mansos<br />
** Read-write access is open to authenticated developers via svn+ssh.<br />
svn co svn+ssh://yourloginname@mansos.net/svn/mansos mansos<br />
<br />
* Experimental development version of MansOS code is available at http://code.google.com/p/mansos/<br />
** Read-only access to the general public:<br />
svn checkout http://mansos.googlecode.com/svn/trunk/ mansos-read-only <br />
** Read-write access to MansOS commiters:<br />
svn checkout https://mansos.googlecode.com/svn/trunk/ mansos --username your.username@gmail.com<br />
<br />
=== Development with MansOS - tools and techniques ===<br />
<br />
* [[MansOS tutorial]]<br />
* [[Building MansOS]] - description of make targets.<br />
* [[MansOS configuration options]] - configuration file syntax and options.<br />
* [[MansOS_Platforms | MansOS platforms]] - List of supported platforms and platform specific notes, e.g.:<br />
** ''make'' syntax <br />
** dependencies for this platform, <br />
** where is the particular executable built<br />
** what options are available for this platform<br />
* [[MansOS_API | MansOS API]]<br />
* [[MansOS_Apps_examples | Application examples]]<br />
* [[MansOS_Makefiles | Setting up and using Makefiles]]<br />
* [[MansOS_Eclipse | Eclipse setup]]<br />
* [[MansOS_IAR | Compiling MansOS with IAR Embedded Workbench]]<br />
* [[MansOS_Testing | Debugging and testing]]<br />
* [[MansOS_PC_Emulation | Mote network emulation on PC]<br />
* [[MansOS_FAQ | FAQ]]<br />
<br />
=== Developing the MansOS - notes ===<br />
<br />
* [[MansOS_Directory_Structure | Source directory structure]]<br />
* [[MansOS_Coding_Standard | Coding standard]]<br />
* [[MansOS_new_platform | Adapting a new hardware platform]]<br />
* Future developments - [[MansOS_Ref | Reference Guide]] for a simpler interface<br />
<br />
=== Hardware notes ===<br />
<br />
* An [[Ideal_mote]] should... | would have... (notes for future HW designs)<br />
<br />
Chips<br />
* [[Chips_msp430 | MCU: MSP430]]<br />
* [[Chips_cc2420 | Radio: CC2420]]<br />
* [[Chips_Atmega | Atmega chips]]<br />
* [[Chips_nrf24 | Nordic Sermiconductors chips family]]<br />
<br />
Platforms<br />
* [[MansOS_Platforms | Supported platforms]], such as telosb, Tmote Sky, Mini, Arduino, generic msp430, Atmel chips, etc.<br />
<br />
<br />
=== Related publications and papers ===<br />
<br />
* [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1462006 Flexible Hardware abstraction] describing the HPL - HAL - HIL architecture<br />
* [http://www.liteos.net/docs/IPSN_2008.pdf LiteOS paper], the original OS from which MansOS branched<br />
* [http://portal.acm.org/citation.cfm?id=1870057 MansOS poster abstract], presented at Sensys 2010 ([http://strazdins.lv/papers/strazdins2010mansos.pdf PDF])</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3321MansOS API2012-01-04T13:40:10Z<p>Girts: /* Light sensor */</p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readTotalLight(); // read light<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
See [[MansOS_Radio | Radio Reference]].<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3320MansOS API2012-01-04T13:39:55Z<p>Girts: /* Light sensor */</p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readTotalLight(); // read visible light value<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
See [[MansOS_Radio | Radio Reference]].<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3319MansOS Radio2011-12-31T05:36:36Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
// Set radio channel to use for data transmission and reception<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For IEEE 802.15.4 compatible radios (such as the CC2420)<br />
// there are 16 channels available in the 2.4 GHz band<br />
// in 5 MHz steps, numbered 11 through 26<br />
void radioSetChannel(int channel)<br />
<br />
// Transmit power control.<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For CC2420, a value in range [0 .. 31] is expected,<br />
// where 0 corresponds to the minimal transmit power and 31 - to the maximum<br />
void radioSetTxPower(uint8_t power)<br />
<br />
// Returns true if Clear Channel Assessment (CCA) detects that transmission medium is free.<br />
// Always returns true if the chip does not have support for hardware CCA.<br />
bool radioIsChannelClear()<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3318MansOS Radio2011-12-31T05:35:11Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
// Set radio channel to use for data transmission and reception<br />
// The exact behavior of these functions is platform- and chip-dependent.<br />
// For IEEE 802.15.4 compatible radios (such as the CC2420)<br />
// there are 16 channels available in the 2.4 GHz band<br />
// in 5 MHz steps, numbered 11 through 26<br />
void radioSetChannel(int channel)<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3317MansOS Radio2011-12-31T05:34:03Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Get Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
// Get Link Quality Indicator (LQI) of the last received packet<br />
int8_t radioGetLastLQI()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3316MansOS Radio2011-12-31T05:32:35Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
// Measure current Received Signal Strength Indicator (RSSI)<br />
int radioGetRSSI()<br />
<br />
// Measure Received Signal Strength Indicator (RSSI) of the last received packet<br />
int8_t radioGetLastRSSI()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3315MansOS Radio2011-12-31T05:29:34Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
//<br />
// Set a new radio callback function.<br />
// The callback function is called when a packet becomes available.<br />
// In general, the callback function should call radioRecv() to read the packet.<br />
// Returns: old callback function or NULL<br />
//<br />
RadioRecvFunction radioSetReceiveHandle(RadioRecvFunction functionHandle);<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3314MansOS Radio2011-12-31T05:27:33Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Returns 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Returns received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3313MansOS Radio2011-12-31T05:25:42Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit <len> bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Return received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3312MansOS Radio2011-12-31T05:25:25Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit ''len'' bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Return received data length on success, error code as negative value on failure (see mos/hil/errors.h)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3311MansOS Radio2011-12-31T05:24:05Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
// Transmit ''len'' bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, other value on error<br />
int8_t radioSend(const void *data, uint16_t len)<br />
<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
// Return 0 on success, other value on error<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
// Return received data length on success, error code as negative value on failure<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3310MansOS Radio2011-12-31T05:20:54Z<p>Girts: /* Function reference */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
<br />
// Transmit ''len'' bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
int8_t radioSend(const void *data, uint16_t len)<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
// Write received data into the buffer. It should be called after the radio driver has signaled<br />
// data availability. Non-blocking function (does not wait for data to arrive)<br />
int16_t radioRecv(void *buffer, uint16_t bufferLength)<br />
<br />
// Similar to radioRecv(), but does not keep the result, just clear radio chip data buffers<br />
void radioDiscard()<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3309MansOS Radio2011-12-31T05:05:21Z<p>Girts: /* Examples */</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
<br />
// Transmit ''len'' bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
int8_t radioSend(const void *data, uint16_t len)<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
<br />
</pre><br />
<br />
== Examples ==<br />
<br />
TODO</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_Radio&diff=3308MansOS Radio2011-12-31T05:05:10Z<p>Girts: New page: __TOC__ mos/hil/radio.h MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules a...</p>
<hr />
<div>__TOC__<br />
<br />
mos/hil/radio.h<br />
<br />
MansOS provides API for Radio communication in [http://en.wikipedia.org/wiki/OSI_model#Layer_1:_physical_layer physical layer]. Platforms without radio modules are also supported, with NULL-radio implementation.<br />
<br />
Currently, only one default radio module is supported. When using multiple radio chips on one platform, other radios should be interfaced directly, using chip drivers.<br />
<br />
== Usage and configuration ==<br />
Radio support is turned ON by default. It can be disabled by adding the following line to the application [[MansOS_configuration_options | config file]]:<br />
<br />
USE_RADIO = n<br />
<br />
== Dependencies ==<br />
<br />
There are no dependencies for using Radio. However, when using remote reprogramming depends on radio, therefore radio usage is turned on, if remote reprogramming is used.<br />
<br />
== Function reference ==<br />
<br />
All platform-independent radio functions are described in mos/hil/radio.h . Implementation can be found under mos/hal/platforms/<platform-name>/radio_hal.h<br />
<br />
<pre><br />
// Initialize radio, called by the kernel on startup<br />
void radioInit() <br />
<br />
// Turn the radio listening on. Note that listening is not required if radio is used only to send data<br />
void radioOn()<br />
<br />
// Turn the radio listening off (and save energy)<br />
void radioOff()<br />
<br />
<br />
// Transmit ''len'' bytes long data buffer over radio. Radio must be turned on before calling this function!<br />
int8_t radioSend(const void *data, uint16_t len)<br />
// Transmit one byte over radio. Radio must be turned on before calling this function!<br />
int8_t radioSendByte(uint8_t data)<br />
<br />
<br />
</pre><br />
<br />
== Examples ==</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3307MansOS API2011-12-31T04:46:29Z<p>Girts: </p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readVisibleLight(); // read visible light value<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
See [[MansOS_Radio | Radio Reference]].<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3306MansOS API2011-12-31T04:45:10Z<p>Girts: /* Radio */</p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readVisibleLight(); // read visible light value<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
mos/hil/radio.h<br />
<br />
// Initialize radio. Called by the kernel, when radio used<br />
void radioInit();<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3305MansOS API2011-12-31T04:44:58Z<p>Girts: /* Radio */</p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readVisibleLight(); // read visible light value<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
mos/hil/radio.h<br />
<br />
// Initialize radio. Called by the kernel, when radio used<br />
void radioInit();<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=MansOS_API&diff=3304MansOS API2011-12-31T04:44:49Z<p>Girts: </p>
<hr />
<div>== LEDs ==<br />
<br />
See [[MansOS LEDs | LED Reference]].<br />
<br />
== Humidity sensor ==<br />
See [[MansOS_Humidity | Humidity Reference]].<br />
<br />
== Light sensor ==<br />
mos/hil/light.h<br />
<br />
void lightInit(); // init light sensor, do not turn it on - called by kernel automatically, not needed in application <br />
void lightOn(); // turn on light sensor<br />
void lightOff(); // turn off light sensor<br />
uint16_t readLight(); // read light value<br />
<br />
uint16_t readVisibleLight(); // read visible light value<br />
uint16_t readPARLight(); // read photo-syntetically active radiation value<br />
<br />
== ADC ==<br />
mos/hil/adc.h<br />
<br />
void adcOn();<br />
void adcOff();<br />
<br />
uint16_t adcRead(uint8_t channel); // sets channel, reads value<br />
<br />
// alternative faster version: set channel once, read multiple times (usable, if the same channel read many times)<br />
void adcSetChannel(uint8_t ch);<br />
uint16_t adcReadFast();<br />
<br />
uint8_t adcGetChannelCount() // returns ADC channel count provided by the platform<br />
<br />
== Radio ==<br />
<br />
mos/hil/radio.h<br />
<br />
// Initialize radio. Called by the kernel, when radio used<br />
void radioInit();<br />
<br />
<br />
== Sleep ==<br />
mos/hil/sleep.h<br />
<br />
mleep(miliseconds)<br />
<br />
<br />
== USART ==<br />
See mos/hil/usart.h for more details!<br />
<br />
uint_t USARTInit(uint8_t id, uint32_t speed, uint8_t conf);<br />
<br />
uint_t USARTSendByte(uint8_t id, uint8_t data);<br />
uint_t USARTSendString(uint8_t id, uint8_t *data);<br />
uint_t USARTSendStringLine(uint8_t id, uint8_t *data);<br />
void USARTSendData(uint8_t id, uint8_t *data, uint16_t len);<br />
<br />
uint_t USARTEnableTX(uint8_t id);<br />
uint_t USARTDisableTX(uint8_t id);<br />
uint_t USARTEnableRX(uint8_t id);<br />
uint_t USARTDisableRX(uint8_t id);<br />
<br />
/**<br />
* Set callback function for per-byte data receive. The callback is called<br />
* on every received packet<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t byte)<br />
*/<br />
uint_t USARTSetReceiveHandle(uint8_t id, USARTCallback_t cb);<br />
<br />
/**<br />
* Set callback for per-packet data receive. Stores the received bytes in<br />
* the buffer and the callback is called when either a newline is received<br />
* ('\n', binary value 10) or at most len bytes are received. The newline is<br />
* also stored in the buffer<br />
* Also enables USART RX automatically.<br />
* After the callback, buffer is reset and reception restarts.<br />
* Warning: Can use only one USART at a time (single buffer, single handler)!<br />
*<br />
* @param id - ID of the UART used (See MCU datasheet to get IDs)<br />
* @param cb - callback function: void myCallback(uint8_t bytes). Here the<br />
* bytes parameter contains not the last byte received but<br />
* total received byte count (i.e., bytes stored in the buffer)!<br />
* @param len - size of the buffer in bytes. Callback is called when len<br />
* bytes are received (or when '\n' is received).<br />
* When len is zero, no packet size is checked, only on newline<br />
* reception the callback is called.<br />
*/<br />
uint_t USARTSetPacketReceiveHandle(uint8_t id, USARTCallback_t cb, void *buffer,<br />
uint16_t len);</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3303LU-BST-B11:PD2011-12-28T10:53:49Z<p>Girts: /* Formulējums */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 2 baiti paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg, 3 = NetworkScanMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint16_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint16_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint16_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint16_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.01.2012. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
== PD5 ==<br />
<br />
PD5 ir neobligāts, ar iespēju nopelnīt papildus punktus.<br />
<br />
Uzdevums: doties uz VieSenTIS projekta semināru (http://selavo.lv/viesentis/) 05.12.2011., noklausīties prezentācijas un uzrakstīt "eseju" par to, ko atceraties, kas patika, ko sapratāt, ko nesapratāt.<br />
<br />
Vērtējums: seminārā ir 6 prezentācijas (pa trim katrā sesijā), par katru jāuzraksta savas pārdomas, īsas esejas formā (daži teikumi līdz dažas rindkopas). Plus viena eseja par visu semināru kopumā. Visu noformēt kā vienu dokumentu (nevis 7 esejas). Ja esat veikuši pierakstus papīra formā, drīkst iesūtīt skenētus/fotografētus papīra pierakstus, pie nosacījuma, ka rokraksts ir salasāms.<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:LC&diff=3302LU-BST-B11:LC2011-12-28T09:20:21Z<p>Girts: /* 11. Lekcija */</p>
<hr />
<div>= Lekciju materiāli =<br />
Visu [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ lekciju slaidi] pieejami PDF formātā. Slaidi parādīsies pēc katras lekcijas. Pieejami arī [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi10/ iepriekšējā gada slaidi], bet šogad tie tiks modificēti pēc vajadzības.<br />
<br />
== 1. Lekcija ==<br />
Šī bija ievadlekcija par bezvadu sensoru tīkliem - kas tie tādi, ko ar tādiem var izdarīt, kādas ir tipiskās BST problēmas. Tika īsi pastāstīts par vairākiem BST pielietojumiem. <br />
<br />
Lekcijas otrajā pusē studenti tika iepazīstināti ar kursa formālajām prasībām.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_01-intro.pdf Lekcijas slaidi]<br />
<br />
<br />
== 2. Lekcija ==<br />
Lekcija sastāvēja no divām daļām:<br />
* Radio sakaru sistēmas - par datu pārraidi pa bezvadu kanāliem, populārākajām modulācijām, [http://en.wikipedia.org/wiki/Spread_spectrum ''spread spectrum''] metodēm, tai skaitā, [http://en.wikipedia.org/wiki/Spread_spectrum frekvenču lēkāšanu] un [http://en.wikipedia.org/wiki/Direct-sequence_spread_spectrum DSSS]. Apskatījām, kādi frekvenču diapazoni pieejami bezmaksas lietošanai. Apskatījām [http://en.wikipedia.org/wiki/Shannon%E2%80%93Hartley_theorem Nīkvista un Šenona] formulas datu pārraides ātruma maksimālo limitu noteikšanai.<br />
* Sensoru mezglu resursi un daži tipiski pārstāvji. Apskatījām, no kādiem komponentiem sastāv tipiska mote, kādi ir tipiskie parametri katram komponentam: CPU, atmiņai, radio utt. Apskatījām sensoru savienošanas iespējas ar mikrokontrolieri: UART, SPI, I2C. Noskaidrojām sensoru mezgla aplikācijas sastāvdaļas, uzlādes procesu uz iekārtas un aplikācijas dzīves ciklu. Lekcijas noslēgumā apskatījām divus tipiskus sensoru mezglus: TMote Sky un EcoMote.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_02a-wireless-systems.pdf Lekcijas slaidi] par bezvadu sakaru sistēmām.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_02b-motes.pdf Lekcijas slaidi] par sensoru mezglu resursiem.<br />
<br />
<br />
== 3. Lekcija ==<br />
Šajā lekcijā runājām par [http://tinyos.net TinyOS]: par komponentiem un interfeisiem, uzdevumiem, notikumiem, komandām. Par radio un seriālā porta komunikāciju. Apskatījām Blink un RadioCountToLeds piemērus. Izmēģinājām rakstīt paši savas programmas, par pamatu ņemot demo kodu. Izmēģinājām datu sūtīšanu no motes pa seriālo portu un saņemšanu uz datora, izmantojot Javas klasi <code>net.tinyos.tools.Listen</code>. Pa ceļam izrunājām arī tehniskas lietas: kas ir [http://en.wikipedia.org/wiki/Endianness "big endian" un "little endian"], kā C kodā izveikt [http://en.wikipedia.org/wiki/Bit_operation bitu operācijas].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_02-tinyos.pdf Lekcijas slaidi]<br />
<br />
<br />
== 4. Lekcija ==<br />
Tika runāts par komunikācijas fizisko līmeni un problēmām radio sakaros, ar ko jārēķinās reālos apstākļos. Lekciju vadīja [[User:Atis | Atis Elsts]]. Lekcijā izmantoti slaidi, kuru autori ir [[User:Atis | Atis Elsts]] un [[User:Leo | Leo Seļāvo]].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_04a-phy-layer.pdf Lekcijas slaidi] par komunikācijas fizisko līmeni.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_04b-radio-realities.pdf Lekcijas slaidi] par bezvadu pārraides realitāti (2008. gada slaidi).<br />
<br />
== 5. Lekcija ==<br />
Lekcijā runājām par galvenajiem MAC līmeņa uzdevumiem, TDMA un CSMA protokolu klasēm.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_05-mac.pdf Lekcijas slaidi].<br />
<br />
== 6. Lekcija ==<br />
Apskatījām maršrutizācijas protokolus, to klasiskās īpašības, bezvadu sensoru tīklu protokolu specifiskās prasības. Apskatījām maršrutizācijas protokolu piemērus: DSDV, AODV, DSR, GPSR.<br />
<br />
Praktiskajā daļā taisījām savu maršrutizācijas protokolu, izmantojot kā sagatavi MansOS aplikāciju.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_06-routing.pdf Lekcijas slaidi].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/RoutingExp.zip Maršrutizācijas aplikācijas sagatave].<br />
<br />
== 7. Lekcija ==<br />
Apskatījām pulksteņu sinhronizācijas problēmas, pielietojumus, BST specifiskas prasības, tipiskus protokolu piemērus: [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.17.4097&rep=rep1&type=pdf RBS], [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.3367&rep=rep1&type=pdf TPSN], [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.52&rep=rep1&type=pdf FTSP]. Lekcija notika virtuāli: studenti paši lasa materiālu par laika sinhronizācij: lekcijas slaidus un slaidu aprakstu.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi10/bst-b-10_07-clock-sync.pdf Lekcijas slaidi].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_07-clock-sync-script.txt Slaidu apraksts].<br />
<br />
== 8. Lekcija ==<br />
Apskatījām sensoru mezglu lokalizācijas pielietojumus un problēmas. Izrunājām, kas ir svērtā un nesvērtā (range-based un range-free) pieejas, nedaudz par GPS tehnoloģijām. Apskatījām dažus konkrētus protokolus, kas reprezentē dažas pamata pieejas lokalizācijā.<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_08-localization.pdf Lekcijas slaidi].<br />
<br />
== 9. Lekcija ==<br />
Lekcijas sākumā pārrunājām vidus semestra KD1 rezultātus un tipiskās kļūdas. Lekcijas otrajā daļā apskatījām konkrētu sensoru tīkla piemēru: veselības uzraudzības sistēma cilvēkiem pansionātā/slimnīcā. Pārrunājām, kādas dažādas drošības un privātuma problēmas šeit sastopamas, kādi ir iespējamie risinājumi. Izrunājām, kāda ir atšķirība starp drošību un privātumu.<br />
<br />
Lekcijā slaidi netika izmantoti. Tēmas atkārtošanai var izmantot [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi10/bst-b-10_10-security.pdf 2010. gada slaidus par drošību un privātumu].<br />
<br />
== 10. Lekcija ==<br />
Runājām par populārākajām sensoru tīklu programmēšanas abstrakcijām: vaicājumu bāzētām pieejām, makro programmēšanu un aģentu bāzētu pieeju. Makro programmēšanai un aģentiem tikai nedaudz pieskārāmies, dziļāk apskatījām vaicājumu bāzētas pieejas, par piemēru ņemot [http://telegraph.cs.berkeley.edu/tinydb/ TinyDB].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_09-progabstract.pdf Lekcijas slaidi].<br />
<br />
== 11. Lekcija ==<br />
Runājām par reālas mašīnas (datora) uzbūvi, programmas izpildi. Par virtuālajām mašīnām (VM) - kāpēc tādas izmanto PC datoros, un kāpēc tādas izmantot bezvadu sensoru tīklos (BST). Apskatījām divus BST VM piemērus: Mate un [http://www.swissqm.inf.ethz.ch/ SwissQM].<br />
<br />
[http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/bst-b-11_10-virtmach.pdf Lekcijas slaidi].<br />
<br />
Izmantotās publikācijas:<br />
* Mate: [http://people.cs.ubc.ca/~malam/papers/SensorNetworks/mate.pdf P. Levis and D. Culler, “Mate: A tiny virtual machine for sensor networks,” ACM SIGARCH Computer Architecture News, vol. 30, no. 5, pp. 85–95, 2002.]<br />
* SwissQM: [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.122.1517&rep=rep1&type=pdf R. Muller, G. Alonso, and D. Kossmann, “A virtual machine for sensor networks,” in Proceedings of the 2nd ACM SIGOPS/EuroSys European Conference on Computer Systems 2007, pp. 145–158, ACM, 2007.]<br />
<br />
<br />
== 13. Lekcija ==<br />
Tika pastāstīts par pieredzi, reālos apstākļos testējot savvaļas dzīvnieku (lūšu) novērošanas bezvadu sensoru tīklu LynxNet. Praktisko darbu laikā Rihards Balašs pastāstīja par pieredzi, būvējot sensoru mezglus klimata novērošanai augļu dārzos.<br />
<br />
[http://www.edi.lv/media/uploads/UserFiles/Viesentis-seminars-2011_R.Zviedris.pdf Meža dzīvnieku monitorings ar bezvadu sensoru tīklu] (autors: [[User:Reinis | Reinholds Zviedris]]).</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3301LU-BST-B11:index2011-12-28T09:15:30Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| [[LU-BST-B11:LC#13._Lekcija | 13. Lekcija]]: Konkrētas bezvadu sensoru tīkla sistēmas apskats (case study)<br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
| 28.12.2011. <br />
| Praktiskie darbi.<br />
|<br />
<br />
|-<br />
| 04.01.2012. <br />
| Gala eksāmens, rakstisks. 12:30 - 14:00<br />
|<br />
<br />
|-<br />
| 11.01.2012. <br />
| Konsultācija 12:30 - 16:00<br />
| '''Termiņš [[LU-BST-B11:PD#PD4 | PD4]].'''<br />
<br />
|-<br />
| 13.01.2012. <br />
| "Melnā piektdiena" - visi semestra parādi jāatrāda līdz šīs dienas 18:00<br />
| <br />
<br />
|-<br />
| 18.01.2012. <br />
| Kursa projektu prezentācijas ([[LU::poster-howto | plakāti]]). 12:30 - 16:00<br />
|<br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3300LU-BST-B11:index2011-12-28T09:14:12Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| <br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
| 28.12.2011. <br />
| Praktiskie darbi.<br />
|<br />
<br />
|-<br />
| 04.01.2012. <br />
| Gala eksāmens, rakstisks. 12:30 - 14:00<br />
|<br />
<br />
|-<br />
| 11.01.2012. <br />
| Konsultācija 12:30 - 16:00<br />
| '''Termiņš [[LU-BST-B11:PD#PD4 | PD4]].'''<br />
<br />
|-<br />
| 13.01.2012. <br />
| "Melnā piektdiena" - visi semestra parādi jāatrāda līdz šīs dienas 18:00<br />
| <br />
<br />
|-<br />
| 18.01.2012. <br />
| Kursa projektu prezentācijas ([[LU::poster-howto | plakāti]]). 12:30 - 16:00<br />
|<br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3275LU-BST-B11:index2011-12-19T09:02:11Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| <br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
| 04.01.2012. <br />
| Gala eksāmens, rakstisks. 12:30 - 14:00<br />
|<br />
<br />
|-<br />
| 11.01.2012. <br />
| Konsultācija 12:30 - 16:00<br />
| '''Termiņš [[LU-BST-B11:PD#PD4 | PD4]].'''<br />
<br />
|-<br />
| 13.01.2012. <br />
| "Melnā piektdiena" - visi semestra parādi jāatrāda līdz šīs dienas 18:00<br />
| <br />
<br />
|-<br />
| 18.01.2012. <br />
| Kursa projektu prezentācijas ([[LU::poster-howto | plakāti]]). 12:30 - 16:00<br />
|<br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3274LU-BST-B11:index2011-12-19T09:00:32Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| <br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
| 04.01.2012. <br />
| Gala eksāmens, rakstisks. 12:30 - 14:00<br />
|<br />
<br />
|-<br />
| 11.01.2012. <br />
| Konsultācija 12:30 - 16:00<br />
| '''Termiņš [[LU-BST-B11:PD#PD4 | PD4]].'''<br />
<br />
|-<br />
| 13.01.2012. <br />
| "Melnā piektdiena" - visi semestra parādi jāatrāda līdz šīs dienas 18:00<br />
| <br />
<br />
|-<br />
| 18.01.2012. <br />
| Kursa projektu prezentācijas (plakāti). 12:30 - 16:00<br />
|<br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3273LU-BST-B11:index2011-12-19T08:59:10Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| <br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
| 04.01.2012. <br />
| Gala eksāmens, rakstisks. 12:30 - 14:00<br />
|<br />
<br />
|-<br />
| 11.01.2012. <br />
| Konsultācija 12:30 - 16:00<br />
| '''Termiņš [[LU-BST-B11:PD#PD4 | PD4]].'''<br />
<br />
|-<br />
| 13.01.2012. <br />
| "Melnā piektdiena" - visi semestra parādi jāatrāda līdz šīs dienas 18:00<br />
| <br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3272LU-BST-B11:PD2011-12-19T08:52:28Z<p>Girts: </p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg, 3 = NetworkScanMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.01.2012. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
== PD5 ==<br />
<br />
PD5 ir neobligāts, ar iespēju nopelnīt papildus punktus.<br />
<br />
Uzdevums: doties uz VieSenTIS projekta semināru (http://selavo.lv/viesentis/) 05.12.2011., noklausīties prezentācijas un uzrakstīt "eseju" par to, ko atceraties, kas patika, ko sapratāt, ko nesapratāt.<br />
<br />
Vērtējums: seminārā ir 6 prezentācijas (pa trim katrā sesijā), par katru jāuzraksta savas pārdomas, īsas esejas formā (daži teikumi līdz dažas rindkopas). Plus viena eseja par visu semināru kopumā. Visu noformēt kā vienu dokumentu (nevis 7 esejas). Ja esat veikuši pierakstus papīra formā, drīkst iesūtīt skenētus/fotografētus papīra pierakstus, pie nosacījuma, ka rokraksts ir salasāms.<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3271LU-BST-B11:PD2011-12-19T08:50:08Z<p>Girts: /* PD4 Termiņš */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg, 3 = NetworkScanMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.01.2012. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3270LU-BST-B11:PD2011-12-19T08:48:07Z<p>Girts: /* Formulējums */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg, 3 = NetworkScanMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.11.2011. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3269LU-BST-B11:PD2011-12-19T08:47:39Z<p>Girts: /* PD4 */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.11.2011. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3268LU-BST-B11:index2011-12-19T08:47:25Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
|-<br />
| 21.12.2011. <br />
| <br />
| Izsludināts [[LU-BST-B11:PD#PD4 | PD4]]: Sensoru tīkls (19.12.2011.)<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:index&diff=3267LU-BST-B11:index2011-12-19T08:45:47Z<p>Girts: /* Kalendārs */</p>
<hr />
<div>== '''Bezvadu Sensoru Tīkli''' ==<br />
<br />
[http://selavo.lv/df LU DF] kurss, bakalaura programma, 2011.g rudens<br />
<br />
Kursa apraksts: <br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_lv.pdf LV]]<br />
[[http://jupiter.cs.fmf.lu.lv/~kursi/bst/BST_anotacija_11_en.pdf EN]].<br />
<br />
LUIS apraksti:<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=1&p_kods=2DAT3253 LV]]<br />
[[https://luis.lanet.lv/pls/pub/kursi.kurss_dati?l=2&p_kods=2DAT3253 EN]]<br />
<br />
Pasniedzējs: [[User:Girts | Ģirts Strazdiņš]]<br />
<br />
Notiek: trešdienās, 12:30 - 16:10<br />
<br />
== Kalendārs ==<br />
<br />
{| border=1 cellspacing=0 cellpadding=4<br />
|-<br />
! Nedēļas datumi <br />
! Kursa saturs<br />
! Praktiskie un mājas darbi<br />
|-<br />
| 28.08.2011. - 02.09.2011. <br />
| Reģistrācijas nedēļa<br />
|-<br />
| 07.09.2011.<br />
| [[LU-BST-B11:LC#1._Lekcija | 1. Lekcija]]: Ievadlekcija. Bezvadu sensoru tīklu pielietojumi un pamatproblēmas. BST kursa forma un prasības.<br />
| Blink aplikācija TinyOS vidē, TinyOS Tutorials no tinyos.net.<br />
Izsludināta [[LU-BST-B11:E#Eseja_01 | 1.eseja]].<br />
<br />
|-<br />
| 14.09.2011.<br />
| [[LU-BST-B11:LC#2._Lekcija | 2. Lekcija]]: Bezvadu sakaru sistēmas. Tipiskā sensoru mezglu uzbūve.<br />
| CDMA, komerciālo sensoru mezglu pieejamība.<br />
Izsludināta [[LU-BST-B11:E#Eseja_02 | 2.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_01 | 1.esejai]].'''<br />
<br />
|-<br />
| 21.09.2011. <br />
| [[LU-BST-B11:LC#3._Lekcija | 3. Lekcija]]: Komponentu orientēta programmēšana. Operāciju sistēma TinyOS<br />
| BST programmēšanas eksperiments<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_02 | 2.esejai]].'''<br />
<br />
Eseja netiek izsludināta.<br />
<br />
|-<br />
| 28.09.2011. <br />
| [[LU-BST-B11:LC#4._Lekcija | 4. Lekcija]]: Radio komunikāciju realitātes.<br />
| Izsludināts [[LU-BST-B11:PD#PD1 | PD1]]<br />
<br />
Eseja netiek izsludināta.<br />
<br />
<br />
|-<br />
| 05.10.2011. <br />
| [[LU-BST-B11:LC#5._Lekcija | 5. Lekcija]]: MAC protokoli sensoru tīklos.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_03 | 3.eseja]].<br />
<br />
|-<br />
| 12.10.2011. <br />
| Ekskursija uz [http://www.edi.lv Elektronikas un datorzinātņu institūtu]<br />
| '''Termiņš [[LU-BST-B11:PD#PD1 | PD1]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_03 | 3.esejai]].'''<br />
<br />
|-<br />
| 19.10.2011. <br />
| [[LU-BST-B11:LC#6._Lekcija | 6. Lekcija]]: Maršrutizācijas protokoli.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_04 | 4.eseja]].<br />
<br />
|-<br />
| 26.10.2011. <br />
| [[LU-BST-B11:LC#7._Lekcija | 7. Lekcija]]: Laika sinhronizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_05 | 5.eseja]].<br />
<br />
'''Termiņš [[LU-BST-B11:E#Eseja_04 | 4.esejai]].'''<br />
<br />
<br />
|-<br />
| 02.11.2011. <br />
| Vidus semestra kontroldarbs KD1.<br />
|'''Termiņš [[LU-BST-B11:E#Eseja_05 | 5.esejai]].'''<br />
<br />
|-<br />
| 09.11.2011. <br />
| [[LU-BST-B11:LC#8._Lekcija | 8. Lekcija]]: Lokalizācija.<br />
| Izsludināta [[LU-BST-B11:E#Eseja_06 | 6.eseja]].<br />
<br />
|-<br />
| 16.11.2011. <br />
| [[LU-BST-B11:LC#9._Lekcija | 9. Lekcija]]: Drošība un privātums. KD1 pārskats.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_06 | 6.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_07 | 7.eseja]].<br />
<br />
|-<br />
| 23.11.2011. <br />
| [[LU-BST-B11:LC#10._Lekcija | 10. Lekcija]]: Programmēšanas abstrakcijas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_07 | 7.esejai]].'''<br />
Izsludināta [[LU-BST-B11:E#Eseja_08 | 8.eseja]].<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD2 | PD2]]: Kursa projekta apraksts<br />
<br />
Izsludināts [[LU-BST-B11:PD#PD3 | PD3]]: Prezentācija par enerģijas vākšanu no vides (nav obligāts)<br />
<br />
|-<br />
| 30.11.2011. <br />
| [[LU-BST-B11:LC#11._Lekcija | 11. Lekcija]]: Virtuālās mašīnas.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_08 | 8.esejai]].'''<br />
<br />
'''Termiņš [[LU-BST-B11:PD#PD2 | PD2]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_09 | 9.eseja]].<br />
<br />
|-<br />
| 07.12.2011. <br />
| [[LU-BST-B11:LC#12._Lekcija | 12. Lekcija]]: Enerģijas ieguve no vides.<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_09 | 9.esejai]].'''<br />
<br />
Izsludināta [[LU-BST-B11:E#Eseja_10 | 10.eseja]].<br />
<br />
|-<br />
| 14.12.2011. <br />
| Praktiskie darbi.<br />
<br />
| '''Termiņš [[LU-BST-B11:E#Eseja_10 | 10.esejai]].'''<br />
<br />
<br />
|-<br />
|}<br />
<br />
== Prasības ==<br />
Lai kursā iegūtu sekmīgi vērtējumu, nepieciešams:<br />
# Sekmīgi izpildīt visus uzdotos praktiskos darbus, tai skaitā, programmēšanu NesC valodā TinyOS vidē.<br />
# Sekmīgi uzrakstīt vismaz 50% no visām kursā uzdotajām esejām par lekcijās apskatītajām tēmām.<br />
# Sekmīgi izpildīt divus rakstiskus eksāmenus: vienu semestra vidū un vienu - beigās.<br />
# Sagatavot un prezentēt referātu par grupas (1-3 cilvēki) projekta ideju par bezvadu sensoru tīklu pielietojumu. Prezentācijas ilgums ir piecas minūtes. Sagatavot plakātu kas ilustrē kursa projektu.<br />
# Apmeklēt vismaz 50% no visām nodarbībām. Eksāmenos tiks iekļauta viela par ko runāts lekcijās un kas, iespējams, nav pieejama obligātajā literatūrā.<br />
<br />
== Vērtēšana ==<br />
Kursa galējais vērtējums sastāv no sekojošām komponentēm:<br />
* 5% - dalība lekcijās un diskusijās<br />
* 20% - praktiskie darbi<br />
* 10% - esejas<br />
* 15% - kontroldarbs semestra vidū <br />
* 20% - gala eksāmens<br />
* 30% - kursa projekts<br />
<br />
100% atbilst vērtējumam 10 balles (izcili).<br />
<br />
=== Novēloti iesūtīti darbi ===<br />
Praktiskie darbi, esejas un kontroldarbi ir obligāti jānokārto, lai saņemtu sekmīgu vērtējumu kursā. Tai pat laikā ir skaidrs, ka dažādu apstākļu dēļ, var rasties situācijas, kad iesūtīt noteiktajā termiņā nav iespējams. Tāpēc ir iespējama atkārtota/novēlota darbu iesūtīšana (kontroldarba/eksāmena pārrakstīšana). Šādā gadījumā tiek samazināts iegūtais vērtējums par konkrēto darbu.<br />
<br />
Soda punkti par novēloti iesūtītu darbu:<br />
* nokavējot ne vairāk kā nedēļu: -15%<br />
* nokavējot 1-2 nedēļas: -30%<br />
* nokavējot 2-3 nedēļas: -45%<br />
* nokavējot 3 nedēļas vai vairāk: -60%<br />
<br />
Darbu sekmīgi var uzrakstīt arī tad, ja termiņš ir nokavēts. Piemēram, ja praktiskajā darbā ir saņemts vērtējums 50%, bet ir nokavētas 2 nedēļas, tad gala vērtējums par šo praktisko darbu ir 50% * 0.55 = 27.5% (kas ir mazāk par 40%), šāds darbs tiek ir ieskaitīts.<br />
<br />
Sesijas laikā ir noteikts datums, kas ir pēdējā diena, kad var atrādīt jēbkāda veida nokavētos darbus: 12.01.2011.. Pēc šī datuma nekāda novēloto darbu atrādīšana vairs netiek pieņemta. <br />
<br />
Kontroldarbu un eksāmenu drīkst pārrakstīt tikai vienu reizi.<br />
<br />
== Materiāli ==<br />
<br />
* [[LU-BST-B11:LC | Lekciju materiāli]]<br />
* [http://jupiter.cs.fmf.lu.lv/kursi/bst/slaidi11/ Lekciju slaidi]<br />
* [[LU-BST-B11:E | Esejas]]<br />
* [[LU-BST-B11:PD | Praktiskie darbi]]<br />
<br />
== Saites ==<br />
* [[LU-BST:links | Bezvadu sensoru tīklu saites]]<br />
* [[LU-BST:motes | Kur nopirkt motes?]]<br />
* [http://ss64.com/bash Linux komandu rokasgrāmata]. Komandas, kas mums būs noderīgas: cd, ls, cp, mv, mkdir, df, echo, export, find, grep, less, nano, make, man, ping, rm, ifconfig.<br />
* [[LU-BST:TOSSIM | Kā piedarbināt TOSSIM uz Ubuntu 10.4]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
* [[LU-BST:SwissQM | Kā piedarbināt SwissQM virtuālo mašīnu sensoru tīkliem]] (Paldies Kārlim Visendorfam par aprakstu!)<br />
<br />
* [[Leo:Kursi | (Citi) kursi]]</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3266LU-BST-B11:PD2011-12-19T08:05:58Z<p>Girts: /* PD svari */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
'''PD formulējums vēl ir izstrādes stadijā!'''<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.11.2011. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 ballēm.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3265LU-BST-B11:PD2011-12-19T08:05:45Z<p>Girts: /* Praktiskie darbi */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
'''PD formulējums vēl ir izstrādes stadijā!'''<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.11.2011. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!<br />
<br />
<br />
== PD svari ==<br />
Katram praktiskajam darbam ir noteikts svars, kas norāda, kādu daļu no kopējā PD vērtējuma tie sastāda:<br />
* PD1: 20%<br />
* PD2: 30%<br />
* PD4: 50%<br />
<br />
Papildus praktiskie darbi:<br />
* PD3: 30%<br />
* PD5: 20%<br />
<br />
Tas nozīmē, ka par katru PD var dabūt šādu daļu no galējā kursa vērtējuma:<br />
* PD1: 0.4 balles (+ 0.4 balles par bonusa uzdevumu)<br />
* PD2: 0.6 balles (+ 0.3 balles par bonusa uzdevumu)<br />
* PD4: 1 balle atbilst 100%, maksimāli var iegūt līdz 2.1 ballei (210%)<br />
<br />
Papildus par neobligātajiem darbiem:<br />
* PD3: 0.6 balles<br />
* PD5: 0.4 balles<br />
<br />
Kopā par obligātajiem PD var saņemt 2 balles + 1.8 balles par tajos iekļautajiem bonusa uzdevumiem.<br />
<br />
Papildus par neobligātajiem PD3 un PD5 var saņemt 1 balli.<br />
<br />
Tātad, visu izpildot perfekti, par PD kopā var iegūt līdz 2+1.8+1=4.8 balles.</div>Girtshttp://andromeda.df.lu.lv/wiki/index.php?title=LU-BST-B11:PD&diff=3264LU-BST-B11:PD2011-12-19T07:54:38Z<p>Girts: /* PD4 Vērtējums */</p>
<hr />
<div>= Praktiskie darbi =<br />
<br />
Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums<br />
<br />
Lai nokārtotu kursu, '''sekmīgi jānokārto visi praktiskie darbi'''! <br />
<br />
Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.<br />
<br />
PD iesniegšanas procedūra:<br />
* Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... . Iesūtīšanai jāievēro norādītais termiņš<br />
* Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.<br />
<br />
== Izstrādes platformas un vide ==<br />
<br />
Praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... . Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y"). <br />
<br />
== Vērtēšana ==<br />
Visi praktiskie darbi kopā sastāda 20% no kopējā [[LU-BST-B11:index#Vērtēšana | kursa vērtējuma]] (2 balles).<br />
<br />
Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.<br />
<br />
=== Bonusa punkti ===<br />
Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.<br />
<br />
== PD1 ==<br />
Morzes kods.<br />
<br />
'''Uzdevums''': izspīdināt uz sarkanās gaismas diodes savu vārdu [http://lv.wikipedia.org/wiki/Morzes_kods Morzes kodā] (bez mīkstinājuma zīmēm).<br />
<br />
Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):<br />
* Punkta garums (P): 300ms<br />
* Svītras garums (S): 3 * P<br />
* Atstarpe starp signāliem viena burta ietvaros: P<br />
* Atstarpe starp diviem burtiem: S<br />
* Pauze pēc vārda beigām: 2 sekundes<br />
<br />
Pēc pauzes vārds tiek izspīdināts atkal no sākuma.<br />
<br />
'''Bonusa uzdevums''': vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.<br />
<br />
Veiksmīgas bonusa uzdevuma izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma (t.i., kopā iespējams iegūt 200% par PD1).<br />
<br />
'''Termiņš''': Trešdiena, 12.10.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 12.10.2011. 05:00: -15%<br />
* pēc 19.10.2011. 05:00: -30%<br />
* pēc 26.10.2011. 05:00: -45%<br />
* pēc 02.11.2011. 05:00: -60%<br />
<br />
== PD2 ==<br />
Kursa projekta pieteikums.<br />
<br />
Šis praktiskais darbs nedaudz atšķiras no pārējiem. Šoreiz nekas nav jāprogrammē. Bet gan jāuzraksta sava kursa projekta īss apraksts un jāiesniedz tas PDF formātā. PD2 atrādīšana nozīmē, ka lekcijas laikā, 30.11.2010., katra komanda pastāstīs pārējiem par sava kursa projekta ideju, izveidosim īsu diskusiju.<br />
<br />
Obligātās dokumenta nodaļas:<br />
# Projekta tēma. Kas ir Jūsu projekts, ko Jūs izstrādāsit. Šeit var pietikt ar vienu vai dažiem teikumiem<br />
# Projekta komanda. Kas piedalās, kādas lomas katrs izpilda (kurš ko programmēs, kurš projektēs, kurš testēs utt)<br />
# Motivācija. Kāpēc Jūs šādu projektu taisāt. Kāds no tā varētu būt labums Jums un pārējiem apkārtējiem cilvēkiem, dabai.<br />
# Jūsu pieeja un arhitektūra. Kā realizēsiet projektu. Kāda būs izmantotā aparatūra. Kāda programmatūra. Kāda būs tīkla struktūra. Šeit labi iederas sistēmas arhitektūras bildes, shematiski attēlojumi. Svarīgi norādīt arī nepieciešamo aparatūru, tai skaitā, kādi sensori nepieciešami projekta realizēšanai. Lai varam sākt meklēt nepieciešamos sensorus, motes. Tiek sagaidīts, ka šī ir saturīgākā projekta apraksta daļa.<br />
# Sagaidāmais rezultāts. Cik daudz no savas projekta idejas plānojat šī semestra laikā realizēt. Kādus testus veikt. Kā novērtēsit rezultātus.<br />
<br />
Neobligātās tēmas, par ko iespējams saņemt papildus punktus:<br />
# Kas šajā tēmā pasaulē ir jau izdarīts. Bakalaura studentiem netiek prasīts izdarīt kaut ko universālu, kas pasaulē vēl neeksistē. Tai pat laikā, ir ļoti vēlams, ka veicat izpēti, par to, kas pasaulē Jūsu tēmā ir jau izpildīts. Kaut vai tāpēc, lai izvēlētos labāko risinājumu, lai nav pašiem jāizdomā no nulles<br />
# Idealizācija. Šī projekta ietvaros netiek prasīts, lai Jūs uzbūvējat vispasaules sensoru tīklu ar Gūgles mēroga infrastruktūru. Bet, ja tas tiktu izdarīts - ko ar Jūsu sensoru tīklu varētu izdarīt? T.i., padomājiet pāri sava viena semestra robežām!<br />
<br />
=== PD2 Vērtējums ===<br />
Katra sadaļa sastāda šādu daļu no kopējā PD3 vērtējuma:<br />
# Projekta tēma: 10%<br />
# Komanda: 5%<br />
# Motivācija: 20%<br />
# Pieeja un arhitektūra: 50%<br />
# Sagaidāmais rezultāts: 15%<br />
<br />
Papildus punkti:<br />
# Pasaules sasniegumu apskats: 30%<br />
# Idealizācija: 20%<br />
<br />
<br />
'''Termiņš''': Trešdiena, 30.11.2011. 05:00<br />
<br />
Soda punkti, iesūtot novēloti:<br />
* pēc 30.11.2011. 05:00: -15%<br />
* pēc 07.12.2011. 05:00: -30%<br />
* pēc 14.12.2011. 05:00: -45%<br />
* pēc 21.12.2011. 05:00: -60%<br />
<br />
== PD3 ==<br />
Prezentācija par enerģijas ieguvi no vides.<br />
<br />
'''Uzdevums''': Sagatavot prezentāciju par kādu konkrētu metodi, kā iegūt enerģiju no vides. Piemēram, no saules, vēja, vibrācijām, temperatūras starpības, elektro magnētiskā lauka.<br />
<br />
Izvēlētā metode ir jāsaskaņo ar pasniedzēju, lai neizveidotos situācija, kad ir vairākas vienādas prezentācijas.<br />
<br />
Jāuzstājas ar 15min prezentāciju, kuras saturs:<br />
* Metodes idejas īss apraksts<br />
* Aktuālie pasaules sasniegumi un reāli pielietojumi, prototipi vai pētījumi (ja tehnoloģija vēl ir eksperimentāla)<br />
* Tehniskie parametri, cik daudz enerģijas var iegūt un:<br />
** kādi ir nepieciešamie apstākļi<br />
** ar kādu ātrumu<br />
** kādi ir sprieguma ierobežojumi<br />
** kādi ir strāvas stipruma ierobežojumi<br />
** kas nosaka metodes efektivitāti, kad tā samazinās<br />
* Metodes lietderība sensoru tīkliem - kādās situācijās šādu metodi varētu izmantot<br />
<br />
Prezentētāji uzstājas BST lekcijas laikā, 07.12.2011. 12:30 - 14:00.<br />
<br />
Vērtējumu noteiks prezentācijas klausītāji.<br />
<br />
PD pildīšanas gadījumā par to jāziņo pasniedzējam līdz piektdienai, 01.12.2011. 23:59.<br />
<br />
<br />
== PD4 ==<br />
<br />
'''PD formulējums vēl ir izstrādes stadijā!'''<br />
<br />
Sensoru datu pārsūtīšana uz bāzes staciju.<br />
<br />
=== Uzdevums ===<br />
<br />
Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu. Dažu uzdevumu izpildei var būt nepieciešams modificēt PC programmu.<br />
<br />
=== Formulējums ===<br />
Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:<br />
* magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };<br />
* packetType: 1 baits paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg<br />
* dataLen: 2 baiti saturīgo datu garums<br />
* data: <dataLen> baiti - saturīgie dati<br />
<br />
Visās pakās datu daļā pirmais lauks ir <code>counter</code>: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām. <br />
<br />
Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.<br />
<br />
Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:<br />
SensorRequestMsg (packetType = 1, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")<br />
uint8_t period;<br />
// no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)<br />
uint8_t avg;<br />
}<br />
<br />
SensorReportMsg (packetType = 2, dataLen = 7) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
// sensoru mezgla id<br />
uint16_t moteId;<br />
// nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,<br />
// 3 = temperatūra, 4 = mitrums<br />
uint8_t sensorId;<br />
// nolasītā vidējā vērtība<br />
uint16_t value;<br />
}<br />
<br />
NeworkScanMsg (packetType = 3, dataLen = 2) {<br />
// skaitītājs paku dublikātu identificēšanai<br />
uint16_t counter;<br />
}<br />
<br />
Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (<code>networkId</code>): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā <code>networkId * 100 + moteNr</code>, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās. <br />
<br />
Sensoru mezgla un bāzes stacijas darbības protokols:<br />
* Bāzes stacija:<br />
** No datora seriālā porta saņem <code>SensorRequestMsg</code>, pārsūta to pa radio<br />
** Klausās ienākošos <code>SensorReportMsg</code> ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs <code>moteId</code>, derīgos pārsūta uz seriālo portu<br />
* Sensoru mezgls:<br />
** Klausās pa radio saņemtos <code>SensorRequestMsg</code> ziņojumus, atfiltrē tikai sev piederīgus (ar savu <code>moteId</code>).<br />
** Saņemot sev adresētu <code>SensorRequestMsg</code>, uzsāk norādītā sensora lasīšanu un sūtīšanu (<code>SensorReportMsg</code>) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).<br />
** Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda <code>avg</code> lauks saņemtajā <code>SensorRequestMsg</code> ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta <code>SensorReportMsg</code> ziņojumā<br />
** Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.<br />
<br />
No pasniedzēja puses tiks piedāvāta sagatave C++ programmai, kas darbojas uz PC un sūta/saņem komandas uz/no bāzes stacijas motes. <br />
<br />
Šis praktiskais darbs var noderēt kā bāze kursa projektam.<br />
<br />
=== PD4 Vērtējums ===<br />
<br />
Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.<br />
<br />
Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):<br />
* Jāuzraksta bāzes stacijas (motes) programma, kas:<br />
** pārsūta no PC pa seriālo portu saņemtos <code>SensorRequestMsg</code> ziņojumus pa radio: '''10%'''<br />
** pārsūta pa radio saņemtos sev piederīgos <code>SensorReportMsg</code> ziņojumus uz PC pa seriālo portu: '''10%'''<br />
* Jāuzraksta sensoru mezgla (motes) prorgamma, kas:<br />
** saņem <code>SensorRequestMsg</code> ziņojumus pa radio un atfiltrē sev piederīgos: '''10%'''<br />
** nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem <code>SensorRequestMsg</code> ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais <code>SensorRequestMsg</code> un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais <code>SensorRequestMsg</code> un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: '''10%''', ideālā gadījumā: '''20%'''.<br />
** izvelk katra sensora lasījumiem vidējo vērtību: '''5%'''<br />
** nosūta izrēķināto vidējo vērtību pa radio kā <code>SensorReportMsg</code> ziņojumu: '''5%'''<br />
* Papildināt PC programmas sagatavi tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: '''20%'''<br />
* Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus '''30%''' vērtējums, efektīvākas maršrutizācijas gadījumā: līdz '''50%'''.<br />
* Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar <code>NetworkScanMsg</code>: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta <code>NetworkScanMsg</code>, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt <code>SensorReportMsg</code> jebkuram sensoram pēc izvēles. Papildus vērtējums: '''30%'''.<br />
* Papildus līdz '''50%''' var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa<br />
<br />
=== PD4 Termiņš ===<br />
<br />
Trešdiena, 11.11.2011. 05:00<br />
<br />
=== PD4 Soda punkti, iesūtot novēloti ===<br />
* pēc 11.01.2012. 05:00: -15%<br />
* pēc 13.01.2012. 18:00: PD vairs netiek pieņemts! Līdz šim brīdim ir jāpaspēj ne tikai iesūtīt, bet arī atrādīt VISI semestra darbi!</div>Girts