Pages: 1 2 3 [4] 5 6 ... 13   Go Down
Author Topic: Websocket [ci siamo quasi]  (Read 10364 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

guarda che per il timeout il codice è nella prima pagina smiley
edit: seconda pagina smiley 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:
#include <utility/w5100.h>

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


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

That gives me a 3 second timeout on a bad server connection.
« Last Edit: June 30, 2013, 09:35:47 am by lesto » Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si le avevo trovate e modificate
a parte non cambiare nulla ora la ethernet non si connette più nemmeno rimettendole come erano smiley
Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: June 30, 2013, 11:53:37 am by pablos » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
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?) smiley , scusa ma non ho trovato nessun download del pacchetto....

ciao
« Last Edit: June 30, 2013, 06:22:03 pm by pablos » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dunque riassumiamo:

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

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
« Last Edit: July 01, 2013, 03:55:43 pm by pablos » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??
Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora c'è un bug
Logged

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

Milan, Italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Identificare il socket è il problema minore, quello che ci serve è avere connessioni socket tcp multiple.

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

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

Comunque grazie per la segnalazione
ciao
« Last Edit: July 02, 2013, 12:25:45 pm by pablos » Logged

no comment

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lesto mi dovresti se possibile chiarirmi alcune cose per migliorare la lettura delle lib

Perchè troviamo questo nelle lib
Code:
_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:
uint8_t
uint16_t

e ultima cosa
Code:
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

« Last Edit: July 02, 2013, 12:41:55 pm by pablos » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Pages: 1 2 3 [4] 5 6 ... 13   Go Up
Jump to: