Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Tue Jul 12 2022 20:58:31 by
1.7.2