DJI_WidgetControl.c 3.2 KB
#include <stdio.h>
#include "Psdk_UI_io.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_InsCode.h"
#include "BaseConfig.h"
#include "Megaphone_InputAndOutput.h"
#include "JZsdkLib.h"
#include "UI_control.h"
#include <unistd.h>
#include <string.h>
#include "./DJI_WidgetControl.h"
#include <pthread.h>

static int InscodeBuffer[1024][2]; //指令缓冲池
static int InscodeBufferHead = 0;
static int InscodeBufferEnd = 0;



static pthread_mutex_t InscodeBufferLock = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t InscodeBufferCond = PTHREAD_COND_INITIALIZER;

static int WidgetControl_WriteDataClear()
{
    memset(InscodeBuffer, 0, sizeof(InscodeBuffer));
    InscodeBufferHead = 0;
    InscodeBufferEnd = 0;
}

//工作函数
static int WidgetControl_WorkFuntion(int Inscode, int value)
{
    switch (Inscode)
    {
        case DJI_WIDGET_LASTSONG:
            JZsdk_Psdk_UI_io_LastSong(1);
            break;

        case DJI_WIDGET_NEXTSONG:
            JZsdk_Psdk_UI_io_NextSong(1);
            break;

        case DJI_WIDGET_PLAYANDSTOP:
            JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(1, value);
            break;

        default:
            break;
    }
}

//输入缓冲池任务
static void *WidgetControl_Task(void *arg)
{
    while (1)
    {
        if (InscodeBufferEnd != InscodeBufferHead)
        {
            WidgetControl_WorkFuntion(InscodeBuffer[InscodeBufferHead][0], InscodeBuffer[InscodeBufferHead][1]);
            InscodeBufferHead++;
            //头到底了,重置
            if (InscodeBufferHead == 1024)
            {
                InscodeBufferHead = 0;
            }
        }

        delayMs(1);
    }
}
//控件控制初始化
int DJI_WidgetControlInit()
{
    //清空写入数据池
	WidgetControl_WriteDataClear();

	pthread_t WriteDataTask;
	pthread_attr_t task_attribute; //线程属性
	pthread_attr_init(&task_attribute);  //初始化线程属性
	pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED);      //设置线程分离属性
	int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,WidgetControl_Task,NULL);		//线程
	if(opus_Protection != 0)
	{
		JZSDK_LOG_ERROR("创建控件写入线程失败!");
		return -1;
	}
}

//写入任务
int DJI_WidgetControl_InputTask(int task_inscode, int value)
{
    //如果输入的任务是关闭音频,就取消所有的上下曲操作,并重置数据池
    if (task_inscode == DJI_WIDGET_PLAYANDSTOP)
    {
        InscodeBufferEnd = 0;
        InscodeBufferHead = 0;

        delayMs(10);
        InscodeBufferEnd = 0;
        InscodeBufferHead = 0;

        InscodeBuffer[InscodeBufferEnd][0] = task_inscode;
        InscodeBuffer[InscodeBufferEnd][1] = value;
        InscodeBufferEnd++;
        //池到底了,重置
        if (InscodeBufferEnd == 1024)
        {
            InscodeBufferEnd = 0;
        }

        return 0;
    }
    

    InscodeBuffer[InscodeBufferEnd][0] = task_inscode;
    InscodeBuffer[InscodeBufferEnd][1] = value;
    InscodeBufferEnd++;
    //池到底了,重置
    if (InscodeBufferEnd == 1024)
    {
        InscodeBufferEnd = 0;
    }
}