splatclient::splatclient(string windowstyle,nCursesWindow *window, string ip, unsigned int port) { //SSL stuff SSL_library_init(); ERR_load_crypto_strings(); ERR_load_SSL_strings(); OpenSSL_add_all_algorithms(); // init receive buffer recv_buff.iMessageid=recv_buff.tSize=0; memset(&(recv_buff.cMesg), '\0',CHUNK); sessionID=0; win=window; sockfd=-1; log= new cLogfile("splatclient.log",false); msgID=0; server_ip=ip; server_port=port; // vParseWindowstyle(windowstyle, window); if (!win) { sLogelement C1(-1, "Keine Windowfunktion übergeben", false); (*log)<<C1; exit(1); } sLogelement C1(0, "Splatclient erschaffen", true); (*log)<<C1; *win<<C1; if (!bConnect(port, ip)) { win->windowstack.back()->nCgetwin().~nCursesWindow(); exit(1); } else { sLogelement C1(-1, "Verbindung hergestellt", true); *win<<C1; } keypad(stdscr,true); nodelay(win->windowstack.back()->win, true); if (!iGetsocket()) { sLogelement t1(-1,"No socket found!",false);//FATAL *win<<t1; win->windowstack.back()->nCgetwin().~nCursesWindow(); (*log) << t1; exit(1); } //cFlow_client bkgactive=true; //still need to be active for ping/pong messages //MENU menu=NULL; vCreateMenu(); bDirty=true; }
//============================================================================= int XSocket::iOnSocketEvent(WPARAM wParam, LPARAM lParam) { int WSAEvent; PutLogList("iOnSocketEvent"); if (m_cType != XSOCK_NORMALSOCK) return XSOCKEVENT_SOCKETMISMATCH; if (m_cType == NULL) return XSOCKEVENT_NOTINITIALIZED; if ((SOCKET)wParam != m_Sock) return XSOCKEVENT_SOCKETMISMATCH; WSAEvent = WSAGETSELECTEVENT(lParam); switch (WSAEvent) { case FD_CONNECT: if (WSAGETSELECTERROR(lParam) != 0) { if (bConnect(m_pAddr, m_iPortNum, m_uiMsg) == FALSE) return XSOCKEVENT_SOCKETERROR; return XSOCKEVENT_RETRYINGCONNECTION; } else { m_bIsAvailable = TRUE; return XSOCKEVENT_CONNECTIONESTABLISH; } break; case FD_READ: if (WSAGETSELECTERROR(lParam) != 0) { m_WSAErr = WSAGETSELECTERROR(lParam); return XSOCKEVENT_SOCKETERROR; } else return _iOnRead(); break; case FD_WRITE: return _iSendUnsentData(); break; case FD_CLOSE: m_cType = XSOCK_SHUTDOWNEDSOCK; return XSOCKEVENT_SOCKETCLOSED; break; } return XSOCKEVENT_UNKNOWN; }
void vModPcmConfigAndRun(PCM_MODULE ePcmModule, PCM_INFO_T *pPcmInfo) { MEMIF_CONFIG_T memModDaiCfg; SAMPLINGRATE_T eSampleRate; /// reset vStrongResetAFE(); /// power on vAudioTopControl(); // AUDIO_TOP_CON0[14] = 1 /// config FPGA WriteREG(FPGA_CFG0, 0x00000007); // hopping 26m, MCLK : 3.072M if (ePcmModule == PCM_1 && pPcmInfo->ePcmModemSel == PCM_INT_MD) { vRegSetBit(FPGA_CFG1, 14); } /// get sample rate info eSampleRate = (pPcmInfo->ePcm8k16kmode == PCM_8K) ? AFE_8000HZ : AFE_16000HZ; #if 1 /// Sgen config as Tx data AFE_SINEGEN_INFO_T rSineTone; rSineTone.u4ch1_freq_div = 1; rSineTone.rch1_amp_div = SINE_TONE_1; rSineTone.rch1_sine_mode = eSampleRate; rSineTone.u4ch2_freq_div = 2; rSineTone.rch2_amp_div = SINE_TONE_1; rSineTone.rch2_sine_mode = eSampleRate; rSineTone.rloopback_mode = SINE_TONE_LOOPBACK_O7_O8; // O17_O18 simultaneously vAfeSineWaveGenCfg(&rSineTone); #else bConnect(I05, O07, FALSE); bConnect(I06, O08, FALSE); MEMIF_CONFIG_T memDL1Cfg; memset(&memDL1Cfg, 0, sizeof(MEMIF_CONFIG_T)); UINT32 addr; for(addr=u4DramVirBase; addr<=u4DramVirBase+0x3FFF; addr+=4) { *(UINT32*) addr = 0x66660000; } memDL1Cfg.eMemInterface = AFE_MEM_DL1; memDL1Cfg.eDaiModSamplingRate = eSampleRate; memDL1Cfg.eChannelConfig = AFE_STEREO; memDL1Cfg.rBufferSetting.u4AFE_MEMIF_BUF_BASE = u4DramPhyBase; memDL1Cfg.rBufferSetting.u4AFE_MEMIF_BUF_END = u4DramPhyBase + 0x3FFF; vAfeTurnOnMemif(&memDL1Cfg); /// Sgen config as Rx data AFE_SINEGEN_INFO_T rSineTone; rSineTone.u4ch1_freq_div = 1; rSineTone.rch1_amp_div = SINE_TONE_1; rSineTone.rch1_sine_mode = eSampleRate; rSineTone.u4ch2_freq_div = 0; rSineTone.rch2_amp_div = SINE_TONE_1; rSineTone.rch2_sine_mode = eSampleRate; rSineTone.rloopback_mode = SINE_TONE_LOOPBACK_O0_O1; vAfeSineWaveGenCfg(&rSineTone); vI2SSet(I2S_16BIT, I2S_I2S, eSampleRate, I2S_MASTER, I2S_OUT); vI2SEnable(I2S_ENABLE); vRegWriteBits(PCM_INTF_CON, 1, 26, 1); #endif /// ASRC if (pPcmInfo->ePcmClkSrc==PCM_SLAVE && pPcmInfo->ePcmBypassASRC==PCM_GO_ASRC) { vSetASRC(pPcmInfo->ePcm8k16kmode); vASRCEnable(TRUE); } /// Config PCM vSetModPCM(ePcmModule, pPcmInfo); vModPCMEnable(ePcmModule, PCM_ENABLE); /// Memory Interface // Dump Rx data to MOD_DAI_Data (O_12) if (ePcmModule == PCM_1) { bConnect(I09, O012, false); } else { //bConnect(I14, O012, false); vRegSetBit(AFE_CONN4, 12); } // Memory (O_12) memset(&memModDaiCfg, 0, sizeof(MEMIF_CONFIG_T)); memModDaiCfg.eMemInterface = AFE_MEM_MOD_PCM; memModDaiCfg.eDaiModSamplingRate = pPcmInfo->ePcm8k16kmode; memModDaiCfg.eDupWrite = AFE_DUP_WR_DISABLE; memModDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_BASE = MOD_PCM_BASE; memModDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_END = MOD_PCM_END; vAfeTurnOnMemif(&memModDaiCfg); vRegResetBit(AFE_DAC_CON0, MOD_PCM_ON); #ifdef MOD_PCM_OFF_ON_TEST UINT32 u4PcmOffAddr = MOD_PCM_BASE + (MOD_PCM_SIZE / 4); UINT32 u4PcmOnAddr = MOD_PCM_END - (MOD_PCM_SIZE / 4) + 1; printk("MOD_PCM_OFF_ON_TEST: u4PcmOffAddr=0x%x, u4PcmOnAddr=0x%x\n", u4PcmOffAddr, u4PcmOnAddr); #endif /// turn on vAfeTurnOn(); vAfeSineWaveGenEnable(true); /// wait for 10 sec - observe frequency and amplitude vFpgaAudioClockDelaySec(10); /// wait vRegSetBit(AFE_DAC_CON0, MOD_PCM_ON); #ifdef MOD_PCM_OFF_ON_TEST while( ReadREG(AFE_MOD_PCM_CUR) <= u4PcmOffAddr); vModPCMEnable(ePcmModule, PCM_DISABLE); while( ReadREG(AFE_MOD_PCM_CUR) <= u4PcmOnAddr); vModPCMEnable(ePcmModule, PCM_ENABLE); #endif while( ReadREG(AFE_MOD_PCM_CUR) <= (ReadREG(AFE_MOD_PCM_END)-0x100)); vRegResetBit(AFE_DAC_CON0, MOD_PCM_ON); /// turn off vAfeSineWaveGenEnable(false); vModPCMEnable(ePcmModule, PCM_DISABLE); vASRCEnable(FALSE); vRegResetBit(AFE_DAC_CON0, AFE_ON); /// wait for 10 sec - dump memory printk("Please config the next item\n"); vFpgaAudioClockDelaySec(10); }
BOOL fgModPcmVbtConfigAndRun(PCM_MODULE ePcmModule, PCM_INFO_T *pPcmInfo) { BOOL retval; MEMIF_CONFIG_T memModDaiCfg; SAMPLINGRATE_T eSampleRate; /// reset vStrongResetAFE(); /// power on vAudioTopControl(); // AUDIO_TOP_CON0[14] = 1 /// config FPGA vFpgaModemDaiSwitch(FALSE); // do pin (4~10) select to DAI if (ePcmModule == PCM_1 && pPcmInfo->ePcmModemSel == PCM_INT_MD) { vRegSetBit(FPGA_CFG1, 14); } /// get sample rate info eSampleRate = (pPcmInfo->ePcm8k16kmode == PCM_8K) ? AFE_8000HZ : AFE_16000HZ; /// Sgen config as Tx data AFE_SINEGEN_INFO_T rSineTone; rSineTone.u4ch1_freq_div = 1; rSineTone.rch1_amp_div = SINE_TONE_1; rSineTone.rch1_sine_mode = eSampleRate; rSineTone.u4ch2_freq_div = 2; rSineTone.rch2_amp_div = SINE_TONE_1; rSineTone.rch2_sine_mode = eSampleRate; rSineTone.rloopback_mode = SINE_TONE_LOOPBACK_O7_O8; // O17_O18 simultaneously vAfeSineWaveGenCfg(&rSineTone); /// ASRC if (pPcmInfo->ePcmClkSrc==PCM_SLAVE && pPcmInfo->ePcmBypassASRC==PCM_GO_ASRC) { vSetASRC(pPcmInfo->ePcm8k16kmode); vASRCEnable(TRUE); } /// Config PCM vSetModPCM(ePcmModule, pPcmInfo); vModPCMEnable(ePcmModule, PCM_ENABLE); /// Config DAI bConnect(I02, O02, false); // Loopback #if 0 bConnect(I02, O011, false); MEMIF_CONFIG_T memDaiCfg; memset(&memDaiCfg, 0, sizeof(MEMIF_CONFIG_T)); memDaiCfg.eMemInterface = AFE_MEM_DAI; memDaiCfg.eChannelConfig = AFE_MONO; memDaiCfg.eDupWrite = AFE_DUP_WR_DISABLE; memDaiCfg.eDaiModSamplingRate = AFE_DAIMOD_16000HZ; memDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_BASE = 0x80100000; //TODO memDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_END = 0x80103FFF; //TODO vAfeTurnOnMemif(&memDaiCfg); #endif vBtPcmSet(BTPCM_16K); vBtPcmEnable(BTPCM_ENABLE); /// Dump Rx data to MOD_DAI_Data (O_12) if (ePcmModule == PCM_1) { bConnect(I09, O012, false); } else { //bConnect(I14, O012, false); vRegSetBit(AFE_CONN4, 12); } /// Memory Interface memset(&memModDaiCfg, 0, sizeof(MEMIF_CONFIG_T)); memModDaiCfg.eMemInterface = AFE_MEM_MOD_PCM; memModDaiCfg.eDaiModSamplingRate = pPcmInfo->ePcm8k16kmode; memModDaiCfg.eDupWrite = AFE_DUP_WR_ENABLE; memModDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_BASE = u4DramPhyBase; memModDaiCfg.rBufferSetting.u4AFE_MEMIF_BUF_END = u4DramPhyEnd; vAfeTurnOnMemif(&memModDaiCfg); /// turn on vAfeTurnOn(); vAfeSineWaveGenEnable(true); /// wait while( ReadREG(AFE_MOD_PCM_CUR) <= (ReadREG(AFE_MOD_PCM_END)-0x100)); vRegResetBit(AFE_DAC_CON0, MOD_PCM_ON); /// turn off vAfeSineWaveGenEnable(false); vModPCMEnable(ePcmModule, PCM_DISABLE); vASRCEnable(FALSE); vBtPcmEnable(BTPCM_ENABLE); vRegResetBit(AFE_DAC_CON0, AFE_ON); if (check_bit_true(ReadREG(AFE_MOD_PCM_BASE),ReadREG(AFE_MOD_PCM_END),table_sgen_golden_values_ch1_duplicate,64)) { printk("VBT 16K Mode Pass\n\n"); retval= TRUE; } else { printk("VBT 16K Mode Fail\n\n"); retval= FALSE; } return retval; }
bool splatclient::bMainloop(bool keyboard) { // bStayConnected(); if (bDirty) { if (menu!=NULL && menu->bFinished) { unsigned short menu_x=-1; unsigned short menu_y=-1; //Interpret menu /* menu->vChoice(menu_x, menu_y); mlist->elements[0].entry.push_back(string("Main")); mlist->elements[0].entry.push_back(string("Exit")); mlist->elements[1].entry.push_back(string("Sys Commands")); mlist->elements[1].entry.push_back(string("0x00 Disconnect")); mlist->elements[1].entry.push_back(string("0x01 login")); mlist->elements[2].entry.push_back(string("Ch admin ctrl")); mlist->elements[2].entry.push_back(string("0x10 Char creation")); mlist->elements[2].entry.push_back(string("0x1F Remove Char")); mlist->elements[3].entry.push_back(string("Char and Game Req")); mlist->elements[3].entry.push_back(string("EMPTY")); mlist->elements[4].entry.push_back(string("Misc")); mlist->elements[4].entry.push_back(string("0x31 Splash screen")); */ menu->vChoice(menu_x, menu_y); string msg; if (menu_x==0&& menu_y==1) //disconnect and exit { delete menu; menu=NULL; bDirty=false; vDisconnect(); return false; } else if ( menu_x==1 && menu_y==1) //simple connect { if (!bConnect(server_port, server_ip)) { sLogelement t1(-1,"Couldn't connect",false);//FATAL *log<<t1; *win<<t1; } else { sLogelement t1(-1,"Connecting",true);//FATAL for RL *log<<t1; *win<<t1; } menu=NULL; delete menu; win->vFlush(); bDirty=false; return true; } else if ( menu_x==1 && menu_y==2) //simple disconnect { sLogelement t1(-1,"Disconnecting",true); *log<<t1; *win<<t1; win->vFlush(); vDisconnect(); menu=NULL; delete menu; win->vFlush(); bDirty=false; return true; } else if ( menu_x==1 && menu_y==3) //Login { string sPassword, sUser; sUser="******"; sPassword="******"; sLogelement t1(-1,string("Sending "+sUser+" and Password"),true); *log<<t1; *win<<t1; bLogin(sUser,sPassword); delete menu; menu=NULL; win->vFlush(); bDirty=false; return true; } else if ( menu_x==1 && menu_y==4) //registration { string sPassword, sUser, sEmail; sUser="******"; sPassword="******"; sEmail="*****@*****.**"; sLogelement t1(-1,string("Sending "+sUser+" and Password and "+sEmail),true); *win<<t1; *log<<t1; bCreateAccount(sUser, sPassword, sEmail); delete menu; menu=NULL; win->vFlush(); bDirty=false; return true; } else if (menu_x==2 && menu_y==1) { recv_buff.cCommand=0x10; bSend(NULL, 0); } else if (menu_x==2 && menu_y==2) { recv_buff.cCommand=0x1F; bSend(NULL, 0);//Remove Char } else if ( menu_x==4 && menu_y==1) { recv_buff.cCommand=0x31; bSend(NULL, 0);//send splashscreen if(bTimeRecv(1)) { if (recv_buff.tSize==5+MAXLINE*MAXROW*2) { sFrame t; sfCreatesFrame(t, recv_buff.cMesg, recv_buff.tSize); win->windowstack<<t; delete menu; menu=NULL; bDirty=false; return true; } sLogelement t1(-1,"Not enough data received",true); t1 << recv_buff.tSize; t1 << "should be 3437"; *log<<t1; return true; } } delete menu; menu=NULL; win->vFlush(); bDirty=false; } } // Checking for working client goes here if (keyboard) { int ch=getch(); if (ch==KEY_F(5)) { menu=new cNcurmenu(win); vCreateMenu(); menu->vAddmenulist(*mlist); menu->vAddmaster(cflowMaster); cflowMaster->vAdd(menu); bDirty=true; } if (ch==KEY_F(10)) { return false; } } string msg=""; unsigned int iSize; //poll new messages if (bRecv()) //You have mail! { int iMessageID; string msg=string(recv_buff.cMesg); if(bParser(msg)) //pars'em { return true; } else { vector <string> t; while (msg.size()>1) { int max=0; msg.size()>78? max=78 : max=msg.size(); t.push_back(msg.substr(0,max)); msg=msg.substr(max); } sFrame F; sfCreatesFrame(F, t); win->vSetrefresh(false); win->windowstack<<F; win->vSetrefresh(true); } } return true; }