| 函數(shù)名 | 用 途 |
| IsInitStack IsPPPConnect IsPPPDisconnect IsPPPCheck IsPPPKeepAlive IsGetOurIP | 初始化硬件協(xié)議棧子系統(tǒng) 建立PPP連接 關(guān)斷PPP連接 檢測PPP連接是否激活 在PPP連接失效時重建連接 獲得本地當前IP地址 |
表2 IsockApi
| 函數(shù)名 | 用 途 |
| IsInitSocket IsTCPConnect IsTCPListen IsTCPRead IsTCPWrite IsTCPClose IsTCPAbort IsUDPCreate IsUDPRead IsUDPWrite IsUDPRelease IsUDPAbort | 初始化Socket的軟件構(gòu)成 嘗試打開TCP連接 接受TCP連接 從TCP Socket中讀取數(shù)據(jù) 向TCP Socket里寫數(shù)據(jù) 關(guān)閉TCP Socket 中止TCP Socket上的操作 建立對UDP Socket的監(jiān)聽 等待并讀取UDP信息 寫并發(fā)送UDP Socket 關(guān)閉UDP Socket 中止UDP Socket上的操作 |
(3)應(yīng)用程序
應(yīng)用程序建立在RTOS和API之上,并可以實現(xiàn)多任務(wù),在編譯完畢后和RTOS庫以及API庫一起連接生成可執(zhí)行代碼,如圖4所示。
在系統(tǒng)需接入Internet傳輸數(shù)據(jù)的時候,首先要通過Modem撥號,建立PPP連接,然后再根據(jù)數(shù)據(jù)傳輸?shù)木唧w需要決定建立TCP連接還是UDP連接。一般情況下,TCP建立可靠的連接,可以實現(xiàn)諸如FTP、SMTP等服務(wù);而像IP電話這樣強調(diào)實時性的場合,需要建立UDP連接。

在需要上網(wǎng)的時候,運行以下程序要,可以實現(xiàn)與ISP(網(wǎng)絡(luò)服務(wù)提供商)之間的撥號連接。首先,程序調(diào)用IsInitStack(),初始化S7600A的硬件協(xié)議棧子系統(tǒng)。如果初始化成功(得到RET_CODE_OK的返值),就開始進行撥號連接。調(diào)用IsPPPCheck()檢查是否已經(jīng)連接,如果還沒有連接,就調(diào)用IsPPPConnect()進行撥號(該函數(shù)的參數(shù)含有進行撥號連接的要素:phata.name表示撥號上網(wǎng)的用戶名,例如撥169時,用戶名就指定為“169”;pdata.passwd表示用戶口令,例如撥169時,該口令指定為“169”;pdata.modemInitStrings存放初始化Modem用的指令,符合Modem AT指令集,“AT”為Modem指令的前綴。例如,“AT+FAE=0”表示關(guān)閉data/fax自動應(yīng)答模式,“ATE0”表示禁止指令回應(yīng);pdata.baudRate為波特率;pdata.modemDialString為撥號號碼,此處為電話號碼169,“DT”表示用雙音頻撥號);如果已經(jīng)建立了連接,就調(diào)用IsGetOurIP()得到IP地址或者調(diào)用IsPPPKeepAlive()保持連接。
#include<iReady.h>
#include<iRtacApi.h>
#define L_Time 10000
static int do_connect=1,was_connect=0;
static iIPAddr ip;
ppp_task(void)
{
RET_CODE rc; //RET_CODE為API函數(shù)執(zhí)行狀態(tài)返值的數(shù)據(jù)類型
iPPPData pdata; //該數(shù)據(jù)結(jié)構(gòu)包含建立PPP連接的必要數(shù)據(jù)
static char *initSrtings[5];
initStrings[]=“AT+FAE=0”; //在字符串數(shù)組里存放Modem初始化指令
initStrings[]=“ATE0”;
initStrings[]=0; //設(shè)定該字符為NULL
initStrings[]=0;
initStrings[]=0;
pdata.name=“169”; //撥號上網(wǎng)的用戶名
pdata.passwd=“169”; //撥號上網(wǎng)的用戶口令
pdata.baudRate=28800; //設(shè)置波特率
pdata.hwFlowCtrl=1; //啟用硬件流控制
pdata.useModem=1;
pdata.modemDialString=“ATDT 169”; //ATDT為雙音頻撥號指令
pdata.auth=IPPP_AUTH_PAP; //提供PAP驗證
pdata.modemInitStrings=initstrings; //Modem初始化的系統(tǒng)指令,必須以NLLL結(jié)尾
rc=IsInitStack(); //初始化硬件棧子系統(tǒng)
if{re= =RET_CODE_OK}
{
while(do_connect)
{
rc=IsPPPCheck(); //檢查PPP連接是否激活
if(rc= =RET_CODE_OK)
{
if(was_connect= =0)
{
rc=IsGetOurIP(&ip); //獲取IP地址
was_connect=1;
}
}
else if(was_connect)
{
was_connect=0;
rc=IsPPPkeepAlive(L_TIME)//在連接失效時重新建立連接
}
else
{
rc=IsPPPConnect(&pdata,L_TIME); //撥號并與ISP建立PPP連接
continue;
}
smallSleep(L_TIME);
}
}
}
基于RTOS和S7600A的嵌入式系統(tǒng)Internet接入方案硬件上簡潔可靠、成本適中;軟件開發(fā)上體現(xiàn)了較好的層次思想和較高的技術(shù)水準,可維護性好,可擴展性好。





