Go Down

Topic: Websocket [ci siamo quasi] (Read 14220 times) previous topic - next topic

lesto

#45
Jun 30, 2013, 04:33 pm Last Edit: Jun 30, 2013, 04:35 pm by lesto Reason: 1
guarda che per il timeout il codice è nella prima pagina :)
edit: seconda pagina :) era dewntro un edit, magari non ti sei accorto della modifica!

Quote
devi sovrascrivere il timeout di default usato dalla EthernetShield:
http://forum.arduino.cc/index.php?topic=49401.0
Quote

You don't even need to modify the library code. In your sketch, add this include:

Code: [Select]
#include <utility/w5100.h>

then, in your setup, after you call Ethernet.begin(), add the following two lines:


Code: [Select]
W5100.setRetransmissionTime(0x07D0);
W5100.setRetransmissionCount(3);


That gives me a 3 second timeout on a bad server connection.

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

si le avevo trovate e modificate
a parte non cambiare nulla ora la ethernet non si connette più nemmeno rimettendole come erano :)
no comment

lesto

sono valori che vengono sovrascritti ad ogni Ethernet.begin(), infatti quelle righe sono da mettere DOPO, se il wiznet non funzionabisona ricercare la causa in altri fattori.
Sti usando la lib originale o la mia modificata?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#48
Jun 30, 2013, 06:50 pm Last Edit: Jun 30, 2013, 06:53 pm by pablos Reason: 1
ok ripristinato tutto, stavo usando le lib originali, ma siccome erano parecchio pasticciate ho installato l'ultima ide 105 ... ora sono nel pulito.

ho sostituito le originali con le tue, compila tutto quello che faccio con client sullla 80 funziona, mentre le funzioni della websocket non vanno, ho un bel socket error

-Tu hai zippato l'intera cartella Ethernet.....
Puoi specificare quali lib hai modificato?
i file base modificati a quale ide appartenevano? visto che le ultime sono del 17/05/2013
no comment

lesto

i file dell'ide sono presi da github, quindi sono quelli della 1.5.X

Code: [Select]
mentre le funzioni della websocket non vanno, ho un bel socket error
uhmm, se il socket sulla 80 funziona mi sembra moolto strano... sicuro di usare la websocket "pulita"?

io intanto ho fatto un piccolo bug-fix: Se nella onDisconnectd chiamavi client.getId() ti ritornava il valore che indica un socket disconnesso invece che il suo (ex) id.
Ora invece ritorna l'id corretto.

giusto per sapere, hai provato l'esempio che ho aggiunto nella libreria? (si chiama "Callback.ino", è tra gli esempi standard).

Con quell'esempio puoi collegarti contemporaneamente con più connessioni (usa più sessioni telnet, peresempio) e dovresti vedere delle risposte sia visa telnet che via seriale. Questo perchè prima di tutto vanno testate bene le modifiche che ho fatto, altrimentio non capiamo più dove stanno i bachi.

A quel punto, vediamo come mai la websocket non funziona (partendo da una situazione pulita, prima prova eth + websocket pulita, poi eth mod + websocket pulita, poi eth mod + websocket modificata)

per le modifiche, da oriinale a versione attuale (che ha il bug-fix della EthernetClient che il 7z non ha): https://github.com/lestofante/Arduino/compare/arduino:master...EthernetMod
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#50
Jul 01, 2013, 01:14 am Last Edit: Jul 01, 2013, 01:22 am by pablos Reason: 1
Quote
giusto per sapere, hai provato l'esempio che ho aggiunto nella libreria? (si chiama "Callback.ino", è tra gli esempi standard).

si l'ho provato, però mi chiedo, ma tu quando fai uno sketch provi a compilarlo? perchè se anche non hai la eth wiznet la compilazione dovrebbe andare a buon fine lo stesso.

Comunque correggendo un pezzo di sketch da
Code: [Select]
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 255, 0);


a
Code: [Select]
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,2, 177 };
byte gateway[] = {192, 168, 2, 1};
byte subnet[] = {255, 255, 255, 0};



gli errori di compilazione rimanenti del Callback.ino che riguardano le classi sono
Quote


sketch_jul01b.ino: In function 'void setup()':
sketch_jul01b:32: error: 'class EthernetServer' has no member named 'registerConnectCallback'
sketch_jul01b.ino: In function 'void onConnect(EthernetClient&)':
sketch_jul01b:54: error: 'class EthernetClient' has no member named 'getId'
sketch_jul01b:56: error: 'class EthernetClient' has no member named 'registerDisconnectCallback'


Quote
per le modifiche, da originale a versione attuale (che ha il bug-fix della EthernetClient che il 7z non ha): https://github.com/lestofante/Arduino/compare/arduino:master...EthernetMod

