#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>

#include "JZsdkLib.h"

#include "version_choose.h"
#include "ircut.h"
#include "Megaphone_InputAndOutput.h"
#include "Gimbal_InAndOut.h"

#include "JZsdk_Uart_Input.h"
#include "BaseConfig.h"

#define ON 1
#define OFF 0

static int Main_WorkMode();
static void *Main_WorkModeTask(void *arg);
static int WorkMode = OFF;

int Main_APP_Uart()
{
    //引脚初始化
    Ircut_Init();   

    //串口程序计时开始(用于连接上就跑串口程序,没连上就退出 继续跑psdk)
    //Main_WorkMode();

    if (DEVICE_VERSION == JZ_H1E)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        //喊话器初始化
        Megaphone_Init();
    }

    if (DEVICE_VERSION == JZ_H1T)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        //4g设备初始化
        JZsdk_Uart_Init(UART_4G);

        //喊话器初始化
        Megaphone_Init();

        //云台初始化
        Gimbal_Init();
    }

    if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        if (DEVICE_VERSION == JZ_H150T)
        {
            //4g设备初始化
            JZsdk_Uart_Init(UART_4G);
        }

        //喊话器初始化
        Megaphone_Init();

        //云台初始化
        Gimbal_Init();
    }
    
    if (DEVICE_VERSION == JZ_H10)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        //喊话器初始化
        Megaphone_Init();
        
        //云台初始化
        Gimbal_Init();
    }

    if (DEVICE_VERSION == JZ_H10T)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        //4g设备初始化
        JZsdk_Uart_Init(UART_4G);

        //喊话器初始化
        Megaphone_Init();
        
        //云台初始化
        Gimbal_Init();
    }

    if (DEVICE_VERSION == JZ_U3)
    {
        //串口设备1初始化
        JZsdk_Uart_Init(UART_DEV_1);

        //串口设备2初始化
        JZsdk_Uart_Init(UART_DEV_2);

        //喊话器初始化
        Megaphone_Init();    

        //云台初始化
        Gimbal_Init();

        //消息订阅初始化
        JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_OFF);
    }
}

int Main_APP_Psdk()
{
    //引脚初始化
    Ircut_Init();

    //
}

int main()
{
    //设定本程序为 uart程序模式  还是 psdk程序模式
    //前者可用于 uart连接对外接口 或者是 通过uart控制的psdk
    //后者则是用于直接镶套在psdk程序里面

    printf("JZ串口程序 Version%x.%x.%x.%x\n",MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
    JZsdk_LibInit();

    if (APP_VERSION == APP_UART)
    {
        Main_APP_Uart();
    }
    else if (APP_VERSION == APP_PSDK)
    {
        Main_APP_Psdk();
    }
    
    
        
    while (1)
    {
        delayMs(1000);
    }
}

int Main_WorkModeSet(int mode)
{
    WorkMode = mode;

    if (mode == JZ_FLAGCODE_ON)
    {
        //播报喊话器准备就绪
        delayMs(3500);

#if FIRMWARE_ORIGIN ==  DOMESTIC_VERSION   //国内版才有方言

    //播放喊话器启动中
    Megaphone_TTS_Play(strlen("喊话器直连模式准备就绪"), "喊话器直连模式准备就绪", 0);

#elif FIRMWARE_ORIGIN == OVERSEAS_VERSION   //海外版才有其他国家的语音

    //设置语音为英文
    Megaphone_TTS_SetTone(0x11);

    //播放喊话器启动中
    Megaphone_TTS_Play(strlen("Speaker Direct Mode Ready"),"Speaker Direct Mode Ready", 0);

#endif

    }
}

static int Main_WorkMode()
{
    pthread_t work_mode_task;
	pthread_attr_t task_attribute; //线程属性
	pthread_attr_init(&task_attribute);  //初始化线程属性
	pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED);      //设置线程属性
	int timer = pthread_create(&work_mode_task,&task_attribute,Main_WorkModeTask,NULL);		//线程
    if(timer != 0)
    {
        printf("创建计时线程失败!\n");
    }
}

static void *Main_WorkModeTask(void *arg)
{
    //计时flag
	int i=0;
	printf("进入串口等待函数\n");
	for (i = 0; i < 60; i++)
    {
        delayMs(1000);//延迟一秒钟
        printf("计数%d\n",i);

        if (WorkMode == ON)
        {
            printf("串口连接成功,进入串口模式\n");
            return NULL;
        }
        
    }
    
    if(i==60 && WorkMode == OFF)
    {
        printf("串口连接超时,回到连接psdk");
        exit(0);
    }	
}