DeviceMessage.c 12.6 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>  

#include "JZsdkLib.h"
#include "./DeviceMessage.h"
#include "version_choose.h"
#include "BaseConfig.h"
#include "../SerialNumberProc/SerialProc.h"
#include "Gimbal/Gimbal.h"
#include "UI_control/Psdk_UI_io.h"

#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
    #include "Megaphone/Megaphone.h"
    #include "Megaphone/MegTempControl/MegTempControl.h"
#endif

#include "Lighting/Lighting_InAndOut.h"

#define MESSAGE_MAX_LEN 1024

static DeviceMessageMode g_DeviceMessageMode = DEVICE_MESSAGE_DEFAULT;
static unsigned char DeviceMessage[MESSAGE_MAX_LEN] = "默认打印信息\n"; //设备信息最多显示512长度
static DeviceMessageLanguage g_MessageLanguage = DEVICE_MESSAGE_CHINESE;

int Widget_RealTimeOpusFlag = JZ_FLAGCODE_OFF; //用于标志ui里的实时语音开关

#if IRC_CONFIG_STATUS == VERSION_SWITCH_ON
extern int g_temp_GasValueMax;
extern int g_temp_GasValueMin;
#endif


/***************************************************
 * 
 *  设备信息初始化
 *  暂时无用
 * 
 * *************************************************/
T_JZsdkReturnCode DeviceMessage_Init()
{

}

/***************************************************
 * 
 *  是否可用信息录入
 *  如果设备不可用,直接返回错误,从而不录入其他信息
 * 
 * *************************************************/
static T_JZsdkReturnCode DeviceMessage_Enter_UsegePermissions(unsigned char *message)
{
    unsigned char old_message[MESSAGE_MAX_LEN];
    unsigned char new_message[MESSAGE_MAX_LEN];
    memset(message ,0, MESSAGE_MAX_LEN);
    memset(old_message, 0, MESSAGE_MAX_LEN);
    memset(new_message, 0, MESSAGE_MAX_LEN);

    unsigned char Jz_SerialNumber[256];
    int Jz_SerialNumberLenth;
    SerialMAT_Get_SerialNumber(Jz_SerialNumber, &Jz_SerialNumberLenth);

    //判断是否能用
    int UseFlag = Main_Device_Wheather_Use(); 
    if(UseFlag== 1)
    {
        //判断为未激活
        //显示未激活
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        memset(message,0,sizeof(message));
        
        if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"提示:未激活,功能不可用。\n请进入微信小程序“极至服务”\n输入设备SN码:%s\n获取激活码激活设备。\n",Jz_SerialNumber);
        }
        else
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"Reminder: Not activated, function not available.\nPlease enter https://jzdrones.com/\nInput device SN code: %s\nObtain an activation code to activate the device.\n",Jz_SerialNumber);
        }
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    else if (UseFlag == 2)
    {
        //判断为海外版
        //显示为海外版不可用
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        memset(message,0,sizeof(message));
        
        if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"海外版无法在中国境内使用\n");
        }
        else
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"The international version cannot be used in China\n");
        }
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }
        
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/***************************************************
 * 
 *  设备信息录入
 * 
 * 
 * *************************************************/
static T_JZsdkReturnCode DeviceMessage_Enter_Default(unsigned char *message)
{
    unsigned char old_message[MESSAGE_MAX_LEN];
    unsigned char new_message[MESSAGE_MAX_LEN];
    memset(message ,0, MESSAGE_MAX_LEN);
    memset(old_message, 0, MESSAGE_MAX_LEN);
    memset(new_message, 0, MESSAGE_MAX_LEN);

#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
    //如果实时语音按键打开了
    if (Widget_RealTimeOpusFlag == JZ_FLAGCODE_ON)
    {
        memset(message ,0, MESSAGE_MAX_LEN);
        memset(old_message, 0, MESSAGE_MAX_LEN);
        memset(new_message, 0, MESSAGE_MAX_LEN);

        if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"已开启实时语音\n禁止其他音频操作\n");
        }
        else
        {
            snprintf(new_message,MESSAGE_MAX_LEN,"Real-time Intercom has been enabled.\nOther audio operations are prohibited\n");
        }

        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

        return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    }
    //正常获取歌曲列表
    else
    {
        //获取音频信息 用于显示歌曲列表
        memset(old_message, 0, MESSAGE_MAX_LEN);
        memset(new_message, 0, MESSAGE_MAX_LEN);
        if(Megaphone_GetMusicListMessage(new_message) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
        {
            memset(message, 0, sizeof(message));
            if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
            {
                snprintf(new_message,MESSAGE_MAX_LEN,"无歌曲\n",sizeof("无歌曲\n"));
            }
            else
            {
                snprintf(new_message,MESSAGE_MAX_LEN,"No Songs\n", sizeof("No Songs"));
            }
        }
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);
        //JZSDK_LOG_INFO("获取的信息%s",message);
    }
#endif

#if IRC_CONFIG_STATUS == VERSION_SWITCH_ON
    if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
    {
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        snprintf(new_message,MESSAGE_MAX_LEN,"气体阈值\n上限:%d\n下限:%d\n",g_temp_GasValueMax , g_temp_GasValueMin);
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);     

    }       
    else
    {
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        snprintf(new_message,MESSAGE_MAX_LEN,"Gas Threshold\nUpper Limit: %d\nLower Limit: %d\n",g_temp_GasValueMax , g_temp_GasValueMin);
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);    
    }
#endif

    //如果为组合版
#if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S ||DEVICE_VERSION == JZ_U3D)
    
    // //组合板写入
    // snprintf(new_message,128,"光斑y值%d\n",Widget_GetCenter_ValueY());
    // snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
    // snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

    static int SearchLight_LeftTemperature = 0;
    static int SearchLight_RightTemperature = 0;

    //获取温度
    Lighting_Get_SearchLightTemperature(&SearchLight_LeftTemperature, &SearchLight_RightTemperature);

    memset(new_message,0,sizeof(new_message));
    memset(old_message,0,sizeof(old_message));
    if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
    {
        snprintf(new_message,MESSAGE_MAX_LEN,"左灯温度:%d\n",SearchLight_LeftTemperature);
    }
    else
    {
        snprintf(new_message,MESSAGE_MAX_LEN,"SearchLight-LeftTemp:%d\n",SearchLight_LeftTemperature);
    }
    snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
    snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

    memset(new_message,0,sizeof(new_message));
    memset(old_message,0,sizeof(old_message));
    if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
    {
        snprintf(new_message,MESSAGE_MAX_LEN,"右灯温度:%d\n",SearchLight_RightTemperature);
    }
    else
    {
        snprintf(new_message,MESSAGE_MAX_LEN,"SearchLight-RightTemp:%d\n",SearchLight_RightTemperature);
    }
    snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
    snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);
           
#endif

}


/***************************************************
 * 
 *  设备信息录入
 * 
 * 
 * *************************************************/
static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message)
{
    unsigned char old_message[MESSAGE_MAX_LEN];
    unsigned char new_message[MESSAGE_MAX_LEN];
    memset(message ,0, MESSAGE_MAX_LEN);
    memset(old_message, 0, MESSAGE_MAX_LEN);
    memset(new_message, 0, MESSAGE_MAX_LEN);

    snprintf(new_message,MESSAGE_MAX_LEN,"调试界面\n");
    snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
    snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);

    //如果拥有云台,将会显示云台微调值
    if (Get_JZsdk_GimbalStatusFlag() == 1)
    {
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        snprintf(new_message,MESSAGE_MAX_LEN,"云台值%d\n云台微调值%d\n实际云台值%d\n",
        JZsdk_Psdk_UI_io_Get_PitchAngle(),
        JZsdk_Psdk_UI_io_Get_PitchFineTuninge(),
        JZsdk_Psdk_UI_io_Get_PitchRealPitchAngle());
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);                
    }  

    
#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
    memset(new_message,0,sizeof(new_message));
    memset(old_message,0,sizeof(old_message));
    snprintf(new_message,MESSAGE_MAX_LEN,"rtv:%d rsv:%d",Megaphone_get_RealTargetVolume(), Megaphone_get_RealSetVolume());
    snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
    snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);     

    //如果温控值不为0
    double Megtemp = MegTempControl_GetTemp();
    if (Megtemp != 0)
    {
        memset(new_message,0,sizeof(new_message));
        memset(old_message,0,sizeof(old_message));
        snprintf(new_message,MESSAGE_MAX_LEN,"喊话器温度%f\n",Megtemp);
        snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
        snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);   
    }
#endif
}


/***************************************************
 * 
 *  用于获取设备信息的函数入口
 * 
 * 
 * *************************************************/
T_JZsdkReturnCode DeviceMessage_GetMessage(unsigned char *str, int MaxReadLen)
{
    T_JZsdkReturnCode ret;
    memset(DeviceMessage,0,sizeof(DeviceMessage));

    if (MaxReadLen >= sizeof(DeviceMessage))
    {
        MaxReadLen = sizeof(DeviceMessage);
    }

    //接下来信息很重要,首先获取消息吧!
    if (g_DeviceMessageMode == DEVICE_MESSAGE_ALL)
    {
        JZSDK_LOG_INFO("查获所有信息");
    }
    else
    {
        ret = DeviceMessage_Enter_UsegePermissions(DeviceMessage);
        if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
        {
            memcpy(str, DeviceMessage, MaxReadLen);
            return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
        }

        if (g_DeviceMessageMode == DEVICE_MESSAGE_DEFAULT)
        {
            DeviceMessage_Enter_Default(DeviceMessage);
            memcpy(str, DeviceMessage, MaxReadLen);
            return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;            
        }
        else if (g_DeviceMessageMode == DEVICE_MESSAGE_DEBUG)
        {
            DeviceMessage_Enter_Debug(DeviceMessage);
            memcpy(str, DeviceMessage, MaxReadLen);
            return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
        }
        else
        {
            printf("获取设备信息失败\n");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/*****************************
 * 
 * 设置信息模式
 * 
 * 
 * **************************/
T_JZsdkReturnCode DeviceMessage_Mode(DeviceMessageMode mode)
{
    if (mode < 0 || mode > 2)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    if (mode == g_DeviceMessageMode)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    }

    g_DeviceMessageMode = mode;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/*****************************
 * 
 * 设置设备信息的语言
 * 
 * 
 * **************************/
T_JZsdkReturnCode DeviceMessage_SetMessageLanguage(DeviceMessageLanguage value)
{
    if (value < 0 || value > 1)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    if (value == g_MessageLanguage)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    }

    g_MessageLanguage = value;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}