takashi yamanoue / Mbed 2 deprecated XBee_API_ex3

Dependencies:   XBee mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ResponseQueue.cpp Source File

ResponseQueue.cpp

00001 
00002 #include "XBee.h"
00003 #include "ResponseQueue.h"
00004 #include <stdio.h>
00005 
00006     ResponseQueue::ResponseQueue(){
00007        init();
00008     }
00009     void ResponseQueue::init() {
00010          queueHead= 0;
00011          queueTail= 0;
00012          responseStoreMax=10;
00013          responseStorePointer=0;
00014          queueMax=10;
00015          queue= &(new  (AtCommandResponse *)[queueMax]);
00016          responseStore=&(new (AtCommandResponse *)[responseStoreMax]);
00017          for(int i=0;i<queueMax;i++){
00018             queue[i]=NULL;
00019          }
00020          /*
00021          for(int i=0;i<5;i++){
00022             AtCommandResponse *b= new AtCommandResponse();
00023             collectResponse(b);
00024          }
00025          */
00026     }
00027     
00028     AtCommandResponse* ResponseQueue::requestResponse(){
00029 //       printf("... requestBuffer ...start, bufferStoreMax=%d ",bufferStoreMax);
00030        AtCommandResponse *b=NULL;
00031        if(responseStorePointer==0){
00032           b=new AtCommandResponse();
00033 //          printf(" ... return n=%d\n\r",b->getNumber());
00034           return b;
00035        }
00036        if(responseStorePointer>0){
00037           responseStorePointer--;
00038           b=responseStore[responseStorePointer];
00039 //          printf(" ... return n=%d\n\r",b->getNumber());
00040           return b;
00041        }
00042        return NULL;       
00043     }
00044     int ResponseQueue::collectResponse(AtCommandResponse *b){
00045 //       printf("... collectBuffer, bufferStoreMax=%d n=%d\n\r",bufferStoreMax,b->getNumber());
00046        if(responseStorePointer<responseStoreMax){
00047            responseStore[responseStorePointer]=b;
00048            responseStorePointer++;
00049            return 1;
00050        }
00051        return -1;
00052     }
00053     int ResponseQueue::putResponse(AtCommandResponse *b) {
00054 //       printf("... putBuffer %d..queueHead=%d queueTail=%d\n\r",b->getNumber(),queueHead,queueTail);
00055        if(queueHead>queueMax) return -1;
00056        if(queueTail>queueMax) return -1;
00057        if(queueHead<0) return -1;
00058        if(queueTail<0) return -1;
00059        if(queueHead>=queueTail){
00060          if(queueHead<queueMax){
00061             queue[queueHead]=b;
00062             queueHead++;
00063             return 1;
00064          }
00065          else
00066          if(queueHead==queueMax){
00067             if(queueTail>0){
00068                queue[0]=b;
00069                queueHead=1;
00070                return 1;
00071             }
00072          }
00073          else{
00074             return -1;
00075          }
00076        }
00077        else{
00078             queue[queueHead]=b;
00079             queueHead++;
00080             return 1;
00081        }
00082        return -1;
00083     }
00084     AtCommandResponse * ResponseQueue::getResponse(){
00085 //       printf("... getBuffer..queueHead=%d queueTail=%d ",queueHead,queueTail);
00086        AtCommandResponse *b=NULL;
00087        if(queueHead>queueMax) return NULL;
00088        if(queueTail>queueMax) return NULL;
00089        if(queueHead<0) return NULL;
00090        if(queueTail<0) return NULL;
00091        if(queueHead>queueTail){
00092             b=queue[queueTail];
00093             queueTail++;
00094 //            printf("buffer number=%d\n\r",b->getNumber());
00095             return b;
00096        }
00097        if(queueHead==queueTail){
00098             return NULL;
00099        }
00100        else{
00101          if(queueTail<queueMax){
00102             b=queue[queueTail];
00103             queueTail++;
00104 //            printf("buffer number=%d\n\r",b->getNumber());
00105             return b;
00106          }
00107          else
00108          if(queueTail==queueMax){
00109             if(queueHead>0){
00110                queueTail=0;
00111                b=queue[queueTail];
00112                queueTail++;
00113 //               printf("buffer number=%d\n\r",b->getNumber());
00114                return b;
00115              }
00116              else{
00117                 return NULL;
00118              }
00119          }
00120          else{
00121              return NULL;
00122          }
00123        }
00124      }
00125      int ResponseQueue::length(){
00126           if(queueHead>=queueTail){
00127              return queueHead-queueTail;
00128           }
00129           else{
00130              int w=queueMax-queueTail;
00131              return w+queueHead;
00132           }
00133       }
00134