⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test3dlg.cpp

📁 在 RMI AU1200 上測試成功的 Canbus 程式 !! 非常難得 , 也不好弄
💻 CPP
字号:
// test3Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "test3.h"
#include "test3Dlg.h"
#include "audio.h" // Jason Add for audio
#include  <stdio.h>
#include "smbus.h"
enum {
    IOCTL_SMBUS_READDATA = 0x80002000,  // some arbirary base
    IOCTL_SMBUS_WRITEDATA
};


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#define SYS_BASE					0xB1900000
#define SYS_GPIO2					0xB170000C
#define SYS_GPIO_FUN				(SYS_BASE + 0x2C)
#define SYS_TRIOUTCLR				(SYS_BASE + 0x100)
#define SYS_OUTPUTRD				(SYS_BASE + 0x108)
#define SYS_OUTPUTCLR				(SYS_BASE + 0x10C)
#define SYS_PINSTATERD				(SYS_BASE + 0x110)

#define MAX_TIME 2000

#define MENU_GPIO 10

/////////////////////////////////////////////////////////////////////////////
// CTest3Dlg dialog

CTest3Dlg::CTest3Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTest3Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTest3Dlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTest3Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTest3Dlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTest3Dlg, CDialog)
	//{{AFX_MSG_MAP(CTest3Dlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTest3Dlg message handlers

BOOL CTest3Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();
    UINT32 UIntMEMACC_Value;
	FILE *fp;
	int i;

	int j;
	char fileName[256];
    char exeName[256];
    LPTSTR lpszCeAppMgr;
    LPTSTR lpszBuf = NULL;


	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

    j=0;
 UIntMEMACC_Value =*(volatile unsigned long * const)SYS_PINSTATERD;
 *(volatile unsigned long * const)SYS_PINSTATERD =  UIntMEMACC_Value & 0xffffefff;
 
 *(volatile unsigned long * )0xB500001C = 0xffff;

//	Speaker_Vol=0; // Init Audio
//	AudioInit(); // Jason Add 
CanI2C_Write(0xC4, 0x80);
i=0;
while (1)
{

//	CanI2C_Write(0x10, 0xaa);
	if ( i )
	{
		i=0;
        CanI2C_Write(0xC3, 0x1);
    }
    else
	{
		i=1;
        CanI2C_Write(0xC3, 0x4);
    }

	RETAILMSG(1, (TEXT("Change Cam.... %d\r\n"), i) );
	Sleep(5000);
}
	this->SendMessage(WM_CLOSE);

	return TRUE;  // return TRUE  unless you set the focus to a control
}


/////////////////////////////////// Jason Yu add Here 
static const unsigned char VolTable[]=
{
	0x7F, // mute// 0
	0x5F, // -79dB
	0x5E, // -78dB
	0x5D, // -77dB
	0x5C, // -76dB
	0x5B, // -75dB
	0x5A, // -74dB
	0x59, // -73dB
	0x58, // -72dB
	0x57, // -71dB
	0x56, // -70dB// 10
	0x55, // -69dB
	0x54, // -68dB
	0x53, // -67dB
	0x52, // -66dB
	0x51, // -65dB
	0x50, // -64dB
	0x4F, // -63dB
	0x4E, // -62dB
	0x4D, // -61dB
	0x4C, // -60dB// 20
	0x4B, // -59dB
	0x4A, // -58dB
	0x49, // -57dB
	0x48, // -56dB
	0x47, // -55dB
	0x46, // -54dB
	0x45, // -53dB
	0x44, // -52dB
	0x43, // -51dB
	0x42, // -50dB// 30
	0x41, // -49dB
	0x40, // -48dB
	0x3F, // -47dB
	0x3E, // -46dB
	0x3D, // -45dB
	0x3C, // -44dB
	0x3B, // -43dB
	0x3A, // -42dB
	0x39, // -41dB
	0x38, // -40dB// 40
	0x37, // -39dB
	0x36, // -38dB
	0x35, // -37dB
	0x34, // -36dB
	0x33, // -35dB
	0x32, // -34dB
	0x31, // -33dB
	0x30, // -32dB
	0x2F, // -31dB
	0x2E, // -30dB// 50
	0x2D, // -29dB
	0x2C, // -28dB
	0x2B, // -27dB
	0x2A, // -26dB
	0x29, // -25dB
	0x28, // -24dB
	0x27, // -23dB
	0x26, // -22dB
	0x25, // -21dB
	0x24, // -20dB// 60
	0x23, // -19dB
	0x22, // -18dB
	0x21, // -17dB
	0x20, // -16dB
	0x1F, // -15dB
	0x1E, // -14dB
	0x1D, // -13dB
	0x1C, // -12dB
	0x1B, // -11dB
	0x1A, // -10dB// 70
	0x19, // -9dB
	0x18, // -8dB
	0x17, // -7dB
	0x16, // -6dB
	0x15, // -5dB
	0x14, // -4dB
	0x13, // -3dB
	0x12, // -2dB
	0x11, // -1dB
	0x00, // +0dB// 80
	0x01, // +1dB
	0x02, // +2dB
	0x03, // +3dB
	0x04, // +4dB
	0x05, // +5dB
	0x06, // +6dB
	0x07, // +7dB
	0x08, // +8dB
	0x09, // +9dB
	0x0A, // +10dB// 90
	0x0B, // +11dB
	0x0C, // +12dB
	0x0D, // +13dB
	0x0E, // +14dB
	0x0F // +15dB
};

static const unsigned char VolChangeTable[]=
{
	0,6,11,16,20,24,26,28,30,32,34,
	36,38,40,42,43,44,45,46,47,48,
	49,50,51,52,53,54,55,56,57,58,
	59,60,61,62,63,64,65,66,67,68,
	68,69,70,71,72,73,74
};

static const unsigned char SourceTable[]=
{
	1,0,2,3,6
};

static const unsigned char LoudTable[]=
{
	0x00, // +0dB
//	0x01, // +1dB
//	0x02, // +2dB
//	0x03, // +3dB
	/*0x04, // +4dB
	0x05, // +5dB*/
	0x06, // +6dB		//low
	/*0x07, // +7dB
	0x08, // +8dB
	0x09, // +9dB*/
	0x0A, // +10dB		//mid
	/*0x0B, // +11dB
	0x0C, // +12dB
	0x0D, // +13dB
	0x0E, // +14dB*/
	0x0F // +15dB		//high
};

static const unsigned char SubwTable[]=
{
	0x00, // +0dB
	0x01, // +1dB
	0x02, // +2dB
	0x03, // +3dB
	0x04, // +4dB
	0x05, // +5dB
	0x06, // +6dB
	0x07, // +7dB
	0x08, // +8dB
	0x09, // +9dB
//	0x0A, // +10dB
	0x0B, // +11dB
//	0x0C, // +12dB
	0x0D, // +13dB
//	0x0E, // +14dB
	0x0F, // +15dB

	0x7F // mute
};

static const unsigned char BasTreTable[]=
{
//0x0F, // -15dB
//0x0E, // -14dB
//0x0D, // -13dB
0x0C, // -12dB    
//0x0B, // -11dB
0x0A, // -10dB
//0x09, // -9dB
0x08, // -8dB
//0x07, // -7dB
0x06, // -6dB
//0x05, // -5dB
0x04, // -4dB
//0x03, // -3dB
0x02, // -2dB
//0x01, // -1dB
0x10, // +0dB
//0x11, // +1dB
0x12, // +2dB
//0x13, // +3dB
0x14, // +4dB
//0x15, // +5dB
0x16, // +6dB
//0x17, // +7dB
0x18, // +8dB
//0x19, // +9dB
0x1A, // +10dB
//0x1B, // +11dB
0x1C//,  +12dB
//0x1D, // +13dB
//0x1E, // +14dB
//0x1F, // +15dB
};

static const unsigned char BalFadTable[]=
{
	0x00, // +0dB
	0x13, // -3dB
	0x15, // -5dB
	0x18, // -8dB
	0x1A, // -10dB
	0x1D, // -13dB
	0x1F, // -15dB
	0x22, // -18dB
	0x24, // -20dB
	0x27, // -23dB
	0x29, // -25dB
	0x2C, // -28dB
	0x7F // mute	
};

static const unsigned char EQTable[]=
{
	// Bass, Treble
	10,10,	//Classic
	10,12, 	//Pop
	12,12,	//Rock
};


void CTest3Dlg::AudioCalcSource(int AudioFSource)
{
//	if(F_2ZONE)
//		AudioI2CBuf[7] |= 0x80;
//	else
		AudioI2CBuf[7] &= 0x7F;

	AudioI2CBuf[0]=(AudioI2CBuf[0] & 0xF8)+SourceTable[AudioFSource];
	AudioI2CBuf[7]=(AudioI2CBuf[7] & 0xF8)+SourceTable[AudioFSource];
//	if(!F_2ZONE)return;
//	AudioI2CBuf[10]=VolTable[VolChangeTable[AudioFVol]]; 
//	AudioI2CBuf[11]=VolTable[VolChangeTable[AudioFVol]]; 
//	AudioI2CBuf[12]=VolTable[VolChangeTable[AudioRVol]]; 
//	AudioI2CBuf[13]=VolTable[VolChangeTable[AudioRVol]]; 
	
}
void CTest3Dlg::AudioInit(void)
{
	//PD_AMUTE=1;//PE5--push-pull output for TDA7384 mute
	//PO_AMUTE=1;
	//Pin_AMUTE=0;

//	Pin_SACLK=1;//push pull output
//	PD_SACLK=1;
//	PO_SACLK=1;

//	PD_BEEP=1;
//	PO_BEEP=1;
//	MCCBCR=1;
	
	
	AudioI2CBuf[0]=0x02; //y00110000;
	AudioI2CBuf[1]=0xE0; //y11100000;
	AudioI2CBuf[2]=0x07; //y00000111;
	AudioI2CBuf[3]=0x18; //y00000000;
	AudioI2CBuf[4]=0x00; //y00000000;
	AudioI2CBuf[5]=0x00; //y00000000;
	AudioI2CBuf[6]=0x00; //y00000000;
	AudioI2CBuf[7]=0x02; //y00110000;
	AudioI2CBuf[8]=0x40; //y01000000;
	AudioI2CBuf[9]=0xF7; //y11110111;
	AudioI2CBuf[10]=0x18; //y00000000;
	AudioI2CBuf[11]=0x18; //y00000000;
	AudioI2CBuf[12]=0x18; //y00000000;
	AudioI2CBuf[13]=0x18; //y00000000;
	AudioI2CBuf[14]=0x80; //y10000000;
	AudioI2CBuf[15]=0x80; //y10000000;
	AudioI2CBuf[16]=0x17; //y00010111;
	AudioI2CBuf[17]=0x00; //y00000000;
	
//	AudioVol=22;
//	AudioFVol=22;
//	AudioRVol=22;
//	AudioBas=6;
//	AudioBasFre=0;
//	AudioBasQ=0;
//	AudioTre=6;
//	AudioTreFre=0;
//	AudioMid=6;
//	AudioMidFre=0;
//	AudioMidQ=0;
//	AudioIXBass=0;
//	AudioIXBass_Bk=1;
//	AudioIXBassFre=0;
//	AudioSubw=13;
//	AudioSubw_Bk=0;
//	AudioSubwFre=0;
//	AudioSubwFre_Bk=1;
//	AudioBal=12;
//	AudioFad=12;
//	TAVol=14;
//	AudioFSource=AUDIO_INPUT_RADIO;
//	AudioRSource=AUDIO_INPUT_RADIO;
//	F_2ZONE=0;
//	F_LOUD=0;
//	F_SUBW=0;
//	F_3DSOUND=0;
//	F_MUTE=0;
	
	//AudioCalc(AUDIO_ALL_VAL);
    AudioCalcSource(AUDIO_INPUT_AUX);
	AudioI2C_WriteSend(AUDIO_AREA_ALL);


//	AudioWorkMode=AUDIO_MODE_IDLE;
//	AudioEQMode=EQ_MODE_OFF;
	
}

void CTest3Dlg::AudioI2C_WriteSend(int start, int end)
{ int i;
	//TunerI2C_Write(0xff,0x0c);
	for(i=start;i<=end;i++)
		AudioI2C_Write(i,AudioI2CBuf[i]);
}
BOOL  CTest3Dlg::AudioI2C_Write(char addr, char Data)
{

	SMBUS_TRANSFER xfr; 
    HANDLE h;
	char EEPROM[53];
	int i,retVal;
    unsigned long nwr = 0;

	 h = CreateFile(L"SMB1:", 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     if (h == INVALID_HANDLE_VALUE)
	 {
        RETAILMSG(1, (L"FM: cannot open a handle to the SMBus\r\n"));
        return FALSE;
	 }

    xfr.Address = 0x44; // FM Tunner Write Add Address
    xfr.DataSize = 1;

    xfr.Register = addr;
    xfr.Data[0] = Data;
  
    if (!DeviceIoControl(h, IOCTL_SMBUS_WRITEDATA, &xfr, sizeof(SMBUS_TRANSFER), NULL, 0, (LPDWORD)&nwr, NULL)) 
      RETAILMSG(1, (TEXT("Audio: SMBUS write data cannot be initialized !\r\n")));

    CloseHandle(h);
	return TRUE;
}


BOOL  CTest3Dlg::CanI2C_Write(char addr, char Data)
{

	SMBUS_TRANSFER xfr; 
    HANDLE h;
	char EEPROM[53];
	int i,retVal;
    unsigned long nwr = 0;

	 h = CreateFile(L"SMB1:", 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     if (h == INVALID_HANDLE_VALUE)
	 {
        RETAILMSG(1, (L"CAN: cannot open a handle to the SMBus\r\n"));
        return FALSE;
	 }

    xfr.Address = 0x21; //0x21 for CIM //0x78; // FM Tunner Write Add Address
    xfr.DataSize = 1;

    xfr.Register = addr;
    xfr.Data[0] = Data;
  
    if (!DeviceIoControl(h, IOCTL_SMBUS_WRITEDATA, &xfr, sizeof(SMBUS_TRANSFER), NULL, 0, (LPDWORD)&nwr, NULL)) 
      RETAILMSG(1, (TEXT("Can Not initialized !\r\n")));

    CloseHandle(h);
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -