JZsdk_WidgetControl.c 6.0 KB
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

#include "./JZsdk_Widget.h"
#include "./JZsdk_WidgetControl.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_InsCode.h"
#include "BaseConfig.h"
#include "JZsdkLib.h"
#include "../UI_control.h"
#include "../Psdk_UI_io.h"

#include "JZsdk_Base/Lwrb/lwrb.h"


typedef struct t_UI_WidgetData
{
    unsigned int index; //索引值
    unsigned int value; //变量
}t_UI_WidgetData;

static struct lwrb Widget_Lwrb; 
static struct t_UI_WidgetData *Widget_Lwrb_Data = NULL;

static void WidgetControl_WriteDataClear()  
{  
    JZSDK_LOG_INFO("重置操作池");
    lwrb_reset(&Widget_Lwrb);
}

//工作函数
static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value)
{
    JZSDK_LOG_INFO("进行了执行函数%d",Inscode);
    
    switch (Inscode)
    {
        case JZSDK_WIDGET_LASTSONG:
            JZsdk_Psdk_UI_io_LastSong(JZ_FLAGCODE_ON);
            break;

        case JZSDK_WIDGET_NEXTSONG:
            JZsdk_Psdk_UI_io_NextSong(JZ_FLAGCODE_ON);
            break;

        case JZSDK_WIDGET_PLAYANDSTOP:
            JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(JZ_FLAGCODE_ON, value);
            break;

//相机
        case JZSDK_WIDGET_VIDEOPUSH_INDEX:
            JZsdk_Psdk_UI_io_Set_VideoMgmtPush(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_TEMP_MEASUREMENT_MODE:
            printf("未设置");
            break;

        case JZSDK_WIDGET_SHUTTER_SWITCH:
            JZsdk_Psdk_UI_io_Set_ShutterSwitch(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_FREEZE_VIDEO:
            JZsdk_Psdk_UI_io_FreezeVideo(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_PSEUDO_MODE:
            JZsdk_Psdk_UI_io_Set_PixelColorMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_ZOOM_SIZE:
            JZsdk_Psdk_UI_io_Set_ZoomSize(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_SPC_RESET:
            JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_PSEUDO_COLOR:
            JZsdk_Psdk_UI_io_Set_PseudoColor(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_CAMERA_CORRECT_MODE:
            JZsdk_Psdk_UI_io_CameraCorrectMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_GAS_ENHANCEMENT_COLOR:
            JZsdk_Psdk_UI_io_Set_GasEnhancementColor(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_SPC_MODE:
            JZsdk_Psdk_UI_io_Set_SPCmode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_SPC_AUTO_TIME:
            JZsdk_Psdk_UI_io_Set_SpcAutoTime(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_TPC_MODE:
            JZsdk_Psdk_UI_io_Set_TpcMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE:
            JZsdk_Psdk_UI_io_Set_AutoBadPixelCorrectMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_BAD_PIXEL_CORRECT:
            JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;

        case JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT:
            JZsdk_Psdk_UI_io_GasEnhancementCorrect(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;


        case JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_HIGH_CALIBRATION:
            printf("未设置");
            break;


        case JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION:
            printf("未设置");
            break;
        


        case JZSDK_WIDGET_SIDE_LASER_MODE:
            JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
            break;
        
        default:
            break;
    }
}

static void *WidgetMgMT_Control_Task(void *arg)  
{  
    while (1)  
    {  
        t_UI_WidgetData data;
        int rlen = lwrb_read(&Widget_Lwrb, (void *)&data, sizeof(t_UI_WidgetData));
        if (rlen != sizeof(t_UI_WidgetData))
        {
            //JZSDK_LOG_INFO("读取失败");
            delayMs(1);
            continue;
        }

        WidgetMgMT_Control_WorkFuntion(data.index, data.value);  
    }  
}

//控件控制初始化
T_JZsdkReturnCode JZSDK_WidgetMgMT_ControlInit()
{   

    JZsdk_Malloc((void **)&Widget_Lwrb_Data, sizeof(t_UI_WidgetData)*30 + 1);
    lwrb_init(&Widget_Lwrb, (void *)Widget_Lwrb_Data,  sizeof(t_UI_WidgetData)*30 +1);

	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,WidgetMgMT_Control_Task,NULL);		//线程
	if(opus_Protection != 0)
	{
		JZSDK_LOG_ERROR("创建控件写入线程失败!");
		return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
	}

    JZSDK_LOG_INFO("控件控制初始化成功");
}


/******
 * 
 *  控件输入线程,
 *  task_inscode 输入的指令类型
 *  value 参数
 * ******/
T_JZsdkReturnCode JZSDK_WidgetMgMT_ConrtrolInputTask(int task_inscode, int value)
{
    //如果输入的任务是关闭/继续音频,就取消所有的上下曲操作,并重置数据池
    if (task_inscode == JZSDK_WIDGET_PLAYANDSTOP)  
    {  
        WidgetControl_WriteDataClear();  
    }
    
    t_UI_WidgetData data;
    data.index = task_inscode;
    data.value = value;

    int rLen = (int)lwrb_get_free(&Widget_Lwrb);
    if (rLen < sizeof(t_UI_WidgetData))
    {
        JZSDK_LOG_ERROR("操作队列已满,阻止写入");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    int ret = lwrb_write(&Widget_Lwrb, (const void *)&data, sizeof(t_UI_WidgetData));
    if (ret != sizeof(t_UI_WidgetData))
    {
        JZSDK_LOG_ERROR("数据写入失败");
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}