/* 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; }
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; }
//发生某些事件时,会触发的函数 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; }
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(); }
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 } }
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; }
// 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); }
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); } }