// #include "platform_queue.h"

// t_queue can_rx;
// t_queue can_tx;

// void queue_mode(t_queue *this, uint8_t mode)
// {
//     this->mode = mode;
// }

// void queue_empty_one(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t lock)
// {
//     *(head + lock)   = buff[lock];
//     *(tail + lock)   = buff[lock];
//     this->full[lock] = 0;
// }

// // 清空队列
// void queue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
// {
//     for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
//     {
//         *(head + i)   = this->buff[i];
//         *(tail + i)   = buff[i];
//         this->full[i] = 0;
//     }
//     this->lock = 0;
//     this->idle = 0;
// }

// void qudeue_empty(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM])
// {
//     for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
//     {
//         *(head + i)   = this->buff[i];
//         *(tail + i)   = buff[i];
//         this->full[i] = 0;
//     }
//     this->lock = 0;
//     this->idle = 0;
// }

// // 队列长度计算
// void length_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, uint8_t len)
// {
//     for (int i = 0; i < QUEUE_BUFFER_SUM; i++)
//     {
//         if (*(tail + i) > *(head + i))
//         {
//             this->length[i] = *(tail + i) - *(head + i);
//         }
//         if (*(tail + i) < *(head + i))
//         {
//             this->length[i] = *(tail + i) + len - *(head + i);
//         }
//         if (*(tail + i) == *(head + i) && this->full[i])
//         {
//             this->length[i] = len;
//         }
//         if (*(tail + i) == *(head + i) && !this->full[i])
//         {
//             this->length[i] = 0;
//         }
//     }
// }

// // 入队
// void push_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t len, pdu_tag *data, uint8_t data_len)
// {
//     if (this->mode)
//     {
//         // 空闲清除读队列
//         if (this->idle == 0)
//         {
//             empty_one_queue((*this), !this->lock);
//         }
//         // 非空闲清除写队列
//         empty_one_queue((*this), this->lock);
//     }

//     for (int num = 0; num < data_len; num++, data++)
//     {
//         if (!this->mode)
//         {
//             queue_update((*this));
//             if ((this->length[0] + this->length[1]) >= 4 && !this->idle)
//             {
//                 if (this->length[!this->lock] == 0)
//                 {
//                     this->lock              = !this->lock;
//                     this->full[!this->lock] = 0;
//                 }

//                 for (int i = 0; i <= ((this->length[this->lock] + this->length[!this->lock]) - 4); i++)
//                 {
//                     if (++(*(head + !this->lock)) == buff[!this->lock] + len)
//                     {
//                         *(head + !this->lock) = buff[!this->lock];
//                     }
//                     if (*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0)
//                     {
//                         break;
//                     }
//                 }
//             }
//         }
//         // 队列长度更新
//         queue_update((*this));
//         /*单纯的数据存储*/
//         **(tail + this->lock) = *data;
//         // 队列满
//         if (this->full[this->lock] == 1)
//         {
//             if (++(*(head + this->lock)) == buff[this->lock] + len)
//             {
//                 *(head + this->lock) = buff[this->lock];
//             }
//             if (++(*(tail + this->lock)) == buff[this->lock] + len)
//             {
//                 *(tail + this->lock) = buff[this->lock];
//             }
//         }
//         // 队列未满
//         else
//         {
//             if (++(*(tail + this->lock)) == buff[this->lock] + len)
//             {
//                 *(tail + this->lock) = buff[this->lock];
//             }
//             if (*(tail + this->lock) == *(head + this->lock))
//             {
//                 this->full[this->lock] = 1;
//             }
//         }
//     }
//     // 队列长度更新
//     queue_update((*this));
// }

// // 出队
// void pull_queue(t_queue *this, pdu_tag **head, pdu_tag **tail, pdu_tag (*buff)[DATA_BUFF_NUM], uint8_t len, pdu_tag *data)
// {
//     this->idle = 1;
//     this->ret  = 0;
//     // 非空队列
//     if (!(*(tail + !this->lock) == *(head + !this->lock) && this->full[!this->lock] == 0))
//     {
//         *data = **(head + !this->lock);
//         // 指针指向溢出，指向数组首地址
//         if (++(*(head + !this->lock)) == buff[!this->lock] + len)
//         {
//             *(head + !this->lock) = buff[!this->lock];
//         }
//         this->full[!this->lock] = 0;
//         this->ret               = 1;
//     }
//     queue_update((*this));
//     // 出队时判断当前队列是否为空队列，若为空队列且从队列不为空队列，则跳转，若前面没有获取到数据，重新到跳转队列获取数据
//     if (this->length[this->lock] != 0 && this->length[!this->lock] == 0)
//     {
//         this->lock = !this->lock;
//         if (this->ret == 0)
//         {
//             de_queue((*this), data);
//         }
//     }
//     // 这里结束 队列为空闲态
//     this->idle = 0;
// }

// void can_queue_init(void)
// {
//     // 提前初始化，否则由于指针问题，HardFault_Handler()
//     empty_queue(can_rx);
//     mode_queue(can_rx, TASKQUEUE);
//     // 提前初始化，否则由于指针问题，HardFault_Handler()
//     empty_queue(can_tx);
//     mode_queue(can_tx, TASKQUEUE);
// }