prima che tu mi chieda ... "ma hai applicato le modifiche fix presenti su github?" ti rispondo ...
e come dovrei prenderle? con una riga alla volta copia e incolla? già è uno sbattimento cercare le linee aggiunte/modificate nei cpp/h che hai scritto, poi ho dovuto confrontare le righe una a una tra le tue e gli originali dell'ide per capire cosa hai fatto (farci un segnetto?) :) , scusa ma non ho trovato nessun download del pacchetto....

ciao
no comment

lesto

certo che compilo, però se non  usi la mia libreria non funzionan nulla, visto che quell'esempio è apposta per provare la mia libreria.  :smiley-mr-green:

la classe "IPAddress" è stata aggiunta dalle versioni di ide 1.5.x, a quanto pare.
il rsto degli errori ri riferiscono al fatto che non trova le cose che ho aggiunto nella libreria.

il link che ti ho passatto evidenzia in verde le aggiunte che ho fatto e in rosso quelle che ho tolto rispetto alla libreria orginale (dell'ide 1.5.x, non della 1.0.5!!!)
in oltre per i test con Callback.ino va bene anche lo zip che ti ho passato.
Prossima volta, per confrontare due o più file/cartelle, usa http://winmerge.org/ o il comando diff su linux
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#52
Jul 01, 2013, 10:53 pm Last Edit: Jul 01, 2013, 10:55 pm by pablos Reason: 1
Dunque riassumiamo:

Attivare la porta telnet 23 è stata dura .... il mio pc aveva paura, ma l'ho convinto :)

ho aperto 4 telnet sulla stessa macchina, le altre mi hanno fatto impazzire con i permessi di amministratore e il risultato sul serial è

Quote

Server address:192.168.2.177
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
onConnect called, client ID: 0
onConnect called, client ID: 1
onConnect called, client ID: 2
onConnect called, client ID: 3
no comment

lesto

ah, ma quindi un 5' client disconnette il precedente?
cpme già detto telnet può usare qualsiasi porta.
prossimo passo integrare tutto con la websocket, se troviamo cosa rende loccante le librerie

aspe ma onconnect ti viene chiamata ad ogni loop, o una volta per ofni twlnet??
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos


ah, ma quindi un 5' client disconnette il precedente?

non ci ho fatto caso al 5°


aspe ma onconnect ti viene chiamata ad ogni loop, o una volta per ofni twlnet??

si, quelle chiamate ce l'ho a ogni loop
no comment

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

bigjohnson

Ciao,
nell'ardupower c'è una versione modificata della Ethernet che consente di capire da quale socket si ricevono i dati.
Tutti i problemi che state trovando li ho già visti realizzando l'ardupower qui c'è la richiesta per la modifica della libreria ethernet ufficiale.

Alberto

pablos

#57
Jul 02, 2013, 07:12 pm Last Edit: Jul 02, 2013, 07:25 pm by pablos Reason: 1
Identificare il socket è il problema minore, quello che ci serve è avere connessioni socket tcp multiple.

Lesto lo ha messo nella EthernetClient.cpp
Code: [Select]
uint8_t EthernetClient::getId() {
 return _sock;
}


e nella EthernetClient.h
Code: [Select]
uint8_t getId();

Comunque grazie per la segnalazione
ciao
no comment

pablos

#58
Jul 02, 2013, 07:37 pm Last Edit: Jul 02, 2013, 07:41 pm by pablos Reason: 1
Lesto mi dovresti se possibile chiarirmi alcune cose per migliorare la lettura delle lib

Perchè troviamo questo nelle lib
Code: [Select]
_sock
_srcport
_client
_port

quella lignetta messa in mezzo aiuta a identificare subito cosa fa la variabile, ma messa davanti alle etichette perchè si mette? e non si usa il nome dalla variab come normalmente facciamo negli scketch?


Perchè a volte si usa
Code: [Select]
uint8_t
uint16_t


e ultima cosa
Code: [Select]
static const uint8_t OPEN      = 0x01;
  static const uint8_t LISTEN    = 0x02;
  static const uint8_t CONNECT   = 0x04;
  static const uint8_t DISCON    = 0x08;
  static const uint8_t CLOSE     = 0x10;
  static const uint8_t SEND      = 0x20;
  static const uint8_t SEND_MAC  = 0x21;
  static const uint8_t SEND_KEEP = 0x22;
  static const uint8_t RECV      = 0x40;

perchè non gli diamo numeri decimali e troviamo quasi sempre 0x...

ciao

no comment

lesto

il _ è per evitare momi duplicati, ma è inutile usando le classi

le int uint sono più portbili e leggibili

le 0x perché sei sicuro di non sfondare il bite: il massimo valore è 0xff, con i decimali è facile scrivete per errore 300
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up