《ARM与嵌入式系统基础教程》
源代码在线查看: io.c
//*------------------------------------------------------------------------------------------------
//* 文件名 : IO.c
//* 功能描述 : 系统输输出函数
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、时间 : 2006/08/07 15:26
//* 最近修改日期、时间 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 -----------------------------------------------
#include "/uCOS-II/ucos_ii.h"
#include "/tools/stringExtAPI.h"
#include "/at91sam7x256/periph/emac/lib_emac.h"
#include "flash.h"
//*================================================================================================
//* 函 数 区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称 : ubSetNetCFGParam
//* 功能描述 : 设置网络配置参数(IP地址、子网掩码、网关)
//* 入口参数 : [in] IP地址
//* : [in] 子网掩码
//* : [in] 网关地址
//* 出口参数 : 设置成功返回TRUE,否则返回FALSE
//*------------------------------------------------------------------------------------------------
BOOLEAN blSetNetCFGParam(INT32U u32IP, INT32U u32NetMask, INT32U u32Gateway)
{
ST_NET_CFG_PARAM __stNetCFG;
INT32S __s32DNLen = 0;
memset(&__stNetCFG, 0, sizeof(ST_NET_CFG_PARAM));
if(*((INT32U*)PST_NET_CFG_PARAM->szDN) != 0xFFFFFFFF)
{
__s32DNLen = strlenExt(PST_NET_CFG_PARAM->szDN);
memcpy(__stNetCFG.szDN, PST_NET_CFG_PARAM->szDN, __s32DNLen);
}
__stNetCFG.u32Flag = NET_CFG_FLAG;
__stNetCFG.u32IP = u32IP;
__stNetCFG.u32NetMask = u32NetMask;
__stNetCFG.u32Gateway = u32Gateway;
if(DFL_WriteFlash((INT32U*)&__stNetCFG, NET_CFG_PARAM_STORE_ADDR, ST_NETCFG_PARAM_HDR_LEN + __s32DNLen) == ERR_WFLASH_OK)
return OS_TRUE;
else
return OS_FALSE;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : ubSetDN
//* 功能描述 : 设置域名
//* 入口参数 : [in] 指向域名的指针
//* : [in] 域名的长度
//* 出口参数 : 设置成功返回TRUE,否则返回FALSE
//*------------------------------------------------------------------------------------------------
BOOLEAN blSetDN(INT8S *pszDN, INT32S s32Len)
{
ST_NET_CFG_PARAM __stNetCFG;
memset(&__stNetCFG, 0, sizeof(ST_NET_CFG_PARAM));
if(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)
{
__stNetCFG.u32Flag = NET_CFG_FLAG;
__stNetCFG.u32IP = PST_NET_CFG_PARAM->u32IP;
__stNetCFG.u32NetMask = PST_NET_CFG_PARAM->u32NetMask;
__stNetCFG.u32Gateway = PST_NET_CFG_PARAM->u32Gateway;
}
memcpy(__stNetCFG.szDN, pszDN, s32Len);
if(DFL_WriteFlash((INT32U*)&__stNetCFG, NET_CFG_PARAM_STORE_ADDR, ST_NETCFG_PARAM_HDR_LEN + s32Len) == ERR_WFLASH_OK)
return OS_TRUE;
else
return OS_FALSE;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : vReadASCIIIP
//* 功能描述 : 读取ASCII类型的IP地址到指定的缓冲区
//* 入口参数 : [in] 指向接收缓冲区的指针
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void vReadASCIIIP(INT8S *pszIP)
{
sprintf(pszIP, "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetIPAddr(0) : IP_ADDR_0);
sprintf(pszIP + strlenExt(pszIP), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetIPAddr(1) : IP_ADDR_1);
sprintf(pszIP + strlenExt(pszIP), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetIPAddr(2) : IP_ADDR_2);
sprintf(pszIP + strlenExt(pszIP), "%d", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetIPAddr(3) : IP_ADDR_3);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : vReadASCIINetMask
//* 功能描述 : 读取ASCII类型的子网掩码地址到指定的缓冲区
//* 入口参数 : [in] 指向接收缓冲区的指针
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void vReadASCIINetMask(INT8S *pszNetMask)
{
sprintf(pszNetMask, "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetNetMask(0) : NET_MASK_0);
sprintf(pszNetMask + strlenExt(pszNetMask), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetNetMask(1) : NET_MASK_1);
sprintf(pszNetMask + strlenExt(pszNetMask), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetNetMask(2) : NET_MASK_2);
sprintf(pszNetMask + strlenExt(pszNetMask), "%d", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetNetMask(3) : NET_MASK_3);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : vReadASCIIGateway
//* 功能描述 : 读取ASCII类型的网关地址到指定的缓冲区
//* 入口参数 : [in] 指向接收缓冲区的指针
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void vReadASCIIGateway(INT8S *pszGateway)
{
sprintf(pszGateway, "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetGateway(0) : GATEWAY_ADDR_0);
sprintf(pszGateway + strlenExt(pszGateway), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetGateway(1) : GATEWAY_ADDR_1);
sprintf(pszGateway + strlenExt(pszGateway), "%d.", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetGateway(2) : GATEWAY_ADDR_2);
sprintf(pszGateway + strlenExt(pszGateway), "%d", (PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG) ? macGetGateway(3) : GATEWAY_ADDR_3);
}