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

📄 cmsdata.lst

📁 一个用单片机实现gprs modem发送短信的程序.里面有详细的注释,不可多得的学习程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
CX51 COMPILER V7.20   CMSDATA                                                              09/22/2006 14:21:06 PAGE 1   


CX51 COMPILER V7.20, COMPILATION OF MODULE CMSDATA
OBJECT MODULE PLACED IN cmsdata.OBJ
COMPILER INVOKED BY: D:\program\keil\C51\BIN\CX51.EXE cmsdata.c LARGE BROWSE DEBUG

line level    source

   1          
   2          #include <string.h>
   3          #include "cmsdata.h"
   4          
   5          
   6          int gprs_analyze_msg(char * message)
   7          {
   8   1              if (strstr(message, "OK") != 0)
   9   1              {
  10   2                      if (strstr(message, "+CMGS:") != 0)
  11   2                      {
  12   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  13   3                              // ::PostMessage(threadData.m_hWnd, WM_SMS_SEND_RESPONSE, 0, 0);
  14   3                      }
  15   2                      else if (strstr(message, "+CMGR:") != 0)
  16   2                      {
  17   3                              return AT_RECV_MSG_CMGR;
  18   3                      }
  19   2                      else if (strstr(message, "+CSQ:") != 0)
  20   2                      {
  21   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  22   3                              // ::PostMessage(threadData.m_hWnd, WM_SIGNAL_STRENGTH, 0, 0);
  23   3                      }
  24   2                      else if (strstr(message, "+CBC:") != 0)
  25   2                      {
  26   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  27   3                              // ::PostMessage(threadData.m_hWnd, WM_BATTERY_LEVEL, 0, 0);
  28   3                      }
  29   2                      else if (strstr(message, "+CRSL:") != 0)
  30   2                      {
  31   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  32   3                              // ::PostMessage(threadData.m_hWnd, WM_RINGER_LEVEL, 0, 0);
  33   3                      }
  34   2                      else if (strstr(message, "+CREG:") != 0)
  35   2                      {
  36   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  37   3                              // ::PostMessage(threadData.m_hWnd, WM_NETWORK_REGISTRATION, 0, 0);
  38   3                      }
  39   2                      else if (strstr(message, "+CGMI") != 0)
  40   2                      {
  41   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  42   3                              // ::PostMessage(threadData.m_hWnd, WM_MANUFACTURER_ID, 0, 0);
  43   3                      }
  44   2                      else if (strstr(message, "+CGMM") != 0)
  45   2                      {
  46   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  47   3                              // ::PostMessage(threadData.m_hWnd, WM_MODEL_ID, 0, 0);
  48   3                      }
  49   2                      else if (strstr(message, "+CGMR") != 0)
  50   2                      {
  51   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  52   3                              // ::PostMessage(threadData.m_hWnd, WM_REVISION_ID, 0, 0);
  53   3                      }
  54   2                      else if (strstr(message, "+CNUM") != 0)
  55   2                      {
CX51 COMPILER V7.20   CMSDATA                                                              09/22/2006 14:21:06 PAGE 2   

  56   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  57   3                              // ::PostMessage(threadData.m_hWnd, WM_SUBSCRIBER_NUMBER, 0, 0);
  58   3                      }
  59   2                      else if (strstr(message, "+CSCS") != 0)
  60   2                      {
  61   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  62   3                              // ::PostMessage(threadData.m_hWnd, WM_TE_CHARACTER_SET, 0, 0);
  63   3                      }
  64   2                      else if (strstr(message, "+CCLK") != 0)
  65   2                      {
  66   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  67   3                              // ::PostMessage(threadData.m_hWnd, WM_TIME, 0, 0);
  68   3                      }
  69   2                      else if (strstr(message, "+CRC") != 0)
  70   2                      {
  71   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  72   3                              // ::PostMessage(threadData.m_hWnd, WM_CELLULAR_RESULT_CODE, 0, 0);
  73   3                      }
  74   2                      else if (strstr(message, "+CR") != 0)
  75   2                      {
  76   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  77   3                              // ::PostMessage(threadData.m_hWnd, WM_REPORTING_CONTROL, 0, 0);
  78   3                      }
  79   2                      else if (strstr(message, "S0") != 0)
  80   2                      {
  81   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  82   3                              // ::PostMessage(threadData.m_hWnd, WM_S0, 0, 0);
  83   3                      }
  84   2                      else if (strstr(message, "S7") != 0)
  85   2                      {
  86   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  87   3                              // ::PostMessage(threadData.m_hWnd, WM_S7, 0, 0);
  88   3                      }
  89   2                      else if (strstr(message, "S8") != 0)
  90   2                      {
  91   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  92   3                              // ::PostMessage(threadData.m_hWnd, WM_S8, 0, 0);
  93   3                      }
  94   2                      else if (strstr(message, "S10") != 0)
  95   2                      {
  96   3                              // threadData.m_rmReceMsg.m_strMessage1 = message;
  97   3                              // ::PostMessage(threadData.m_hWnd, WM_S10, 0, 0);
  98   3                      }
  99   2                      else
 100   2                      {
 101   3                              return AT_RECV_MSG_OK;
 102   3                      }
 103   2              }
 104   1              else if (strstr(message, "+CMGR:") != 0)
 105   1              {
 106   2                      return AT_RECV_MSG_CMGR;
 107   2              }
 108   1              else if (strstr(message, "RING") != 0)
 109   1              {
 110   2                      // 振铃
 111   2                      return AT_RECV_MSG_RING;
 112   2              }
 113   1              else if (strstr(message, "NO CARRIER") != 0)
 114   1              {
 115   2                      // 无载波
 116   2                      return AT_RECV_MSG_NO_CARRIER;
 117   2              }
CX51 COMPILER V7.20   CMSDATA                                                              09/22/2006 14:21:06 PAGE 3   

 118   1              else if (strstr(message, "ERROR") != 0)
 119   1              {
 120   2                      // 错误
 121   2                      return AT_RECV_MSG_ERROR;
 122   2              }
 123   1              else if (strstr(message, "CMTI") != 0)
 124   1              {
 125   2                      // NEW SMS
 126   2                      return AT_RECV_MSG_CMTI;
 127   2              }else if (strstr(message, ">") != 0)
 128   1              {
 129   2                      return AT_RECV_GET_MSG;
 130   2              }
 131   1              
 132   1              return AT_RECV_MSG_NULL;
 133   1      }
 134          
 135          // 7bit编码
 136          // pSrc: 源字符串指针
 137          // pDst: 目标编码串指针
 138          // nSrcLength: 源字符串长度
 139          // 返回: 目标编码串长度
 140          int gprsEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength)
 141          {
 142   1              int nSrc;               // 源字符串的计数值
 143   1              int nDst;               // 目标编码串的计数值
 144   1              int nChar;              // 当前正在处理的组内字符字节的序号,范围是0-7
 145   1              unsigned char nLeft;    // 上一字节残余的数据
 146   1      
 147   1              // 计数值初始化
 148   1              nSrc = 0;
 149   1              nDst = 0;
 150   1      
 151   1              // 将源串每8个字节分为一组,压缩成7个字节
 152   1              // 循环该处理过程,直至源串被处理完
 153   1              // 如果分组不到8字节,也能正确处理
 154   1              while(nSrc<nSrcLength)
 155   1              {
 156   2                      // 取源字符串的计数值的最低3位
 157   2                      nChar = nSrc & 7;
 158   2      
 159   2                      // 处理源串的每个字节
 160   2                      if(nChar == 0)
 161   2                      {
 162   3                              // 组内第一个字节,只是保存起来,待处理下一个字节时使用
 163   3                              nLeft = *pSrc;
 164   3                      }
 165   2                      else
 166   2                      {
 167   3                              // 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
 168   3                              *pDst = (*pSrc << (8-nChar)) | nLeft;
 169   3      
 170   3                              // 将该字节剩下的左边部分,作为残余数据保存起来
 171   3                              nLeft = *pSrc >> nChar;
 172   3      
 173   3                              // 修改目标串的指针和计数值
 174   3                              pDst++;
 175   3                              nDst++;
 176   3                      }
 177   2      
 178   2                      // 修改源串的指针和计数值
 179   2                      pSrc++;
CX51 COMPILER V7.20   CMSDATA                                                              09/22/2006 14:21:06 PAGE 4   

 180   2                      nSrc++;
 181   2              }
 182   1      
 183   1              // 返回目标串长度
 184   1              return nDst;
 185   1      }
 186          // 7bit解码
 187          // pSrc: 源编码串指针
 188          // pDst: 目标字符串指针
 189          // nSrcLength: 源编码串长度
 190          // 返回: 目标字符串长度
 191          int gprsDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength)
 192          {
 193   1              int nSrc;               // 源字符串的计数值
 194   1              int nDst;               // 目标解码串的计数值
 195   1              int nByte;              // 当前正在处理的组内字节的序号,范围是0-6
 196   1              unsigned char nLeft;    // 上一字节残余的数据
 197   1      
 198   1              // 计数值初始化
 199   1              nSrc = 0;
 200   1              nDst = 0;
 201   1              
 202   1              // 组内字节序号和残余数据初始化
 203   1              nByte = 0;
 204   1              nLeft = 0;
 205   1      
 206   1              // 将源数据每7个字节分为一组,解压缩成8个字节
 207   1              // 循环该处理过程,直至源数据被处理完
 208   1              // 如果分组不到7字节,也能正确处理
 209   1              while(nSrc<nSrcLength)
 210   1              {
 211   2                      // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
 212   2                      *pDst = ((*pSrc << nByte) | nLeft) & 0x7f;
 213   2      
 214   2                      // 将该字节剩下的左边部分,作为残余数据保存起来
 215   2                      nLeft = *pSrc >> (7-nByte);
 216   2      
 217   2                      // 修改目标串的指针和计数值
 218   2                      pDst++;
 219   2                      nDst++;
 220   2      
 221   2                      // 修改字节计数值
 222   2                      nByte++;
 223   2      
 224   2                      // 到了一组的最后一个字节
 225   2                      if(nByte == 7)
 226   2                      {
 227   3                              // 额外得到一个目标解码字节
 228   3                              *pDst = nLeft;
 229   3      
 230   3                              // 修改目标串的指针和计数值
 231   3                              pDst++;
 232   3                              nDst++;
 233   3      
 234   3                              // 组内字节序号和残余数据初始化
 235   3                              nByte = 0;
 236   3                              nLeft = 0;
 237   3                      }
 238   2      
 239   2                      // 修改源串的指针和计数值
 240   2                      pSrc++;
 241   2                      nSrc++;
CX51 COMPILER V7.20   CMSDATA                                                              09/22/2006 14:21:06 PAGE 5   

 242   2              }
 243   1      
 244   1              // 输出字符串加个结束符

⌨️ 快捷键说明

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