First commit
This commit is contained in:
60
README.md
Normal file
60
README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Marshalling
|
||||
|
||||
## Descrizione esercizio
|
||||
|
||||
### Problema
|
||||
|
||||
Stai sviluppando un protocollo di comunicazione per un semplice localizzatore di veicoli. La comunicazione avviene tramite satellite, si ha quindi una larghezza di banda molto bassa e l’efficienza è quindi cruciale.
|
||||
|
||||
I dati sono organizzati sotto forma di pacchetti di dimensioni 10 byte, con la seguente struttura:
|
||||
|
||||
| Bit Offset | Size in bits | Type | Name |
|
||||
|------------|--------------|--------------|------------------------------------|
|
||||
| 0 | 16 | unsigned int | senderID |
|
||||
| 16 | 8 | unsigned int | packetType |
|
||||
| 24 | 16 | signed int | altitude, in decimetri (0.1 metri) |
|
||||
| 40 | 14 | signed int | longitude, in 0.0000001 gradi |
|
||||
| 54 | 14 | signed int | latitude, in 0.0000001 gradi |
|
||||
| 68 | 4 | unsigned int | flags |
|
||||
| 72 | 8 | unsigned int | ext |
|
||||
|
||||
Una volta compattato, un pacchetto è rappresentato come array di byte di dimensione 10.
|
||||
|
||||
Alla ricezione dei dati, essi vengono scompattati e devono essere rappresentati nel seguente formato:
|
||||
```c
|
||||
struct Packet {
|
||||
UInt32 senderID;
|
||||
UInt32 packetType;
|
||||
Int32 altitude;
|
||||
Int32 longitude;
|
||||
Int32 latitude;
|
||||
byte flags;
|
||||
byte ext;
|
||||
};
|
||||
```
|
||||
|
||||
### Task1
|
||||
Implementa la funzioni marshaling e unmarshaling per i dati sopra definiti.
|
||||
|
||||
Le funzioni potrebbero avere la firma seguente:
|
||||
```c
|
||||
uint8_t* marshal(Packet* p);
|
||||
Packet* unmarshal(uint8_t* data);
|
||||
```
|
||||
|
||||
È possibile modificare le firme del metodo.
|
||||
|
||||
Rispettare le seguenti specifiche:
|
||||
|
||||
- Troncamento: se uno qualsiasi dei valori Int32 è troppo grande o troppo piccolo per i campi assegnati, mantieni le cifre più significative. Ad esempio, se l’altitudine è 3500.0 m, il valore codificato nel pacchetto è 3276.7 m (0x7FFF). Consultare https://en.wikipedia.org/wiki/Saturation_arithmetic per ulteriori dettagli.
|
||||
|
||||
- Longitudine/Latitudine: solo i 14 bit più significativi devono essere sottoposti a marshalling/unmarshalling.
|
||||
|
||||
## Come compilare
|
||||
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
```
|
||||
Reference in New Issue
Block a user