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

📄 usbap.c

📁 本电子词典是名人928的学习机代码,主要是电子学习机AP,其他还没有传
💻 C
字号:
/*************************************************************************/
/*                                                                       */
/* Copyright (c) 2003, 名人电脑科技有限公司深圳研发中心                  */
/* All rights reserved.                                                  */
/*                                                                       */
/* 文件名称: USBAP.c                                                     */
/* 文件描述: 移动硬盘的应用                                              */
/*                                                                       */
/* 当前版本: 1.0                                                         */
/* 作    者: King                                                        */
/* 完成日期: 2003年xx月xx日                                              */
/*                                                                       */
/* 函数列表:                                                             */
/*                                                                       */
/* 更改记录:                                                             */
/* ===================================================================== */
/*    日期       人员       版本   描述                                  */
/* ===================================================================== */
/* 2003-06-27   King        1.0    创建                                  */
/*                                                                       */
/*************************************************************************/

#include "Kernel.h"
#include "mss.h"
#include "hal.h"
//#include "UsbDrv.h"
#define USB_TASK_STACK_SIZE 0x1000  //USB任务的堆栈大小
#define USB_AUOTEXIT		QUIT_USER+1

/* 全局变量定义 */
//static MWindow* g_hUSBWnd;

//MWindow* USBCreateWindow(void);
//UINT32   USBHandleEvent(MWindow* hWnd, MEvent* pEvent);
VOID     USB_TASK(UNSIGNED argc, VOID *argv);

extern BOOL PrjDetectUSB(void);
extern BOOL prj_bIsUSB;
extern volatile  BOOL UsbConnectCompleted;

extern VOID __UsbCreatePartitionTable(BOOL bFlashOnly);
extern void PrjDestroyVolTimer(void);
STATUS UsbInit(void);
INT  FlashUpdate(void);

/*************************************************************************/
/*                                                                       */
/* 函数名称: USBMain                                                     */
/* 函数描述: 移动硬盘的主程序                                            */
/*                                                                       */
/* 输入参数:                                                             */
/*           pEvent      -  消息结构指针                                 */
/* 输出参数:                                                             */
/*           NULL                                                        */
/* 返回值  :                                                             */
/*           UINT32      -  函数返回值                                   */
/*                                                                       */
/* ===================================================================== */
/*    日期       人员       版本   描述                                  */
/* ===================================================================== */
/* 2003-06-29    King       1.0    创建                                  */
/*                                                                       */
/*************************************************************************/
extern BOOL g_bUsbStarted;
//UINT32 USBMain(UINT32 hInstance, UINT32 hPrevInst, UINT8* pCmdLine, INT nCmdShow)
INT USBMain(INT Param)
{
	UINT32 dwResult;

//	g_hUSBWnd = NULL;
	dwResult = 0;
          g_bUsbStarted=TRUE;
	//*************************
	 //  检测USB连线
	//*************************
	UsbInit();
	/*
    if (!EstimateCablePluged())
    {
    	HwShowString(1,1,"请先接上USB连线",0x000000ff);
        return 0;
    }*/

	/*************************\
	   进入U盘的准备工作
	\*************************/
//    prj_bIsUSB = TRUE;			// 设上标志,电压检测时要判断

//    PrjStopOffTimer();            // 停止自动关机时间

//  暂时去掉用于测试USB, MANN
//	PrjDisableAlarm();              // 提供为函数,在格式化的时候也要用。
//	SysWatchEnd();                  // close watchdog

	/*************************\
	   创建U盘窗口
	\*************************/
//	g_hUSBWnd = USBCreateWindow();
//	if (g_hUSBWnd)
		/* 创建分区表 */
		__UsbCreatePartitionTable(FALSE);

		/* 关闭SDCard中断 */
//		*((volatile UINT8 *)0x40270) &= ~0x01;          // disable interrupt: EP0(D0) = 0

		/* 关闭低电压检测 */
//		PrjDestroyVolTimer();

/*		if (NU_SUCCESS != NU_Create_Task(&Task_USB, "UsbDisk", USB_TASK,
			0, NU_NULL, pointer, USB_TASK_STACK_SIZE,
			3, 20, NU_PREEMPT, NU_START))
		{
			goto QUIT;
		}
	*/
	//	dwResult = ApRun((MWinView *)g_hUSBWnd);
		USB_TASK(0,NULL);
		//while (g_uExitMSS == 0)
		{
			NU_Sleep(1);
		}

//	prj_bIsUSB = FALSE;		// 已经退出USB

	/*************************\
	   U盘退出,系统启动
	\*************************/
//    MsgBoxRun(NULL, 0, "退出U盘,返回主画面。", "USB", MT_ICONINFO);

//	PrjEnableAlarm();
//	SysWatchHotReset(SYS_INIT_RESTORE);
	return dwResult;
}


//#define HwUBIDX		(*((volatile unsigned short *)(0x80000538)))
//#define USBMASS_EP_RECV				2		// OUT	(PC -> TCC730)
//#define HwOCSR1		(*((volatile unsigned short *)(0x80000550)))

//======================================================================
//======================================================================
// DennyHan Added this for Ap 2006-5-18 15:59
// THis Only be called after MSS_Init();
//----------------------------------------------
extern NU_DRIVER	*pndUSB;
static VOID    UsbApTerminateConnect(VOID)
{
NU_DRIVER_REQUEST   ndrTemp;

    if (pndUSB)
    {
    	memset((UINT8*)&ndrTemp,0,sizeof(NU_DRIVER_REQUEST));
		ndrTemp.nu_function = NU_STATUS;
		ndrTemp.nu_supplemental = USB_IOCTL_DISCONNECT;
		ndrTemp.nu_supplemental_ptr = (void*)(UINT32)USB_INIT_MASSSTORAGE;

#ifdef	SYS_UPDATE
		USBDriver_Func(NULL, &ndrTemp);
		uRet = ndrTemp.nu_status;
#else
		NU_Request_Driver(pndUSB, &ndrTemp);
#endif
    }
}

//======================================================================
//======================================================
//#define UAP_USB_TEST        1

VOID USB_TASK(UNSIGNED argc, VOID *argv)
{
char szBuf[64] = {'U', 'S', 'B', 'C'};
UINT uRet;
DWORD dwStatus;
UINT    uEvent[2];
	g_uExitMSS = 0;			// indicate that the task is terminated.

#ifdef UAP_USB_TEST
    GraphDrawText(40,40,0,0,(UINT8*)"EnterTask");
    if ( !EstimateCablePluged() )
    {
        GraphDrawText(40,60,0,0,(UINT8*)"DISConnect");
    }
    else
    {
        GraphDrawText(40,80,0,0,(UINT8*)"Connect");
    }

#endif
	if (0 == MSS_Init())
	{

#ifndef _WIN32
		// DennyHan added for Cabled pulled out
		if ( !EstimateCablePluged() )
		{
    #ifndef UAP_USB_TEST
            // exit
            UsbApTerminateConnect();
		    g_uExitMSS =1;
    #else
            GraphDrawText(40,80,0,0,(UINT8*)"DISConnect");
		}
        else
        {
           GraphDrawText(40,80,0,0,(UINT8*)"Connect");
    #endif
        }
#endif

		while(  (! g_uExitMSS)
		    &&  (EstimateCablePluged()) )
		{
//		if(!UsbCoreCheck())continue;

//		 uRet=USBMASS_ReceiveData( szBuf, 64 );

			// DennyHan added for Messge Pulled
            GetOsKnlMsg(&uEvent[0],&uEvent[1]);

			uRet= BOL_BulkOut(31, (BYTE *)szBuf);

			BOL_BulkCtrl(GETSTATUS, &dwStatus);

			if (DEVICE_IDLE != dwStatus)
            {
                continue;
            }

			if (uRet)
			{
				uRet = BOL_OnRecvCmd(uRet, (BYTE *)szBuf);
				switch(uRet)
				{
				case CSW_GOOD:
					{
					}break;
				case CSW_FAIL:
					{
	//					 g_uExitMSS = 1;
					}break;
				case CSW_PHASE_ERROR:
					{
					}break;
				case CSW_WAITFOR_MORE_DATA:
					{
					}break;
				case CSW_NEEDTO_STALL_BULK:
					{
						BOL_BulkCtrl(STALL, (DWORD *)STALL_BULKALL);
					}break;
				default:
					{
					}break;
				}
			}
		}
	}

	// 检查到Win98下最后16块没有写入,在这里确保写入
	FlashUpdate();

	MSS_Stop();

//	MsgPost(g_hUSBWnd, EV_QUIT, USB_AUOTEXIT, 0, 0);	// 退出对话框
//	MsgPost(g_hUSBWnd, EV_QUIT, USB_AUOTEXIT, 0, 0);	// 退出窗口

	return;
}

⌨️ 快捷键说明

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