K1Guitar/MyCode/mymidififo1.c

87 lines
1.7 KiB
C
Raw Permalink Normal View History

/*
* 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;
}