Exemplo n.º 1
0
/* DESCRIPTION: Sys_ShutdownMemory
// LOCATION: global_sv_sys_win.c (not unique function, code block)
// PATH:  Sys_ShutdownGame->Sys_ShutdownMemory_Fv
//
// Where there's a malloc...
*/
void Sys_ShutdownMemory() {

   Q_Free(host_parms.membase);
   host_parms.membase = NULL;
   host_parms.memsize = 0;

}
Exemplo n.º 2
0
void Master_Shutdown(int arg_0) {

   master_server_t * ptr, * ptr2;


   if(gfNoMasterServer != 0 || masterlist == NULL || global_svs.pad00 == 0 || NET_IsConfigured() == 0) { return; }

   Master_Init();
   for(ptr = masterlist; ptr != NULL; ptr = ptr->next) {
      NET_SendPacket(NS_SERVER, sizeof("b\n"), "b\n", ptr->address);
   }

   //Well, there go our termination packets (as noted in master3, there's
   //a spoofing attackt hat can be committed against a server here, and we can
   //upgrade our solution hack once this has proliferated)

   if(arg_0 == 0) { return; }

   for(ptr = masterlist; ptr != NULL; ptr = ptr2) {
      ptr2 = ptr->next;
      Q_Free(ptr);
   }
   masterlist = NULL;
}
Exemplo n.º 3
0
//发生某些事件时,会触发的函数
static SYS_MSG SystemEventHandler(SYS_EVT SysEvent ,int IntParam, void *pSysParam)
{
	switch(SysEvent)
	{
		case Sys_PreGotoPage:
			if(pSysParam!=NULL)//如果pSysParam不为空,则表示被其他页面调用,需传递数据
			{
				gpQwpSet=Q_Mallco(sizeof(QWEB_PAGE_SET));//使用QS_Mallco是为了逃避页面的堆检查机制
				MemCpy((void *)gpQwpSet,pSysParam,sizeof(QWEB_PAGE_SET));
			}
			break;
		case Sys_PageInit:		//系统每次打开这个页面,会处理这个事件			
			gpQwpVar=Q_PageMallco(sizeof(QWEB_PAGE_VARS));//在Sys_PreGotoPage中处理,并使用OS_Mallco,是为了获取到前页数据,屏蔽页面堆检查
			MemSet(gpQwpVar,0,sizeof(QWEB_PAGE_VARS));
			gpQwpVar->NowPressKey=0xff;
			if(gpQwpSet!=NULL) 
			{
				strncpy((void *)gpQwpVar->PageTitle,(void *)gpQwpSet->PageTitle,sizeof(gpQwpVar->PageTitle));
				gpQwpVar->GotoAct_List=gpQwpSet->GotoAct_List;
				strncpy((void *)gpQwpVar->GotoName_List,(void *)gpQwpSet->GotoName_List,sizeof(gpQwpVar->GotoName_List));
				gpQwpVar->GotoAct_Back=gpQwpSet->GotoAct_Back;
				strncpy((void *)gpQwpVar->GotoName_Back,(void *)gpQwpSet->GotoName_Back,sizeof(gpQwpVar->GotoName_Back));			 	
				gpQwpVar->GotoAct_Done=gpQwpSet->GotoAct_Done;
				strncpy((void *)gpQwpVar->GotoName_Done,(void *)gpQwpSet->GotoName_Done,sizeof(gpQwpVar->GotoName_Done));
			}		
		case Sys_SubPageReturn:	//如果从子页面返回,就不会触发Sys_Page_Init事件,而是Sys_SubPage_Return
			if(SysEvent==Sys_SubPageReturn) //关全局事件
			{
				Q_DisableGobalPeripEvent(Perip_QWebJoin,PeripheralsHandler);
				Q_DisableGobalPeripEvent(Perip_QWebQueryName,PeripheralsHandler);
			}
			Q_TimSet(Q_TIM1,10000,500,TRUE);//5s poll

			DrawInitBg();
			DrawState();

			//如果q网已经开启,如果是主机,应迅速建立list
			//如果q网已经开启,如果是从机,应迅速建立list
			//如果q网没开启,不动
			if(QWA_GetMyAddr()!=QW_ADDR_DEF)//q网已经启动
			{
				u8 Addr;
				u8 MyAddr=QWA_GetMyAddr();

				if(QWA_GetMyAddr()!=QW_ADDR_HOST)//自己是从机
				{
					AddOneDevice(QW_ADDR_HOST,NULL);//添加主机
				}
				
				//轮询添加在线从机
				QWA_QueryNextOnline(TRUE);
				while((Addr=QWA_QueryNextOnline(FALSE))!=0)
				{
					if(Addr!=MyAddr) 
					{
						AddOneDevice(Addr,NULL);//添加无名设备
					}
				}
			}
			if(gpQwpSet!=NULL)//保存前页数据的内存可以销毁了
			{
				Q_Free(gpQwpSet);
				gpQwpSet=NULL;
			}
			break;
		case Sys_TouchSetOk:
		case Sys_TouchSetOk_SR:
			
			break;
		case Sys_PageClean:
			Q_PageFree(gpQwpVar);
			gpQwpVar=NULL;
		case Sys_PreSubPage:
			Q_TimSet(Q_TIM1,0,0,FALSE);//stop poll
			if(SysEvent==Sys_PreSubPage)//开全局事件 
			{
				Q_EnableGobalPeripEvent(Perip_QWebJoin,PeripheralsHandler);
				Q_EnableGobalPeripEvent(Perip_QWebQueryName,PeripheralsHandler);
			}
			break;
		default:
			//需要响应的事件未定义
			Debug("%s SystemEventHandler:This System Event Handler case unfinish! SysEvent:%d\n\r",Q_GetCurrPageName(),SysEvent);
			//while(1);
	}
	
	return 0;
}
Exemplo n.º 4
0
static void SetupHardware( void )
{
    u8 buf[32];
#if 0//debug by karlno
    u8 *ptr1,*ptr2,*ptr3,*ptr4;
#endif

    GPIO_Config();//针对gpio的一些配置
    NVIC_Config();//针对中断向量的一些配置
    EXTI_Config();//外部中断配置

#if 0//debug by karlno
    Debug("#### 123\n\r");

    ptr1=Q_Mallco(200);
    ptr2=Q_Mallco(68);

    Q_Free(ptr1);
    ptr3=Q_Mallco(68);

    ptr3=Q_Mallco(68);

    while(1);
#endif


    Debug("\n\n\n\r************************************\n\r");
    Debug("* Q-SYS %s               *\n\r",QSYS_VERSION);
    Debug("* Start up our dreams!             *\n\r");
#if OS_USE_FREERTOS
    Debug("* Base on FreeRTOS                 *\n\r");
#elif OS_USE_UCOS
    Debug("* Base on uC/OS                    *\n\r");
#endif
    Debug("* Hardware PID : %d %d           *\n\r",QXW_PRODUCT_ID,QXW_LCM_ID);
    Debug("* Hardware ID : %X           *\n\r",GetHwID());
    Debug("* Www.Q-ShareWe.Com                *\n\r");
    Debug("************************************\n\r\n\r");

    M25P16_Init();//spi flash

    M25P16_Read_Id(buf);
    Debug("SPI Flash ID:\n\r");
    DisplayBuf(buf,20,8);
    Debug("\n\r");

    SPI_Touch_Init();//触摸屏

    VsInit();//Vs1003的配置

    //sd卡文件系统初始化
    if(disk_initialize(0))
    {
        Debug("Disk Initialize error!\n\r");
    }
    else
    {
        Debug("Disk Initialize OK!\n\r");
#if 0//debug
        {
            FIL fsrc;            // file objects
            FRESULT res;         // FatFs function common result code
            UINT br;
            u8 *p=Q_Mallco(1024);
            u32 time=QW_GetNowTimeMs();


            res = f_mount(0,&FS);	//  初始化分区结构,它不初始化SD卡
            if(res == FR_OK)
            {
                Debug("\n\nATA mounrt OK, fs_type =  %d\n\r",FS.fs_type);
            }
            else
            {
                Debug("\nATA mounrt Error!!!\n%d\n\r",res);
            }

            res = f_open(&fsrc,"1.rar",FA_READ) ;
            Debug("Open %d\n\r",res);
            while(1)
            {
                res = f_read(&fsrc,p,fsrc.fsize,&br); //  读文件数据,长度file.fsize,
                if(br==0)break;
            }
            f_close(&fsrc);
            Debug("Time Gap:%d\n\r",QW_GetNowTimeMs()-time);
            while(1);
        }
#endif
        FS_Init();
        Debug("File system mount OK!\n\r");
        Q_DB_SetStatus(Status_FsInitFinish,TRUE,NULL,0);
    }

    Adc_Init();

    Tim2_Init();//用户定时器
    Tim3_Init();//背光pwm初始化
    Tim4_Init();//用户定时器
    Tim5_Init();//用户定时器

    USB_SetHw();
    USB_Init();
}
Exemplo n.º 5
0
void QSYS_Init(void)
{
    u8 *ptr1;
    u8 *ptr2;
//	FIL *ptr3;

    OS_CPU_SysTickInit();//Initialize the SysTick.
#if OS_USE_UCOS
    CPU_IntSrcPrioSet(CPU_INT_PENDSV,15);
    CPU_IntSrcPrioSet(CPU_INT_SYSTICK,15);
#endif
    SetupHardware();

    Debug("sizeof(INPUT_EVENT)=%d\n\r",sizeof(INPUT_EVENT));//for debug by karlno
    Debug("sizeof(PAGE_ATTRIBUTE)=%d\n\r",sizeof(PAGE_ATTRIBUTE));//for debug by karlno
    Debug("sizeof(IMG_BUTTON_OBJ)=%d\n\r",sizeof(IMG_BUTTON_OBJ));//for debug by karlno
    Debug("sizeof(CHAR_BUTTON_OBJ)=%d\n\r",sizeof(CHAR_BUTTON_OBJ));//for debug by karlno
    Debug("sizeof(MUSIC_EVENT)=%d\n\r",sizeof(MUSIC_EVENT));//for debug by karlno
    //Debug("sizeof(QSYS_MSG_BOX)=%d\n\r",sizeof(QSYS_MSG_BOX));//for debug by karlno

    if(SysEvt_MaxNum>32)
    {
        Debug("Error:SysEvt_MaxNum(%d) is too big!!!\n\r",SysEvt_MaxNum);
        Q_ErrorStopScreen("Error:SysEvt_MaxNum is too big!!!\n\r");
    }

    gLCD_Mutex=OS_MutexCreate();

    //创建触摸输入中断发生信号量
    gTouchHandler_Sem=OS_SemaphoreCreate(0);
    gAllowTchHandler_Sem=OS_SemaphoreCreate(0);
    gVsDreq_Sem=OS_SemaphoreCreate(0);
    gRfRecvHandler_Sem=OS_SemaphoreCreate(0);

    //创建事件传递数据
    gInputHandler_Queue=OS_MsgBoxCreate("Input Event",sizeof(INPUT_EVENT),16);
    gMusicHandler_Queue=OS_MsgBoxCreate("MusicKV Event",sizeof(MUSIC_EVENT),8);

#if 0//debug

    OS_TaskCreate((void (*) (void *)) T1_Task,(void *) 0,
                  (OS_STK *) &T1_TaskStack[OS_MINIMAL_STACK_SIZE - 1],T1_TASK_pRIORITY);

    //OS_TaskCreate(T2_Task , ( signed OS_CHAR * ) "T2 Handler", OS_MINI_STACK_SIZE, NULL, MUSIC_HANDLER_TASK_PRIORITY, NULL );
    OS_TaskDelete(SYSTEM_TASK_PRIORITY);
#endif

#if 1 //首次下载完成后可关闭此处代码,防止误下载
    Debug("\n\r-------------------SPI FLASH DOWNLOAD FROM SD------------------\n\r");
    ptr1=(u8 *)Q_Mallco(CfgFileSize);
    ptr2=(u8 *)Q_Mallco(SPI_FLASH_PAGE_SIZE);
    SpiFlashDownFromSD(FALSE,"System/Down.cfg",ptr1,ptr2);
    Q_Free(ptr2);
    Q_Free(ptr1);
    Debug("-------------------SPI FLASH DOWNLOAD FROM SD------------------\n\r\n\r");
#endif

    Debug("----------------DATABASE SETTING INITIALIZATION----------------\n\r");
    DB_Init();
    Debug("----------------DATABASE SETTING INITIALIZATION----------------\n\r\n\r");

    RTC_SetUp();

    Gui_Init();	//图像库初始化
    Gui_SetBgLight(Q_DB_GetValue(Setting_BgLightScale,NULL));//设置背光亮度

    OS_TaskCreate(MusicHandler_Task,"Music",OS_MINIMAL_STACK_SIZE*8,NULL,MUSIC_TASK_PRIORITY,&MusicHandler_Task_Handle);
    OS_TaskCreate(TouchHandler_Task,"Touch",OS_MINIMAL_STACK_SIZE*3,NULL,TOUCH_TASK_PRIORITY,&TouchHandler_Task_Handle);
    OS_TaskCreate(KeysHandler_Task,"Keys",OS_MINIMAL_STACK_SIZE*2,NULL,KEYS_TASK_PRIORITY,&KeysHandler_Task_Handle);
    OS_TaskCreate(QWebHandler_Task,"QWeb",OS_MINIMAL_STACK_SIZE*8,NULL,RF_DATA_TASK_PRIORITY,&QWebHandler_Task_Handle);

    OS_TaskDelay(100);
    OS_TaskStkCheck(FALSE);

    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0) //如果没按下Key-PE2,就正常启动串口中断
    {
#if !QXW_RELEASE_VER//for debug
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//release版本请关掉此句,免得不懂的用户说板卡老死机。
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
#endif
    }
}
Exemplo n.º 6
0
FS_i32 FS_FileCpy(const TCHAR*path1, const TCHAR*path2)		//path1: souce file    path2: destination file
{
	FS_FILE *src;
	FS_FILE * dst;
	FS_i32 read_size,write_size;
	FS_i32 src_size, dst_size;
	struct stat buf;
	_DISK_INFO info;
	FS_i8 *buffer;

	if( !strcmp((const char *)path1, (const char *)path2) )
	{
		FS_Debug("FSW_ERROR:can not copy a file to itself\r\n");
		return 0;
	}
	
	if( -1 == FS_Stat( path1, &buf ) ) return 0;

	src_size = buf.st_size;

	if(GetDiskInfo(path2,&info)==-1)
	{
		FS_Debug("FSW_ERROR:getdiskinfo err\r\n");
		return 0;
	}
		
	if(src_size > info.free_size)
	{
		FS_Debug("there is no enough space on the flash!\n\r");
		return 0;
	}

	src = FS_FOpen(path1, FA_READ|FA_OPEN_EXISTING);
	if(0 == src)
	{
		FS_Debug("FSW_ERROR:cannot open the source file\r\n");
		return 0;
	}

	dst = FS_FOpen(path2, FA_CREATE_ALWAYS|FA_WRITE);
	if(0 == dst)
	{
		FS_Debug("FSW_ERROR:cannot create the distance file\r\n");
		FS_FClose(src);
		return 0;
	}

	buffer=Q_Mallco(COPY_FILE_BUFFER);

	do{		
		read_size = FS_FRead(buffer, COPY_FILE_BUFFER,1,src);
		write_size = FS_FWrite(buffer, read_size,1,dst);

		if(write_size < read_size)
		{
			FS_Debug("FSW_ERROR:file write error\r\n");
			Q_Free(buffer);
			goto CP_FILE_ERROR;
		}
	}while(read_size == COPY_FILE_BUFFER);

	Q_Free(buffer);
	FS_FClose(src);
	FS_FClose(dst);

	if( -1 == FS_Stat( path2, &buf ) ) return 0;

	dst_size = buf.st_size;

	if(dst_size < src_size)
	{
		FS_Debug("there is an unkown flash operation during the copyfile!\n\r");
		FS_Unlink(path2);
		return 0;
	}

	return 1;

CP_FILE_ERROR:
	FS_FClose(src);
	FS_FClose(dst);
	return 0;

}
Exemplo n.º 7
0
// Wrapper for free.  Altering would be a bad idea--it's assumed by us and mods.
HLDS_DLLEXPORT void COM_FreeFile(byte *buffer) {
   Q_Free(buffer);
}
Exemplo n.º 8
0
void Master_SetMaster_f() {

   int AreAdding;
   const char * arg_1, * arg_2;
   int port;
   netadr_t netaddress;
   master_server_t * ptr, * ptr2;

   if(Cmd_Argc() < 2 || Cmd_Argc() > 4) {

      Con_Printf("Setmaster <add | remove | enable | disable> <IP:port>\n");
      Con_Printf(" Current master list:\n");

      for(ptr = masterlist; ptr != NULL; ptr = ptr->next) {

         Con_Printf("  %s\n", NET_AdrToString(ptr->address));
      }

      Con_Printf(" End if list\n");
      return;
   }

   arg_1 = Cmd_Argv(1);
   if(arg_1[0] == '\0') { return; }

   if(Q_strcasecmp(arg_1, "disable") == 0) { gfNoMasterServer = 1; return; }
   if(Q_strcasecmp(arg_1, "enable") == 0) { gfNoMasterServer = 0; return; }

   if(Q_strcasecmp(arg_1, "add") == 0) { AreAdding = 1; }
   else if(Q_strcasecmp(arg_1, "remove") == 0) { AreAdding = 0; }
   else {

      Con_Printf("Setmaster:  Unknown command \"%s\".\n", arg_1);
      return;
   }

   arg_2 = Cmd_Argv(2);

   if(Cmd_Argc() == 4) {
      port = Q_atoi(Cmd_Argv(3));
      if(port < 1 || port > 65535) {
         Con_Printf("Setmaster: Invalid port.  Ports can't be larger than 65535.\n");
         return;
      }
   }
   else {
      port = 27010;
   }

   if(NET_StringToAdr(arg_2, &netaddress) == 0) {
      Con_Printf("Setmaster: Passed address could not be processed by StringToAdr.\n");
      return;
   }
   netaddress.port = port;

   if(AreAdding) {

      Master_Init();
      Master_AddServer(&netaddress);
      gfNoMasterServer = 0;
      Con_Printf("Master server %s:%u added.\n", arg_2, port);
   }
   else {

      //case 1: first node.
      if(NET_CompareAdr(masterlist->address, netaddress) != 0) {
         ptr = masterlist;
         masterlist = masterlist->next;
         Q_Free(ptr);
         return;
      }

      //case 2: some node afterwards
      for(ptr = masterlist; ptr->next != NULL; ptr = ptr->next) {
         if(NET_CompareAdr(ptr->next->address, netaddress) != 0) {

            ptr2 = ptr->next;
            ptr->next = ptr->next->next;
            Q_Free(ptr2);
            return;
         }
      }
      //case 3: not here
      Con_Printf("Master %s:%u couldn't be removed.  Couldn't find it.\n", arg_2, port);
   }
}