Difference between revisions of "Talk:BCI on Sockets"
MarioPolino (Talk | contribs) m (→CMD_TO_DSP) |
MarioPolino (Talk | contribs) m |
||
| Line 22: | Line 22: | ||
Non abbiamo provato a cambiare la configurazione in quanto la configurazioni rimangono salvate nel dispositivo, e una configurazione sbagliata potrebbe causare problemi. | 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. | Più informazioni su come configurare la rete di BENet possono essere trovate nella documentazione fornita da EBNeuro. | ||
| − | + | =Example= | |
| + | 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= | =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 15:22, 14 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):
Documentazione EBNeuro
Questi sono i file di testo che documentano i sorgenti di EbNeuro:
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.
Example
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 in BigEndian 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.