Example #1
0
void SetSysParam(void)  //F0
{
    static WORD Day;
    static BYTE Hour;

    if (SmsLength == 2)
    {
        ReportSysParam();
        return;
    }
    
    if (CheckParamF0())
    {
        //  汇报电话号码
        mcpy((BYTE*)&SysParam[SP_MOBLENUM],&SmsContent[3],11);
        SysParam[SP_MOBLENUM+11] = 0;
        
        Day = GetRepDay();
        Hour = GetRepHour();

        //  时间间隔
        *(WORD *)&SysParam[SP_DAYDELTA] = Day;
        SysParam[SP_REPTIME] = Hour;

        SetNextPepTime();

        SaveSysParam();

        NoCenter = 0;

        mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
        SmsLength += 6;
        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }
    }
    else
    {
        Clear_Sms_Content();
        mcpy(SmsContent, "F0:Param Error! e.g. F0:13988888888,1234-08",43);
        SmsLength = 43;
        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }
    }
    
}
void Check_HFConst(uint *pBuf,BYTE len ,BYTE channel)
{
    uint temp;
     
    temp = MeanValue(pBuf, len);
    *(WORD *)&SysParam[SP_RNHFCONST+2*channel] = *(WORD *)&SysParam[SP_RNHFCONST+2*channel]*temp/32;
    spiWrite(channel, HFCONST, *(WORD *)&SysParam[SP_RNHFCONST+2*channel], WIDTH_TWO_B);
    SaveSysParam();
    
}
void taskRnIsr(void *pmsg)
{
    BYTE err;
    uint IFData=0;
    uint PData=0;
    uint channel;
//    static BYTE flag[9]={0};

    printf ( "\r\nIsr task begin..." );
       
    while(1)
    {
        OSSemPend(RNSemIsr,0,&err);
        //printf("insert isr\n");
        for(channel=0;channel<9;channel++)
        {
            spiRead(channel, RIF, &IFData, WIDTH_ONE_B);
            if(IFData & RN_RPEOIF)//溢出中断
            {
                printf("overflow\n");
                SysParam[SP_PEOIF_COUNT+channel]++;//记录每个通道电能寄存器溢出次数   
                SaveSysParam(); 
                //Read_FM24C(FM_address, OVERFLOW_COUNT+channel,&temp[0], 1);
                //temp[0]++;
                //Write_FM24C(FM_address, OVERFLOW_COUNT+channel,&temp[0], 1);
                
                spiRead(channel, ENERGYP2, &PData, WIDTH_THREE_B);//CLEAR ENERGYP2
                PData = 0x00;
                Write_FM24C(FM_address, A_EEAddr+channel*3,(BYTE *)&PData, 3);
            }

            if(IFData & RN_RPFIF)//PF脉冲
            {
                printf("PF%d\n",channel);
                pfcount[channel]++;
                if( pfcount[channel]==32)
                {   
                    pfcount[channel]=0;
                    spiRead(channel, ENERGYP2, &PData, WIDTH_THREE_B);
                    
                    Read_FM24C(FM_address, A_EEAddr+channel*3, (BYTE*)&IFData, 3);
                    PData +=IFData;
                    printf("energyp%d=%d\n",channel,PData);
                    //将读出的电能值存入铁电
                    Write_FM24C(FM_address, A_EEAddr+channel*3, (BYTE*)&PData, 3);
                }
            }

        } 
        //channelSelect(0);   
    }

}
Example #4
0
// F6 服务器域名
void SetHostName(void)
{
    static BYTE j; 
    if (SmsLength-3 < 32)
    {
        for (j=SP_HOSTNAME;j<SP_HOSTNAME+32;j++)
        {
            SysParam[j] = 0;
        }

        j = 0;
        for (j=0;j<SmsLength-3;j++)
        {            
            SysParam[j+SP_HOSTNAME] = SmsContent[j+3];           
        }
        
        //mcpy(&SysParam[SP_HOSTNAME],&SmsContent[3],SmsLength-3);
        SaveSysParam();

        mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
        SmsLength += 6;
    }
    else
    {
        mcpy(&SmsContent[SmsLength],"(Fail)\r\n",8);
        SmsLength += 8;
    }
    
    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }
}
Example #5
0
void SetUserInfo()
{
    static BYTE i,j; 
    if (SmsLength-3 < 65)
    {
        j = 0;
        while(SmsContent[j+3] != ';')
        {
            j++;
            if (j > SmsLength-3)
            {
                goto Fail2;   // 没有发现";"者返回错误
            }
        }

        
        for (j=SP_NETUSERNAME;j<SP_NETUSERNAME+32;j++)
        {
            SysParam[j] = 0;
        }

        for (j=SP_NETPASSWORD;j<SP_NETPASSWORD+32;j++)
        {
            SysParam[j] = 0;
        }

        j = 0;
        while(SmsContent[j+3] != ';')
        {
            SysParam[j+SP_NETUSERNAME] = SmsContent[j+3];      
            j++;
            if (j > SmsLength-3)
            {
                goto Fail2;
            }
        }

        j++;
        i = 0;
        for (;j<SmsLength-3;j++)
        {
            SysParam[i+SP_NETPASSWORD] = SmsContent[j+3];
            i++;
        }
        
        
        SaveSysParam();

        if ((SmsLength + 6) > SMSMSGCOUNT)
        {
            SmsLength -= 6;
        }

        mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
        SmsLength += 6;

        //Send_Pdu_SMS();
        //Send_Txt_SMS(SmsNumber, SmsContent);

        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }

        SysReset();
    }

