Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2423 connectés 

  FORUM HardWare.fr
  Programmation
  C

  envoyer des images sur le net a partir d'un microcontroleur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

envoyer des images sur le net a partir d'un microcontroleur

n°494672
rachton
Posté le 22-08-2003 à 16:54:07  profilanswer
 

salut a tous  :hello:  
 
 
J'ai une petite carte munis d'un microcontroleur T89C51 de chez atmel et d'un contrleur ethernet W3100 de chez wiznet.  
Pour envoyer une page sur le net je remplie le buffer d'un header indiquant ce que je vais envoyer precisant la taille ,le tip ,etc.. puis j'envoye ma page ecrite en html .  
 
Le prob maintenant c'est que j'ai une image que j'arrive pas a envoyer ,j'arrive a envoye seulement le debut de l'image car le buffer d'emission ne permet pas de tout envoyer tout en meme temps ,il est trop petit il fait 2KB alors que l'image 5KB sans compter le header.  
 
J'ai essaye de decouper l'image en plusieurs parties et de les envoyer les un apres les autres mais ca marhe pas il prend en compte que le premier paquet ,il doit y avoir des choses a specifier ds l'header pour dire que la suite arrive juste apres .  
 
si quelq'un peut m'aider merci de me repondre.!!!!!! a bientot!!!  :D

mood
Publicité
Posté le 22-08-2003 à 16:54:07  profilanswer
 

n°494707
HelloWorld
Salut tout le monde!
Posté le 22-08-2003 à 17:07:35  profilanswer
 

Ca se joue au nivo de TCP ça non ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°496330
rachton
Posté le 25-08-2003 à 09:26:38  profilanswer
 

HelloWorld a écrit :

Ca se joue au nivo de TCP ça non ?


 
tu veus dire quoi par la ?

n°496389
HelloWorld
Salut tout le monde!
Posté le 25-08-2003 à 10:00:15  profilanswer
 

Je pige pas comment tu découpes ton image ...
Mes notions de HTTP c'est que t'envoie l'image d'un coup. C'est au niveau de la couche d'en dessous que le découpage a lieu.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°498331
rachton
Posté le 26-08-2003 à 11:51:21  profilanswer
 


 
oueh! mais moi je dois remplir le tampon de transmission qui se trouve sur la carte et dont la taille et de seulement 2KB.Et lorsque j'applique la commande SEND il n'envoi que ce qui ecrit sur le tampon .
Mon image elle fait 3,5 KB donc je doit la decouper car je peux pas tout copier ds le tampon ,il est trop petit.
j'ai decoupé l'image en deux ,ensuite j'ai envoye la premier partie avec le header(avec la methode que je t'ai decrit avt ,tu sais avec le tampon)puis la deuxieme .Au final il n'apparait a l'ecran que la moitie de mon image .
Je pense que la liaison entre la 1ere et la 2° partie se fait mal et qui doit y avoir des trucs a specifier  pour  que cette liaison se passe bien.
 
voici le header que j'envoie avec la 1°partie celle qui s'affiche a l'ecran :
 
<HTTP/1.1 200 OK\r\n
Cache-control: no-cache\n  
Connection: Keep-Alive\n  
Content-Type:image/gif\r\n
Content-Length:3571  //reprensente environ 3,5KB

n°498411
gatorette
Posté le 26-08-2003 à 12:35:22  profilanswer
 

Apparemment, c'est ton contrôleur ethernet qui gère le stack TCP/IP. De plus, selon la datasheet, il propose une API "proche des sockets Windows".
 
Le problème est que TCP ne connait pas de notion de paquets. Il n'y a donc pas de "liaison" entre tes différents envois.
Une fois la connexion établie, on peut écrire et lire dessus comme un flux. Tu peux normalement envoyer 4 fois 32 octets ou 1 fois 128 octets, cela ne fait pas de différence et le receveur peut avoir 2 fois 64 octets. J'aurais donc tendance à faire ce que tu as fait, c'est à dire envoyer en plusieurs fois tes données.
 
Pourquoi cela ne marche pas ?
Il y a peut être un flag que tu dois vérifier avant d'envoyer des données et que tu ne vérifie pas. Quand tu envoie des petits fichiers cela marche car le contrôleur a le temps de tout envoyer avant ta nouvelle requête, mais dans le cas où tu boucles, il n'a pas le temps.
As-tu regardé avec un analyseur de paquets ce qui arrive à ta réception ? Cela permettrait de savoir ce qui est réellement transmis et d'avoir un début d'explication. Par exemple, on ne sait pas si ton deuxième paquet arrive à destination ou pas.


---------------
each day I don't die is cheating
n°498468
HelloWorld
Salut tout le monde!
Posté le 26-08-2003 à 13:52:37  profilanswer
 

Je suis peut être a cote de la plaque mais je comprend pas pkoi ton tampon fait 2Ko seulement.
Je sais qu'il existe un mode de transmission ou tu spécifies pas la taille de ce que tu envoies (ca m'avait posé pblm). Je sais plus quel nom ça porte. Pour dire que c'est fini tu coupes la transmission je crois.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°498514
gatorette
Posté le 26-08-2003 à 14:21:43  profilanswer
 

HelloWorld a écrit :

Je suis peut être a cote de la plaque mais je comprend pas pkoi ton tampon fait 2Ko seulement.


 
Il utilise un contrôleur ethernet matériel. Or ce contrôleur n'a pas une mémoire illimitée. Ici, apparemment, il n'a que 2ko de mémoire dans le buffer d'envoi.
Pour transmettre des données, il doit remplir le buffer, indiquer dans un registre la taille des données, puis envoyer un signal indiquant que le buffer est rempli et qu'il faut le transmettre. Ce n'est peut être pas ça exactement, mais l'idée y est.


