still need some modification

Dependencies:   mbed-http DebounceIn PinDetect OneButton

ECH_V004.cpp

Committer:
nadaanas1985
Date:
2019-05-06
Revision:
2:1d2a43e66b41
Parent:
1:1a06bde4e0db

File content as of revision 2:1d2a43e66b41:

#include "select-demo.h"

#if DEMO == DEMO_HTTP

#include "rtos.h"
#include "mbed.h"
#include "http_request.h"
#include "network-helper.h"
#include "mbed_mem_trace.h"
#include "PinDetect.h"




//FINITE STATE MACHINE EVENTS
#define NO_EVENT 0
#define TIME_OUT 1
#define BUTTON_PRESS_1 2
#define BUTTON_PRESS_2 3
#define TILT 3
#define PUSH 4

//STATES
#define STATE_0 0
#define STATE_1 1
#define STATE_2 2


//pass event via message queue
typedef struct {
    int    event;   /* AD result of measured voltage */
} message_t;

MemoryPool<message_t, 16> mpool;
Queue<message_t, 16> queue;

//Digital input
//DigitalIn coin(p14);
PinDetect button_1(p23);
PinDetect button_2(p24);

//Global varible
int button_press_1=0;
int button_press_2=0;
int button_press_Wait=0;


//leds for debug
DigitalOut led4(LED4); //LED
DigitalOut led3(LED3); //LED
DigitalOut led2(LED2); //LED
DigitalOut myled(LED1);

//Relays:

DigitalOut Relay_1(p11);
DigitalOut Relay_2(p12);



//Mutex
Mutex flag_mutex;


void button_1_event_thread(void const *argument)
{

   
    while (true)
     {
        //Thread::wait(10);
        if (button_press_1 == 1 && button_press_2 == 0 && button_press_Wait==0) {

            //event via a message queue
            button_press_Wait=1;
            message_t *message = mpool.alloc();
            message->event = BUTTON_PRESS_1;
            queue.put(message);

            led3 = !led3;
            Thread::wait(5000);
        }

    }
}


void button_2_event_thread(void const *argument)
{

    
    while (true)
     {
        //Thread::wait(10);
        if (button_press_2 == 1 && button_press_1 == 0 && button_press_Wait==0) {

            //event via a message queue
            button_press_Wait = 1;
            message_t *message = mpool.alloc();
            message->event = BUTTON_PRESS_2;
            queue.put(message);

            led2 = !led2;
            Thread::wait(5000);

        }

    }
}


void timeout_event(void const *n)
{

    //event via a message queue
    message_t *message = mpool.alloc();
    message->event = TIME_OUT;
    queue.put(message);

    led4 =  !led4;

}


void  button_1_hit_callback()
{
//Flash_LED_Thread.signal_set(0x1);

    button_press_1=1;   

}

void  button_2_hit_callback()
{
//Flash_LED_Thread.signal_set(0x1);

    button_press_2=1;

}





void dump_response_1(HttpResponse* res) 
{
   
    Relay_1=0;
    Relay_2=1;
    

    printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());

    printf("Headers:\n");
    for (size_t ix = 0; ix < res->get_headers_length(); ix++)
    {
        printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
    }
    printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
    
    Thread::wait(5000);
    Relay_1=1;
   
    Thread::wait(5000);
    button_press_2 = 0;
    button_press_1 = 0;
   button_press_Wait = 0;
    
}


void dump_response_2(HttpResponse* res)
{
    Relay_1=1;
    Relay_2=0;
    
    printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());

    printf("Headers:\n");
    for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
        printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
    }
    printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
    
    
    Thread::wait(5000);
    Relay_2=1;
    
    Thread::wait(5000);
    button_press_2 = 0;
    button_press_1 = 0;
   
   button_press_Wait = 0;
 

}


int main() 
{
    
    
    Relay_1=1;
    
    Relay_2=1;
    //Thread fsm(fsm_thread);
    Thread button_1_event(button_1_event_thread);
    Thread button_2_event(button_2_event_thread);
    
    
    
    RtosTimer timer(timeout_event, osTimerPeriodic, (void *)0);
    
    
    button_1.mode(PullUp);
    button_2.mode(PullUp);
    
    //Interrupts
   /* button_1.fall(&Button_1_Inter);
    button_2.fall(&Button_2_Inter);*/
    
     // Setup Interrupt callback function for a pb hit
    button_1.attach_deasserted(& button_1_hit_callback);
    // Start sampling pb input using interrupts
    button_1.setSampleFrequency();
    
    // Setup Interrupt callback function for a pb hit
    button_2.attach_deasserted(& button_2_hit_callback);
    // Start sampling pb input using interrupts
    button_2.setSampleFrequency();
 

    
    
    int state = STATE_0;
    while (true) 
    {
        Thread::wait(4000);
        
        //network setup
        NetworkInterface* network = connect_to_default_network_interface();
        if (!network)
        {
            printf("Cannot connect to the network, see serial output\n");
                    //return 1;
            for(int j = 0 ; j<20;j++)
            {
                led4=1;
                Thread::wait(100);
                led4=0;
                Thread::wait(100);
            }
        }
        else
        {
            led4=1;
        
            while (true) {
        
        
                switch(state) {
                    case STATE_0:
                        osEvent evt = queue.get();
                        if (evt.status == osEventMessage) 
                        {
                            message_t *message = (message_t*)evt.value.p;
        
        
                            if(message->event == BUTTON_PRESS_1) 
                            {
                                printf("HttpRequest Sending");
                                //printf(network->get_gateway);
                                HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://10.5.248.2:5600/mch/kick");
                                
                                post_req->set_header("Content-Type", "application/json");
                             
                                
                                const char body[] = "{\"hello\":\"Nada\"}";
                                    
                                HttpResponse* post_res = post_req->send(body, strlen(body));
                                if (!post_res)
                                {
                                    printf("HttpRequest failed (error code %d)\n", post_req->get_error());
                                   // return 1;
                                   
                                    button_press_2 = 0;
                                    button_press_1 = 0;
                                }
                                else
                                {
                                
                                    printf("\n----- HTTP POST response 1-----\n");
                                    
                                    dump_response_1(post_res);
                                    
                                    //Thread::wait(5000);
                                    
        
                                        
                                     delete post_req;
                                 }
                                 
                                 state = STATE_0;
                            }
                            else if(message->event == BUTTON_PRESS_2) 
                            {
                                
                                HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://10.5.248.2:5600/mch/call");
                                
                                post_req->set_header("Content-Type", "application/json");
                             
                                
                                const char body[] = "{\"hello\":\"World\"}";
                                    
                                HttpResponse* post_res = post_req->send(body, strlen(body));
                                if (!post_res)
                                {
                                    printf("HttpRequest failed (error code %d)\n", post_req->get_error());
                                   // return 1;
                                   
                                    button_press_2 = 0;
                                    button_press_1 = 0;                           
                                }
                                else
                                {
                            
                                    printf("\n----- HTTP POST response 2-----\n");
                                    
                                    dump_response_2(post_res);
                                        
                                    delete post_req;
                                    //Thread::wait(5000);
                                    
        
        
                    
                                }
                                 state = STATE_0;
                            }
        
                            mpool.free(message);
                        }
        
                        timer.start(15000);
        
                        break;
        
                    case STATE_1:
        
                        evt = queue.get();
                        if (evt.status == osEventMessage) 
                        {
                            message_t *message = (message_t*)evt.value.p;
        
        
                            if(message->event == BUTTON_PRESS_1) 
                            {
                                
                                state = STATE_0;
                            }
                            
                            mpool.free(message);
                        }
        
                        timer.start(10000);
        
                        break;
        
        
                }//End of switch
        
                //toggle led for local testing
                //led2= !led2;
        
            }//end of while(1)
        }
    }            
}

#endif