Fail2:
    {
        if ((SmsLength + 8) > SMSMSGCOUNT)
        {
            SmsLength -= 8;
        }
        
        mcpy(&SmsContent[SmsLength],"(Fail)\r\n",8);
        SmsLength += 8;

        //Send_Pdu_SMS();
        //Send_Txt_SMS(SmsNumber, SmsContent);

        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }
    }
    
    
}
Example #6
0
//短信唤醒并发送注册命令
void SmsWakeup(void)
{
    static BYTE i,loc;

    i = 0;
    while(i<SmsLength)
    {
        if (SmsContent[i] == ',')
        {
            break;
        }
        i++;
    }
    if (i>=SmsLength)
    {
        goto Fail;
    }

    mset(IpAddrStr,0,16);
    mset(PortStr,0,6);
    
    mcpy(IpAddrStr,&SmsContent[3],i-3);             // Server Ip Address
    if (!CheckValidIpAddr())
    {
        goto Fail;
    }

    if (!StrToIpAdd((BYTE*)&SysParam[SP_SERVERIP]))
    {
        goto Fail;
    }

    loc = i;

    mcpy(PortStr,&SmsContent[loc+1],SmsLength-loc-1);  // Server Port
    if (!CheckValidPort())
    {
        goto Fail;
    }

    if (!StrToPort((BYTE*)&SysParam[SP_SERVERPORT]))
    {
        goto Fail;
    }
    
    SaveSysParam();
            
    
    NeedConnSrv = 1;
    return;
    

Fail:
    NeedConnSrv = 0;
    mcpy(&SmsContent[SmsLength],"(Fail)\r\n",8);
    SmsLength += 8;
    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }
}
Example #7
0
//F7: 系统配置-- 系统复位,启动/关闭HTTP, 恢复默认参数,SOCKET使能[可选],IP地址模式
// CDMA暂时不支持HTTP方式
void SysConfig(void)  // F7:0[,0,0,0,0]
{    
    static BYTE NeedReboot;

    // 至少一个参数
    // check Param
    if (SmsLength < 4)
    {
        goto Error;
    }

    if ((SmsContent[3] != '0') && (SmsContent[3] != '1'))
    {
        goto Error;
    }

    if (SmsLength >= 6)
    {
        if ((SmsContent[5] != '0') && (SmsContent[5] != '1'))
        {
            goto Error;
        }
    }

    if (SmsLength >= 8)
    {
        if ((SmsContent[7] != '0') && (SmsContent[7] != '1'))
        {
            goto Error;
        }
    }

    if (SmsLength >= 10)
    {
        if ((SmsContent[9] != '0') && (SmsContent[9] != '1'))
        {
            goto Error;
        }
    }

    if (SmsLength >= 12)
    {
        if ((SmsContent[11] != '1') && (SmsContent[11] != '2')  && (SmsContent[11] != '3'))
        {
            goto Error;
        }
    }

    NeedReboot = 0;
    

    //恢复默认参数
    if (SmsLength >= 8)
    {
        if (SmsContent[7] == '1')
        {
            setParamToDefault();
            NeedReboot = 1;
        }
    }

    //HTTP mode  -- 该参数变了要重启
    if (SmsLength >= 6)
    {
        if (SysParam[SP_ENABLEHTTP] != (SmsContent[5] - 0x30))
        {
            NeedReboot = 1;
        }
        
        if (SmsContent[5] == '0')
        {
            SysParam[SP_ENABLEHTTP] = 0;
        }
        else if (SmsContent[5] == '1')
        {
            SysParam[SP_ENABLEHTTP] = 1;
        }
    }
    
    
    //是否启动南京高兴模式 Socket Mode  -- 该参数变了要重启
    if (SmsLength >= 10)
    {
        if (SysParam[SP_ENABLESOCKET] != (SmsContent[9] - 0x30))
        {
            NeedReboot = 1;
        }
        
        if (SmsContent[9] == '1')
        {
            SysParam[SP_ENABLESOCKET] = 1;
        }
        else if (SmsContent[9] == '0')
        {
            SysParam[SP_ENABLESOCKET] = 0;
        }
    }

    //IP地址模式 -- 该参数变了要重启
    if (SmsLength >= 12)
    {
        if (SysParam[SP_DEVIPMODE] != (SmsContent[11] - 0x30))
        {
            NeedReboot = 1;
        }
        
        if (SmsContent[11] == '1')
        {
            SysParam[SP_DEVIPMODE] = IPMODE_FIXED;
        }
        else if (SmsContent[11] == '2')
        {
            SysParam[SP_DEVIPMODE] = IPMODE_DHCP;
        }
        else if (SmsContent[11] == '3')
        {
            SysParam[SP_DEVIPMODE] = IPMODE_PPPOE;
        }
    }
    
    SaveSysParam();

    if (SmsContent[3] == '1')
    {
        NeedReboot = 1;
    }
    

    mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
    SmsLength += 6;
    
    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }

    Sleep(2000);
    //WDog();
    Sleep(3000);
    //WDog();
    
    //系统复位
    if (NeedReboot == 1)
    {
        printf("Sys Resetting...\r\n");
        SysReset();
    }

    return;

