Table des matières
—–thèmes à aborder—–
1 socket par emission ou reception…
indépendant du média
notion client/serveur
adresses+port
comparaison TCP/UDP
aborder les fonctions bloquantes/non bloquantes (ligne 172 de socket.cpp) quel équivalent sur pic? Normalement on lance un processus par connexion, donc on peut utiliser les fonctions bloquantes sans pb sur PC.
—–manips à faire—–
dans les 2 cas, la carte recoit des commandes pour allumer les leds
envoie des infos sur l'état des poussoirs
—client/serveur udp sur le pic—
dans un premier temps, pic est juste client et envoie infos sur poussoir
puis on ajoute le serveur, pour recevoir commandes led
—serveur TCP sur le pic pour avoir hyperterminal—
format des commandes en texte pour piloter depuis hyperterminal
—Montage des manips—
faire un serveur TCP avec la classe socket, il y a tout ce qu'il faut (bind, listen etc…) et s'y connecter en TCP avec le pic
desactiver le dhcp sur le pic pour ne pas que l'adresse change et donc que le bind aussi
voir les fichiers sources dans:
C:\Microchip Solutions v2010-10-19\Microchip\TCPIP Stack
il y a également un fichier d'aide windows C:\Microchip Solutions v2010-10-19\Microchip\Help
regler l'ip fixe au debut de l'application pic, et pas dans un .h
—–infos—– protocole TCP, explications sur les ports etc: http://fr.wikipedia.org/wiki/Transmission_Control_Protocol
winsock 2, c'est la nouvelle version, il me manque des types http://msdn.microsoft.com/en-us/library/ms740673%28VS.85%29.aspx
appli basique: http://msdn.microsoft.com/en-us/library/ms737629%28v=VS.85%29.aspx
exemple linux: http://www.experts-exchange.com/Programming/System/Linux/Q_20878532.html
super exemple de classe pour sockets windows http://www.adp-gmbh.ch/win/misc/sockets.html
requette http: http://www.commentcamarche.net/contents/internet/http.php3 http://www.siteduzero.com/tutoriel-3-35613-les-requetes-http.html
http://www.emse.fr/~mbeig/COURS/SOCKET2001/socket.html
bonnes explications, dessins etc, s'en inspirer: http://www.commentcamarche.net/contents/sockets/sockfonc.php3
cours sur les sockets: http://www.irisa.fr/prive/bcousin/Cours/06-socket.fm.pdf
conversion de projets vers winsock: http://cs.baylor.edu/~donahoo/practical/CSockets/winsock.html
http://www.sockets.com/winsock.htm
MICROCHIP:
mal= librairies
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537041
j'ai installé la version 2010-10-19. prend 400Mo sur hd
regarder le fichier TCPIP Stack Help.chm installé dans C:\Microchip Solutions v2010-10-19\Microchip\Help
ethernet MAC (Media Access Control) intégré au pic32
ethernet PHY (physique) déporté
http://fr.wikipedia.org/wiki/Ethernet
différences par rapport à liaison serie
partage du médium
donc plusieurs connexions
identification par adresse
ouverture de comm et fermeture de comm
projet pic32 eth demo
pour connaitre l'ip attribuée à la carte par dhcp, positionner un breakpoint a la ligne DisplayIPValue() et faire un watch sur AppConfig.MyIPAddr. Les octets sont dans val, en ordre totalement inversé
equivalent à inet_addr : StringToIPAddress() functions.
il y a 3 projets différents:
1
vieux téléchargé pour le kit de dev, tout doit etre compilé, c'est lui que j'ai essayé de modifier en changeant le Index.htm:
C:\Microchip Starter Kits\PIC32 Starter Kits\Ethernet - TCPIP-BSD - HTTP Server Demo
accessible par: http://192.168.1.100/Index.htm
Ip fixe configurée dans tcpip_bsd_config.h
pour passer en dhcp, Project→build options→Compiler→ changer DEMO_USE_DHCP en =1 ET FORCER REBUILD ALL .. CA NE MARCHE PAS, il repete en boucle DHCPTask();
2 : c'est sur lui que je travaille le +
plus récent avec précompilation de pas mal de chose, c'est celui la que j'ai modifié pour voir l'ip:
C:\Documents and Settings\MAC\Bureau\manip_pic32\TCPIP Demo App - PIC32ETHSTK v3 Bertrand
voir TCPIP Demo App - PIC32ETHSTK v3 Bertrand client UDP fonctionnel.rar, j'établie une comm udp avec un serveur
l'ip du pic est reglée fixe en 192.168.1.100
static SOCKET bsdUdpClient; //bvdp int addrlen = sizeof(struct sockaddr_in); static struct sockaddr_in udpaddr; char chaine[100]; unsigned int res; unsigned int compteur=0;
bsdUdpClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //bvdp if(bsdUdpClient == INVALID_SOCKET) return; sprintf(chaine,"compteur= %6d\n",compteur); udpaddr.sin_port =27015; udpaddr.sin_addr.S_un.S_addr =0x0b01a8c0; //192.168.1.11 res=sendto(bsdUdpClient, (const char*)chaine, 18, 0, (struct sockaddr*)&udpaddr, addrlen); if(res>0) { //pas bon } closesocket(bsdUdpClient);
sur le sony, faire tourner le programme socket serveur udp qui affiche la valeur du compteur
sur le mac, il y a le programme socket client qui fait comme le pic
probleme: ne n'arrive pas a désactiver le dhcp client et serveur, même en commentant ces lignes dans TCPIPConfig.h, donc je n'arrive pas à faire fonctionner avec 1 seul cable vers le mac simplement
#define STACK_USE_AUTO_IP // Dynamic link-layer IP address automatic configuration protocol #define STACK_USE_DHCP_CLIENT // Dynamic Host Configuration Protocol client for obtaining IP address and other parameters #define STACK_USE_DHCP_SERVER // Single host DHCP server
en dhcp sur le mac ethernet, j'obtiens les adresses:
pic: 169.254.163.229
mac: 169.254.29.52
Je modifie la redirection de ports vers la machine virtuelle: http://blog.bayles.fr/post/2009/03/05/VirtualBox-c-est-genial
VBoxManage setextradata "windows B" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 27015 VBoxManage setextradata "windows B" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 27015 VBoxManage setextradata "windows B" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" UDP
pour voir les reglages:
VBoxManage getextradata "windows B" enumerate
REDEMARER le guest pour que les reglages soient pris en compte
3
le plus récent, chargé avec le dernier map, je n'arrive pas à le compiler:
C:\Microchip Solutions v2010-10-19\TCPIP Demo App\
mode debug pour les programmes
C:\Program Files\Microchip\MPLAB C32 Suite\pic32-libs\debugsupport\appio
C:\Program Files\Microchip\MPLAB C32 Suite\pic32-libs\include\sys
com avec pc
utiliser hyperterminal
ou telnet
geahjgilaehgealghaegieahg
virtualbox
sur machine virtuelle, 127.0.0.1 = ip locale de la machine virtuelle, pas de l'hote
javascripts
http://www.toutjavascript.com/reference/index.php
http://www.comptechdoc.org/independent/web/cgi/javamanual/javafunctions.html