---------------
each day I don't die is cheating
n°501332
rachton
Posté le 29-08-2003 à 09:22:22  profilanswer
 

gatorette a écrit :

Apparemment, c'est ton contrôleur ethernet qui gère le stack TCP/IP. De plus, selon la datasheet, il propose une API "proche des sockets Windows".


 
 :sol:  
Non ,je ne boucle pas avant d'envoyer le 2° paquet .j'envoie les deux l'un aprés l'autre pdt que la connection est etablie puis ensuite je ferme la connection.
voici le main:
void main()
{
   SOCKET i;
  //c'est un entier qui designe le numero de socket
   int len,x;
   u_char state;
   u_char type;
 
   Init8051();  
//initialisation du microcontroleur
   initW3100A();   //initialisation du controleur Ethernet  
   InitNetConfig();// initialisation des parametres réseau  
 
for (i = 0; i < MAX_SOCK_NUM; i++) init_sock(i);
 
x=0;
while (1)  
{
i = 0;
 for (i = 0; i < MAX_SOCK_NUM; i++)  
  {  
    state=select(i, SEL_CONTROL);
//retourne l'etat de la conect°    
 switch(state)  
  {
    case SOCK_ESTABLISHED :
   //connection etablie
     if ((len = select(i, SEL_RECV)) > 0) //Confirm de reception
       {      
         if (len > MAX_BUF_SIZE)len = MAX_BUF_SIZE
;/*When received data more than system buffer,handle as size as buffer*/
  len = recv(i, rx_buf, len);
  type = ParseReq(rx_buf,x);
/* Analyze request*/
       
  len =PrintHeader(tx_buf ,'g'); //le header
         
 switch (type) /* Transfer web page as for each request */
{
    case 'g':
   /* gif processing*/
//1er ENVOIE:        
len += MSG_Length(tx_buf + len, 3571);//taille du tablo entier
memcpy(tx_buf +len,tab,1800);//1° envoie on remplie le buf  
len += 1800;//la taille de la premiere partie envoyé
len = send(i, tx_buf, len); //on envoie le buf  
//2eme ENVOIE:
memcpy(tx_buf,tab,1900);//2° envoie on recrit par dessus le buf  
len = 1900;//la taille de la 2° partie envoyé
len = send(i, tx_buf, len); //on envoie la deuxieme partie  
 
 break;
       
}
}
break;
   case SOCK_CLOSE_WAIT :
 /* Terminate connection*/
printf("CLOSE_WAIT : %bd\r\n", i);
close(i);
/* SOCKET CLOSE*/
 break;
     case SOCK_CLOSED :
/* Close conneciton*/
 printf("CLOSED : %bd\r\n",i);
 init_sock(i);      
 break;
   }
  }
/*for*/
} /* while*/  
}


Message édité par rachton le 29-08-2003 à 09:28:42
n°501362
gatorette
Posté le 29-08-2003 à 09:54:39  profilanswer
 

rachton a écrit :

Non ,je ne boucle pas avant d'envoyer le 2° paquet .j'envoie les deux l'un aprés l'autre pdt que la connection est etablie puis ensuite je ferme la connection.


 
Essaie de regarder dans la datasheet si tu n'as pas à attendre un événement particulier avant de pouvoir envoyer le deuxième paquet.
 
Essaie également de mettre ton code dans des balises [ cpp], ce sera plus clair.


---------------
each day I don't die is cheating
mood
Publicité
Posté le 29-08-2003 à 09:54:39  profilanswer
 

n°501439
rachton
Posté le 29-08-2003 à 10:38:22  profilanswer
 

gatorette a écrit :


 
Essaie de regarder dans la datasheet si tu n'as pas à attendre un événement particulier avant de pouvoir envoyer le deuxième paquet.
 
Essaie également de mettre ton code dans des balises [ cpp], ce sera plus clair.


En tout cas je te le confirme je viens de vérifier ,lorsque j'envoie les 2 paquets la connection est bien ouverte meme quand j'envoie la 2° partie

n°501548
HelloWorld
Salut tout le monde!
Posté le 29-08-2003 à 11:40:26  profilanswer
 

Citation :

j'envoie les deux l'un aprés l'autre pdt que la connection est etablie puis ensuite je ferme la connection.


 
Donc ça écarte mon idée de problème HTTP. Ca serait bien "plus bas nivo".


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°502538
rachton
Posté le 30-08-2003 à 18:04:36  profilanswer
 

j'ai longement reflechi et je crois que le probleme viens du buffer qui ne veut pas se vider,donc quand je recris sur le buffer pour la 2°partie ca doit pas marcher car le buffer n'est pas vidé.  
Deplus je rencontre un probleme avec le buffer de réception egalement.  
Et le gros probleme c'est que je peux pas visualiser le contenu des buffers ,personne n'a un logiciel ou une idée pour visualiser les buffers d'un microcontroleur ou d'un controleur Ethernet?


Message édité par rachton le 10-09-2003 à 11:52:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  envoyer des images sur le net a partir d'un microcontroleur

 

Sujets relatifs
[PHP] Je cherche 2 scripts ou bien 2 aides (Gestion fichiers/images)Reduction d'images numeriques
Déclarer une variable globale à partir d'une chaine de caractère ?execution d'un script à partir d'1 autre url
entrées sorties // à partir d'un port série et de winxp[VB] lancer un .bat a partir d'un bouton
album photo qui scan un rep. et affiche les images sur une page html?[C] Executer une application à partir d'une autre
2 façons différentes pour envoyer un formulairefaire un .cpp a partir d'un .obj
Plus de sujets relatifs à : envoyer des images sur le net a partir d'un microcontroleur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR