Pages: [1]   Go Down
Author Topic: RedFly - Socket Hilfe gesucht  (Read 805 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)! smiley

Code:
/*
  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
« Last Edit: December 12, 2011, 08:44:59 am by vega » Logged

Pages: [1]   Go Up
Jump to: