123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #define THIS_FILE_ID 5
- #include "includes.h"
- unsigned char msgBuffer[MSG_DATA_BUF_LEN];
- SUT_MSG_QUEUE msgQue;
- void MsgQueueSet(void)
- {
- MsgQueueInit((void *)msgBuffer,MSG_DATA_BUF_LEN);
- }
- void MsgQueueInit(char *pDataBuffer,unsigned short DataBufferLenMax)
- {
- int i;
- SUT_MSG_QUEUE *pMsgQueue = &msgQue;
- pMsgQueue->MsgIn=0;
- pMsgQueue->MsgNum=0;
- pMsgQueue->MsgOut=0;
- for(i=0;i<MSG_QUEUE_NUM_MAX;i++){
- pMsgQueue->MsgQueue[i].DataStartIndex=0;
- pMsgQueue->MsgQueue[i].MsgLen=0;
- }
-
- pMsgQueue->DataBuffer=pDataBuffer;
- for(i=0;i<DataBufferLenMax;i++)pMsgQueue->DataBuffer[i]=0;
- pMsgQueue->DataBufferLenMax=DataBufferLenMax;
- pMsgQueue->DataBufferIn=0;
- pMsgQueue->DataBufferOut=0;
- pMsgQueue->DataBufferLen=0;
- }
- int MsgQueuePost(char *pData,unsigned short DataLen)
- {
- SUT_MSG_QUEUE *pMsgQueue = &msgQue;
- unsigned short i;
-
-
- if(pMsgQueue->MsgNum>=MSG_QUEUE_NUM_MAX){
-
- return -1;
- }
-
- if((DataLen+pMsgQueue->DataBufferLen)>pMsgQueue->DataBufferLenMax){
-
- return -2;
- }
-
- pMsgQueue->MsgQueue[pMsgQueue->MsgIn].DataStartIndex=pMsgQueue->DataBufferIn;
- pMsgQueue->MsgQueue[pMsgQueue->MsgIn].MsgLen=DataLen;
-
- for(i=0;i<DataLen;i++){
- pMsgQueue->DataBuffer[pMsgQueue->DataBufferIn]=pData[i];
- pMsgQueue->DataBufferIn++;
- if(pMsgQueue->DataBufferIn>=MSG_DATA_BUF_LEN)pMsgQueue->DataBufferIn=0;
- pMsgQueue->DataBufferLen++;
- }
-
- pMsgQueue->MsgIn++;
- if(pMsgQueue->MsgIn>=MSG_QUEUE_NUM_MAX)pMsgQueue->MsgIn=0;
- pMsgQueue->MsgNum++;
- return 0;
- }
- int MsgQueueAccept(char *pBuf,unsigned short BufLen)
- {
- SUT_MSG_QUEUE *pMsgQueue = &msgQue;
- unsigned short i,j;
- char data;
- SUT_MESSAGE msg;
-
- if(g_ucModemTaskEn==0)
- {
- printf("STOP GO GT\r\n");
- Modem_Stopinit();
- }
-
- if(pMsgQueue->MsgNum==0)return 0;
-
- msg.MsgLen = pMsgQueue->MsgQueue[pMsgQueue->MsgOut].MsgLen;
- msg.DataStartIndex = pMsgQueue->MsgQueue[pMsgQueue->MsgOut].DataStartIndex;
- j=0;
- for(i=0;i<msg.MsgLen;i++){
- if(0==pMsgQueue->DataBufferLen)break;
- data=pMsgQueue->DataBuffer[pMsgQueue->DataBufferOut];
- pMsgQueue->DataBufferOut++;
- if(pMsgQueue->DataBufferOut>=pMsgQueue->DataBufferLenMax)pMsgQueue->DataBufferOut=0;
- pMsgQueue->DataBufferLen--;
- if(j<BufLen)pBuf[j++]=data;
- }
- pMsgQueue->MsgOut++;
- if(pMsgQueue->MsgOut>=MSG_QUEUE_NUM_MAX)pMsgQueue->MsgOut=0;
- pMsgQueue->MsgNum--;
-
- if(i!=msg.MsgLen){
- return -2;
- }
-
- if(msg.MsgLen>BufLen){
- return -1;
- }else{
- return msg.MsgLen;
- }
- }
|