⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setgprs.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  SetGPRS.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#include "includes.h"
#include "version.h"
#include "public.h"
#include "tools.h"
#include "editor.h"
#include "prompt.h"
#include "itemmenu.h"
#include "gprsdrv.h"
#include "setgprs.h"

typedef  unsigned long ip_addr;
char *   parse_ipad(ip_addr *, unsigned *, char *);

#if EN_HANDSET > 0

/*
********************************************************************************
*                  DEFINE CoNFIG PARAMETERS
********************************************************************************
*/
#define SIZE_RECVBUF                        30

/*
********************************************************************************
*                  DEFINE MODULE VARIANTS
********************************************************************************
*/
static INT8U RecvBuf[SIZE_RECVBUF];
static EDITOR_STRUCT EditorEntry;



static void ACK_SetPort(void)
{
    INT8U len;
    
    len = GetEditorData(RecvBuf);
    ExitEditor();
    if (len > 0) {
        ActivateStringPrompt("设置成功!");
        memcpy(GprsIP.ippara[0].tcp_port, RecvBuf, len);
        GprsIP.ippara[0].tcp_port[len] = '\0';
        StorePubPara(GPRSIP_);
    }
}

static void SetPort(void)
{
    memset(&EditorEntry, 0, sizeof(EditorEntry));
    EditorEntry.Mode     = EDT_DIGITAL | EDT_CURSOR;
    EditorEntry.MinLen   = 0;
    EditorEntry.MaxLen   = sizeof(GprsIP.ippara[0].tcp_port) - 1;
    EditorEntry.LabelPtr = "端口号:     ";
    EditorEntry.AckProc  = ACK_SetPort;
    if (PubParaValid(GPRSIP_)) {
        EditorEntry.InitLen = strlen(GprsIP.ippara[0].tcp_port);
        EditorEntry.InitPtr = (INT8U *)GprsIP.ippara[0].tcp_port;
    }
    CreateEditor(&EditorEntry);
}

static BOOLEAN CheckIPValid(INT8U len)
{
    unsigned snbits;
    ip_addr  ipaddr; 

    if (parse_ipad(&ipaddr, &snbits, (char *)RecvBuf) != 0)   return FALSE;
    if (SearchDigitalString(RecvBuf, len, '.',  1) == 0xffff) return FALSE;
    if (SearchDigitalString(RecvBuf, len, '.',  2) == 0xffff) return FALSE;
    if (SearchDigitalString(RecvBuf, len, '.',  3) == 0xffff) return FALSE;
    if (SearchDigitalString(RecvBuf, len, '\0', 1) == 0xffff) return FALSE;
    return TRUE;
}

static void ACK_SetIP(void)
{
    INT8U len;
    
    len = GetEditorData(RecvBuf);
    if (len > 0) {
        RecvBuf[len++] = '\0';
        if (!CheckIPValid(len)) {
            ActivateStringPrompt("IP地址有误!");
        } else {
            ExitEditor();
            ActivateStringPrompt("设置成功!");
            memcpy(GprsIP.ippara[0].tcp_ip, RecvBuf, len);
            StorePubPara(GPRSIP_);
        }
    } else {
        ExitEditor();
    }
}

static BOOLEAN FilterProc(INT8U *ch)
{
    if (*ch < '0' || *ch > '9') {
        *ch = '.';
        return TRUE;
    } else {
        return FALSE;
    }
}

static void SetIP(void)
{
    memset(&EditorEntry, 0, sizeof(EditorEntry));
    EditorEntry.Mode       = EDT_CURSOR | EDT_DIGITAL | EDT_PULS;
    EditorEntry.MinLen     = 0;
    EditorEntry.MaxLen     = sizeof(GprsIP.ippara[0].tcp_ip) - 1;
    EditorEntry.LabelPtr   = "IP地址:     ";
    EditorEntry.AckProc    = ACK_SetIP;
    EditorEntry.FilterProc = FilterProc;
    if (PubParaValid(GPRSIP_)) {
        EditorEntry.InitLen = strlen(GprsIP.ippara[0].tcp_ip);
        EditorEntry.InitPtr = (INT8U *)GprsIP.ippara[0].tcp_ip;
    }
    CreateEditor(&EditorEntry);
}

static void ACK_SetAPN(void)
{
    INT8U len;
    
    len = GetEditorData(RecvBuf);
    ExitEditor();
    if (len > 0) {
        ActivateStringPrompt("设置成功!");
        memcpy(GprsIP.ippara[0].apn, RecvBuf, len);
        GprsIP.ippara[0].apn[len] = '\0';
        StorePubPara(GPRSIP_);
    }
}

