Esempio n. 1
0
int svrGwsPolling(bool _debug_output,SerialCom* comm,int* nTimer) {
    int nData = 0;
    char sData[512];

    if (*nTimer > 0) {
        memset(sData, 0x00, 512);
        SVR_DEBUG(_debug_output,VT100_RESET VT100_INVERT "\b\b\b\b\b\b<%02d>", *nTimer);
        nData = ScRead(comm, sData, 512);
        SVR_DEBUG(_debug_output,"%d",nData);
        if (nData > 0) {
            idel_times = 0;
            BufAppend(&local_gws_buff, sData);
            return TASK_POLLING_RADIO;
        } else { //If we have read something, and after 5 times of reading nothing,
            if (!BufIsEmpty(&local_gws_buff)) {
                idel_times ++;
            }
            if (idel_times >= 5) { //consider it was over
                BufAppend(&local_gws_buff, NULL);
                idel_times = 0;
                SetTimerOut(*nTimer);
                return TASK_UPDATE_RADIO;
            } else return TASK_POLLING_RADIO;
        }
    } else return TASK_IDEL;
}
//打开并初始化串口
BOOL CSerialPorts::InitComPortSet(int nCom, int nBaud,int nParity)
{
	//检查串口是否已经打开
	if(TRUE==CheckPortOpen())
		CloseComPort();
	//设置异步读写事件
	if(FALSE==SetEventToReadWrite())
		AfxMessageBox(_T("串口连接设置失败,请重新连接!"));
	//设置波特率、串口名和校验方式
	m_nBaud=nBaud;
	m_nParity=nParity;
	switch(nCom)
	{
	case 0: m_cName=_T("COM1"); break;
	case 1: m_cName=_T("COM2"); break;
	case 2: m_cName=_T("COM3"); break;
	case 3: m_cName=_T("COM4"); break;
	case 4: m_cName=_T("COM5"); break;
	case 5: m_cName=_T("COM6"); break;
	case 6: m_cName=_T("COM7"); break;
	case 7: m_cName=_T("COM8"); break;
	}
	//打开端口
	hCom=CreateFile(m_cName,        //端口名               
		GENERIC_READ|GENERIC_WRITE, //访问类型:读写
		0,                          //是否共享端口,0为独占
		NULL,                       //默认安全性
		OPEN_EXISTING,              //只打开而不创建
		FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠方式
		NULL);                      //端口打开时不需要,参数为0
	if(INVALID_HANDLE_VALUE==hCom)
		return FALSE;
	//设置串口缓冲区大小
	SetPortBuffSize();
	//设置DCB结构体
	if(FALSE==SetDCBParam())
		return FALSE;
	//设置超时结构体
	SetTimerOut();
	//清空串口数据缓冲区
	PurgeComm(hCom,PURGE_RXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_TXABORT);	
	return TRUE;
}
Esempio n. 3
0
int svrCmdHandler(SerialCom* comm,GWS_MESSAGE* gws_msg,CommandHandlerPara* para) {
    char command[64];
    char parameter[32];
    int* nTimer = &(para->m_nCommBusy);
    int region = 0;
    int nId = para->m_nIdentifier;
    P_GWS_KPI pKpi = para->m_pKpi;

    RW_KPI_VAR(nId,region,pKpi->m_radio.m_nRegion);
    strcpy(parameter, gws_msg->m_command.m_sPara);
    switch (gws_msg->m_command.m_nReq) {
    case SCAN_CHAN:
    case SCAN_FIXED_CHAN:
        if (MIN_CHANNEL(region) <= para->m_nOriginChannel && para->m_nOriginChannel <= MAX_CHANNEL(region)) {
            COM_LOCK(1000 * MSEC_TICKS);    //occupy serial port for 500 ms
            RW_KPI_VAR(nId,latest_rxcal,pKpi->m_radio.m_bRXCal);
            RW_KPI_VAR(nId,latest_rxgain,pKpi->m_radio.m_nRXGain);
            PRE_SCAN_COMMAND(comm,"setrxcal 0");
            PRE_SCAN_COMMAND(comm,"setrxgain 0");
            para->m_nCurrentChannel = para->m_nOriginChannel;
            CHANNEL_SCAN_ON_OFF(para->m_uChanScan,gws_msg->m_command.m_nReq == SCAN_FIXED_CHAN ?
                                SCANNING_FIXED_INIT : SCANNING_ALL_INIT);
            gws_msg->m_nType = 0;
        } else {
            svrSetErrorNo(GWS_ERROR_INVALIDATE_CHANNEL);
        }
        break;
    case STOP_CHAN:
        if (para->m_uChanScan == SCANNING_FIXED_READ) {
            CHANNEL_SCAN_ON_OFF(para->m_uChanScan, SCANNING_FIXED_DONE);
        } else {
            CHANNEL_SCAN_ON_OFF(para->m_uChanScan, SCANNING_DONE);
            APP_SCAN_COMMAND(comm,static_chp.m_nOriginChannel);
        }
        gws_msg->m_nType = 0;
        break;
    case SET_TXON:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "tx%s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_RXON:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "rx%s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_TXCAL:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "settxcal %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
    case SET_RXCAL:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "setrxcal %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_REGION:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "setregion %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_CHAN:
        if (*nTimer <= 0) {
            int new_channel = para->m_nOriginChannel;
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            CHANNEL_SCAN_ON_OFF(para->m_uChanScan,false);
            if (IsNumber(parameter)) {
                new_channel = atoi(parameter);
            } else if (parameter[0] == 'x') {
                new_channel --;
                if (new_channel < MIN_CHANNEL(region)) new_channel = MAX_CHANNEL(region);
            } else if (parameter[0] == 'v') {
                new_channel ++;
                if (new_channel > MAX_CHANNEL(region)) new_channel = MIN_CHANNEL(region);
            }
            para->m_nCurrentChannel = new_channel;
            para->m_nOriginChannel = svrSetChannel(comm, region,para->m_nCurrentChannel,&timer_chan_switch);
            gws_msg->m_nType = 0;
        }
        break;
    case SET_TXPWR:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "settxpwr %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_GAIN:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "setrxgain %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_MODE:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "config_%s", parameter);
            system(command);
            usleep(1000000);
            system("reboot");
            gws_msg->m_nType = 0;
        }
        break;
    case SET_TXATT:
        if (*nTimer <= 0) {
            COM_LOCK(500 * MSEC_TICKS);    //occupy serial port for 500 ms
            sprintf(command, "settxatten %s\n", parameter);
            ScSend(comm, command, strlen(command));
            gws_msg->m_nType = 0;
        }
        break;
    case SET_BANDWIDTH:
        set_wifi_bandwidth(parameter);
        gws_msg->m_nType = 0;
        break;
    case WIFI_TXPW:
        PipeShellCommand(   para->m_shell, "iw", "dev",
                            para->m_ifName, "set", "txpower", "fixed",
                            gws_msg->m_command.m_sPara, NULL);
        gws_msg->m_nType = 0;
        break;
    case 'Q':
    case 'q':
        CHANNEL_SCAN_ON_OFF(para->m_uChanScan,false);
        SetTimerOut(*nTimer);
        gws_msg->m_nType = 0;
        break;
    case SHUTDOWN:
#ifdef  _GWS_DEBUG
        ShowStatusBar("Shutdown Server.");
#endif
        gws_msg->m_nType = 0;
        return 0;
    default:
        gws_msg->m_nType = 0;
    }
    return 1;
}