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

📄 mainloop.c

📁 此為philip 1362 USB DOS下的驅動程式包, 已經共測試並內含有說明文件
💻 C
字号:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   2000-2002 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	MainLoop.C
   // Created:		Jun. 8, 2000
   // Modified:     Jun. 6, 2002 by wang.zhong.wei@philips.com
   // Revision:		1.0
   //
   //*************************************************************************
   // Release History:
   //   	v1.0 (2002-Jun-06 wzw):
   //			- Support ISP1362 PCI and ISA boards
   //*************************************************************************
*/

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

#include <bios.h>
#include <dos.h>
#include <conio.h>

#include "BasicTyp.h"
#include "common.h"
#include "DcCommon.h"
#include "SysCnfg.h"

#include "USB100.h"

#include "Hal4sys.h"
#include "Hal4ISA.h"
#include "Hal4IKit.h"

#include "Hal4Hc.h"
#include "PHC_Reg.h"
#include "PHC_HcS.h"
#include "HcHandle.h"

#include "Hal4D13.h"
#include "D13_REG.h"
#include "D13_DcS.h"
#include "DcHandle.h"

#include "Hal4OTG.h"
#include "OTGSvc.h"

#include "mainloop.h"
#include "PCI.h"

/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/

UCHAR bVerbose = 0;
UCHAR bVerboseHCS = 0;
UCHAR bIRQL =0;

ULONG IRQ4D13_CHNNL;
ULONG IRQ4HC_CHNNL;
ULONG HC_IO_BASE;
ULONG HC_COM;
ULONG HC_DATA;
ULONG DC_COM;
ULONG DC_DATA;

BOOLEAN ISP1362_PCIKIT;
BOOLEAN ISP1362_ISAKIT;

// Task Control Block
extern DC_TCB			D13TaskControlBlock;

// USB Device Info
extern USB_DEV_INFO	D13_DevInfo;

// USB Default Control Pipe
extern CONTROL_XFER	DCPCtrlXfer;

extern OTG_TCB 	OtgTcb;
extern OTG_REG  OtgReg;

/*
//*************************************************************************
//  Main Function
//*************************************************************************
*/
void main(void)
{
	UCHAR	Last_State = 99;

	clrscr();
	printf("\n==========================================================");
	printf("\n|                                                        |");
	printf("\n|           ISP1362 OnTheGo Test Program ver1.0          |");
	printf("\n|               Philips Semiconductors APIC              |");
	printf("\n|                                                        |");
	printf("\n==========================================================");
	printf("\n");

	MLSup_Init();
	prn_menu_message();

	/* Main program loop */
	do
	{
		//handle the error messages
		switch(OtgTcb.err_code)
		{
			case OTG_ERR_PLUGA_INSERTED:
				printf("OTG port: mini-A plug inserted!\n");
				break;
			case OTG_ERR_PLUGA_REMOVED:
				printf("OTG port: mini-A plug removed!\n");
				break;
			case OTG_ERR_A_OVERCURRENT:
				printf("OTG port: VBUS over current! Press 'D' to return to A_IDLE.\n");
				break;
			case OTG_ERR_SRP_FAIL:
				printf("Error: SRP fail. No repsonse from A-device.\n");
				OtgTcb.bus_req = 0;
				break;
			case OTG_ERR_A_WAIT_BCON_TMOUT:
				printf("Error: No response from B-device.\n");
				OtgTcb.bus_req = 0;
				break;
			default:
				break;
		}

		OtgTcb.err_code = 0;

		//handle the OTG state changes
		if(Last_State != OtgTcb.FSM)
		{

			Last_State = OtgTcb.FSM;

			switch ( Last_State )
			{
				case A_HOST:
					printf("*** HNP State: A_HOST ***\n");
					Hc_Handler();
					break;
				case B_HOST:
					printf("*** HNP State: B_HOST ***\n");
					Hc_Handler();
					break;
				case A_PERIPHERAL:
					printf("*** HNP State: A_PERIPHERAL ***\n");
					break;
				case B_PERIPHERAL:
					printf("*** HNP State: B_PERIPHERAL ***\n");
//					if(1 == OtgTcb.bus_req)
//						printf("- B_Device want to become host.\n");
					break;
				case A_IDLE:
					printf("*** HNP State: A_IDLE ***\n");
					break;
				case B_IDLE:
					printf("*** HNP State: B_IDLE ***\n");
					break;
				case A_VBUS_ERR:
					printf("*** HNP State: A_VBUS_ERR ***\n");
					break;
				case B_SRP_INIT:
					printf("*** HNP State: B_SRP_INIT ***\n");
					OTG_do_srp();
					break;

				case A_WAIT_VRISE:
					printf("*** HNP State: A_WAIT_VRISE ***\n");
					break;

				case A_WAIT_BCON:
					printf("*** HNP State: A_WAIT_CONN ***\n");
					break;

				case A_SUSPEND:
					printf("*** HNP State: A_SUSPEND ***\n");
					break;

				case A_WAIT_VFALL:
					printf("*** HNP State: A_WAIT_VFALL ***\n");
					break;

				case B_WAIT_ACON:
					printf("*** HNP State: B_WAIT_ACON ***\n");
					break;

				default:
//					printf("*** HNP State: %d ***\n",Last_State);
					break;
			}
		}

		//handle the DC request by DC interrupt
		switch ( Last_State )
		{
			case A_PERIPHERAL:
				Dc_Handler();
				break;
			case B_PERIPHERAL:
				Dc_Handler();
				if(OtgTcb.a_bus_reset == 1 && OtgTcb.TimerID == B_BUS_REQ_TIMER_ID)
					OTG_StopTimer();	//stop the B_BUS_REQ_TIMER
				break;
			default:
				break;
		}


	}while(MLSup_KeypadHandler());

	MLSup_Exit();

}


