📄 pt6311.c
字号:
/*
*
* Copyright (c) hivision, Inc. 2006. All rights reserved.
*
*/
/**
* @file public.c
* @Sample FIP user level program to display given string,
* monitoring eject button and eject disc if needed.
*
* @author ZhangHongBo
*/
#include "public.h"
#include "pt6311.h"
static int vfd_playstatus = 0;
static int vfd_linkstatus = 0;
static int vfd_pcusbstatus = 1;
static int vfd_repeatstatus = 0;
static int vfd_mainstatus = 0;
static int tv_mode = 2;
static int vfd_ON_OFF=0;
// address : 0x00 0x01
//////////////////////////////////////////////////////////////////////
static const int vfd_hour[10] [2] = {
{DIGIT_L(0,1,0,1,0,1,0,0), DIGIT_H(0,1,0,1,0,1,1,0)}, //0
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,0,1,0)}, // 1
{DIGIT_L(0,1,0,1,0,0,0,1), DIGIT_H(0,0,0,1,0,1,1,0)}, // 2
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,0,0,1,0,1,1,0)}, // 3
{DIGIT_L(0,0,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,0,1,0)}, // 4
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,0,0,1,1,0)}, // 5
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,0,0,1,1,0)}, // 6
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,1,1,0)}, // 7
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,1,0,1,1,0)}, // 8
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,1,1,0)} // 9
};
static const int vfd_min_high[7][2] = {
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,1,0)}, //0
{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,1,0,0,0,1,0)}, // 1
{DIGIT_L(1,0,1,0,0,0,1,0), DIGIT_H(0,0,1,0,1,0,1,0)}, // 2
{DIGIT_L(1,0,0,0,1,0,1,0), DIGIT_H(0,0,1,0,1,0,1,0)}, // 3
{DIGIT_L(0,0,0,0,1,0,1,0), DIGIT_H(1,0,1,0,0,0,1,0)}, // 4
{DIGIT_L(1,0,0,0,1,0,1,0), DIGIT_H(1,0,0,0,1,0,1,0)}, // 5
{DIGIT_L(1,0,1,0,1,0,1,0), DIGIT_H(1,0,0,0,1,0,1,0)} // 6
};
// address : 0x03 0x04
//////////////////////////////////////////////////////////////////////
static const int vfd_min_low[10] [2] = {
{DIGIT_L(0,1,0,1,0,1,0,0), DIGIT_H(0,1,0,1,0,1,1,0)}, //0
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,0,1,0)}, // 1
{DIGIT_L(0,1,0,1,0,0,0,1), DIGIT_H(0,0,0,1,0,1,1,0)}, // 2
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,0,0,1,0,1,1,0)}, // 3
{DIGIT_L(0,0,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,0,1,0)}, // 4
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,0,0,1,1,0)}, // 5
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,0,0,1,1,0)}, // 6
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,1,1,0)}, // 7
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,1,0,1,1,0)}, // 8
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,1,1,0)} // 9
};
static const int vfd_sec_high[7][2] = {
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,1,0)}, //0
{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,1,0,0,0,1,0)}, // 1
{DIGIT_L(1,0,1,0,0,0,1,0), DIGIT_H(0,0,1,0,1,0,1,0)}, // 2
{DIGIT_L(1,0,0,0,1,0,1,0), DIGIT_H(0,0,1,0,1,0,1,0)}, // 3
{DIGIT_L(0,0,0,0,1,0,1,0), DIGIT_H(1,0,1,0,0,0,1,0)}, // 4
{DIGIT_L(1,0,0,0,1,0,1,0), DIGIT_H(1,0,0,0,1,0,1,0)}, // 5
{DIGIT_L(1,0,1,0,1,0,1,0), DIGIT_H(1,0,0,0,1,0,1,0)} // 6
};
// address : 0x06 0x07
//////////////////////////////////////////////////////////////////////
static const int vfd_sec_low[10] [2] = {
{DIGIT_L(0,1,0,1,0,1,0,0), DIGIT_H(0,1,0,1,0,1,0,0)}, //0
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,0,0,0)}, // 1
{DIGIT_L(0,1,0,1,0,0,0,1), DIGIT_H(0,0,0,1,0,1,0,0)}, // 2
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,0,0,1,0,1,0,0)}, // 3
{DIGIT_L(0,0,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,0,0,0)}, // 4
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,0,0,1,0,0)}, // 5
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,0,0,1,0,0)}, // 6
{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,1,0,0)}, // 7
{DIGIT_L(0,1,0,1,0,1,0,1), DIGIT_H(0,1,0,1,0,1,0,0)}, // 8
{DIGIT_L(0,1,0,0,0,1,0,1), DIGIT_H(0,1,0,1,0,1,0,0)} // 9
};
static const int vfd_tvip[7][2] = {
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,0,1)}, //0 i
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,1,0)}, // 1 p
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)}, // 2 none
{DIGIT_L(1,0,1,0,1,0,1,0), DIGIT_H(1,0,0,0,1,0,0,1)}, //6 i
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,0,0)}, // 0
{DIGIT_L(0,0,0,0,1,0,1,0), DIGIT_H(1,0,1,0,0,0,0,0)}, // 4
{DIGIT_L(1,0,1,0,1,0,1,0), DIGIT_H(1,0,1,0,1,0,0,0)} // 8
};
// address : 0x09 0x0a
//////////////////////////////////////////////////////////////////////
static const int vfd_tvmode[3][2] = {
{DIGIT_L(1,0,1,0,1,1,1,1), DIGIT_H(1,1,1,1,1,0,0,0)}, //480
{DIGIT_L(1,0,1,0,0,1,1,0), DIGIT_H(0,0,1,1,1,1,0,0)}, //720
{DIGIT_L(1,1,1,1,1,1,1,0), DIGIT_H(1,1,1,1,1,1,1,1)} //1080
};
//////////////////////////////////////////////////////////////////
static const int vfd_vgaip[4][2]={
{DIGIT_L(1,0,1,0,1,0,0,0), DIGIT_H(1,0,1,0,1,0,0,0)}, // 0
{DIGIT_L(0,0,0,0,1,0,1,0),DIGIT_H(1,0,1,0,0,0,0,0)}, // 4
{DIGIT_L(1,0,1,0,1,0,1,0),DIGIT_H(1,0,1,0,1,0,0,0)}, // 8
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)} // none
};
static const int vfd_vgamode[6][2]={
{DIGIT_L(1,0,1,0,1,1,1,1),DIGIT_H(1,1,1,1,1,0,0,0)}, //480
{DIGIT_L(1,1,1,1,1,1,0,1),DIGIT_H(1,1,1,0,1,1,0,0)}, //600
{DIGIT_L(1,0,1,0,1,1,1,0),DIGIT_H(1,0,0,1,1,1,0,0)}, //768
{DIGIT_L(1,1,1,1,0,1,1,0),DIGIT_H(0,1,1,1,1,1,0,1)}, //1024
{DIGIT_L(1,1,1,1,1,0,0,1),DIGIT_H(1,0,1,1,1,1,0,1)}, //1200
{DIGIT_L(0,1,0,0,1,1,0,1),DIGIT_H(0,1,1,0,1,1,0,0)} //576
};
////////////////////////////////////////////////////////////////////
// address : 0x0c 0x0d
//////////////////////////////////////////////////////////////////////
static const int vfd_hd_green[4][2] = {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,1,0,1,0,1,0)}, //none
{DIGIT_L(0,0,0,0,0,0,0,1), DIGIT_H(1,0,1,0,1,0,1,0)}, //photo
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,1,0,1,0,1,1)}, //movie
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,1,1,0,1,0,0,0)} //music
};
static const int vfd_hd_blue[4][2] = {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,1,0,1,1,0)},
{DIGIT_L(0,0,0,0,0,0,0,1), DIGIT_H(1,0,0,1,0,1,1,0)}, //photo
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,1,0,1,1,1)}, //movie
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,1,0,1,0,1,0,0)} //music
};
static const int vfd_hd_s[4][2] = {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,1,0,0,0,0,0)}, //S1
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,0,0,1,0,0)}, //S2
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,0,1,0,0,0)}, //S3
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,1,0,0,0,0)} //S4
};
static const int vfd_mainmode[4][2] = {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,0)},
{DIGIT_L(0,0,0,0,0,0,0,1), DIGIT_H(0,0,0,0,0,0,1,0)}, //photo
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,1)}, //movie
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,1,0,0,0,0,1,0)} //music
};
// address : 0x0f 0x10
//////////////////////////////////////////////////////////////////////
static const int vfd_pcusb[2][2]= {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,1)}, //pc usb
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)} //&0xf7
};
static const int vfd_playmode[4][2] = {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,1,1,0)}, //play
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,1,0,1,0)}, //pause
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,1,0,0,1,0)}, //stop
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,0)} //nomode
};
static const int vfd_repeat[2][2]= {
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,1,0,0,0,1,0)}, //pc usb
{DIGIT_L(1,1,1,1,1,1,1,1), DIGIT_H(1,1,0,1,1,1,1,1)} //&0xf7
};
static const int vfd_link[4][2] = {
{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(0,0,0,0,0,0,1,0)}, //hd
{DIGIT_L(0,0,0,0,0,0,0,1), DIGIT_H(0,0,0,0,0,0,1,0)}, //usb1
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,1,0,0,0,0,1,0)}, //usb2
{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,0,0,0,0,0,1,0)} //network
};
//////////////////////////////////////////////////////////////////////
void set_vfd_playstatus(int status)
{
vfd_playstatus = status;
}
void set_vfd_linkstatus(int status)
{
vfd_linkstatus = status;
}
void set_vfd_pcusbstatus(int status)
{
vfd_pcusbstatus = status;
}
void set_vfd_repeatstatus(int status)
{
vfd_repeatstatus = status;
}
void set_vfd_mainstatus(int status)
{
vfd_mainstatus = status;
}
void vfd_delay_ms(unsigned long time)
{
unsigned long i;
for(i=0;i<time*10;i++);
}
void PD6311_WRITE(int reg_data)
{
int i;
for ( i = 0; i <8; i++ ) {
if((reg_data >> i) & 0x01)
em86xx_gpio_write(PD6311_DIN,1);
else
em86xx_gpio_write(PD6311_DIN,0);
em86xx_gpio_write(PD6311_CLK,1);
vfd_delay_ms(100);
em86xx_gpio_write(PD6311_CLK,0);
vfd_delay_ms(100);
}
}
void VFD_DisplayMode(int mode)
{
em86xx_gpio_setdirection(PD6311_STB,1);
em86xx_gpio_setdirection(PD6311_DIN,1);
em86xx_gpio_setdirection(PD6311_CLK,1);
delay_ms(200);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(0x44);
em86xx_gpio_write(PD6311_STB,1);
/////////////////////////////////////////////////////////
switch(mode)
{
case VFD_DISPLAY_PC:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE(vfd_pcusb[0][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[vfd_repeatstatus][1]|vfd_link[vfd_linkstatus][1]);
else
PD6311_WRITE(vfd_pcusb[0][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[vfd_linkstatus][1]);
em86xx_gpio_write(PD6311_STB,1);
vfd_pcusbstatus= 0;
break;
case VFD_DISPLAY_PCOUT:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE((vfd_pcusb[1][1]&vfd_playmode[vfd_playstatus][1])|vfd_repeat[vfd_repeatstatus][1]|vfd_link[vfd_linkstatus][1]);
else
PD6311_WRITE((vfd_pcusb[1][1]&vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[vfd_linkstatus][1]);
em86xx_gpio_write(PD6311_STB,1);
vfd_pcusbstatus= 1;
break;
case VFD_DISPLAY_HD:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[vfd_repeatstatus][1]|vfd_link[0][1]);
else
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[0][1]);
em86xx_gpio_write(PD6311_STB,1);
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_L|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_link[0][0]);
em86xx_gpio_write(PD6311_STB,1);
vfd_linkstatus = 0;
break;
case VFD_DISPLAY_USB1:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[vfd_repeatstatus][1]|vfd_link[1][1]);
else
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[1][1]);
em86xx_gpio_write(PD6311_STB,1);
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_L|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_link[1][0]);
em86xx_gpio_write(PD6311_STB,1);
vfd_linkstatus = 1;
break;
case VFD_DISPLAY_USB2:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[vfd_repeatstatus][1]|vfd_link[2][1]);
else
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[2][1]);
em86xx_gpio_write(PD6311_STB,1);
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_L|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_link[2][0]);
em86xx_gpio_write(PD6311_STB,1);
vfd_linkstatus = 2;
break;
case VFD_DISPLAY_NETWORK:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
if(vfd_repeatstatus == 0)
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[vfd_repeatstatus][1]|vfd_link[3][1]);
else
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[3][1]);
em86xx_gpio_write(PD6311_STB,1);
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_L|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_link[3][0]);
em86xx_gpio_write(PD6311_STB,1);
vfd_linkstatus = 3;
break;
case VFD_DISPLAY_REPEAT:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|vfd_playmode[vfd_playstatus][1]|vfd_repeat[0][1]|vfd_link[vfd_linkstatus][1]);
em86xx_gpio_write(PD6311_STB,1);
vfd_repeatstatus = 0;
break;
case VFD_DISPLAY_REPEATOFF:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
delay_ms(100);
PD6311_WRITE(vfd_pcusb[vfd_pcusbstatus][1]|(vfd_playmode[vfd_playstatus][1]&vfd_repeat[1][1])|vfd_link[vfd_linkstatus][1]);
em86xx_gpio_write(PD6311_STB,1);
vfd_repeatstatus = 1;
break;
case VFD_DISPLAY_PLAY:
delay_ms(100);
em86xx_gpio_write(PD6311_STB,0);
PD6311_WRITE(DIGITS6_H|0xc0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -