示例#1
0
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;
}
示例#3
0
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);
}
示例#4
0
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;
}
示例#5
0
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;
}