/*
//*************************************************************************
//  Subroutines
//*************************************************************************
*/
void MLSup_InitSWStructure (void)
{
	UCHAR ch;

	// Init Global Vars

	//Check if ISP1362 PCI board is present
	if(	TRUE == findPCIdev(0x00068000,&HC_IO_BASE,&IRQ4D13_CHNNL))
		//PCI kit
	{
		ISP1362_PCIKIT = TRUE;
		ISP1362_ISAKIT = FALSE;
		IRQ4HC_CHNNL = IRQ4D13_CHNNL;
//		printf("\nISP1362 PCI board IO base address = 0x%x",HC_IO_BASE);
//		printf("\nISP1362 PCI board IRQ no = 0x%x\n",IRQ4D13_CHNNL);
	}
	else	//ISA kit
	{
		ISP1362_PCIKIT = FALSE;
		ISP1362_ISAKIT = TRUE;
		HC_IO_BASE = 0x290;
		IRQ4HC_CHNNL = 0x0A;
		//select IRQ no for the device controller(INT2). Must be same as jumper setting on the ISA board. default is 9.
		printf("Select IRQ no for DC(INT2 of ISP1362). 3/5/9:");
		ch = getchar();
		fflush(stdin);
		if(ch == '3' || ch == '5')
			IRQ4D13_CHNNL = ch-'0';
		else
			IRQ4D13_CHNNL = 9;	//default IRQ for INT2 = 9
	}

	HC_DATA = HC_IO_BASE;
	HC_COM = HC_IO_BASE + 2;
	DC_DATA = HC_IO_BASE + 4;
	DC_COM = HC_IO_BASE + 6;

	// Init D13 Vars
	{
		// Init DC_TCB
		D13TaskControlBlock.byValue = 0;

		// Init USBDEV_Info
		D13_DevInfo.dwValue = 0;

		// Init Default Control Pipe
		DCPCtrlXfer.FSMState = USBFSM4DCP_IDLE;
	}
}

void MLSup_Init(void)
{
	UCHAR	byTemp;
	// Acquire System Resource
	// IO Resource, Interrupt Resource, DMA Resource

	MLSup_InitSWStructure();

	HcS_AcquireHC();	//initiliaze HC(HW config)
	DcS_AcquireD13();   //initiliaze DC(HW config)
	OTG_Acquire();

}

void MLSup_Exit(void)
{
	OTG_Release();
	DcS_ReleaseD13();
	HcS_ReleaseHC();
}

BOOLEAN	MLSup_KeypadHandler(void)
{
	int		key;
	BOOL	IsInloop = TRUE;

	if( bioskey(1) )
	{
		key = bioskey(0);
		key &= 0xff;
		switch(key) {
			case 0x1b: /* ESC */
				IsInloop = FALSE;
				break;
/*			case 'v':
			case 'V':
				if(bVerbose == 0) {
					printf("Verbose Mode = ON.\n");
					bVerbose = 1;
				}
				else {
					printf("Verbose Mode = OFF.\n");
					bVerbose = 0;
				}
				break;*/
			case 'r':
			case 'R':
				if(OtgTcb.bus_req == 0)
				{
					printf("Busreq = ON. \n");
					OtgTcb.bus_drop = 0;
					OtgTcb.bus_req = 1;
					OtgTcb.b_srp_done = 0;
				}
				else
				{
					printf("Busreq = OFF. \n");
					OtgTcb.bus_req = 0;
				}
				break;
			case 'd':
			case 'D':
				if(OtgTcb.bus_drop == 0 && OtgTcb.id == 0)
				{
					printf("Busdrop = ON!!! \n");
					OtgTcb.bus_req = 0;
					OtgTcb.bus_drop = 1;
				}
				else
				{
					printf("Busdrop = OFF. \n");
					OtgTcb.bus_drop = 0;
				}
				break;

			default:
				prn_menu_message();
				break;
		}
	}

	return 	IsInloop;

}

void prn_menu_message(void)
{
	printf("=====================================");
	printf("\npress 'ESC', Exit! ");
	printf("\npress 'R', Toggle Bus_Req ON/OFF! ");
	printf("\npress 'D', Toggle Bus_Done ON/OFF! ");
	printf("\n=====================================");
	printf("\n");
}

⌨️ 快捷键说明

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