Salut , autoit interressant (y'a 45 ans ca l'aurait été mais pas aujourd'hui) ?...? Voila un petit code d'un serveur C qui tourne sur ma petite carte sous linux pour recuperer les touches de la psp via socket (dsl pour les tests ca serait plus propre avec des "&" mais c'est juste des tests mdr):
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <linux/gpio_syscalls.h>
#define MAXPENDING 5 /* Max connection requests */
#define BUFFSIZE 8192
void Die(char *mess) { perror(mess); exit(1); }
void HandleClient(int sock) {
unsigned char buffer[BUFFSIZE];
char buffer4[128];
char buffer5[128];
int received = -1;
/* Receive message */
if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) {
Die("Failed to receive initial bytes from client");
}
/* Send bytes and check for more incoming data in loop */
while (received > 0) {
printf("recu:%d ->%c%c<- |%02X|%02X|%02X|%02X|%02X|%02i|%02i|%02i|%03i|\n", received,buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5],buffer[6],buffer[7],buffer[8],buffer[9],buffer[10]*1000/256);
// buffer 0 = !
// buffer 1 = K
// buffer 2 = axe X
// buffer 3 = axe Y
// buffer 4 = fleches : gauche = 128 , bas = 64 , droite = 32 , haut = 16 , start = 8 , select = 1
// buffer 5 = boutons : carré = 128 , croix 64 , rond = 32 , triangle = 16 , R = 2 , L = 1
// buffer 6 = home
// buffer 7 = heure
// buffer 8 = minute
// buffer 9 = seconde
// buffer 10 = us <<16
//test
if (buffer[4]>=128){
sprintf(buffer4, "%s %s", buffer4,"Gauche ");
buffer[4]=buffer[4] - 128;}
if (buffer[4]>=64){
sprintf(buffer4, "%s %s", buffer4,"Bas ");
buffer[4]=buffer[4] - 64;}
if (buffer[4]>=32){
sprintf(buffer4, "%s %s", buffer4,"Droite ");
buffer[4]=buffer[4] - 32;}
if (buffer[4]>=16){
sprintf(buffer4, "%s %s", buffer4,"Haut ");
buffer[4]=buffer[4] - 16;}
if (buffer[4]>=8){
sprintf(buffer4, "%s %s", buffer4,"Start ");
// Turn on DL1
gpioclearbits(PORTA, PA3);
buffer[4]=buffer[4] - 8;}
if (buffer[4]>=1){
sprintf(buffer4, "%s %s", buffer4,"Select ");
// Turn off DL1
gpiosetbits(PORTA, PA3);
buffer[4]=buffer[4] - 1;}
//printf("recu:%s\n",buffer4);
if (buffer[5]>=128){
sprintf(buffer5, "%s %s", buffer5,"Carré ");
buffer[5]=buffer[5] - 128;}
if (buffer[5]>=64){
sprintf(buffer5, "%s %s", buffer5,"Croix ");
buffer[5]=buffer[5] - 64;}
if (buffer[5]>=32){
sprintf(buffer5, "%s %s", buffer5,"Rond ");
buffer[5]=buffer[5] - 32;}
if (buffer[5]>=16){
sprintf(buffer5, "%s %s", buffer5,"Triangle ");
buffer[5]=buffer[5] - 16;}
if (buffer[5]>=2){
sprintf(buffer5, "%s %s", buffer5,"R ");
// Turn on DL1
gpioclearbits(PORTA, PA3);
buffer[5]=buffer[5] - 2;}
if (buffer[5]>=1){
sprintf(buffer5, "%s %s", buffer5,"L ");
// Turn off DL1
gpiosetbits(PORTA, PA3);
buffer[5]=buffer[5] - 1;}
if (buffer4[0]!="" || buffer5[0]!=""){
printf("recu:%s%s\n",buffer4,buffer5);
sprintf(buffer4, "%s", "");
sprintf(buffer5, "%s", "");}
//test
if (strstr(buffer,"off")!=NULL) {gpiosetbits(PORTA, PA3);} // Turn off DL1
if (strstr(buffer,"on")!=NULL) {gpioclearbits(PORTA, PA3);} // Turn on DL1
/* Send back "OK" */
buffer[0]='O'; buffer[1]='K';
if (send(sock, buffer, 2, 0) != 2) {
Die("Failed to send bytes to client");
}
/* Check for more data */
if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) {
Die("Failed to receive additional bytes from client");
}
}
close(sock);
}
int main(int argc, char *argv[]) {
int serversock, clientsock;
struct sockaddr_in echoserver, echoclient;
if (argc != 2) {
fprintf(stderr, "USAGE: echoserver <port>\n");
exit(1);
}
/* Create the TCP socket */
if ((serversock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
Die("Failed to create socket");
}
/* Construct the server sockaddr_in structure */
memset(&echoserver, 0, sizeof(echoserver)); /* Clear struct */
echoserver.sin_family = AF_INET; /* Internet/IP */
echoserver.sin_addr.s_addr = htonl(INADDR_ANY); /* Incoming addr */
echoserver.sin_port = htons(atoi(argv[1])); /* server port */
/* Bind the server socket */
if (bind(serversock, (struct sockaddr *) &echoserver,
sizeof(echoserver)) < 0) {
Die("Failed to bind the server socket");
}
/* Listen on the server socket */
if (listen(serversock, MAXPENDING) < 0) {
Die("Failed to listen on server socket");
}
/* Run until cancelled */
while (1) {
unsigned int clientlen = sizeof(echoclient);
/* Wait for client connection */
if ((clientsock =
accept(serversock, (struct sockaddr *) &echoclient,
&clientlen)) < 0) {
Die("Failed to accept client connection");
}
fprintf(stdout, "Client connected: %s\n",
inet_ntoa(echoclient.sin_addr));
// Turn on DL1
gpioclearbits(PORTA, PA3);
HandleClient(clientsock);
}
}