📄 photo.lst
字号:
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 + -