package com.zehong.system.service.impl;
import com.listenvision.led;
import com.zehong.system.domain.vo.Bx06Vo;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.Console;

@Service
public class LedserviceImpl {
    //@PostConstruct
    public void qidong()throws Exception{

        led.InitLedType(0);
    }
    public static void SendProgram(Bx06Vo bx06Vo) {

        String strIp = "192.168.11.128";
        int ledWidth = bx06Vo.getWidth();//屏的宽度
        int ledHeight = bx06Vo.getHeight();//屏的高度
        int colorType = bx06Vo.getColorType();//屏的颜色 1.单色  2.双基色  3.三基色   注:C卡全彩参数为3      X系列卡参数固定为 4
        int grayLevel = bx06Vo.getGrayLevel();//灰度等级  赋值  1-5对应的灰度等级分别为 无,4,8,16,32    除C卡外,其它卡传0
        System.out.println("w:"+bx06Vo.getWidth()+"--h:"+bx06Vo.getHeight()+"--c:"+bx06Vo.getColorType()+"--g:"+bx06Vo.getGrayLevel());

        //初始化LED类型,程序启动,初始化调用一次即可
        //led.InitLedType(0);//卡型号    0 T/A/U/XC/W     1 E     2 X     3 C

        //Example 1    Basic screen parameter settings(设置基本屏参)
        //onSetBasicInfo(strIp,ledWidth,ledHeight,colorType,grayLevel);

        //Example 2    Switch screen(开关屏)
        //onPowerOnOff(strIp);

        //Example 3    Calibration time(校时)
        //onAdjustTime(strIp);

        //Example 4    Single line text program(一个节目下只有一个连接左移的单行文本区)
        //onSingleLineText(strIp,ledWidth,ledHeight,colorType,grayLevel,bx06Vo.getContent());
        onMultiLineText(strIp,ledWidth,ledHeight,colorType,grayLevel,bx06Vo.getContents());

        //Example 5    Multi-line text program(一个节目下只有一个多行文本区)
        //onMultiLineText(strIp,ledWidth,ledHeight,colorType,grayLevel);

        //Example 6    Picture program(一个节目下只有一个图片区)
        //onPicture(strIp,ledWidth,ledHeight,colorType,grayLevel);

        //Example 7    A single-line text area and a picture area program(一个节目下有一个连续上移的单行文本区和一个图片区)
        //onTwoAreas(strIp,ledWidth,ledHeight,colorType,grayLevel);

        //Example 8    A single-line text area program and a digital clock area program(两个节目下各有一个单行文本区和一个数字时钟区)
        //onTwoPrograms(strIp,ledWidth,ledHeight,colorType,grayLevel);


        /***************广域网开发简单示例 C2M C4M型号才支持*************/
        //打开服务端口
        /*ledCallBack cb = new ledCallBack()
        {
            //上下线只会通知一次
            public void LedServerCallback(int Msg, int wParam, String networkIdStr)
            {
                switch(Msg){
                    case 1://控制卡连上
                        System.out.println("connected ID:"+networkIdStr);
						onSingleLineText(networkIdStr,ledWidth,ledHeight,colorType,grayLevel);
                        break;
                    case 2://控制卡断开
                        System.out.println("disconnect ID:"+networkIdStr);
                        break;
                    default :
                        break;
                }
            }
        };

        led.LedInitServer(10012);
        led.RegisterLedServerCallback(cb);

        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

		//断开服务
        led.LedShudownServer();*/
        /*******************************************************/
    }

    //Basic screen parameter settings(设置基本屏参)
    public static void onSetBasicInfo(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel)
    {
        int errCode = led.SetBasicInfo(strIp,colorType,grayLevel,ledWidth,ledHeight);
        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("设置基本屏参成功");
    }

    //Switch screen(开关屏)
    public static void onPowerOnOff(String strIp)
    {
        int errCode = led.PowerOnOff(strIp,0);
        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("开关屏成功");
    }

    //Calibration time(校时)
    public static void onAdjustTime(String strIp)
    {
        int errCode = led.AdjustTime(strIp);
        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("校时成功");
    }

