Just for testing

Dependencies:   mbed

Fork of ESP8266_MDM by Oxford CWM Team

server.cpp

Committer:
magd4235
Date:
2016-06-10
Revision:
3:a608548f63b1

File content as of revision 3:a608548f63b1:

#include "mbed.h"

#define DEBUG
#define INFOMESSAGES
#define WARNMESSAGES
#define ERRMESSAGES

#define FUNCNAME "MAIN"

#ifdef NoDEBUG
#define DBG(x, ...) pc.printf("    ["FUNCNAME" : DBG] "x" <line %d>\r\n", ##__VA_ARGS__,__LINE__);
#else
#define DBG(x, ...)
#endif

#ifdef ERRMESSAGES
#define ERR(x, ...) pc.printf(" ["FUNCNAME" : ERR] "x"\r\n", ##__VA_ARGS__);
#else
#define ERR(x, ...)
#endif

#ifdef WARNMESSAGES
#define WARN(x, ...) printf("["FUNCNAME" : WARN] "x"\r\n", ##__VA_ARGS__);
#else
#define WARN(x, ...)
#endif

#ifdef INFOMESSAGES
#define INFO(x, ...) printf("["FUNCNAME" : INFO] "x"\r\n", ##__VA_ARGS__);
#else
#define INFO(x, ...)
#endif

#define BUFF_SIZE 2048
Serial  pc(USBTX, USBRX);
//RawSerial  dev(D1, D0);
Serial  dev(p28, p27); //tx,rx
DigitalOut led1(LED1);
DigitalOut led4(LED4);
DigitalOut reset(p26,1);
volatile int state=0;
volatile int ready=0;

char ipAddress[20];
char macAddress[32];
char *buffer;
unsigned int bufferPnt=0;
//char message[32];

void dev_recv()
{
    char c;

    int count = 0;
    led1 = !led1;
    if(bufferPnt==0) {
        memset(buffer,0,BUFF_SIZE);
    }
    while(dev.readable()) {
        c = (char)dev.getc();
#ifdef DEBUG
     pc.putc(c);
#endif
        buffer[bufferPnt]=c;
        bufferPnt++;
        if (bufferPnt>1024) {
            ready=1;
        }
    //    if ((c==0x0a)||(c==0x0d)) {
    //        ready=1;
     //   } else 
        if (c==0x0a) {
            if (bufferPnt>1) {
                if (buffer[bufferPnt -2]==0x0d) {
                    ready=1;
                    break;
                }
            }
        }
        if (!dev.readable()) {
            wait_us(10);
        }
    }
}

void pc_recv()
{
    char c;
    led4 = !led4;
    while(pc.readable()) {
        c=(char)pc.getc();

        dev.putc(c);
        if (c=='\r') {
            dev.putc('\n');
        }
        pc.putc(c);

    }
}

char * OKResponse(char *test, const char *pattern)
{
    char *p= strstr(test,pattern);
    if (p==NULL) {
        //   DBG("Test=<%s> Patter=<%s> NULL [p=%s]",test,pattern,p);
        return NULL;
    } else {
        //  DBG("YAY Test=<%s> Patter=<%s>  [p=%s]",test,pattern,p);
    }
    return p;
}
/**
* Interpret 1 as SCOREBOARD, 2 as SNAKE, 3 as FOOD
* 2
*/
/*void commandReceived(char* buffer){
    char identifier =buffer[0];
    if (identifier == 1) {                            
        buffer[1] = //GameRunning ?
        buffer[2] = //StartTime from scoreboard to server
        buffer[3] = //NowTime from scoreboard to server
        
  }
                        
    if (identifier == 2) {
        buffer[1] = //snake's new direction from controllersnake to server
        
  }
                        
    if (identifier == 3) {
        buffer[1] = //food's new direction from controllerfood to server
        buffer[2] = //food's new speed from controllerfood to server
        
    }
 */   
int main()
{
    buffer=(char *)calloc(BUFF_SIZE,1);
    reset=0;

    pc.baud(115200);
    dev.baud(115200);
    pc.attach(&pc_recv, Serial::RxIrq);
    dev.attach(&dev_recv, Serial::RxIrq);
    pc.printf("Start up\n\r");
    wait(1.5);
    reset=1;
    char * resp=NULL;
    pc.printf("Here \n\r");
    while(1) {
        if (ready) {
            ready=0;
            bufferPnt=0;
            INFO("[%d]",state);
            switch (state) {
                case 0: {
                    resp=OKResponse(buffer,"WIFI GOT IP");
                    if (resp!=NULL) {
                        wait(1);
                        dev.printf("AT\r\n");
                        state++;
                    }
                    break;
                }
                case 1:
                case 2: {
                    resp=OKResponse(buffer,"OK");
                    if (resp!=NULL) {
                        dev.printf("AT\r\n");
                        state++;
                    }
                    break;
                }
                case 3: {
                    resp=OKResponse(buffer,"OK");
                    if (resp!=NULL) {
                        dev.printf("AT+RST\r\n");
                        state++;
                    }

                    break;
                }
                case 4: {
                    resp=OKResponse(buffer,"WIFI GOT IP");
                    if (resp!=NULL) {
                        dev.printf("AT+CWMODE=1\r\n");
                        state++;
                    }

                    break;
                }
                case 5: {
                    resp=OKResponse(buffer,"OK");
                    if (resp!=NULL) {
                        dev.printf("AT+CWJAP=\"CWMWIFI\",\"CWM2016TT\"\r\n");
                        state++;
                    }

                    break;
                }
                case 6: {
                    resp=OKResponse(buffer,"OK");
                    if (resp!=NULL) {
                        wait(10);
                        dev.printf("AT+CIFSR\r\n");
                        state++;
                    }

                    break;
                }
                case 7: {
                    resp=OKResponse(buffer,"+CIFSR:STAIP,");
                    if (resp!=NULL) {
                        char *strt = strtok(buffer,"\"");
                        strcpy(ipAddress,strtok(NULL,"\""));
                        strtok(NULL,"\"");
                        strcpy(macAddress,strtok(NULL,"\""));
                        INFO("mac Address = %s", macAddress);
                        INFO("IP Address = %s", ipAddress);
                        dev.printf("AT+CIPMUX=1\r\n");
                        state++;
                    }

                    break;
                }


                case 8: {
                    resp=OKResponse(buffer,"OK");
                    if (resp!=NULL) {
                        INFO("Starting server");
                        dev.printf("AT+CIPSERVER=1,5050\r\n");                    // Set it as a server
                        state++;
                    }

                    break;
                }
    
                    /*case 9: {
                    resp=OKResponse(buffer,"+IPD");
                    if (resp!=NULL) {
                        INFO("Got <%s>",buffer);
                        
                        if (buffer[0]==1 && buffer[1]==1){
                            dev.printf("AT+CIPSEND=0,3\r\n");            
                            wait(0.2);
                            dev.printf("0\r\n");                     // Stop the timer
                        }else{
                                                            
                    //        commandReceived(buffer);                // Interpret data, line113
                            state=9;                                // Keep on waiting for data
                        }   
                                       
                   }
                    
                    break;
                }
                */
                            
            }
        }
        //__WFI();
    }
}