Error:
    Clear_Sms_Content();
    mcpy(&SmsContent[0],"F7:Param Error. e.g. F7:0,0,0\r\n",31);
    SmsLength = 31;
    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }
}
Example #8
0
// F6 设置串口参数: 波特率,校验(只支持8位数据位和1位停止位,无需设置)
// 150,300,600,1200,2400,4800,9600,19200,38400,57600, 115200
// E(偶校验),O(奇校验)
// 如9600E(波特率9600,偶校验); 1200(波特率1200,无校验)
void SetUartParam(void)
{
    static BYTE ChkBit,BaudRt,BaudLen;
    static BYTE NeedReboot;
    
    if (SmsContent[SmsLength-1] != '0')
    {
        if (SmsContent[SmsLength-1] == 'E')
        {
            ChkBit = CHECK_EVEN;
        }
        else if (SmsContent[SmsLength-1] == 'O')
        {
            ChkBit = CHECK_ODD;
        }
        else
        {
            ChkBit = 0xFF;
        }
        BaudLen = SmsLength - 4;
    }
    else
    {
        ChkBit = CHECK_NONE;
        BaudLen = SmsLength - 3;
    }

    if (BaudLen == 3)
    {
        if (mcmp(&SmsContent[3], "150", BaudLen))
        {
            BaudRt = BAUDRATE_150;
        }
        else if (mcmp(&SmsContent[3], "300", BaudLen))
        {
            BaudRt = BAUDRATE_300;
        }
        else if (mcmp(&SmsContent[3], "600", BaudLen))
        {
            BaudRt = BAUDRATE_600;
        }
        else 
        {
            BaudRt = 0xFF;
        }
    }
    else if (BaudLen == 4)
    {
        if (mcmp(&SmsContent[3], "1200", BaudLen))
        {
            BaudRt = BAUDRATE_1200;
        }
        else if (mcmp(&SmsContent[3], "2400", BaudLen))
        {
            BaudRt = BAUDRATE_2400;
        }
        else if (mcmp(&SmsContent[3], "4800", BaudLen))
        {
            BaudRt = BAUDRATE_4800;
        }
        else if (mcmp(&SmsContent[3], "9600", BaudLen))
        {
            BaudRt = BAUDRATE_9600;
        }
        else 
        {
            BaudRt = 0xFF;
        }
    }
    else if (BaudLen == 5)
    {
        if (mcmp(&SmsContent[3], "19200", BaudLen))
        {
            BaudRt = BAUDRATE_19200;
        }
        else if (mcmp(&SmsContent[3], "38400", BaudLen))
        {
            BaudRt = BAUDRATE_38400;
        }
        else if (mcmp(&SmsContent[3], "57600", BaudLen))
        {
            BaudRt = BAUDRATE_57600;
        }
        else 
        {
            BaudRt = 0xFF;
        }
    }
    else if (BaudLen == 6)
    {
        if (mcmp(&SmsContent[3], "115200", BaudLen))
        {
            BaudRt = BAUDRATE_115200;
        }
        else 
        {
            BaudRt = 0xFF;
        }
    }
    else
    {
        BaudRt = 0xFF;
    }

    if ((BaudRt != 0xFF) && (ChkBit != 0xFF))
    {
        SysParam[SP_CHECKBIT] = ChkBit;
        SysParam[SP_BAUDRATE] = BaudRt;
        SaveSysParam();

        mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
        SmsLength += 6;

        NeedReboot = 1;
    }
    else
    {
        mcpy(&SmsContent[SmsLength],"(Fail)\r\n",8);
        SmsLength += 8;

        NeedReboot = 0;
    }

    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }


    Sleep(2000);
    //WDog();
    Sleep(3000);
    //WDog();

    if (NeedReboot)
    {
        SysReset();
    }
}
Example #9
0
void SetDeviceParam(void)  //F5:0,1
{
    if (SmsLength < 4)
    {
        Clear_Sms_Content();
        mcpy(&SmsContent[0],"F5:Param Error. e.g. F5:0[,1]\r\n",31);
        SmsLength = 31;
        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }
        return;
    }
    
    if (SmsLength > 5)
    {
        if ((SmsContent[5] != '0') && (SmsContent[5] != '1'))
        {
            Clear_Sms_Content();
            mcpy(&SmsContent[0],"F5:Param Error. e.g. F5:0[,1]\r\n",31);
            SmsLength = 31;
            if (SysParam[SP_MODTYPE] == GSM_MG323)
            {
                Send_Pdu_SMS();
            }
            else if (SysParam[SP_MODTYPE] == CDMA_MC323)
            {
                Send_Txt_SMS(SmsNumber, SmsContent);
            }
            return;
        }
        else
        {
            SysParam[SP_DEVICETAP] = SmsContent[5] - 0x30;
        }
    }
    else
    {
        SysParam[SP_DEVICETAP] = 0;
    }

    if ((SmsContent[3] != '0') && (SmsContent[3] != '1'))
    {
        Clear_Sms_Content();
        mcpy(&SmsContent[0],"F5:Param Error. e.g. F5:0[,1]\r\n",31);
        SmsLength = 31;
        if (SysParam[SP_MODTYPE] == GSM_MG323)
        {
            Send_Pdu_SMS();
        }
        else if (SysParam[SP_MODTYPE] == CDMA_MC323)
        {
            Send_Txt_SMS(SmsNumber, SmsContent);
        }
        return;
    }
    else
    {
        SysParam[SP_DEVICECTL] = SmsContent[3] - 0x30;
    }

    SaveSysParam();


    mcpy(&SmsContent[SmsLength],"(Ok)\r\n",6);
    SmsLength += 6;
    if (SysParam[SP_MODTYPE] == GSM_MG323)
    {
        Send_Pdu_SMS();
    }
    else if (SysParam[SP_MODTYPE] == CDMA_MC323)
    {
        Send_Txt_SMS(SmsNumber, SmsContent);
    }
    
}
Example #10
0
File: main.c Project: x-lugoo/pos
void FirstRunProc(const ST_EVENT_MSG *pstEventMsg)
{
	uchar	szEngTime[16+1];
	uchar	ucNeedUpdateParam;

	// Added by Kim_LinHB 2014-7-2
	if(!bInitGui_1)
	{
		unsigned char sTermInfo[60];

		int iDefWidth = XuiStatusbarCanvas()->width/6;
		int iDefHeight = XuiStatusbarCanvas()->height;
		_GUI_INIT_(NULL); //default

		OsLog(LOG_ERROR, "it's a %dx%d device", Gui_GetScrWidth(), Gui_GetScrHeight());

		char szWidthStr[10];
		sprintf(szWidthStr, "%dx", Gui_GetScrWidth());
		int i;
        SetPrefixResPath(glResources[0].path);
        UpdateGlobalFont(glResources[0].fontSize);
		for(i = 1; glResources[i].path[0] != 0; ++i){
		    if(strstr(glResources[i].path, szWidthStr)){
	            SetPrefixResPath(glResources[i].path);
	            UpdateGlobalFont(glResources[i].fontSize);
	            break;
		    }
		}

        Gui_SetBgImage(AddPrefixResPath("background.png"));
        Gui_SetGlobalBtnImg(AddPrefixResPath("button_normal.png"), AddPrefixResPath("button_pressed.png"));

        char szTemp[32];
        if(OsRegGetValue("ro.fac.touchscreen", szTemp) > 0)
        {
            PreLoadAllKeyboard(); //EPT-20
        }


		Gui_SB_BindResource(XuiStatusbarCanvas(), "./res/icons.ini");

		Gui_SB_RegIcon(GUI_SB_ICON_BATTERY, iDefWidth * 5, 0, iDefWidth, iDefHeight, 500);
		Gui_SB_RegIcon(GUI_SB_ICON_UP_DOWN, iDefWidth * 4, 0, iDefWidth, iDefHeight, -1);
		Gui_RegCallback(GUI_CALLBACK_UPDATE_UPDOWN_ICON, Refresh_UpDown);
		Gui_SB_RegIcon(GUI_SB_ICON_CARDINSERTED, iDefWidth * 3, 0, iDefWidth, iDefHeight, 200);
		if (OsRegGetValue("ro.fac.printer", sTermInfo) > 0)
			Gui_SB_RegIcon(GUI_SB_ICON_PRINTER, iDefWidth * 2, 0, iDefWidth, iDefHeight, -1);

		bInitGui_1 = 1;
	}

    // Modified by Kim_LinHB 2014-7-2
    if( ExistSysFiles() )
    {
        if (ValidSysFiles())
        {
            int i;
            uchar *pType  = NULL;
            LoadSysParam();
            LoadSysCtrlAll();

            if(!bInitGui_2)
            {
                //update language
                _GUI_INIT_(glSysParam.stEdcInfo.stLangCfg.szFilePath);

                ChangeLangOrder();
                for(i = 0; i < 2; ++i)
                {
                    pType = (0 == i? &glSysParam.stTxnCommCfg.ucCommType: &glSysParam.stTxnCommCfg.ucCommTypeBak);
                    Reg_CommIcon(*pType, i);
                }
                bInitGui_2 = 1;
            }

            ucNeedUpdateParam = FALSE;
            if (pstEventMsg->MsgType==USER_MSG)
            {
                if (UpdateTermInfo() || InitMultiAppInfo())
                {
                    ucNeedUpdateParam = TRUE;
                }
            }
            if( glSysParam.stTxnCommCfg.pfUpdWaitUI!=DispWaitRspStatus )
            {
                glSysParam.stTxnCommCfg.pfUpdWaitUI = DispWaitRspStatus;
                glSysParam.stTMSCommCfg.pfUpdWaitUI = DispWaitRspStatus;
                ucNeedUpdateParam = TRUE;
            }

            if (ucNeedUpdateParam)
            {
                SaveSysParam();
            }
            return;
        } // if (ValidSysFiles())
        else
        {
            int iRet;
            Gui_ClearScr();
            iRet = Gui_ShowMsgBox(NULL, gl_stTitleAttr, NULL, _T("APP AND DATA\nINCONSIST.\nRESET CONFIG?"), gl_stCenterAttr, GUI_BUTTON_YandN, -1, NULL);
            if (iRet != GUI_OK)
            {
                SysHaltInfo("PLS REPLACE APP");
            }

            Gui_ClearScr();
            iRet = Gui_ShowMsgBox(NULL, gl_stTitleAttr, NULL, _T("WARNING\nDATA WILL BE CLEAR\nCONTINUE ?"), gl_stCenterAttr, GUI_BUTTON_YandN, -1, NULL);
            if (iRet != GUI_OK)
            {
                SysHaltInfo("PLS REPLACE APP");
            }

            RemoveSysFiles();
        }
    } // if( ExistSysFiles() )

    GetEngTime(szEngTime);
    Gui_ClearScr();
    Gui_ShowMsgBox(szEngTime, gl_stTitleAttr, NULL, _T("PLEASE WAIT...\nSYSTEM INIT..."), gl_stCenterAttr, GUI_BUTTON_NONE, 0, NULL);

    LoadEdcDefault();	// set EDC default values
    Gui_ClearScr();
    Gui_ShowMsgBox(szEngTime, gl_stTitleAttr, NULL, _T("PLEASE WAIT...\nSYSTEM FILE UPDATE..."), gl_stCenterAttr, GUI_BUTTON_NONE, 0, NULL);
    InitTranLogFile();	// Init transaction log file
    NoDownloadInit();

#ifdef ENABLE_EMV
	LoadEmvDefault();	// Init EMV kernel
#endif
}
//方式二:跟标准表对照
//EBuf被校表电能寄存器的值,datE对照表的电能值,以0.01KWh为单位,比如0.05KWh,则datE为5
void Check_HFConst2(uint EBuf, uint datE,BYTE channel)
{
    *(WORD *)&SysParam[SP_RNHFCONST+2*channel] = EBuf * (*(WORD *)&SysParam[SP_RNHFCONST+2*channel])/(320*datE);
    spiWrite(channel, HFCONST, *(WORD *)&SysParam[SP_RNHFCONST+2*channel], WIDTH_TWO_B);
    SaveSysParam();
}