    //Single line text program(一个节目下只有一个连接左移的单行文本区)
    public static void onSingleLineText(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel,String content)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);
        led.AddProgram(hProgram, 0, 0, 1);
        led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth, ledHeight, 1);
        led.AddSinglelineTextToImageTextArea(hProgram,0,1,0,content,"宋体",20,0xff,0,0,0,6,10,0);
        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);

        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送节目成功");
    }

    //Multi-line text program(一个节目下只有一个多行文本区)
    public static void onMultiLineText(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel,String[] contents)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);
        led.AddProgram(hProgram, 0, 0, 1);
        //led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth/2, ledHeight/2, 1);
        //led.AddImageTextArea(hProgram, 0, 2, 0, ledHeight/2, ledWidth/2, ledHeight/2, 1);
        //You can add multiple sub-items to the graphic area(可以添加多个子项到图文区,如下添加可以选一个或多个添加)
        for(int i=0;i<contents.length;i++){
            led.AddImageTextArea(hProgram, 0, i+1, 0, ledHeight/6*i, ledWidth, ledHeight/6, 1);
            led.AddMultiLineTextToImageTextArea(hProgram,0,i+1,0,contents[i],"宋体",9,0xff,1,0,0,0,4,10,0,0);
        }
        //led.AddMultiLineTextToImageTextArea(hProgram,0,1,0,"第一行","宋体",9,0xff,1,0,0,0,4,10,0,0);
        //led.AddMultiLineTextToImageTextArea(hProgram,0,2,0,"第二行\\n第三行","宋体",9,0xff,1,0,0,0,4,10,0,0);
        //led.AddMultiLineTextToImageTextArea(hProgram,0,1,0,"上海灵信视觉","宋体",12,0xff,1,0,0,0,4,10,0,0);
        //led.AddMultiLineTextToImageTextArea(hProgram,0,1,0,"上海灵信视觉2","simsun.ttc",14,0xff,0,0,0,0,10,5,0,0);
        //led.AddMultiLineTextToImageTextArea(hProgram,0,1,0,"上海灵信视觉3","simsun.ttc",14,0xff,0,0,0,0,10,5,0,0);
        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);
        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送文本节目成功");
    }

    //Picture program(一个节目下只有一个图片区)
    public static void onPicture(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);
        led.AddProgram(hProgram, 0, 0, 1);
        led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth, ledHeight, 1);
        //You can add multiple sub-items to the graphic area(可以添加多个子项到图文区,如下添加可以选一个或多个添加)
        led.AddFileToImageTextArea(hProgram, 0, 1, "test.bmp", 1, 4, 2);
        //led.AddFileToImageTextArea(hProgram, 0, 1, "test.jpg", 1, 4, 2);
        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);
        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送节目成功");
    }

    //A single-line text area and a picture area program(一个节目下有一个连续上移的单行文本区和一个图片区)
    public static void onTwoAreas(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);
        led.AddProgram(hProgram, 0, 0, 1);
        led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth, ledHeight/2, 1);
        led.AddSinglelineTextToImageTextArea(hProgram,0,1,0,"Listen","宋体",12,0xff,0,0,0,6,20,0);
        led.AddImageTextArea(hProgram, 0, 2, 0, ledHeight/2, ledWidth, ledHeight/2, 1);
        led.AddFileToImageTextArea(hProgram, 0, 2, "test.bmp", 1, 4, 2);
        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);

        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送节目成功");
    }

    //A single-line text area program and a digital clock area program(两个节目下各有一个单行文本区和一个数字时钟区)
    public static void onTwoPrograms(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);

        //添加单行文本节目
        led.AddProgram(hProgram, 0, 0, 1);
        led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth, ledHeight, 1);
        led.AddSinglelineTextToImageTextArea(hProgram,0,1,0,"上海灵信视觉","宋体",12,0xff,0,0,0,6,8,0);
        //添加数字时钟节目
        led.AddProgram(hProgram, 1, 0, 1);
        led.AddDigitalClockArea(hProgram,1,1,0,0,ledWidth,ledHeight,"宋体",8,0xff,0,0,0,0,0,0,0,1,1,0,0,0xff,0,0xff,0,0xff,1);

        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);

        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送节目成功");
    }
    public static void onMuchPrograms(String strIp,int ledWidth,int ledHeight,int colorType,int grayLevel,String[] contents)
    {
        long hProgram = led.CreateProgram(ledWidth, ledHeight, colorType,grayLevel,0);

        //添加单行文本节目
        led.AddProgram(hProgram, 0, 0, 1);
        led.AddImageTextArea(hProgram, 0, 1, 0, 0, ledWidth, ledHeight, 1);
        led.AddSinglelineTextToImageTextArea(hProgram,0,1,0,"上海灵信视觉","宋体",12,0xff,0,0,0,6,8,0);
        //添加数字时钟节目
        led.AddProgram(hProgram, 1, 0, 1);
        led.AddDigitalClockArea(hProgram,1,1,0,0,ledWidth,ledHeight,"宋体",9,0xff,0,0,0,1,0,1,1,1,1,1,0,0xff,0,0xff,3,0xff,0);

        int errCode = led.NetWorkSend(strIp, hProgram);
        led.DeleteProgram(hProgram);

        if(errCode != 0)
        {
            System.out.println("失败:" + errCode);
        }
        else
            System.out.println("发送节目成功");
    }
}