Armando47/Software: Difference between revisions

From ciapini
Jump to navigation Jump to search
No edit summary
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Telecom]]
== Modem ==
== Modem ==


lo strato modem controlla l'ADC, il DAC e i GPIO
lo strato modem va dalle porte fisiche (ADC e DAC) al flusso di simboli discriminati


=== Modalita GPIO ===
ogni simbolo e' definito dalla sua:
* ampiezza
* frequenza
* fase


Armando ha 8 GPIO che possono lavorare nelle seguenti modalita'
Limiti:
* la costellazione e' di dimensione massima 16
* il rate massimo e' di 1200 baud


==== R/C ====
=== Modulazione ===


* http://www.aerodesign.de/peter/2000/PCM/PCM_PPM_eng.html
La modulazione e' implementata con un accumulatore di fase
* http://www.pololu.com/blog/17/servo-control-interface-in-detail


{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
=== Demodulazione ===
!CH
!porta
!descrizione
|-
|1||GPIO0||
|-
|2||GPIO0||
|-
|3||ANALOG0/PWM0||
|-
|4||ANALOG1/PWM1||
|-
|5||ANALOG2/PWM2||
|-
|6||ANALOG3/PWM3||
|-
|7|| ||
|-
|8|| ||
|}


La demodulazione è implementata con un phase detector ad arcotangente.


GPIO0 e GPIO1 sono ingressi logici
letture:
* http://www.w7ay.net/site/Technical/Old/ATC/
* http://www.cse.yorku.ca/course_archive/2010-11/F/3213/CSE3213_07_ShiftKeying_F2010.pdf


ANALOG0 - ANALOG3 sono ingressi analogici (0-vdd)
==== PLL ====


armando va in trasmissione (setta PTT_OUT alto) quando lo stato degli input cambia.
quando si e' riconosciuto il preambolo, un PLL deve sincronizzarsi con la portante del segnale. fatto questo l'oscillatore locale rimane fisso fino alla fine del pacchetto. praticamente lo smorzamento del loop e' basso durante il preambolo e diventa infinitamente alto durante il pacchetto.
 
il protocollo di trasporto e' [[arNet]]
 
in Rx:
 
dai pin PWM0-3 esce un segnale pwm in standard analog servo r/c.
dai pin GPIO0-1 esce un livello logico
 
* frequenza: 50 Hz
* 0 duty cycle: 1.25 ms
* 512 duty cycle: 1.50 ms
* 1023 duty cycle: 1.75 ms
* VLo: Vss
* VHi: Vdd


letture:
* https://en.wikipedia.org/wiki/Phase-locked_loop#Implementing_a_digital_phase-locked_loop_in_software
* http://lists.canonical.org/pipermail/kragen-hacks/2012-February/000534.html una delle cose piu divertenti che abbia mai provato
* http://arachnoid.com/phase_locked_loop/


== Phy ==
== Phy ==
Line 62: Line 40:
sono supportate 4 modalita' phy:
sono supportate 4 modalita' phy:


* raw
* raw (il byte in ingresso, troncato ai bit_per_simbolo, viene direttamente encodato in un simbolo)
* arphy
* [[ArPhy]]
* morse
* Morse
* aprs
* [[#APRS]]


== Net ==
== Net ==
Line 101: Line 79:
lib NMEA:
lib NMEA:
* http://diydrones.com/forum/topics/705844:Topic:49807
* http://diydrones.com/forum/topics/705844:Topic:49807
=== arNet ===
armando implementa la suite [[arPhy]]-[[ArNet]]


=== ANI ===
=== ANI ===
Line 125: Line 99:
* http://kb8ojh.net/msp430/morse_encoding.html
* http://kb8ojh.net/msp430/morse_encoding.html


== generatore OTP ==


dato che abbiamo un rtc l'apparato potrebbe fare da one time password generator.
== GPIO ==
usiamo la chiave come seme? che implementazioni ci sono?
 
Armando ha 8 GPIO che possono lavorare nelle seguenti modalita'
 
=== R/C ===
 
* http://www.aerodesign.de/peter/2000/PCM/PCM_PPM_eng.html
* http://www.pololu.com/blog/17/servo-control-interface-in-detail
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
!CH
!porta
!descrizione
|-
|1||GPIO0||
|-
|2||GPIO0||
|-
|3||ANALOG0/PWM0||
|-
|4||ANALOG1/PWM1||
|-
|5||ANALOG2/PWM2||
|-
|6||ANALOG3/PWM3||
|-
|7|| ||
|-
|8|| ||
|}
 
 
GPIO0 e GPIO1 sono ingressi logici


letteratura:  
ANALOG0 - ANALOG3 sono ingressi analogici (0-vdd)
* https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
 
* https://otpd.googlecode.com/svn-history/r77/trunk/cardops/totp.c
armando va in trasmissione (setta PTT_OUT alto) quando lo stato degli input cambia.
* https://www.yubico.com/products/yubikey-hardware/yubikey/
 
* https://code.google.com/p/yubikey-personalization/
il protocollo di trasporto e' [[arNet]]
 
in Rx:
 
dai pin PWM0-3 esce un segnale pwm in standard analog servo r/c.
dai pin GPIO0-1 esce un livello logico
 
* frequenza: 50 Hz
* 0 duty cycle: 1.25 ms
* 512 duty cycle: 1.50 ms
* 1023 duty cycle: 1.75 ms
* VLo: Vss
* VHi: Vdd
 
== CLI ==
 
Una delle due porte seriali viene usata per comunicare con il modem
 
http://pub.svn.esiliati.org/repos/ciapini/armando/armando.X/interface/cli.h
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
!Comando
!Descrizione
!Dati
|-
|!||Reset||
|-
|H||Echo, ripete i dati inseriti sulla CLI||dati da ripetere
|-
|V||Torna versione del firmware di Armando||
|-
|T||Inserisce dati in un pacchetto e lo invia nella coda di trasmissione||dati da trasmettere
|-
|O||Apre pacchetto||dimensione del pacchetto
|-
|A||Aggiunge dati nel pacchetto aperto||dati da aggiungere
|-
|C||Chiude pacchetto||
|-
|P||Inserisce comandi per la [[Armando47/ArPhyCLI]]||stringa comandi
|-
|N||Inserisce comandi per il [[Armando47/ArNetCLI]]||stringa comandi
|}


== stringa di configurazione ==
Esempi:
* W|H|3|tre ripete la stringa "tre"
* W|N|9|S=41,D=56 imposta a 41 l'indirizzo del nodo e a 56 l'indirizzo di destinazione dei pacchetti che verranno accodati
* W|T|7|1234567 crea un pacchetto contenente la stringa "1234567" e lo invia sulla coda di trasmissione


la configurazione dell'apparato deovrebbe essere importabile ed esportabile come una stringa esadecimale
* http://stackoverflow.com/questions/1445387/how-do-you-design-a-serial-command-protocol-for-an-embedded-system


anche la chiave crittografica sara una stringa di 32/48/64 caratteri esadecimali
== API ==
=== Net ===
<syntaxhighlight lang="C" line='line'>
uint8_t net_packet_reserve(uint16_t data_size); // controlla se e' possibile accodare un pacchetto
void net_packet_open(void); // intesta un pacchetto
void net_packet_append(uint8_t *data, uint16_t data_size); // appende dati
void net_packet_close(void); // chiude il pacchetto e lo mette in coda
</syntaxhighlight>


== PIN/PUC ==
==== ArNet ====


quando il device andra in sleep sara necessario un pin di 4 caratteri per risvegliarlo
=== Phy ===


dopo 5 tentativi sbagliati, il device dimentica la chiave crittografica.
preamble wait
offset stop


== Crittazione ==
preamble send
Se vogliamo usare AES, questo potrebbe fare al caso nostro:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en027644


[[ArNet#Cifratura]]
send_pdu

Latest revision as of 12:41, 20 October 2017

Modem

lo strato modem va dalle porte fisiche (ADC e DAC) al flusso di simboli discriminati

ogni simbolo e' definito dalla sua:

  • ampiezza
  • frequenza
  • fase

Limiti:

  • la costellazione e' di dimensione massima 16
  • il rate massimo e' di 1200 baud

Modulazione

La modulazione e' implementata con un accumulatore di fase

Demodulazione

La demodulazione è implementata con un phase detector ad arcotangente.

letture:

PLL

quando si e' riconosciuto il preambolo, un PLL deve sincronizzarsi con la portante del segnale. fatto questo l'oscillatore locale rimane fisso fino alla fine del pacchetto. praticamente lo smorzamento del loop e' basso durante il preambolo e diventa infinitamente alto durante il pacchetto.

letture:

Phy

lo strato di PHY va dal discriminatore di simbolo al buffer dei dati

sono supportate 4 modalita' phy:

  • raw (il byte in ingresso, troncato ai bit_per_simbolo, viene direttamente encodato in un simbolo)
  • ArPhy
  • Morse
  • #APRS

Net

Protocolli

armando e' in grado di parlare differenti protocolli

APRS

Automatic Packet Reporting System, e' un sistema di localizzazione a pacchetti che usa un protocollo AX.25 in modalita senza connessione su una modulazione afsk Bell 202 a 1200 bps

sarebbero utili 3 modalita APRS

  • client, che riceve dalla UART stringhe NMEA e le trasmette in aprs
  • digipeater, che ritrasmette i messaggi APRS ricevuti
  • gateway, che manda via UART i messaggi APRS ricevuti

Qui c'è vita morte e miracoli dell'aprs, con relative specifiche:

http://www.aprs.org/

la prima reference: ftp://ftp.tapr.org/aprssig/aprsspec/spec/aprs101/APRS101.pdf

sw da cui è possibile attingere: http://info.aprs.net/index.php?title=Software

Per fortuna ci sono delle bellissime librerie in c++

lib NMEA:

ANI

client e server Push-To-Talk ID e selective calling.

tipi di ANI

  • Motorola’s MDC-1200
  • Kenwood’s FleetSync
  • Harris’ G-Star (aka GE-Star)
  • DTMF
  • 5-Tone

letture:

Morse


GPIO

Armando ha 8 GPIO che possono lavorare nelle seguenti modalita'

R/C

CH porta descrizione
1 GPIO0
2 GPIO0
3 ANALOG0/PWM0
4 ANALOG1/PWM1
5 ANALOG2/PWM2
6 ANALOG3/PWM3
7
8


GPIO0 e GPIO1 sono ingressi logici

ANALOG0 - ANALOG3 sono ingressi analogici (0-vdd)

armando va in trasmissione (setta PTT_OUT alto) quando lo stato degli input cambia.

il protocollo di trasporto e' arNet

in Rx:

dai pin PWM0-3 esce un segnale pwm in standard analog servo r/c. dai pin GPIO0-1 esce un livello logico

  • frequenza: 50 Hz
  • 0 duty cycle: 1.25 ms
  • 512 duty cycle: 1.50 ms
  • 1023 duty cycle: 1.75 ms
  • VLo: Vss
  • VHi: Vdd

CLI

Una delle due porte seriali viene usata per comunicare con il modem

http://pub.svn.esiliati.org/repos/ciapini/armando/armando.X/interface/cli.h

Comando Descrizione Dati
! Reset
H Echo, ripete i dati inseriti sulla CLI dati da ripetere
V Torna versione del firmware di Armando
T Inserisce dati in un pacchetto e lo invia nella coda di trasmissione dati da trasmettere
O Apre pacchetto dimensione del pacchetto
A Aggiunge dati nel pacchetto aperto dati da aggiungere
C Chiude pacchetto
P Inserisce comandi per la Armando47/ArPhyCLI stringa comandi
N Inserisce comandi per il Armando47/ArNetCLI stringa comandi

Esempi:

  • W|H|3|tre ripete la stringa "tre"
  • W|N|9|S=41,D=56 imposta a 41 l'indirizzo del nodo e a 56 l'indirizzo di destinazione dei pacchetti che verranno accodati
  • W|T|7|1234567 crea un pacchetto contenente la stringa "1234567" e lo invia sulla coda di trasmissione

API

Net

uint8_t net_packet_reserve(uint16_t data_size); // controlla se e' possibile accodare un pacchetto
void net_packet_open(void); // intesta un pacchetto
void net_packet_append(uint8_t *data, uint16_t data_size); // appende dati
void net_packet_close(void); // chiude il pacchetto e lo mette in coda

ArNet

Phy

preamble wait offset stop

preamble send

send_pdu