?? pwron_ir.c
字號:
#include <platform.h>
//gamble added for lg front panel
#define FALSE 0
#define TRUE 1
#define M_REQ (0x00000008)/* GPIO3 */
#define SPI_SCK (0x00000010)/* GPIO4 */
#define SPI_TXD (0x00000020)/* GPIO5 */
#define S_REQ (0x00010000)/* GPIO16 */
#define SPI_RXD (0x00020000)/* GPIO17 */
#define GPIODAT 0xff101000
#define GPIORW 0xff101004
#define inw(a) (*((volatile unsigned long *)(a)))/* Input register value */
#define outw(a,v) (*((volatile unsigned long *)(a))=(v))/* Output register value */
#define readGPIODAT() (inw(GPIODAT))
#define readGPIORW() (inw(GPIORW))
#define writeGPIODAT(gpiodata) (outw(GPIODAT,gpiodata))
#define writeGPIORW(gpiorw) (outw(GPIORW,gpiorw))
#define SET_GPIO_R(dwPorts) (writeGPIORW(readGPIORW() & (~(dwPorts))))
#define SET_GPIO_W(dwPorts) (writeGPIORW(readGPIORW() | (dwPorts) ))
#if(USE_244_ENABLE==1)
#define SET_GPIO_HI(dwPorts) (writeGPIODAT(readGPIODAT() | (dwPorts)))
#define SET_GPIO_LOW(dwPorts) (writeGPIODAT(readGPIODAT() & (~(dwPorts))))
#else
#define SET_GPIO_HI(dwPorts) SET_GPIO_R(dwPorts)
#define SET_GPIO_LOW(dwPorts) {SET_GPIO_W(dwPorts);writeGPIODAT(readGPIODAT() & (~(dwPorts)));}
#endif
#define GET_GPIO_DATA(dwPorts) (readGPIODAT() & (dwPorts))
#define COUNTS_PER_MICROSECOND1 (25)
unsigned char frontTransmitData[28];
unsigned char frontReceiveDdata[16];
unsigned long FPMICOMPowerModeInitial();
void LGFPGPIOInitial(void);
//end for lg front panel
void DelayuSec(unsigned long w)
{
unsigned long dw;
unsigned long dwCountSize;
dwCountSize=w*COUNTS_PER_MICROSECOND1;
for(dw=0;dw<dwCountSize;dw++)
;
}
unsigned char SPI_SendANDReceive(unsigned char SendData)
{
unsigned char b;
unsigned char RecData=0;
for(b=0;b<8;b++)
{
RecData>>=1;
//SET_GPIO_W(SPI_SCK);
SET_GPIO_LOW(SPI_SCK);//SET_GPIO_LOW(SPI_SCK);/* pull SPI_SCK low */
if(SendData&0x01)
SET_GPIO_HI(SPI_TXD);/* pull SPI_TXD high */
else
{
//SET_GPIO_W(SPI_TXD);
SET_GPIO_LOW(SPI_TXD);//SET_GPIO_LOW(SPI_TXD);/* pull SPI_TXD low */
}
DelayuSec(2);
SET_GPIO_HI(SPI_SCK);/*pull SPI_SCK high*/
if(GET_GPIO_DATA(SPI_RXD))
RecData|=0x80;/* SPI_RXD=1 */
else
RecData&=0x7f;/* SPI_RXD=0 */
DelayuSec(2);
SendData>>=1;
}
return RecData;
}
unsigned long front_interface_trans(unsigned char byteCount)
{
unsigned char i,verify_data,checkSum = 0, error = 0;
DelayuSec(60);
#if(USE_244_ENABLE==1)
SET_GPIO_W(SPI_TXD);
#endif
//_M_REQ_LOW();
//SET_GPIO_W(M_REQ);
SET_GPIO_LOW(M_REQ);
// wait 40uSec
DelayuSec(60);
// send command byte
frontReceiveDdata[0] =SPI_SendANDReceive(frontTransmitData[0]);
checkSum = checkSum ^ frontTransmitData[0];
verify_data = frontTransmitData[0];
// wait 40uSec
DelayuSec(60);
// send data byte
for(i=1; i < byteCount-1; ++i)
{
// send data byte
frontReceiveDdata[i] = SPI_SendANDReceive(frontTransmitData[i]);
checkSum = checkSum ^ frontTransmitData[i];
if(frontReceiveDdata[i] != verify_data)
{
error = 1;
}
verify_data = frontTransmitData[i];
// wait 40uSec
DelayuSec(60);
}
//DelayuSec(10);
// transmit checkSum
frontReceiveDdata[i] = SPI_SendANDReceive(frontTransmitData[i] = checkSum);
if(frontReceiveDdata[i] != verify_data)
{
error = 1;
}
// wait 20uSec
DelayuSec(60);
//_M_REQ_HIGH();
// SET_GPIO_R(M_REQ);
SET_GPIO_HI(M_REQ);
if(error)
return FALSE;
return TRUE;
}
unsigned long front_interface_receive(unsigned char byteCount)
{
unsigned char i;
unsigned char checkSum;
DelayuSec(60);
#if(USE_244_ENABLE==1)
SET_GPIO_W(SPI_TXD);
#endif
//_M_REQ_LOW();
//SET_GPIO_W(M_REQ);
SET_GPIO_LOW(M_REQ);
// wait 40uSec
DelayuSec(60);
// send command byte
frontReceiveDdata[0] = SPI_SendANDReceive(frontTransmitData[0]);
checkSum = frontTransmitData[0];
// wait 40uSec
DelayuSec(60);
// send data byte
for(i=1; i < byteCount-1; ++i)
{
// send data byte
frontReceiveDdata[i] = SPI_SendANDReceive(frontTransmitData[i]);
checkSum = checkSum ^ frontReceiveDdata[i];
// wait 40uSec
DelayuSec(60);
}
//DelayuSec(20);
frontReceiveDdata[i] = SPI_SendANDReceive(frontTransmitData[i]);
checkSum = checkSum ^ frontReceiveDdata[i];
DelayuSec(60);
//SET_GPIO_R(M_REQ);
SET_GPIO_HI(M_REQ);
if(checkSum)
return FALSE;
return TRUE;
}
unsigned long FPMICOMPowerModeInitial()
{
static unsigned char frontIF_Schedule = 0; // for test
SET_GPIO_R(S_REQ);
if(!GET_GPIO_DATA(S_REQ)) //
{
switch(frontIF_Schedule)
{
case 0:
// Front micom status read (check if Wake-up setup is completed)
// flag_frontReadComplete = 0; // status clear : Front micom initial data read(wake-up key, system switch)
frontTransmitData[0] = 0x48; // for read wake-up status (0x46 : read RCU data, shuttle, wakeup status)
if(!front_interface_receive(5))
break;
if (frontReceiveDdata[3] & 0x80)
{
frontIF_Schedule = 10; // setup completed? then next schedule : power on control
}
else
{
frontIF_Schedule++; // setup not completed? then next schedule : Wake-up data setup
DelayuSec(1000*100);
}
//ShowMessage("enter case 0!!\r\n");
//while(!GET_GPIO_DATA(S_REQ));
//DelayuSec(100);
break;
case 1: // Wake up data setup
#if (_IR==KENWOOD_IR)
frontTransmitData[0] = 0xc9;//0xca;//0xc9; // 9 byte communication
frontTransmitData[1] = (REMOCON_TYPE)*16 + 3;//0x03; //0x00 + 3; // 0x00:Toshiba Format, 3:front wakeup key 3EA
frontTransmitData[2] = 0xff;//tbl_bit_swap[0x4b];//0xbe;//tbl_bit_swap[0x4b]; // donwload mode key 0 : menu
frontTransmitData[3] = 0xff;//tbl_bit_swap[0x4b];//0x07;//tbl_bit_swap[0x4b]; // donwload mode key 1 : menu
frontTransmitData[4] = 0x6d;//tbl_bit_swap[IR_Custom_Code1];//0xb4;//tbl_bit_swap[SHIR_Custom_Code1]; // remocon wake-up custom1
frontTransmitData[5] = 0x30;//tbl_bit_swap[IR_Custom_Code2];//0xb4;//tbl_bit_swap[SHIR_Custom_Code2]; // remocon wake-up custom2
frontTransmitData[6] = 0x89;//0x0c;//tbl_bit_swap[0x30];//0x0c;//tbl_bit_swap[0x30]; // remocon wake-up key 0 : power
frontTransmitData[7] = 0xc8;//0x8c;//tbl_bit_swap[0x31];//0x8c;//tbl_bit_swap[0x31]; // remocon wake-up key 1 : play
frontTransmitData[8] = 0x08;//0x6c;//tbl_bit_swap[0x36];//0x6c;//tbl_bit_swap[0x36]; // remocon wake-up key 2 ; open
#else
frontTransmitData[0] = 0xc9;//0xca;//0xc9; // 9 byte communication
frontTransmitData[1] = (REMOCON_TYPE)*16 + 3;//0x03; //0x00 + 3; // 0x00:Toshiba Format, 3:front wakeup key 3EA
frontTransmitData[2] = 0xff;//tbl_bit_swap[0x4b];//0xbe;//tbl_bit_swap[0x4b]; // donwload mode key 0 : menu
frontTransmitData[3] = 0xff;//tbl_bit_swap[0x4b];//0x07;//tbl_bit_swap[0x4b]; // donwload mode key 1 : menu
frontTransmitData[4] = 0xb4;//tbl_bit_swap[IR_Custom_Code1];//0xb4;//tbl_bit_swap[SHIR_Custom_Code1]; // remocon wake-up custom1
frontTransmitData[5] = 0xb4;//tbl_bit_swap[IR_Custom_Code2];//0xb4;//tbl_bit_swap[SHIR_Custom_Code2]; // remocon wake-up custom2
frontTransmitData[6] = 0x0c;//tbl_bit_swap[0x30];//0x0c;//tbl_bit_swap[0x30]; // remocon wake-up key 0 : power
frontTransmitData[7] = 0x8c;//tbl_bit_swap[0x31];//0x8c;//tbl_bit_swap[0x31]; // remocon wake-up key 1 : play
frontTransmitData[8] = 0x6c;//tbl_bit_swap[0x36];//0x6c;//tbl_bit_swap[0x36]; // remocon wake-up key 2 ; open
#endif
//frontTransmitData[9] = 0x01;
if(!front_interface_trans(10))
break;
frontIF_Schedule++; // next schedule is Wake-up setup check
//ShowMessage("enter case 1!!\r\n");
while(!GET_GPIO_DATA(S_REQ));
//DelayuSec(100);
break;
case 2: // Front micom status read (check if Wake-up setup is completed)
frontTransmitData[0] = 0x48; // for read wake-up status (0x46 : read RCU data, shuttle, wakeup status)
if(!front_interface_receive(5))
break;
if (frontReceiveDdata[3] & 0x80)
{
frontIF_Schedule++; // setup completed? then next schedule is : power off request
}
else
{
frontIF_Schedule -= 1; // setup not completed? then next schedule : Wake-up data setup
}
//ShowMessage("enter case 2!!\r\n");
//while(!GET_GPIO_DATA(S_REQ));
break;
case 3: // SKIP
#if(_FP==901)
frontTransmitData[0] = 0xd0; //command d0 :
frontTransmitData[1] = 0x00;//tbl_bit_swap[0x0e]; //G0
frontTransmitData[2] = 0x00;//tbl_bit_swap[0xe0]; //
frontTransmitData[3] = 0x00; //
frontTransmitData[4] = 0x00; //G1
frontTransmitData[5] = 0x00; //
frontTransmitData[6] = 0x00; //
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -