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

📄 photo.lst

📁 通过车载终端采集GPS数据
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   PHOTO                                                                 08/22/2008 14:26:52 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE PHOTO
OBJECT MODULE PLACED IN .\output\photo.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE extendUART\photo.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gp
                    -s\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\photo.lst) OBJECT(.\output\photo.ob
                    -j)

line level    source

   1          #include "typedef.h"
   2          #include "photo.h"
   3          
   4          #include "16c554.h"
   5          #include <string.h>
   6          #include <stdio.h>
   7          #include "TRANS_PROCESS.h"
   8          //定义窗口大小,该值应该与相片数据包每个包的大小有关系
   9          #define PHOTO_WINDOWSIZE 5//包大小为518的时候8,256的时候为14
  10          #define PHOTO_TIMEOUT 1
  11          
  12          
  13          #define PHOTO_COMMANDPACKSIZE 6
  14          Uint8 gnPhotoState;
  15          Uint8 gnPhotoMode;
  16          Uint16 gnPhotoSize;//每个包的大小
  17          Uint8 gnPhotoRetry;
  18          Byte gphoto_msgnum[4];
  19          //照片的包数量
  20          Uint16 gnPhotoPackNum;
  21          Byte gPhotoSendBuf[PHOTO_COMMANDPACKSIZE];
  22          Uint16 gnPhotoCurSeq;
  23          Byte gnPhotoDataSending;//取值为PHOTO_DATASENDING和PHOTO_NODATASEND
  24          
  25          //定义相片重传方面的变量
  26          Byte gnPhotoRetryThrd;
  27          Byte gnPhotoTimeout;
  28          
  29          //下面定义每个包的状态
  30          Byte gPhotoPacketstate[PHOTO_PACK_NUM];
  31          
  32          code Byte gPhotoCommand[][PHOTO_COMMANDPACKSIZE] = 
  33          {
  34              {0xaa, 0x0d, 0x00, 0x00, 0x00, 0x00},  /*PHOTO_SENDINIAL*/
  35              {0xaa, 0x01, 0x00, 0x07, 0x00, 0x07},  /*PHOTO_SETFORMAT*/
  36              {0xaa, 0x06, 0x08, 0x00, 0x20, 0x00},  /*PHOTO_SETPACKETSIZE*/
  37              {0xaa, 0x05, 0x00, 0x00, 0x00, 0x00},  /*PHOTO_QUICKSNAP*/
  38              {0xaa, 0x04, 0x01, 0x00, 0x00, 0x00},  /*PHOTO_GETPHOTODATA*/
  39              {0xaa, 0x0e, 0x00, 0x00, 0x00, 0x00},   /*PHOTO_PHOTODATAREQ*/
  40              {0xaa, 0x0e, 0x0d, 0x00, 0x00, 0x00}, /*PHOTO_RESPONSEINIAL*/
  41          };
  42          
  43          //定义相机返回的应答包
  44          code Byte gPhotoResp[PHOTO_RESPONSE_NUM] = 
  45          {0x0d, 0x01, 0x06, 0x05, 0x04};
  46          
  47          //定义发送数据包的内容
  48          void photo_init()
  49          {
  50   1          Byte i;
  51   1          gnPhotoState = PHOTO_INIAL;
  52   1          gnPhotoMode = PHOTO_CIFMODE;
  53   1          gnPhotoSize = 456;//306106;
C51 COMPILER V7.09   PHOTO                                                                 08/22/2008 14:26:52 PAGE 2   

  54   1          gnPhotoRetry = 0;
  55   1          for (i=0; i<PHOTO_PACK_NUM; i++)
  56   1              gPhotoPacketstate[i] = PHOTO_PACK_NOUSE;
  57   1          gnPhotoPackNum = 0;
  58   1          gnPhotoTimeout = 0;
  59   1          memset(gphoto_msgnum, 0 ,4);
  60   1          gnPhotoDataSending = PHOTO_NODATASEND;
  61   1      }
  62          char testBuf[550];
  63          //1s处理一次
  64          void photo_1s_process()
  65          {
  66   1          Byte i;
  67   1          //在几种状态的情况下,才有以下处理
  68   1          if ((PHOTO_RETRYDATA == gnPhotoState) || (PHOTO_RETRYDATATIMING == gnPhotoState) \
  69   1              || (PHOTO_RECIEVERETRYDATA == gnPhotoState) || (PHOTO_RECIEVETIMINGDATA == gnPhotoState))
  70   1          {
  71   2              for (i=0; i<gnPhotoPackNum; i++)
  72   2              {
  73   3                  if (gPhotoPacketstate[i] == PHOTO_PACK_WAITACK)
  74   3                      break;
  75   3              }
  76   2              if (i == gnPhotoPackNum)
  77   2              {
  78   3                  //所有包都发送完毕
  79   3      //            sprintf(testBuf, "everything11 is ok");
  80   3      //            sioc_send(testBuf, strlen(testBuf));
  81   3                  gnPhotoDataSending = PHOTO_NODATASEND;
  82   3                  gnPhotoState = PHOTO_PHOTODATAOVER;
  83   3                  return;
  84   3              }
  85   2          }
  86   1          
  87   1          if ((PHOTO_RETRYDATATIMING == gnPhotoState) && (gnPhotoTimeout > 0))
  88   1              gnPhotoTimeout--;
  89   1      }
  90          
  91          
  92          //每50ms处理一次
  93          void photo_process()
  94          {
  95   1       //   sprintf(testBuf, "%bu:%bu:%d\r\n", gnPhotoState, gnPhotoRetry, gnPhotoCurSeq);
  96   1       //   sioc_send(testBuf, strlen(testBuf));
  97   1          //处理等待状态的情况下,在收到
  98   1          if ((PHOTO_WAITCOMMAND == gnPhotoState) || (PHOTO_NOPHOTO == gnPhotoState))
  99   1              return;
 100   1          
 101   1          if (gnPhotoState > PHOTO_WAITCOMMAND)
 102   1          {
 103   2              //处于接收状态
 104   2              photo_recievepro();
 105   2          }
 106   1          else
 107   1          {
 108   2              //处于发送状态
 109   2              photo_sendpro();
 110   2          }
 111   1      }
 112          
 113          void photo_addretryThrd(Byte nValue)
 114          {
 115   1          if (0 == nValue)
C51 COMPILER V7.09   PHOTO                                                                 08/22/2008 14:26:52 PAGE 3   

 116   1          {
 117   2              //初始设置
 118   2              if (gnPhotoPackNum < PHOTO_WINDOWSIZE)
 119   2                  gnPhotoRetryThrd = gnPhotoPackNum;
 120   2              else
 121   2                  gnPhotoRetryThrd = PHOTO_WINDOWSIZE;
 122   2          }
 123   1          else
 124   1          {
 125   2              if ((gnPhotoRetryThrd+nValue) >= PHOTO_WINDOWSIZE)
 126   2                  gnPhotoRetryThrd = gnPhotoPackNum;
 127   2              else
 128   2                  gnPhotoRetryThrd += nValue;
 129   2          }
 130   1      }
 131          
 132          //组织发送包
 133          void photo_sendpacket(Byte* pBuf, Byte type, Uint16 value)
 134          {
 135   1          memcpy(pBuf, gPhotoCommand[type], PHOTO_COMMANDPACKSIZE);
 136   1          if (PHOTO_SETFORMAT == type)
 137   1              pBuf[5] = value;
 138   1          else if (PHOTO_SETPACKETSIZE == type)
 139   1          {
 140   2              pBuf[3] = LSB(value);
 141   2              pBuf[4] = MSB(value);
 142   2          }
 143   1          else if (PHOTO_PHOTODATAREQ == type)
 144   1          {
 145   2              pBuf[4] = LSB(value);
 146   2              pBuf[5] = MSB(value);
 147   2          }
 148   1          siob_send(pBuf, PHOTO_COMMANDPACKSIZE);
 149   1      //    sioc_send(pBuf, PHOTO_COMMANDPACKSIZE);
 150   1      }
 151          
 152          //发送模块
 153          void photo_sendpro()
 154          {
 155   1          switch (gnPhotoState)
 156   1          {
 157   2              case PHOTO_INIAL:
 158   2                  gnPhotoState = PHOTO_RECIEVEINIAL;
 159   2                  photo_sendpacket(gPhotoSendBuf, PHOTO_SENDINIAL, 0);
 160   2                  break;
 161   2              case PHOTO_SETFORMAT:
 162   2                  gnPhotoState = PHOTO_RECIEVEFORMAT;
 163   2                  photo_sendpacket(gPhotoSendBuf, PHOTO_SETFORMAT, gnPhotoMode);
 164   2                  break;
 165   2              case PHOTO_SETPACKETSIZE:
 166   2                  gnPhotoRetry++;
 167   2                  if (gnPhotoRetry > 5)
 168   2                  {
 169   3                      gnPhotoState = PHOTO_RECIEVEPACKETSIZE;
 170   3                      photo_sendpacket(gPhotoSendBuf, PHOTO_SETPACKETSIZE, gnPhotoSize);
 171   3                  }
 172   2                  break;
 173   2              case PHOTO_QUICKSNAP:
 174   2                  gnPhotoState = PHOTO_RECIEVEQUICKSNAP;
 175   2                  photo_sendpacket(gPhotoSendBuf, PHOTO_QUICKSNAP, 0);
 176   2                  break;
 177   2              case PHOTO_GETPHOTODATA:
C51 COMPILER V7.09   PHOTO                                                                 08/22/2008 14:26:52 PAGE 4   

 178   2                  gnPhotoState = PHOTO_RECIEVEGETPHOTODATA;
 179   2                  photo_sendpacket(gPhotoSendBuf, PHOTO_GETPHOTODATA, 0);
 180   2                  break;
 181   2              case PHOTO_FIRSTPHOTO:            
 182   2                  if (gnPhotoRetry == 0)
 183   2                  {
 184   3                      if (VALID_DATA == photo_setnextPacket())
 185   3                      {
 186   4                          photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
 187   4                          gnPhotoState = PHOTO_PHOTOPACKET;
 188   4                      }
 189   3                  }
 190   2                  else
 191   2                      gnPhotoRetry--;                
 192   2                  break;
 193   2              case PHOTO_RETRYDATA:   
 194   2                  
 195   2                  if (0 == gnPhotoRetry)
 196   2                  {         
 197   3                      if (VALID_DATA == photo_setnextPacket())
 198   3                      {
 199   4                          photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
 200   4                          gnPhotoState = PHOTO_RECIEVERETRYDATA;
 201   4                      }
 202   3                  }
 203   2                  else
 204   2                      gnPhotoRetry--;
 205   2                  break;
 206   2              case PHOTO_RETRYDATATIMING:
 207   2                  if (0 == gnPhotoTimeout)
 208   2                  {                
 209   3                      if (0 == gnPhotoRetry)
 210   3                      {
 211   4                          if (VALID_DATA == photo_setnextPacket())    
 212   4                          {
 213   5                              photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
 214   5                              gnPhotoState = PHOTO_RECIEVETIMINGDATA;
 215   5                          }
 216   4                      }
 217   3                      else
 218   3                          gnPhotoRetry--;
 219   3                  }    
 220   2                  break;
 221   2              case PHOTO_PHOTODATAOVER:
 222   2                  if (PHOTO_DATASENDING == gnPhotoDataSending)
 223   2                  {
 224   3                      if (PHOTO_REPHOTOTIMEOUT ==gnPhotoRetry)
 225   3                          photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, 0xf0f0);    
 226   3                      gnPhotoRetry--;
 227   3                      if (0 == gnPhotoRetry)
 228   3                      {
 229   4                          gnPhotoDataSending = PHOTO_NODATASEND;
 230   4                          gnPhotoState = PHOTO_QUICKSNAP;
 231   4                      }
 232   3                  }
 233   2                  else
 234   2                  {
 235   3                      photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, 0xf0f0);
 236   3                      gnPhotoState = PHOTO_WAITCOMMAND;
 237   3                  }
 238   2                  break;
 239   2          }
C51 COMPILER V7.09   PHOTO                                                                 08/22/2008 14:26:52 PAGE 5   

 240   1      }
 241          
 242          /***需要查询下一个,返回VALID_DATA
 243              不需要查询,返回INVALID_DATA***/
 244          
 245          Byte photo_setnextPacket()
 246          {
 247   1          Byte i;
 248   1          if (gnPhotoState == PHOTO_FIRSTPHOTO)
 249   1          {
 250   2              if (gnPhotoCurSeq >= (gnPhotoPackNum-1))
 251   2              {
 252   3                  gnPhotoState = PHOTO_RETRYDATA;
 253   3                  //设置与重传有关的变量
 254   3                  photo_addretryThrd(0);
 255   3                  gnPhotoCurSeq = 0xffff;
 256   3                  return INVALID_DATA;
 257   3              }
 258   2              else
 259   2              {
 260   3                  gnPhotoCurSeq++;
 261   3                  return VALID_DATA;
 262   3              }
 263   2          }
 264   1          else

⌨️ 快捷键说明

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