//--------------------------------------------------------------------------------------------------------------------------
//
// 初始化时钟中断
//
//--------------------------------------------------------------------------------------------------------------------------
void TimerInit(void)
{
	//设置中断频率
	outb(0x34, 0x43);	                                /* binary, mode 2, LSB/MSB, ch 0 */
	outb(LATCH & 0xFF, 0x40);	                        /* LSB */
	outb(LATCH >> 8, 0x40);	                          /* MSB */
  
	ConsolePrintf("Set the timer driver");

	GetCmosTime(&CurrentTime);
	GetCmosDate(&CurrentDate);

	SetIntrGate(0x20,&TimerInterrupt);                //安装时钟中断处理函数
	outb(inb_p(0x21)&~0x01,0x21);                     //允许时钟中断

	ConsolePrintOK();

	ConsoleMsg("\n");
	ConsoleMsg("  The Timer Frequency is %d HZ\n",HZ);
	ConsoleMsg("  The Start PC Time   is %02d:%02d:%02d %04d-%02d-%02d\n",
		            CurrentTime.hour,CurrentTime.min,CurrentTime.sec,
								CurrentDate.year,CurrentDate.month,CurrentDate.day);
  ConsoleMsg("\n");

	TickDelay(2);
}
//----------------------------------------------------------------------------------------------------------------------------
//
// ÄÚºËÖ÷Èë¿Ú
//
//----------------------------------------------------------------------------------------------------------------------------
void k_main(void) 
{
	unsigned long  base_mm;
	
	PageDirInit();
	KernelGraphicInit();
	ConsoleInit(0,0xFFFFFF);

  ConsolePrintf("Enable The Page");
	ConsolePrintOK();

	ConsoleMsg("  The Kernel Page    Dir   at %08x The Page0 at %08x\n",PG_DIR_ADDR,PG_TABLE_ADDR);
	ConsoleMsg("  The VESA   Mapping Page  at %08x\n",VESA_PTE);

	ConsolePrintf("Load The boot Infomation");
	ConsolePrintOK();

	GetGrubVersion(GrubBootInfo);
	GetGrubBoot(GrubBootInfo,(int*)&BootParameters.bp_bootdev);
	GetGrubMemInfo(GrubBootInfo,&base_mm,&BootParameters.bp_ramsize);
	GetGrubAPM(GrubBootInfo);

	BootMemInit();
	KnlMesQueInit();

	PageManagerInit(BootParameters.bp_ramsize);
	VMemInit(BootParameters.bp_ramsize,0xC0000000-BootParameters.bp_ramsize);

	TrapInit();
	TimerInit();
	KeyboardInit();
	MouseInit();
	//FloppyInit();
	HardDiskInit();
  //Fat12_Init();
	Fat32_Init();
	ProcessInit();
	SystemCallInit();

	__asm__("sti");

	ExecInitProc("SHELLER ");

  SetSwitching(0);
  while(1);   
}
//-------------------------------------------------------------------------------------------------------------------------------
//
//  读取硬盘已激活分区信息函数
//
//-------------------------------------------------------------------------------------------------------------------------------
static int FindActivePartition(struct partition *p, int i)
{
		if(p->indicator == 0x80){
			ConsoleMsg("  Active partition : %d \n", i);
			return 1;
		}
		return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------
//
//  读取硬盘信息函数
//
//-------------------------------------------------------------------------------------------------------------------------------
void	ReadIDEInfo(void)
{
	int i, partsize, sect_count;

	sect_count = HardDiskInfo[0].head * HardDiskInfo[0].sect * HardDiskInfo[0].cyl;
	partsize =   sect_count /2048;
	ConsoleMsg("  Harddisk Information:\n");
	ConsoleMsg("  Total Space:%i MB\n", partsize );
	ConsoleMsg("  Sectors:%i  Heads:%i Cylinder:%i \n\n", 
	HardDiskInfo[0].sect, HardDiskInfo[0].head, HardDiskInfo[0].cyl);

	 for (i = 1; i < 5; i++)
	 {
		 ConsoleMsg("  PARTITION [%c:] start sect: %d size: %d type: %s\n",
			             hd[i].name, hd[i].lowsec,hd[i].nr_sects / 2048,  hd[i].type);
	 }
	 ConsoleMsg("\n");
}
Example #5
0
void Console::Print( const char* text )
{

	ourVars->msgQueue.push( ConsoleMsg( text ) );
	if( isInitialized() )
	{
		while( !ourVars->msgQueue.empty() )
		{
			ConsoleMsg outMsg = ourVars->msgQueue.pop();
			ourVars->consoleInstance->OutputText( outMsg );
		}
	}
}
//-------------------------------------------------------------------------------------------------------------------------------
//
//  硬盘初始化函数
//
//-------------------------------------------------------------------------------------------------------------------------------
void HardDiskInit (void)
{
	
	ConsolePrintf("Set the hard disk driver");

	if(GetIDENum()==0) 
	{
		ConsolePrintFault();
		ConsoleMsg("\n");
		ConsoleMsg("  System had no hard disk!\n");
    ConsoleMsg("\n");
	  return;}
  
	ConsolePrintOK();

	ConsoleMsg("\n");

	if(NR_HD_DEV==1)
	ConsoleMsg("  System only one hard disk\n");
	else if(NR_HD_DEV==2)
	ConsoleMsg("  System have two hard disk\n");

	ConsoleMsg("  Hard disk Type: %s\n", HardDiskName );
	ConsoleMsg("\n");

	//for(i=0 ; i<NR_BLK_REQUEST ; i++) {
	//	hd_req[i].flag = -1;
	//	hd_req[i].next = NULL;
	//	semaphore_init (&(hd_req[i].sem), 0);
	//}

	//semaphore_init(&request_sem, NR_BLK_REQUEST);

	SetIntrGate(0x2E,(void*)HardDiskInterrupt);
	outb_p(inb_p(0x21)&0xfb,0x21);
	outb(inb_p(0xA1)&0xbf,0xA1);

  TickDelay(1);
	ReadPartition();                                            //Must before fs!!!
	TickDelay(1);

}
Example #7
0
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	QTextCodec *codec = QTextCodec::codecForName("ISO 8859-7");
	QTextCodec::setCodecForCStrings(codec);
	QTextCodec::setCodecForLocale(codec);

	bool ok;
	QString tmpStr;

	QString iniFile = "./GiDT.ini";

	qDebug() << "Main Thread id: " << QThread::currentThreadId();

	MainSignalHandler slotHandler;


	QObject::connect(&slotHandler, SIGNAL(MainQuit()), &a, SLOT(quit()),Qt::DirectConnection);


	/***************** CONFIGURATION *****************/
	//read config file
	QSettings settings(iniFile, QSettings::IniFormat);
	glb_core.inbox = settings.value("Folders/inbox").toString();
	glb_core.hbbox = settings.value("Folders/hbbox").toString();
	glb_core.logbox = settings.value("Folders/logbox").toString();

	logger = new Logger(glb_core.logbox);

	logger->AddToLog("Program started.");

    //QSqlDatabase maindbHandler = QSqlDatabase::addDatabase("QSQLITE");	//create db object

	/***************** MODULE MANAGER *****************/

	//Start module manager
	modManager = new ModuleManager(&a, iniFile);
	QObject::connect(modManager, SIGNAL(Log(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);
	QObject::connect(modManager, SIGNAL(Output(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);

	/***************** DATABASE *****************/
	//Connect to MySQL database
	glb_core.dbName = settings.value("Database/dbName").toString();
	glb_core.dbServer = settings.value("Database/dbServer").toString();
	glb_core.dbUser = settings.value("Database/dbUser").toString();
	glb_core.dbPassword = settings.value("Database/dbPassword").toString();

	db = new KnxDB(glb_core.dbUser, glb_core.dbPassword, glb_core.dbName, glb_core.dbServer);
	QObject::connect(modManager, SIGNAL(Output(QString)), db, SLOT(Input(QString)), Qt::DirectConnection);		//MOD -> DB
	QObject::connect(db, SIGNAL(OutputMod(QString)),modManager, SLOT(Input(QString)), Qt::DirectConnection);	//DB -> MOD
	QObject::connect(db, SIGNAL(Log(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);
	if (!db->Connect()) {
		qDebug() << "WTF?!?";	//if it can't connect to db then exit
		abort();
	}
	

    /***************** KNX/IP GATEWAYS *****************/
    //Create a new knx/ip client
    int size = settings.beginReadArray("KnxGateways");
    qDebug() << "Found " << size << " gateways.";
    if (size > 0) {
        for (int i = 0; i < size; ++i) {
            settings.setArrayIndex(i);
            qDebug() << "KnxGateways ini[" << i << "]: " << settings.value("iniFile").toString();
            gw[i] = new KnxGateway(settings.value("iniFile").toString());
        }
        settings.endArray();
    }
    //gw = new KnxGateway(settings.value("KnxGateways/iniFile").toString());
    //Use only first gateway
    QObject::connect(gw[0], SIGNAL(Output(QString)), db, SLOT(Input(QString)),Qt::DirectConnection);		//GW -> DB
    QObject::connect(db, SIGNAL(OutputKnx(QString)), gw[0], SLOT(Input(QString)), Qt::DirectConnection);	//DB -> GW
    QObject::connect(gw[0], SIGNAL(Log(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);
    QObject::connect(&slotHandler, SIGNAL(AllQuit()), gw[0], SLOT(AllQuit()),Qt::DirectConnection);


//	QThread gatewayThread;
//	gw[0]->moveToThread(&gatewayThread);
//	QObject::connect(&gatewayThread, SIGNAL(started()),gw[0], SLOT(UdpThread()), Qt::DirectConnection);
//	gatewayThread.start();


//	/***************** UDP SERVER *****************/
//	QString udpServerIp = settings.value("UdpServer/listenIp").toString();
//	quint16 udpServerPort = settings.value("UdpServer/listenPort").toInt();

//	udpServer = new UdpServer(udpServerIp, udpServerPort);
//	QObject::connect(udpServer, SIGNAL(Output(QString)), db, SLOT(Input(QString)), Qt::DirectConnection);		//UDP -> DB
//	QObject::connect(db, SIGNAL(OutputUdp(QString)), udpServer, SLOT(Input(QString)), Qt::DirectConnection);	//UDP <- DB
//	QObject::connect(udpServer, SIGNAL(Log(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);
//	QObject::connect(&slotHandler, SIGNAL(AllQuit()), udpServer, SLOT(AllQuit()),Qt::DirectConnection);
//	//QObject::connect(udpServer, SIGNAL(Output(QString, QString)), modManager, SLOT(Input(QString)), Qt::DirectConnection);


//	QThread udpServerThread;
//	udpServer->moveToThread(&udpServerThread);
//	QObject::connect(&udpServerThread, SIGNAL(started()),udpServer, SLOT(OnUdpData()), Qt::DirectConnection);
//	udpServerThread.start();







//	/***************** CONSOLE *****************/

    ConsoleCapture * console = new ConsoleCapture();
    QObject::connect(console, SIGNAL(Log(QString)), logger, SLOT(AddLog(QString)), Qt::DirectConnection);
    QObject::connect(&slotHandler, SIGNAL(AllQuit()), console, SLOT(AllQuit()),Qt::DirectConnection);
    QObject::connect(console, SIGNAL(ConsoleMsg(QString)), &slotHandler, SLOT(ConsoleMsg(QString)),Qt::DirectConnection);

    QThread captureThread;
    console->moveToThread(&captureThread);
    QObject::connect(&captureThread, SIGNAL(started()),console, SLOT(ReadLoop()), Qt::DirectConnection);
    // go!
    captureThread.start();

    //Start ModuleManager
    if (modManager->Begin() < 0) {
        logger->AddToLog("Could not start Module Manager.");
        return(-1);
    }
    QThread modThread;

    modManager->moveToThread(&modThread);
    QObject::connect(&modThread, SIGNAL(started()),modManager, SLOT(ManagerThread()), Qt::DirectConnection);
    modThread.start();

	qDebug() << "[Main] Functioning with timestamp: " << QDateTime::currentDateTime().toTime_t();
	//QTimer::singleShot(0, console, SLOT(ReadLoop()));
	
	return a.exec();
}