Go Down

Topic: RedFly - Socket Hilfe gesucht (Read 881 times) previous topic - next topic

vega

Dec 12, 2011, 02:40 pm Last Edit: Dec 12, 2011, 02:44 pm by vega Reason: 1
Hi alle zusammen,

ich hab schon ein bisschen mit den exampels vom RedFly gespielt auch mit dem webserver, doch das ist schon zuviel des guten. Mich interessiert eine reine Socket verbindung um daten im klartext zu übertragen, zb per Telnet.

Leider bin ich aber noch anfänger was sockets betrifft, daher würde mich mal eine ausführlich kommentiere RedFly Socket Server skatch, am besten die Example-Skatch EchoServer_Socket interessieren und mir sicherlich sehr viel weiterhelfen!

Falls also jemand hilfreiche hinweise für mich hat, was Sockets und Redfly betrifft, bin ich für alles dankbar!
Und falls sogar jemand gerade lust hat, etwas an dem Skatch aus den RedFly Examples ergänzend zu kommentieren, kann er das gerne anhand des folgenden Codes tun (eine ausführliche kommentierung der "void loop()" würde mir ausreichen)! :)

Code: [Select]

/*
 Echo Test

 This sketch acts as a echo server using a RedFly-Shield.
 All received data will be resend to the client.
*/

#include <RedFly.h>


byte ip[]      = { 192,168,  0, 30 }; //ip from shield (server)
byte netmask[] = { 255,255,255,  0 }; //netmask

#define TCP_PORT  (1234) //local TCP port on the shield
#define UDP_PORT  (1234) //local UDP port on the shield

uint8_t hTCP=0xFF, hUDP=0xFF;  //socket handles


//serial format: 9600 Baud, 8N2
void debugout(char *s)  { RedFly.disable(); Serial.print(s);   RedFly.enable(); }
void debugoutln(char *s){ RedFly.disable(); Serial.println(s); RedFly.enable(); }


void setup()
{
 uint8_t ret;

 //init the WiFi module on the shield
 ret = RedFly.init();
 if(ret)
 {
   debugoutln("INIT ERR"); //there are problems with the communication between the Arduino and the RedFly
 }
 else
 {
   //scan for wireless networks (must be run before join command)
   RedFly.scan();

   //join network
   ret = RedFly.join("xxx", "xxx", INFRASTRUCTURE);
   if(ret)
   {
     debugoutln("JOIN ERR");
     for(;;); //do nothing forevermore
   }
   else
   {
     //set ip config
     ret = RedFly.begin(ip, 0, 0, netmask);
     if(ret)
     {
       debugoutln("BEGIN ERR");
       RedFly.disconnect();
       for(;;); //do nothing forevermore
     }
   }
 }
}


void loop()
{
 uint8_t sock, buf[64], *ptr;
 uint16_t buf_len, rd, len;
 uint16_t port; //incomming UDP port
 uint8_t ip[4]; //incomming UDP ip

 //check if sockets are opened
 if(RedFly.socketClosed(hTCP) || (hTCP == 0xFF))
 {
   hTCP = RedFly.socketListen(PROTO_TCP, TCP_PORT);
 }
 if(RedFly.socketClosed(hUDP) || (hUDP == 0xFF))
 {
   hUDP = RedFly.socketListen(PROTO_UDP, UDP_PORT);
 }

 //get data
 sock    = 0xFF; //0xFF = return data from all open sockets
 ptr     = buf;
 buf_len = 0;
 do
 {
   rd = RedFly.socketRead(&sock, &len, ip, &port, ptr, sizeof(buf)-buf_len);
   if((rd != 0) && (rd != 0xFFFF)) //0xFFFF = connection closed
   {
     ptr     += rd;
     buf_len += rd;
   }
 }while(len != 0);

 //send data
 if(buf_len && (sock != 0xFF))
 {
   if(sock == hTCP)
   {
     Serial.println(hTCP);
   }
   else if(sock == hUDP)
   {
     Serial.println(hUDP);
   }
 }
}

VG
vega

Go Up