static void SetAPN(void)
{
    memset(&EditorEntry, 0, sizeof(EditorEntry));
    EditorEntry.Mode     = EDT_CURSOR;
    EditorEntry.MinLen   = 0;
    EditorEntry.MaxLen   = sizeof(GprsIP.ippara[0].apn) - 1;
    EditorEntry.LabelPtr = "APN:        ";
    EditorEntry.AckProc  = ACK_SetAPN;
    if (PubParaValid(GPRSIP_)) {
        EditorEntry.InitLen = strlen(GprsIP.ippara[0].apn);
        EditorEntry.InitPtr = (INT8U *)GprsIP.ippara[0].apn;
    }
    CreateEditor(&EditorEntry);
}

static void ACK_SetTel(void)
{
    INT8U len;
    
    len = GetEditorData(RecvBuf);
    ExitEditor();
    if (len > 0) {
        ActivateStringPrompt("设置成功!");
        MyTel.len = len;
        memcpy(MyTel.tel, RecvBuf, len);
        StorePubPara(MYTEL_);
    }
}

static void SetTel(void)
{
    memset(&EditorEntry, 0, sizeof(EditorEntry));
    EditorEntry.Mode     = EDT_DIGITAL | EDT_CURSOR;
    EditorEntry.MinLen   = 0;
    EditorEntry.MaxLen   = sizeof(MyTel.tel);
    EditorEntry.LabelPtr = "本机号码:   ";
    EditorEntry.AckProc  = ACK_SetTel;
    if (PubParaValid(MYTEL_)) {
        EditorEntry.InitLen = MyTel.len;
        EditorEntry.InitPtr = MyTel.tel;
    }
    CreateEditor(&EditorEntry);
}

static void Activate(void)
{
    BOOLEAN success;
    
    success = TRUE;
    if (!PubParaValid(GPRSIP_) || !PubParaValid(MYTEL_)) {
        success = FALSE;
    } else {
        if (MyTel.len == 0) success = FALSE;
        if (strlen(GprsIP.ippara[0].apn) == 0) success = FALSE;
        if (strlen(GprsIP.ippara[0].tcp_ip) == 0) success = FALSE;
        if (strlen(GprsIP.ippara[0].tcp_port) == 0) success = FALSE;
    }
    if (success) {
        ActivateStringPrompt("激活成功!");        
        GprsIP.ippara[0].isvalid = TRUE;
        VirStorePubPara(GPRSIP_);
        OnlineMode.gprsonline = 0x01;
        VirStorePubPara(ONLINEMODE_);
        StoreAllPubPara();
        DeactivateGPRS();
        ActivateGPRS(CHA_TCP);
    } else {
        ActivateStringPrompt("参数不全\n激活失败!");
    }
}


static ITEMMENU_STRUCT  MENU_PORT        = {ITEM_FCN,  "端口号",    SetPort,  0, 0};
static ITEMMENU_STRUCT  MENU_IP          = {ITEM_FCN,  "IP地址",    SetIP,    0, 0};
static ITEMMENU_STRUCT  MENU_APN         = {ITEM_FCN,  "APN",       SetAPN,   0, 0};
static ITEMMENU_STRUCT  MENU_TEL         = {ITEM_FCN,  "本机号码",  SetTel,   0, 0};
static ITEMMENU_STRUCT  MENU_ACTIVATE    = {ITEM_FCN,  "激活GPRS",  Activate, 0, 0};
static ITEMMENU_STRUCT *MENU_SET_CHILD[] = {&MENU_TEL, &MENU_APN, &MENU_IP, &MENU_PORT, &MENU_ACTIVATE};
static ITEMMENU_STRUCT  MENU_SET         = {ITEM_LMENU, 0, 0, 5, MENU_SET_CHILD};

static void ACK_InputPassword(void)
{
    INT8U len;

    len = GetEditorData(RecvBuf);
    ExitEditor();
    if (len > 0) {
        if (ACmpString(TRUE, RecvBuf, (INT8U *)StrPassword, len, strlen(StrPassword)) == STR_EQUAL) {
            ActivateItemMenu(&MENU_SET);
        } else {
            ActivateStringPrompt("对不起\n密码有误");
        }
    }
}

static void InputPassword(void)
{
    memset(&EditorEntry, 0, sizeof(EditorEntry));
    EditorEntry.Mode     = EDT_PASSWORD | EDT_DIGITAL;
    EditorEntry.MinLen   = 0;
    EditorEntry.MaxLen   = strlen(StrPassword);
    EditorEntry.LabelPtr = "请输密码:    ";
    EditorEntry.AckProc  = ACK_InputPassword;
    CreateEditor(&EditorEntry);
}

ITEMMENU_STRUCT MENU_SETGPRS             = {ITEM_FCN, "    设置\n  GPRS参数", InputPassword, 0, 0};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -