Difference between revisions of "Talk:BCI on Sockets"
NikoZarzani (Talk | contribs) m (→Boot & Ctrl) |
NikoZarzani (Talk | contribs) m (→Example) |
||
Line 77: | Line 77: | ||
=Example= | =Example= | ||
+ | Questo è un esempio dell'uso dei metodi pubblici della classe BENet per l'acquisizione EEG: | ||
public class Main { | public class Main { | ||
Line 106: | Line 107: | ||
} | } | ||
} | } | ||
+ | |||
=Informazioni aggiuntive ricavate dai sorgenti= | =Informazioni aggiuntive ricavate dai sorgenti= | ||
Le comunicazioni con il dispositivo avvengono su tre porte TCP: | Le comunicazioni con il dispositivo avvengono su tre porte TCP: |
Revision as of 10:19, 15 September 2011
In questa sezione sono raccolte tutte le informazioni riservate relative al progetto.
Contents
Sorgenti EBNeuro
Queste sono le librerie per l'uso del BENet su Windows:
Questi sono i sorgenti della DLL fornita da EbNeuro (BelIONet.dll):
Questi sono i binari dei firmware che la dll invia al BNet:
Documentazione EBNeuro
Questi sono i file di testo che documentano i sorgenti di EbNeuro:
Specifiche/Architettura Software
Configurazione Sistema
BENet:
- IP: 192.168.171.212
- Mask: 255.255.255.0
- Mac: 00:50:C2:62:5D:D8
Dispositivo:
- IP: 192.168.171.2
- Mask: 255.255.255.0
Per i nostri test abbiamo utilizzato qusi sempre l'indirizzo 192.168.171.2, ma un qualsiasi indirizzo della classe 192.168.171.0/24 funziona (naturalmente escluso il 212 che è del BENet)
E' possibile cambiare la configurazione di rete di BENet. Si può fare via ControlSocket una volta che è stato caricato il primo Firmware(quello di BENet). Non abbiamo provato a cambiare la configurazione in quanto la configurazioni rimangono salvate nel dispositivo, e una configurazione sbagliata potrebbe causare problemi. Più informazioni su come configurare la rete di BENet possono essere trovate nella documentazione fornita da EBNeuro.
API
Documentazione dei Metodi pubblici di BENet
BENet
BENet(String IPAddress, int BootPort, int CtrlPort, int DataPort, SamplesBuffer sampleBuffer) Costruttore della Classe BENet.
- IPAddress String Indirizzo IP del dispositivo a cui connettersi (192.168.171.212)
- BootPort Porta per la gestione del boot (7023)
- CtrlPort Porta per la gestione dei controlli (7024)
- DataPort Porta per la ricezione dei dati (7025)
- samplesBuffer Buffer circolare che immagazzina i dati.
acqParamSet
void acqParamsSet(ArrayList<Short> hwIndexList, int sampleRate, short coupling, short dynRange, short lowPass, short highPass, short notch, byte[] label, int BufferSecs, int PacketRate) Questo metodo setta tutti i canali con la medesima configurazione. E' possibile fare un settaggio differente per ogni canale ma questa funzionalità non è implementata in B-Rain.
- hwIndexList lista degli indici dei canali che si voglio acquisire. (HwIndex Map)
- sampleRate Frequenza di acquisizione espressa in Hz
- coupling 0 per AC, 1 per DC
- dynRange Sensibilità dei canali Talk:BCI_on_Sockets#Data
- lowPass indice del filtro passa basso
- highPass indice del filtro passa alto
- notch frequenza per filtro Notch
- label ???
- BufferSecs Seconds of DataBuffer (vedi EBNeuro src)
- PacketRate Frequenza con cui lui di invia i pacchetti (Per come è fatto deve essere uguale a sampleRate)
AcqStart
void AcqStart() Metodo che attiva la modalità di acquisizione EEG Da lanciare prima di leggere dalla dataSocket
OhmStart
void OhmStart() Metodo che attiva la modalità OhmMeter Da lanciare prima di chiedere i valori di impedenza
startThreadData
void startThreadData() Avvia il Thred di Acquisizione dati.
AcqStop
void AcqStop() Disattiva le modalità di acquisizione(spegne sia AcqStart che ohmStart)
Example
Questo è un esempio dell'uso dei metodi pubblici della classe BENet per l'acquisizione EEG:
public class Main { public static void main(String[] args) { //Creo lista degli indici ArrayList<Short> hwIndexList = new ArrayList<Short>(); //Seleziono i canali che mi interessano hwIndexList.add(new Short((short) 0)); hwIndexList.add(new Short((short) 1)); hwIndexList.add(new Short((short) 2)); hwIndexList.add(new Short((short) 3)); hwIndexList.add(new Short((short) 4)); //Creo Buffer di Acquisizione SamplesBuffer sampleBuffer = new SamplesBuffer(1000); //Inizializzo BENet indicando Ip porte e buffer BENet benet = new BENet("192.168.171.212", 7023, 7024, 7025, sampleBuffer); //Setto parametri di acquisizione benet.acqParamsSet(hwIndexList, 512, (short) 0, (short) 0, (short) 0, (short) 0, (short) 50, null, 2, 512); //Avvio Acquisizione benet.acqStart(); //Avvio Thread per la gestione dei dati in arrivo benet.startThreadData(); } }
Informazioni aggiuntive ricavate dai sorgenti
Le comunicazioni con il dispositivo avvengono su tre porte TCP:
- 7023 Boot (loading del firmware)
- 7024 Control (Invio di comandi e settaggi)
- 7025 Data (Ricezione dati)
Reco Port
Sulla porta 7022 UDP è stato implementato un sistema per il riconoscimento dei dispositivi EBNeuro in una sottorete. Per ulteriori informazioni consultare la documentazione EBNeuro
Boot & Ctrl
Ogni messaggio di comunicazione deve avere il seguente formato.
STX 1 byte 0x02 Tag 1 byte Length 2 byte short (attenzione all'endianess) msg Lenght byte ETX 1 byte 0x03
Campo | STX | Tag | Length | msg | ETX |
---|---|---|---|---|---|
Dimensione | 1 byte | 1 byte | 2 byte | Length | 1 byte |
CMD_TO_DSP
Mandato sulla control Socket CMD_TO_DSP è il comando che permette di comunicare con B.E. Light
Campo | STX | CMD_TO_DSP | Length | CMD | ParC_Len | ParA_Len | ParC | ETX |
---|---|---|---|---|---|---|---|---|
Dimensione | 1 byte | 1 byte | 2 byte | 2byte | 2byte | 2byte | ParC byte | 1 byte |
Info | 0x2 | 0x21 | Comandi indicati nei sorgenti come BE_CMD_* | Length dei parametri che verrano passati | Length attesa del pacchetto di risposta | 0x3 |
Prestare attenzione all'endianess della parte interna del pacchetto.
Data
La trasmissione sulla socket è monodirezionale, cioè si ricevono dati ma non si trasmette mai niente.
Ogni messaggio ricevuto ha il seguente formato.
Count 4 byte intero progressivo che segnala la progressività dei pacchetti. Data 2 byte * numero Canali Regs 44 byte Registri di memoria del dispositivo, vengono inviati solo se è attivo il dispatch mode
Campo | Count | Data | Regs(Opzionale) |
---|---|---|---|
Dimensione | 4 byte | 2 byte* n°Chn | 44 byte |
I dati trasmessi sono ordinati per canali in maniera rigorosamente crescente, per esempio se si utilizzano i canali con indice 7,5,23,22 anche se questi sono stati configurati in ordine non crescente sulla data socket arriverà un pacchetto con 4 short in modo che il primo short apparterrà al canale 5.
i dati così ottenuti devono essere normalizzati in base ad una tabella di sensibilità che dipende dal Dynamic Range impostato in fase di Settaggio. Per il B.E.Light:
DynRange | Scale Factor |
---|---|
0 | 0.125 |
1 | 2.05 |
Dump Sessione
Nel seguente file si trova un dump di una sessione di connessione fatto a livello di rete con wireshark: