//-------------------------------------------------------------------------------------------------------------------------- // // 初始化时钟中断 // //-------------------------------------------------------------------------------------------------------------------------- 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"); }
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); }
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(); }