87 lines
1.7 KiB
C
87 lines
1.7 KiB
C
|
|
/*
|
|||
|
|
* mymidififo.c
|
|||
|
|
*
|
|||
|
|
* Created on: Jun 12, 2025
|
|||
|
|
* Author: 19120
|
|||
|
|
*/
|
|||
|
|
#include "mymidififo1.h"
|
|||
|
|
#include <string.h>
|
|||
|
|
|
|||
|
|
void mymidififo_init(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
rb->front = 0;
|
|||
|
|
rb->rear = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int mymidififo_InQueue(MidiFifoSeq_t *rb,MidiFifoItem_t* pFrame)
|
|||
|
|
{
|
|||
|
|
int rear = rb->rear;
|
|||
|
|
int front = rb->front;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
if ((rear + 1) % MIDI_FIFO_MAX_LEN == front)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
|
|||
|
|
memcpy(&(rb->frame[rear]), pFrame, sizeof(MidiFifoItem_t));//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
|||
|
|
rear = (rear + 1) % MIDI_FIFO_MAX_LEN;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
rb->rear = rear;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MidiFifoItem_t* mymidififo_DeQueue(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
MidiFifoItem_t* pFrame;
|
|||
|
|
int rear = rb->rear;
|
|||
|
|
int front = rb->front;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
if (rear == front)
|
|||
|
|
{
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʩcopy<70><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ʽϸ<CABD>
|
|||
|
|
pFrame = &(rb->frame[front]);
|
|||
|
|
front = (front + 1) % MIDI_FIFO_MAX_LEN;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
rb->front = front;
|
|||
|
|
return pFrame;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MidiFifoItem_t* mymidififo_TryDeQueue(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
MidiFifoItem_t* pFrame;
|
|||
|
|
int rear = rb->rear;
|
|||
|
|
int front = rb->front;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
if (rear == front)
|
|||
|
|
{
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʩcopy<70><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ʽϸ<CABD>
|
|||
|
|
pFrame = &(rb->frame[front]);
|
|||
|
|
//front = (front + 1) % MIDI_FIFO_MAX_LEN;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
//rb->front = front;
|
|||
|
|
return pFrame;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int mymidififo_GetQueueLength(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
return (rb->rear - rb->front + MIDI_FIFO_MAX_LEN) % MIDI_FIFO_MAX_LEN;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int mymidififo_IsQueueFull(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
if ((rb->rear + 1) % MIDI_FIFO_MAX_LEN == rb->front)
|
|||
|
|
return 1;
|
|||
|
|
else
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int mymidififo_IsQueueEmpty(MidiFifoSeq_t *rb)
|
|||
|
|
{
|
|||
|
|
if(rb->front == rb->rear)
|
|||
|
|
return 1;
|
|||
|
|
else
|
|||
|
|
return 0;
|
|||
|
|
}
|