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

📄 sm_recv.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  SM_RECV.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "structs.h"
#include "message.h"
#include "tools.h"
#include "pdumode.h"
#include "rx_frame.h"
#include "systask.h"
#include "sm_recv.h"
#if EN_LCD > 0
#include "lcddrv.h"
#endif

#if EN_HANDSET > 0
#include "db_sm.h"
#include "handset.h"

static SMREC_STRUCT RecvSMRec;
#endif



/*
********************************************************************************
*                  DEFINE MODULE VARIANT
********************************************************************************
*/
#if EN_CODE6 > 0
static INT8U buffer[256];
#endif


#if DEBUG_UARTNo_GSMSTATUS <= 3

static void PrintSM(SM_STRUCT *sm)
{
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<receive short message>\n");

    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "time is: ");
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[0], 2);
    SendFromUART_BYTE(DEBUG_UARTNo_GSMSTATUS, '-');
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[2], 2);
    SendFromUART_BYTE(DEBUG_UARTNo_GSMSTATUS, '-');
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[4], 2);
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "    ");
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[6], 2);
    SendFromUART_BYTE(DEBUG_UARTNo_GSMSTATUS, ':');
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[8], 2);
    SendFromUART_BYTE(DEBUG_UARTNo_GSMSTATUS, ':');
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, &sm->SCTS[10], 2);
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "\n");

    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "sms  is: ");
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, sm->SCA, sm->SCAL);
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "\n");

    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "tel  is: ");
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, sm->OA, sm->OAL);
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "\n");

    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "data is: ");
    SendFromUART_MEM(DEBUG_UARTNo_GSMSTATUS, sm->UD, sm->UDL);
    PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "\n");
}
#endif

void DetectShortMessage(SM_STRUCT *recvsm)
{
    BOOLEAN framevalid;
    INT8U   framelen;
    INT16U  i;
    SYSFRAME_STRUCT *curframe;
    

    #if DEBUG_UARTNo_GSMSTATUS <= 3
    PrintSM(recvsm);                 /* print short message */
    #endif

#if EN_CODE6 > 0
    framelen = Code6_To_CodeX(MODE_CODE7, buffer, recvsm->UD, recvsm->UDL);
    curframe = (SYSFRAME_STRUCT *)buffer;
#else
    framelen = recvsm->UDL;
    curframe = (SYSFRAME_STRUCT *)recvsm->UD;
#endif

    if (framelen > 3) {
        if (!ChkSum_SYSFrame(curframe, framelen)) framevalid = FALSE;
        else framevalid = TRUE;
    } else {
        framevalid = FALSE;
    }
    
    if (framevalid) {
        /* receive system short message */
        DetectSysFrame(RX_FRAME_SM, framelen, curframe);
    } else {
        /* receive common short message */
        #if DEBUG_UARTNo_GSMSTATUS <= 3
        PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<receive common short message>\n");
        #endif
        
        if (recvsm->DCS == SM_DCS_BIT7) {
            for (i = 0; i < recvsm->UDL; i++) {
                recvsm->UD[i] = GsmCodeToASCII(recvsm->UD[i]);
            }
        }

#if EN_LCD > 0
        InformLCD_RecvSM(recvsm);
#endif
#if EN_HANDSET > 0
		if (ComType != USE_HST) return;
        RecvSMRec.datalen = recvsm->UDL;
        memcpy(RecvSMRec.data, recvsm->UD, sizeof(RecvSMRec.data));
        RecvSMRec.tellen  = recvsm->OAL;
        memcpy(RecvSMRec.tel, recvsm->OA, sizeof(RecvSMRec.tel));
        for (i = 0; i < 3; i++) {
            RecvSMRec.date[i] = AsciiToDec(&recvsm->SCTS[2 * i], 2);
        }
        for (i = 0; i < 3; i++) {
            RecvSMRec.time[i] = AsciiToDec(&recvsm->SCTS[6 + 2 * i], 2);
        }
        AddSMRec(&RecvSMRec);
        OSQPost(HandsetMsgQue, MSG_HANDSET_RECVSM, 0, 0);               /* send message to handset */
#endif
    }
}

⌨️ 快捷键说明

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