Thread: Tricky request and response structure.

  1. #16
    Registered User
    Join Date
    Dec 2016
    Posts
    34
    More appropriately code must be like this
    Code:
    case REQUEST4:
            request_response(&request[4], &response);
            if (prev_request != REQUEST_NONE)
                handle_prev_response(prev_request, &response);
            prev_request = REQUEST3;
            break;
    case REQUEST4: ////send same REQUEST4 for 3 different modes and repeat again
            request_response(&request[4], &response);  //for mode1,2 and 3
            if (prev_request != REQUEST_NONE)
                handle_prev_response(prev_request, &response);
            prev_request = REQUEST4;
            break;
    
    
    }
    
    void handle_prev_response(RequestType rt, data_st *response) {
        switch (rt) {
        case REQUEST3:
            // process response for request-3 type
            break;
        case REQUEST4:   
            // process response for request-4 type mode1
        break;
    
        case REQUEST4:
            // process response for request-4 type mode2
        break;
        case REQUEST4:
            // process response for request-4 type mode3
    
    
            break;
     case REQUEST4:   
            // process response for request-4 type mode1
    
        // etc.
        }
    }
    


    Please guide.
    --david.

  2. #17
    Registered User
    Join Date
    Jun 2015
    Posts
    1,640
    Maybe something like this:
    Code:
    typdef struct{
        uint16_t data0;
        uint16_t data1;
        uint16_t data2;
        uint16_t data3;
    } data_st;
     
    enum RequestType { REQUEST_NONE, REQUEST0, REQUEST1, REQUEST2, REQUEST3,
                       REQUEST4 };
     
    void handle_request(RequestType request_type) {
     
        static RequestType prev_request = REQUEST_NONE;
        static int prev_mode = 0;
     
        static data_st request[5] = {
            { 0x0102, 0x0304, 0x0506, 0x0708 },   // whatever the data is
            // ...
        };
     
        data_st response;
     
     
        switch (request_type) {
     
        case REQUEST0:
            request_response(&request[0], &response);
            if (prev_request != REQUEST_NONE)
                handle_response(prev_request, prev_mode, &response);
            prev_request = REQUEST0;
            prev_mode = 0;
            break;
     
        case REQUEST1:
            request_response(&request[1], &response);
            if (prev_request != REQUEST_NONE)
                handle_response(prev_request, prev_mode, &response);
            prev_request = REQUEST1;
            prev_mode = 0;
            break;
     
        // ... case REQUEST2 and case REQUEST3 ...
        
        case REQUEST4:
            request_response(&request[4], &response);
            if (prev_request != REQUEST_NONE)
                handle_response(prev_request, prev_mode, &response);
            if (prev_request == REQUEST4)
                prev_mode = (prev_mode + 1) % 3;
            else
                prev_mode = 0;
            prev_request = REQUEST4;
            break;
        
        }
    }
     
    void handle_response(RequestType type, int mode, data_st *response) {
        switch (type) {
        case REQUEST0:
            // process response for request-0 type
            break;
        case REQUEST1:
            // process response for request-1 type
            break;
        case REQUEST2:
            // process response for request-2 type
            break;
        case REQUEST3:
            // process response for request-3 type
            break;
        case REQUEST4:
            switch (mode) {
            case 0:
                // process response for request-4, mode-0 type
                break;
            case 1:
                // process response for request-4, mode-1 type
                break;
            case 2:
                // process response for request-4, mode-2 type
                break;
            }
        }
    }

  3. #18
    Registered User
    Join Date
    Dec 2016
    Posts
    34
    Hi Algorism....looks great. I need to keep repeating REQUEST4 for all three mode again and again and process the corresponding data. . Is this will do the same? I will try and let you know. Really great help.

    --David.

  4. #19
    Registered User
    Join Date
    Jun 2015
    Posts
    1,640
    Quote Originally Posted by davidmeetsall View Post
    I need to keep repeating REQUEST4 for all three mode again and again and process the corresponding data. . Is this will do the same? I will try and let you know.
    I can't be sure since I'm not testing it. Give it a try.

    You also need a case in handle_request to allow you to send a dummy request to handle the final response. You could use REQUEST_NONE like handle_request(REQUEST_NONE). THe case would be something like:
    Code:
        case REQUEST_NONE:
            if (prev_request != REQUEST_NONE)
                handle_response(prev_request, prev_mode, &response);
            prev_request = REQUEST_NONE;
            prev_mode = 0;
            break;

  5. #20
    Registered User
    Join Date
    Dec 2016
    Posts
    34
    Ok. I will try and let you know. Many thanks.
    ---David.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Request Response for AT Commands
    By sanjyot in forum C Programming
    Replies: 1
    Last Post: 03-08-2014, 10:20 AM
  2. HTTP Request/Response Libraries?
    By jamesjeffery in forum Networking/Device Communication
    Replies: 7
    Last Post: 12-24-2008, 04:44 PM
  3. what is an elegant way to transform request to response?
    By kypronite in forum Networking/Device Communication
    Replies: 1
    Last Post: 12-24-2008, 10:47 AM
  4. C# HTTP request/response
    By George2 in forum C# Programming
    Replies: 0
    Last Post: 04-02-2008, 06:00 AM
  5. Replies: 3
    Last Post: 10-22-2007, 06:47 AM

Tags for this Thread