task main ()
{
    int index;
    // port to use for the socket
    int BOFHport = 6666;
    string dataString;

    // get our bluetooth name
    getFriendlyName(dataString);

    int avail = 0;

    nNxtButtonTask = -2;
    StartTask(updateScreen);

    // initialise the port, etc
    RS485initLib();

    memset(RS485rxbuffer, 0, sizeof(RS485rxbuffer));
    memset(RS485txbuffer, 0, sizeof(RS485txbuffer));

    N2WchillOut();

    // Disconnect if already connected
    N2WDisconnect();
    N2WchillOut();

    // if a custom profile exists, use that instead
    if (N2WCustomExist())
    {
        N2WLoad();
    }
    else
    {
        // enable DHCP
        N2WsetDHCP(true);
        wait1Msec(100);
        // Disable adhoc
        N2WsetAdHoc(false);
        wait1Msec(100);
        // SSID to connect to
        N2WsetSSID("YOURWIFINETWORK");
        wait1Msec(100);
        // The passphrase to use
        N2WSecurityWPA2Passphrase("YOURWIFIPASSPHRASE");
        wait1Msec(100);
        // Save this profile to the custom profile
        N2WSave();
        wait1Msec(100);
        // Load the custom profile
        N2WLoad();
    }

    wait1Msec(100);
    N2WConnect(true);
    connStatus = "connecting";

    while (!N2WConnected())
        wait1Msec(1000);

    connStatus = "connected";
    PlaySound(soundBeepBeep);

    wait1Msec(3000);
    N2WgetIP(IPaddress);

    wait1Msec(1000);

    // Open a listening socket on port 6666
    if (!N2WTCPOpenServer(1, BOFHport))
    {
        writeDebugStreamLine("Err open port %d", BOFHport);
        PlaySound(soundException);
        while(bSoundActive) EndTimeSlice();
        StopAllTasks();
    }

    while (true)
    {
        // Check if anyone has sent us anything
        avail = N2WTCPAvail(1);
        if (avail > 0)
        {
            rxbytes += avail;
            N2WchillOut();


            PlaySound(soundFastUpwardTones);

            // Read what the client sent us
            sprintf(dataStrings[0], "%d bytes from", avail);
            N2WTCPRead(1, avail);
            N2WchillOut();

            // Get the MAC address of the client
            dataStrings[2] = "Remote MAC:";
            N2WTCPClientMAC(1, dataStrings[3]);

            writeDebugStream("MAC: ");
            writeDebugStreamLine(dataStrings[3]);
            N2WchillOut();

            // check the IP address of the client
            N2WTCPClientIP(1, dataStrings[1]);
            N2WchillOut();

            // Send back a hearty "Hi there, <IP>!"
            index = 0;
            returnMsg = "Hi there, ";
            index = RS485appendToBuff(buffer, index, returnMsg);
            index = RS485appendToBuff(buffer, index, dataStrings[1]);
            returnMsg = "\n";
            index = RS485appendToBuff(buffer, index, returnMsg);
            txbytes += index;
            N2WTCPWrite(1, (tHugeByteArray)buffer, index);
            N2WchillOut();

            // Terminate the connection to the client
            N2WTCPDetachClient(1);
            N2WchillOut();
        }
        // Wait a bit
        wait1Msec(50);
    }
}
task main ()
{
  int index;
  // port to use for the socket
  int BOFHport = 6666;
  string dataString;

  // get our bluetooth name
  getFriendlyName(dataString);

  int avail = 0;

  StartTask(updateScreen);

  // initialise the port, etc
  RS485initLib();
  N2WchillOut();
  N2WsetDebug(true);
  N2WchillOut();

  // Disconnect if already connected
  N2WDisconnect();
  wait1Msec(100);

  if (!N2WCustomExist())
  {
    StopTask(updateScreen);
    wait1Msec(50);
    eraseDisplay();
    PlaySound(soundException);
    nxtDisplayCenteredBigTextLine(1, "ERROR");
    nxtDisplayTextLine(3, "No custom profile");
    nxtDisplayTextLine(4, "configured!!");
    while(true) EndTimeSlice();
  }

  N2WLoad();
  wait1Msec(100);
  N2WConnect(true);
  connStatus = "connecting";

  while (!N2WConnected())
    wait1Msec(1000);

  connStatus = "connected";
  PlaySound(soundBeepBeep);

  wait1Msec(3000);
  N2WgetIP(IPaddress);
  memcpy(dataStrings[4], IPaddress, strlen(IPaddress) + 1);

  wait1Msec(1000);

  N2WTCPClose(0);
  N2WchillOut();
  RS485clearRead();
  N2WchillOut();
  // Open a listening socket on port 6666
  if (!N2WTCPOpenServer(1, BOFHport))
  {
    writeDebugStreamLine("Err open port %d", BOFHport);
    PlaySound(soundException);
    while(bSoundActive) EndTimeSlice();
    StopAllTasks();
  }

  while (true)
  {
    // Check if anyone has sent us anything
    avail = N2WTCPAvail(1);
    if (avail > 0)
    {
      rxbytes += avail;
      N2WchillOut();


      PlaySound(soundFastUpwardTones);

      // Read what the client sent us
      sprintf(dataStrings[0], "%d bytes from", avail);
      N2WTCPRead(1, avail);
      N2WchillOut();

      // Get the MAC address of the client
      dataStrings[2] = "Remote MAC:";
      N2WTCPClientMAC(1, dataStrings[3]);

      writeDebugStream("MAC: ");
      writeDebugStreamLine(dataStrings[3]);
      N2WchillOut();

      // check the IP address of the client
      N2WTCPClientIP(1, dataStrings[1]);
      N2WchillOut();

      // Send back a hearty "Hi there, <IP>!"
      index = 0;
      returnMsg = "Hi there, ";
      index = RS485appendToBuff(buffer, index, returnMsg);
      index = RS485appendToBuff(buffer, index, dataStrings[1]);
      returnMsg = "\n";
      index = RS485appendToBuff(buffer, index, returnMsg);
      txbytes += index;
      N2WTCPWrite(1, (tHugeByteArray)buffer, index);
      N2WchillOut();

      // Terminate the connection to the client
      N2WTCPDetachClient(1);
      N2WchillOut();
      wait1Msec(1000);
	  }
	  // Wait a bit
    wait1Msec(50);
  }
}