Subversion Repositories svnkaklik

Rev

Rev 409 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
182 kaklik 1
GAS LISTING /tmp/ccQRbLT3.s 			page 1
151 kaklik 2
 
3
 
4
   1               		.file	"FrameMgr.c"
5
   2               		.arch atmega8
6
   3               	__SREG__ = 0x3f
7
   4               	__SP_H__ = 0x3e
8
   5               	__SP_L__ = 0x3d
9
   6               	__tmp_reg__ = 0
10
   7               	__zero_reg__ = 1
11
   8               		.global __do_copy_data
12
   9               		.global __do_clear_bss
174 kaklik 13
  10               		.stabs	"/home/kaklik/projects/programy/Atmel_C/AVRcam/",100,0,2,.Ltext0
151 kaklik 14
  11               		.stabs	"FrameMgr.c",100,0,2,.Ltext0
15
  12               		.text
16
  13               	.Ltext0:
17
  14               		.stabs	"gcc2_compiled.",60,0,0,0
18
  15               		.stabs	"int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
19
  16               		.stabs	"char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0
20
  17               		.stabs	"long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,0
21
  18               		.stabs	"unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,0
22
  19               		.stabs	"long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,0
23
  20               		.stabs	"long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,
24
  21               		.stabs	"long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,0
25
  22               		.stabs	"short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
26
  23               		.stabs	"short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,0
27
  24               		.stabs	"signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0
28
  25               		.stabs	"unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0
29
  26               		.stabs	"float:t(0,12)=r(0,1);4;0;",128,0,0,0
30
  27               		.stabs	"double:t(0,13)=r(0,1);4;0;",128,0,0,0
31
  28               		.stabs	"long double:t(0,14)=r(0,1);4;0;",128,0,0,0
32
  29               		.stabs	"void:t(0,15)=(0,15)",128,0,0,0
33
  30               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdlib.h",130,0,0,0
34
  31               		.stabs	"/usr/lib/gcc/avr/4.1.0/include/stddef.h",130,0,0,0
35
  32               		.stabs	"size_t:t(2,1)=(0,4)",128,0,214,0
36
  33               		.stabs	"wchar_t:t(2,2)=(0,1)",128,0,326,0
37
  34               		.stabn	162,0,0,0
38
  35               		.stabs	"div_t:t(1,1)=(1,2)=s4quot:(0,1),0,16;rem:(0,1),16,16;;",128,0,69,0
39
  36               		.stabs	"ldiv_t:t(1,3)=(1,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;",128,0,75,0
40
  37               		.stabs	"__compar_fn_t:t(1,5)=(1,6)=*(1,7)=f(0,1)",128,0,78,0
41
  38               		.stabn	162,0,0,0
42
  39               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/io.h",130,0,0,0
43
  40               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/sfr_defs.h",130,0,0,0
44
  41               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/inttypes.h",130,0,0,0
45
  42               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdint.h",130,0,0,0
46
  43               		.stabs	"int8_t:t(6,1)=(0,10)",128,0,116,0
47
  44               		.stabs	"uint8_t:t(6,2)=(0,11)",128,0,117,0
48
  45               		.stabs	"int16_t:t(6,3)=(0,1)",128,0,118,0
49
  46               		.stabs	"uint16_t:t(6,4)=(0,4)",128,0,119,0
50
  47               		.stabs	"int32_t:t(6,5)=(0,3)",128,0,120,0
51
  48               		.stabs	"uint32_t:t(6,6)=(0,5)",128,0,121,0
52
  49               		.stabs	"int64_t:t(6,7)=(0,6)",128,0,122,0
53
  50               		.stabs	"uint64_t:t(6,8)=(0,7)",128,0,123,0
54
  51               		.stabs	"intptr_t:t(6,9)=(6,3)",128,0,135,0
55
  52               		.stabs	"uintptr_t:t(6,10)=(6,4)",128,0,140,0
56
  53               		.stabs	"int_least8_t:t(6,11)=(6,1)",128,0,152,0
57
  54               		.stabs	"uint_least8_t:t(6,12)=(6,2)",128,0,157,0
58
  55               		.stabs	"int_least16_t:t(6,13)=(6,3)",128,0,162,0
59
  56               		.stabs	"uint_least16_t:t(6,14)=(6,4)",128,0,167,0
60
  57               		.stabs	"int_least32_t:t(6,15)=(6,5)",128,0,172,0
182 kaklik 61
GAS LISTING /tmp/ccQRbLT3.s 			page 2
151 kaklik 62
 
63
 
64
  58               		.stabs	"uint_least32_t:t(6,16)=(6,6)",128,0,177,0
65
  59               		.stabs	"int_least64_t:t(6,17)=(6,7)",128,0,182,0
66
  60               		.stabs	"uint_least64_t:t(6,18)=(6,8)",128,0,187,0
67
  61               		.stabs	"int_fast8_t:t(6,19)=(6,1)",128,0,200,0
68
  62               		.stabs	"uint_fast8_t:t(6,20)=(6,2)",128,0,205,0
69
  63               		.stabs	"int_fast16_t:t(6,21)=(6,3)",128,0,210,0
70
  64               		.stabs	"uint_fast16_t:t(6,22)=(6,4)",128,0,215,0
71
  65               		.stabs	"int_fast32_t:t(6,23)=(6,5)",128,0,220,0
72
  66               		.stabs	"uint_fast32_t:t(6,24)=(6,6)",128,0,225,0
73
  67               		.stabs	"int_fast64_t:t(6,25)=(6,7)",128,0,230,0
74
  68               		.stabs	"uint_fast64_t:t(6,26)=(6,8)",128,0,235,0
75
  69               		.stabs	"intmax_t:t(6,27)=(6,7)",128,0,249,0
76
  70               		.stabs	"uintmax_t:t(6,28)=(6,8)",128,0,254,0
77
  71               		.stabn	162,0,0,0
78
  72               		.stabs	"int_farptr_t:t(5,1)=(6,5)",128,0,76,0
79
  73               		.stabs	"uint_farptr_t:t(5,2)=(6,6)",128,0,80,0
80
  74               		.stabn	162,0,0,0
81
  75               		.stabn	162,0,0,0
82
  76               		.stabn	162,0,0,0
83
  77               		.stabs	"I2CInterface.h",130,0,0,0
84
  78               		.stabs	"CommonDefs.h",130,0,0,0
85
  79               		.stabs	"bool_t:t(8,1)=(0,11)",128,0,56,0
86
  80               		.stabn	162,0,0,0
87
  81               		.stabs	"i2cCmd_t:t(7,1)=(7,2)=s2configReg:(0,11),0,8;data:(0,11),8,8;;",128,0,53,0
88
  82               		.stabn	162,0,0,0
89
  83               		.stabs	" :T(0,16)=@s8;eST_FrameMgr_idle:0,ST_FrameMgr_TrackingFrame:1,ST_FrameMgr_DumpingFrame:2,;
90
  84               		.stabs	"FrameMgr_State_t:t(0,17)=(0,11)",128,0,72,0
91
  85               		.stabs	" :T(0,18)=@s8;enotTracked:0,color1:1,color2:2,color3:3,color4:4,color5:5,color6:6,color7:7
92
  86               		.stabs	"trackedColor_t:t(0,19)=(0,11)",128,0,127,0
93
  87               		.stabs	"trackedObject_t:t(0,20)=(0,21)=s8color:(0,19),0,8;lastLineXStart:(0,11),8,8;lastLineXFinis
94
  88               		.stabs	"FrameMgr_processFrame:F(0,15)",36,0,517,FrameMgr_processFrame
95
  89               	.global	FrameMgr_processFrame
96
  90               		.type	FrameMgr_processFrame, @function
97
  91               	FrameMgr_processFrame:
98
  92               		.stabd	46,0,0
99
   1:FrameMgr.c    **** /*
100
   2:FrameMgr.c    ****     Copyright (C) 2004    John Orlando
101
   3:FrameMgr.c    ****     
102
   4:FrameMgr.c    ****    AVRcam: a small real-time image processing engine.
103
   5:FrameMgr.c    **** 
104
   6:FrameMgr.c    ****     This program is free software; you can redistribute it and/or
105
   7:FrameMgr.c    ****     modify it under the terms of the GNU General Public
106
   8:FrameMgr.c    ****     License as published by the Free Software Foundation; either
107
   9:FrameMgr.c    ****     version 2 of the License, or (at your option) any later version.
108
  10:FrameMgr.c    **** 
109
  11:FrameMgr.c    ****     This program is distributed in the hope that it will be useful,
110
  12:FrameMgr.c    ****     but WITHOUT ANY WARRANTY; without even the implied warranty of
111
  13:FrameMgr.c    ****     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
112
  14:FrameMgr.c    ****     General Public License for more details.
113
  15:FrameMgr.c    **** 
114
  16:FrameMgr.c    ****     You should have received a copy of the GNU General Public
115
  17:FrameMgr.c    ****     License along with this program; if not, write to the Free Software
116
  18:FrameMgr.c    ****     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
117
  19:FrameMgr.c    **** 
118
  20:FrameMgr.c    ****    For more information on the AVRcam, please contact:
119
  21:FrameMgr.c    **** 
120
  22:FrameMgr.c    ****    john@jrobot.net
182 kaklik 121
GAS LISTING /tmp/ccQRbLT3.s 			page 3
151 kaklik 122
 
123
 
124
  23:FrameMgr.c    **** 
125
  24:FrameMgr.c    ****    or go to www.jrobot.net for more details regarding the system.
126
  25:FrameMgr.c    **** */
127
  26:FrameMgr.c    **** /*********************************************************
128
  27:FrameMgr.c    **** 	Module Name: FrameMgr.c
129
  28:FrameMgr.c    **** 	Module Date: 04/10/2004
130
  29:FrameMgr.c    **** 	Module Auth: John Orlando
131
  30:FrameMgr.c    **** 	
132
  31:FrameMgr.c    **** 	Description: This modules is responsible for performing
133
  32:FrameMgr.c    **** 	both medium and high level processing on image data.
134
  33:FrameMgr.c    **** 	This is performed at both the line level as well as
135
  34:FrameMgr.c    **** 	the frame level.  It controls the main flow of the
136
  35:FrameMgr.c    **** 	system, adhering to all the critical timing 
137
  36:FrameMgr.c    **** 	requirements (such as when serial data can be transferred,
138
  37:FrameMgr.c    **** 	etc).
139
  38:FrameMgr.c    ****     
140
  39:FrameMgr.c    ****     Revision History:
141
  40:FrameMgr.c    ****     Date        Rel Ver.    Notes
142
  41:FrameMgr.c    ****     4/10/2004      0.1     Module created
143
  42:FrameMgr.c    ****     6/30/2004      1.0     Initial release for Circuit Cellar
144
  43:FrameMgr.c    ****                            contest.
145
  44:FrameMgr.c    ****     11/15/2004     1.2     Updated processLine() function so 
146
  45:FrameMgr.c    ****                            it will remove objects less than
147
  46:FrameMgr.c    ****                            a specified length/width (reduces
148
  47:FrameMgr.c    ****                            shot noise)
149
  48:FrameMgr.c    **** *********************************************************/
150
  49:FrameMgr.c    **** 
151
  50:FrameMgr.c    **** /*	Includes */
152
  51:FrameMgr.c    **** #include <stdlib.h>
153
  52:FrameMgr.c    **** #include <string.h>
154
  53:FrameMgr.c    **** #include <avr/io.h>
155
  54:FrameMgr.c    **** #include "Executive.h"
156
  55:FrameMgr.c    **** #include "UIMgr.h"
157
  56:FrameMgr.c    **** #include "FrameMgr.h"
158
  57:FrameMgr.c    **** #include "CamInterface.h"
159
  58:FrameMgr.c    **** #include "UartInterface.h"
160
  59:FrameMgr.c    **** #include "Utility.h"
161
  60:FrameMgr.c    **** #include "I2CInterface.h"
162
  61:FrameMgr.c    **** #include "CamConfig.h"
163
  62:FrameMgr.c    **** #include "CommonDefs.h"
164
  63:FrameMgr.c    **** 
165
  64:FrameMgr.c    **** /* 	Local Structures and Typedefs */
166
  65:FrameMgr.c    **** enum
167
  66:FrameMgr.c    **** {
168
  67:FrameMgr.c    **** 	ST_FrameMgr_idle,
169
  68:FrameMgr.c    **** 	ST_FrameMgr_TrackingFrame,
170
  69:FrameMgr.c    **** 	ST_FrameMgr_DumpingFrame
171
  70:FrameMgr.c    **** };
172
  71:FrameMgr.c    **** 
173
  72:FrameMgr.c    **** typedef unsigned char FrameMgr_State_t;
174
  73:FrameMgr.c    **** 
175
  74:FrameMgr.c    **** /*  Definitions */
176
  75:FrameMgr.c    **** /* The most objects that can be tracked at any one time is 8.  
177
  76:FrameMgr.c    **** This number is determined by the number of bytes that can be
178
  77:FrameMgr.c    **** sent out during a frame (one byte per line, 144 lines per frame) 
179
  78:FrameMgr.c    **** with the number of bytes in a tracked object (7) + some wiggle
180
  79:FrameMgr.c    **** room :-) ... I guess this could be increased to around 20 if
182 kaklik 181
GAS LISTING /tmp/ccQRbLT3.s 			page 4
151 kaklik 182
 
183
 
184
  80:FrameMgr.c    **** we had enough room and cycles to process objects between lines */
185
  81:FrameMgr.c    **** #define MAX_TRACKED_OBJECTS	8
186
  82:FrameMgr.c    **** 
187
  83:FrameMgr.c    **** /* This defines the number of bytes that make up a trackedObject_t
188
  84:FrameMgr.c    **** structure... */
189
  85:FrameMgr.c    **** #define SIZE_OF_TRACKED_OBJECT 8
190
  86:FrameMgr.c    **** 
191
  87:FrameMgr.c    **** /* This define is used to turn off the timer overflow interrupt
192
  88:FrameMgr.c    **** that is generated when the PCLK overflows TIMER1 */
193
  89:FrameMgr.c    **** #define DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK 0xFB
194
  90:FrameMgr.c    **** 
195
  91:FrameMgr.c    **** /* This define is used to determine if a run length is too small
196
  92:FrameMgr.c    **** to be concerned with.  This helps to reduce the number of false
197
  93:FrameMgr.c    **** positives. */
198
  94:FrameMgr.c    **** #define MIN_OBJECT_TRACKING_WIDTH 3
199
  95:FrameMgr.c    **** 
200
  96:FrameMgr.c    **** /* This define is used to determine if an object has enough
201
  97:FrameMgr.c    **** height to be considered worth tracking...it is used to reduce
202
  98:FrameMgr.c    **** shot noise */
203
  99:FrameMgr.c    **** #define MIN_OBJECT_TRACKING_HEIGHT 3
204
 100:FrameMgr.c    **** 
205
 101:FrameMgr.c    **** /* This define is used to indicate how often the filter routine
206
 102:FrameMgr.c    **** that removes objects less than MIN_OBJECT_TRACKING_HEIGHT should
207
 103:FrameMgr.c    **** be executed.  It is measured in a number of lines (7 nominally). */
208
 104:FrameMgr.c    **** #define RUN_OBJECT_FILTER_MASK 0x07
209
 105:FrameMgr.c    **** 
210
 106:FrameMgr.c    **** /* This enum describes the possible colors that can
211
 107:FrameMgr.c    **** be tracked by the system.  This can't be represented as
212
 108:FrameMgr.c    **** simple color names (red, brown, etc) due to the fact that
213
 109:FrameMgr.c    **** the user sets which colors will be associated with which
214
 110:FrameMgr.c    **** bits.  Remember...after the AND operation of the indexed
215
 111:FrameMgr.c    **** color map values executes, either a single bit indicating
216
 112:FrameMgr.c    **** the color should be set, or no bits indicating that the
217
 113:FrameMgr.c    **** color isn't represented in the color map (notTracked). */
218
 114:FrameMgr.c    **** enum
219
 115:FrameMgr.c    **** {
220
 116:FrameMgr.c    **** 	notTracked,
221
 117:FrameMgr.c    **** 	color1,		/* bit 1 color */
222
 118:FrameMgr.c    **** 	color2,		/* bit 2 color */
223
 119:FrameMgr.c    **** 	color3,		/* bit 3 color */
224
 120:FrameMgr.c    **** 	color4,		/* bit 4 color */
225
 121:FrameMgr.c    **** 	color5,		/* bit 5 color */
226
 122:FrameMgr.c    **** 	color6,		/* bit 6 color */
227
 123:FrameMgr.c    **** 	color7,		/* bit 7 color */
228
 124:FrameMgr.c    **** 	color8		/* bit 8 color */
229
 125:FrameMgr.c    **** };
230
 126:FrameMgr.c    **** 
231
 127:FrameMgr.c    **** typedef unsigned char trackedColor_t;
232
 128:FrameMgr.c    **** 
233
 129:FrameMgr.c    **** /* This structure defines the info that needs to be
234
 130:FrameMgr.c    **** maintained for each trackedObject in the trackingTable */
235
 131:FrameMgr.c    **** typedef struct
236
 132:FrameMgr.c    **** {
237
 133:FrameMgr.c    **** 	trackedColor_t  color;
238
 134:FrameMgr.c    **** 	unsigned char lastLineXStart;
239
 135:FrameMgr.c    **** 	unsigned char lastLineXFinish;
240
 136:FrameMgr.c    **** 	unsigned char x_upperLeft;
182 kaklik 241
GAS LISTING /tmp/ccQRbLT3.s 			page 5
151 kaklik 242
 
243
 
244
 137:FrameMgr.c    **** 	unsigned char y_upperLeft;
245
 138:FrameMgr.c    **** 	unsigned char x_lowerRight;
246
 139:FrameMgr.c    **** 	unsigned char y_lowerRight;
247
 140:FrameMgr.c    **** 	unsigned char objectValid;  /* used to be a fill byte...now it is
248
 141:FrameMgr.c    ****                                      used to determine if the object is valid
249
 142:FrameMgr.c    ****                                      or not...it gets invalidated if it is
250
 143:FrameMgr.c    ****                                      determined that it is too small, or
251
 144:FrameMgr.c    ****                                      that the object is within another object */
252
 145:FrameMgr.c    **** } trackedObject_t;
253
 146:FrameMgr.c    **** 
254
 147:FrameMgr.c    **** /* These defines are used to index into each individual element in the
255
 148:FrameMgr.c    **** trackedObject_t structure.  This seems to be MUCH more efficient than
256
 149:FrameMgr.c    **** accessing the elements in GCC. */
257
 150:FrameMgr.c    **** #define COLOR_OFFSET                0
258
 151:FrameMgr.c    **** #define LAST_LINE_X_START_OFFSET    1
259
 152:FrameMgr.c    **** #define LAST_LINE_X_FINISH_OFFSET   2
260
 153:FrameMgr.c    **** #define X_UPPER_LEFT_OFFSET         3
261
 154:FrameMgr.c    **** #define Y_UPPER_LEFT_OFFSET         4
262
 155:FrameMgr.c    **** #define X_LOWER_RIGHT_OFFSET        5
263
 156:FrameMgr.c    **** #define Y_LOWER_RIGHT_OFFSET        6
264
 157:FrameMgr.c    **** #define VALID_OBJECT_OFFSET         7
265
 158:FrameMgr.c    **** 
266
 159:FrameMgr.c    **** /*  Local Variables */
267
 160:FrameMgr.c    **** /* The trackedObjectTable is used to hold up to eight tracked objects
268
 161:FrameMgr.c    **** while they are being acquired. */
269
 162:FrameMgr.c    **** static trackedObject_t trackedObjectTable[MAX_TRACKED_OBJECTS];
270
 163:FrameMgr.c    **** static trackedObject_t *pCurrentTrackedObjectTable = trackedObjectTable;
271
 164:FrameMgr.c    **** static unsigned char lineCount = 0;
272
 165:FrameMgr.c    **** static FrameMgr_State_t currentState = ST_FrameMgr_idle;
273
 166:FrameMgr.c    **** static unsigned char numCurrTrackedObjects = 0;
274
 167:FrameMgr.c    **** static unsigned char numPrevTrackedObjects = 0;
275
 168:FrameMgr.c    **** static unsigned char trackedLineCount = 0;
276
 169:FrameMgr.c    **** 
277
 170:FrameMgr.c    **** /*  Local Functions  */
278
 171:FrameMgr.c    **** static void FrameMgr_findConnectedness(void);
279
 172:FrameMgr.c    **** 
280
 173:FrameMgr.c    **** /*  Extern Functions */
281
 174:FrameMgr.c    **** /* These functions are located in assembly files, and thus
282
 175:FrameMgr.c    **** must be externed here so they can be referenced in the source below. */
283
 176:FrameMgr.c    **** extern void CamIntAsm_waitForNewTrackingFrame(unsigned char *pBuffer, unsigned char *pMemLookup);
284
 177:FrameMgr.c    **** extern void CamIntAsm_waitForNewDumpFrame(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
285
 178:FrameMgr.c    **** extern void CamIntAsm_acquireTrackingLine(unsigned char *pBuffer, unsigned char *pMemLookup);
286
 179:FrameMgr.c    **** extern void CamIntAsm_acquireDumpLine(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
287
 180:FrameMgr.c    **** 
288
 181:FrameMgr.c    **** /***********************************************************
289
 182:FrameMgr.c    **** 	Function Name: FrameMgr_init
290
 183:FrameMgr.c    **** 	Function Description: This function is responsible
291
 184:FrameMgr.c    **** 	for initializing the FrameMgr.  This includes 
292
 185:FrameMgr.c    **** 	setting up the various buffers and data needed to 
293
 186:FrameMgr.c    **** 	process each frame of image data.
294
 187:FrameMgr.c    **** 	Inputs:  none
295
 188:FrameMgr.c    **** 	Outputs: none
296
 189:FrameMgr.c    **** ***********************************************************/	
297
 190:FrameMgr.c    **** void FrameMgr_init(void)
298
 191:FrameMgr.c    **** {
299
 192:FrameMgr.c    **** 	memset(trackedObjectTable,0x00,sizeof(trackedObjectTable));
300
 193:FrameMgr.c    **** }
182 kaklik 301
GAS LISTING /tmp/ccQRbLT3.s 			page 6
151 kaklik 302
 
303
 
304
 194:FrameMgr.c    **** 
305
 195:FrameMgr.c    **** 
306
 196:FrameMgr.c    **** /***********************************************************
307
 197:FrameMgr.c    **** 	Function Name: FrameMgr_dispatchEvent
308
 198:FrameMgr.c    **** 	Function Description: This function is responsible for
309
 199:FrameMgr.c    **** 	taking an incoming event and performing the needed
310
 200:FrameMgr.c    **** 	actions with it as pertains to the FrameMgr.
311
 201:FrameMgr.c    **** 	Inputs:  event - the generated event
312
 202:FrameMgr.c    **** 	Outputs: none
313
 203:FrameMgr.c    **** ***********************************************************/	
314
 204:FrameMgr.c    **** void FrameMgr_dispatchEvent(unsigned char event)
315
 205:FrameMgr.c    **** {	
316
 206:FrameMgr.c    **** 	switch(event)
317
 207:FrameMgr.c    **** 	{
318
 208:FrameMgr.c    **** 		case EV_DUMP_FRAME:
319
 209:FrameMgr.c    ****             /* try re-initializing the camera before we start dumping */
320
 210:FrameMgr.c    ****             
321
 211:FrameMgr.c    **** 			CamConfig_setCamReg(0x11,0x01);  /* reduce the frame rate for dumping*/
322
 212:FrameMgr.c    **** 			CamConfig_sendFifoCmds();
323
 213:FrameMgr.c    **** 			Utility_delay(1000);		/* allow the new frame rate to settle */
324
 214:FrameMgr.c    **** 			lineCount = 0;
325
 215:FrameMgr.c    **** 			currentState = ST_FrameMgr_DumpingFrame;
326
 216:FrameMgr.c    **** 			//CamIntAsm_waitForNewDumpFrame(currentLineBuffer,previousLineBuffer);
327
 217:FrameMgr.c    ****             FrameMgr_acquireLine();
328
 218:FrameMgr.c    **** 			break;
329
 219:FrameMgr.c    **** 		
330
 220:FrameMgr.c    **** 		case EV_ENABLE_TRACKING:
331
 221:FrameMgr.c    **** 			currentState = ST_FrameMgr_TrackingFrame;					
332
 222:FrameMgr.c    **** 			FrameMgr_acquireFrame();
333
 223:FrameMgr.c    **** 			break;
334
 224:FrameMgr.c    **** 			
335
 225:FrameMgr.c    **** 		case EV_ACQUIRE_FRAME_COMPLETE:
336
 226:FrameMgr.c    **** 			FrameMgr_processFrame();
337
 227:FrameMgr.c    **** 			break;
338
 228:FrameMgr.c    **** 		
339
 229:FrameMgr.c    **** 		case EV_PROCESS_FRAME_COMPLETE:
340
 230:FrameMgr.c    **** 			FrameMgr_acquireFrame();
341
 231:FrameMgr.c    **** 			break;
342
 232:FrameMgr.c    **** 
343
 233:FrameMgr.c    **** 		case EV_SERIAL_DATA_RECEIVED:
344
 234:FrameMgr.c    **** 			if (currentState != ST_FrameMgr_idle)
345
 235:FrameMgr.c    **** 			{
346
 236:FrameMgr.c    **** 				/* we need to go back to processing line data, since
347
 237:FrameMgr.c    **** 				serial data reception interrupted us....just trash the
348
 238:FrameMgr.c    **** 				frame and act like the frame has been processed, which
349
 239:FrameMgr.c    **** 				will kick off the system to wait for the next line */
350
 240:FrameMgr.c    **** 				PUBLISH_EVENT(EV_PROCESS_FRAME_COMPLETE);
351
 241:FrameMgr.c    **** 			}
352
 242:FrameMgr.c    **** 			break;
353
 243:FrameMgr.c    **** 			
354
 244:FrameMgr.c    **** 		case EV_DISABLE_TRACKING:
355
 245:FrameMgr.c    **** 			/* tracking needs to be turned off */
356
 246:FrameMgr.c    **** 			currentState = ST_FrameMgr_idle;
357
 247:FrameMgr.c    **** 			break;
358
 248:FrameMgr.c    **** 	}
359
 249:FrameMgr.c    **** }
360
 250:FrameMgr.c    **** 
182 kaklik 361
GAS LISTING /tmp/ccQRbLT3.s 			page 7
151 kaklik 362
 
363
 
364
 251:FrameMgr.c    **** /***********************************************************
365
 252:FrameMgr.c    **** 	Function Name: FrameMgr_acquireFrame
366
 253:FrameMgr.c    **** 	Function Description: This function is responsible for
367
 254:FrameMgr.c    **** 	beginning of the acquisition of a new frame of data
368
 255:FrameMgr.c    **** 	from the camera interface. The acquisition of this line 
369
 256:FrameMgr.c    **** 	depends on the current state of the FrameMgr.
370
 257:FrameMgr.c    **** 	Inputs:  none
371
 258:FrameMgr.c    **** 	Outputs: none
372
 259:FrameMgr.c    **** ***********************************************************/	
373
 260:FrameMgr.c    **** void FrameMgr_acquireFrame(void)
374
 261:FrameMgr.c    **** {
375
 262:FrameMgr.c    **** 	if (currentState == ST_FrameMgr_TrackingFrame)
376
 263:FrameMgr.c    **** 	{
377
 264:FrameMgr.c    **** 		trackedLineCount = 0;
378
 265:FrameMgr.c    **** 		numPrevTrackedObjects = numCurrTrackedObjects;
379
 266:FrameMgr.c    **** 		numCurrTrackedObjects = 0;
380
 267:FrameMgr.c    **** 		
381
 268:FrameMgr.c    **** 		/* clear out the tracking table, and wait for the new frame
382
 269:FrameMgr.c    **** 		to start */
383
 270:FrameMgr.c    **** 		memset(trackedObjectTable,0x00,sizeof(trackedObjectTable));
384
 271:FrameMgr.c    **** 		//CamIntAsm_waitForNewTrackingFrame(currentLineBuffer,colorMap);
385
 272:FrameMgr.c    ****         WAIT_FOR_VSYNC_HIGH();
386
 273:FrameMgr.c    ****         CamIntAsm_acquireTrackingLine(currentLineBuffer,colorMap);
387
 274:FrameMgr.c    **** 	}
388
 275:FrameMgr.c    **** }
389
 276:FrameMgr.c    **** 
390
 277:FrameMgr.c    **** /***********************************************************
391
 278:FrameMgr.c    **** 	Function Name: FrameMgr_acquireLine
392
 279:FrameMgr.c    **** 	Function Description: This function is responsible for
393
 280:FrameMgr.c    **** 	acquiring a line of data from the camera interface.
394
 281:FrameMgr.c    **** 	The acquisition of this line depends on the current
395
 282:FrameMgr.c    **** 	state of the FrameMgr.
396
 283:FrameMgr.c    **** 	Inputs:  none
397
 284:FrameMgr.c    **** 	Outputs: none
398
 285:FrameMgr.c    **** ***********************************************************/	
399
 286:FrameMgr.c    **** void FrameMgr_acquireLine(void)
400
 287:FrameMgr.c    **** {
401
 288:FrameMgr.c    **** 	unsigned char tmpLineCount;
402
 289:FrameMgr.c    **** 	
403
 290:FrameMgr.c    **** 	/* clearing out the buffers takes too long...we should
404
 291:FrameMgr.c    **** 	just overwrite the data here without a problem when
405
 292:FrameMgr.c    **** 	we start acquiring...at no point do we check for 
406
 293:FrameMgr.c    **** 	a 0x00 value in the current or previous lineBuffers,
407
 294:FrameMgr.c    **** 	so it was a bit excessive :-)  */
408
 295:FrameMgr.c    **** 	
409
 296:FrameMgr.c    **** 	/* check which state we are in and proceed as needed */
410
 297:FrameMgr.c    **** 	if (currentState == ST_FrameMgr_DumpingFrame)
411
 298:FrameMgr.c    **** 	{
412
 299:FrameMgr.c    **** 		tmpLineCount = lineCount*2;
413
 300:FrameMgr.c    ****         
414
 301:FrameMgr.c    ****         /* clearing out the line data in dump mode is ok, and actually
415
 302:FrameMgr.c    ****         is needed, since it is possible for the first dump line in
416
 303:FrameMgr.c    ****         a frame to come back with the last line captured of the
417
 304:FrameMgr.c    ****         last capture session...*/
418
 305:FrameMgr.c    ****         memset(currentLineBuffer,0x00,LENGTH_OF_LINE_BUFFER);
419
 306:FrameMgr.c    ****         memset(previousLineBuffer,0x00,LENGTH_OF_LINE_BUFFER);
420
 307:FrameMgr.c    **** 		/* wait for another VSYNC so we know which frame to use 
182 kaklik 421
GAS LISTING /tmp/ccQRbLT3.s 			page 8
151 kaklik 422
 
423
 
424
 308:FrameMgr.c    **** 		to start looking for a line to receive */
425
 309:FrameMgr.c    **** 		WAIT_FOR_VSYNC_HIGH();  
426
 310:FrameMgr.c    **** 		WAIT_FOR_VSYNC_LOW();
427
 311:FrameMgr.c    **** 		
428
 312:FrameMgr.c    **** 		/* look at lineCount to determine how many HREFs we should
429
 313:FrameMgr.c    **** 		wait before we start sampling */
430
 314:FrameMgr.c    **** 		while(tmpLineCount != 0)
431
 315:FrameMgr.c    **** 		{
432
 316:FrameMgr.c    **** 			WAIT_FOR_HREF_HIGH(); 
433
 317:FrameMgr.c    **** 			tmpLineCount--;
434
 318:FrameMgr.c    **** 			WAIT_FOR_HREF_LOW(); 
435
 319:FrameMgr.c    **** 		}
436
 320:FrameMgr.c    **** 		
437
 321:FrameMgr.c    **** 		/*  we should now be ready to sample our line...*/
438
 322:FrameMgr.c    **** 		CamIntAsm_acquireDumpLine(currentLineBuffer,previousLineBuffer);
439
 323:FrameMgr.c    **** 	}		
440
 324:FrameMgr.c    **** 	else if (currentState == ST_FrameMgr_TrackingFrame)
441
 325:FrameMgr.c    **** 	{
442
 326:FrameMgr.c    **** 		WAIT_FOR_HREF_LOW();
443
 327:FrameMgr.c    **** 		CamIntAsm_acquireTrackingLine(currentLineBuffer,colorMap);
444
 328:FrameMgr.c    **** 	}
445
 329:FrameMgr.c    **** }
446
 330:FrameMgr.c    **** 
447
 331:FrameMgr.c    **** /***********************************************************
448
 332:FrameMgr.c    **** 	Function Name: FrameMgr_processLine
449
 333:FrameMgr.c    **** 	Function Description: This function is responsible for
450
 334:FrameMgr.c    **** 	parsing the received image line and performing either
451
 335:FrameMgr.c    **** 	connected region mapping (if in the Tracking state) or
452
 336:FrameMgr.c    **** 	sending out the raw sampled data (if in the Dumping
453
 337:FrameMgr.c    **** 	state).
454
 338:FrameMgr.c    **** 	Inputs:  none
455
 339:FrameMgr.c    **** 	Outputs: none
456
 340:FrameMgr.c    **** ***********************************************************/	
457
 341:FrameMgr.c    **** void FrameMgr_processLine(void)
458
 342:FrameMgr.c    **** {
459
 343:FrameMgr.c    **** 	unsigned char i;
460
 344:FrameMgr.c    **** 	volatile unsigned char dataToSend;
461
 345:FrameMgr.c    **** 	unsigned char *pTrackedObjectData = (unsigned char *)pCurrentTrackedObjectTable;
462
 346:FrameMgr.c    **** #ifdef DEBUG_TRACKED_LINE    
463
 347:FrameMgr.c    **** 	unsigned char *pSendData;
464
 348:FrameMgr.c    ****     unsigned char asciiBuffer[5];
465
 349:FrameMgr.c    ****     unsigned char pixelCount = 0;
466
 350:FrameMgr.c    **** #endif    
467
 351:FrameMgr.c    **** 	
468
 352:FrameMgr.c    **** 	if (currentState == ST_FrameMgr_DumpingFrame)
469
 353:FrameMgr.c    **** 	{
470
 354:FrameMgr.c    **** 		/* we want to sit in a tight loop and send the acquired data
471
 355:FrameMgr.c    **** 		sitting in current and previous line buffers out the serial
472
 356:FrameMgr.c    **** 		port...it is sent out the serial port immediately instead
473
 357:FrameMgr.c    **** 		of going into the UIMgr tx fifo because we can't do anything
474
 358:FrameMgr.c    **** 		until its sent out anyway...may as well just get it out now	*/
475
 359:FrameMgr.c    **** 		
476
 360:FrameMgr.c    **** 		/* currentLineBuffer is getting "g" previousLineBuffer is getting "b-r" */
477
 361:FrameMgr.c    **** 		UartInt_txByte(0x0B);			/* send the header byte */
478
 362:FrameMgr.c    **** 		UartInt_txByte(lineCount);		/* send the line count */
479
 363:FrameMgr.c    **** 		for (i=0; i<NUM_PIXELS_IN_A_DUMP_LINE; i+=2)
480
 364:FrameMgr.c    **** 		{
182 kaklik 481
GAS LISTING /tmp/ccQRbLT3.s 			page 9
151 kaklik 482
 
483
 
484
 365:FrameMgr.c    **** 			/* when a dump line is sampled, the upper byte can potentially
485
 366:FrameMgr.c    **** 			have garbage in it...we don't have time to mask it off as we're
486
 367:FrameMgr.c    **** 			sampling, so it is done here before we send it out...we also
487
 368:FrameMgr.c    **** 			combine the samples together so we really are sending up a
488
 369:FrameMgr.c    **** 			sample for line N as well as line N+1 */
489
 370:FrameMgr.c    **** 			dataToSend = currentLineBuffer[i];
490
 371:FrameMgr.c    **** 			dataToSend &= 0x0F;
491
 372:FrameMgr.c    **** 			dataToSend <<= 4;
492
 373:FrameMgr.c    **** 			dataToSend |= (previousLineBuffer[i] & 0x0F);
493
 374:FrameMgr.c    **** 			
494
 375:FrameMgr.c    **** 			/* dataToSend should be packed now */
495
 376:FrameMgr.c    **** 			UartInt_txByte(dataToSend);
496
 377:FrameMgr.c    **** 			
497
 378:FrameMgr.c    **** 			/* flip the colors around since we are doing all G on Y and BR on UV */
498
 379:FrameMgr.c    **** 			dataToSend = previousLineBuffer[i+1];
499
 380:FrameMgr.c    **** 			dataToSend &= 0x0F;
500
 381:FrameMgr.c    **** 			dataToSend <<= 4;
501
 382:FrameMgr.c    **** 			dataToSend |= (currentLineBuffer[i+1] & 0x0F);
502
 383:FrameMgr.c    **** 			
503
 384:FrameMgr.c    **** 			/* dataToSend should be packed now */
504
 385:FrameMgr.c    **** 			UartInt_txByte(dataToSend);
505
 386:FrameMgr.c    **** 		}
506
 387:FrameMgr.c    **** 		UartInt_txByte(0x0F);  /* send line end */
507
 388:FrameMgr.c    **** 		/* once all the data is sent, increment out line count by 2 since
508
 389:FrameMgr.c    **** 		we really get 2 lines worth of pixels on each pass */
509
 390:FrameMgr.c    **** 		/* Update...increment only by 1, but only send 72 double-lines */
510
 391:FrameMgr.c    **** 		lineCount++;
511
 392:FrameMgr.c    **** 		
512
 393:FrameMgr.c    **** 		/* check to see if we have retrieved all of the needed lines */
513
 394:FrameMgr.c    **** 		if (lineCount >= 72)  /* half 144, since we send two lines at a time */
514
 395:FrameMgr.c    **** 		{
515
 396:FrameMgr.c    **** 			/* we're done, so send the dump complete?...nope, just change
516
 397:FrameMgr.c    **** 			states and we should be fine */
517
 398:FrameMgr.c    **** 			lineCount = 0;
518
 399:FrameMgr.c    **** 			currentState = ST_FrameMgr_idle;
519
 400:FrameMgr.c    **** 			
520
 401:FrameMgr.c    **** 			/* disable the PCLK counting overflow interrupt */
521
 402:FrameMgr.c    **** 			TIMSK &= DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK;
522
 403:FrameMgr.c    **** 			
523
 404:FrameMgr.c    **** 			CamConfig_setCamReg(0x11,0x00);  /* reset the frame rate to normal*/
524
 405:FrameMgr.c    **** 			CamConfig_sendFifoCmds();
525
 406:FrameMgr.c    **** 		}
526
 407:FrameMgr.c    **** 		else
527
 408:FrameMgr.c    **** 		{
528
 409:FrameMgr.c    **** 			/* we have more lines to acquire in this frame, so keep on truckin...*/
529
 410:FrameMgr.c    **** 			PUBLISH_FAST_EVENT(FEV_PROCESS_LINE_COMPLETE);
530
 411:FrameMgr.c    **** 		}
531
 412:FrameMgr.c    **** 	}
532
 413:FrameMgr.c    **** 	else if (currentState == ST_FrameMgr_TrackingFrame)
533
 414:FrameMgr.c    **** 	{
534
 415:FrameMgr.c    **** #ifdef DEBUG_TRACKED_LINE	
535
 416:FrameMgr.c    **** 		/* send the received line over serial...this should only send
536
 417:FrameMgr.c    **** 		until a pixelCount == 176 */
537
 418:FrameMgr.c    **** 		pSendData = currentLineBuffer;
538
 419:FrameMgr.c    **** 		itoa(trackedLineCount,asciiBuffer,10);
539
 420:FrameMgr.c    **** 		UIMgr_txBuffer(asciiBuffer,3);
540
 421:FrameMgr.c    **** 		UIMgr_txBuffer(" ",1);
182 kaklik 541
GAS LISTING /tmp/ccQRbLT3.s 			page 10
151 kaklik 542
 
543
 
544
 422:FrameMgr.c    **** 		while(pixelCount < ACTUAL_NUM_PIXELS_IN_A_LINE)  
545
 423:FrameMgr.c    **** 		{
546
 424:FrameMgr.c    **** 			memset(asciiBuffer,0x00,5);
547
 425:FrameMgr.c    **** 			itoa(*pSendData++,asciiBuffer,10);	/* color is first byte */
548
 426:FrameMgr.c    **** 			UIMgr_txBuffer(asciiBuffer,3); /* 3 ascii bytes for data */
549
 427:FrameMgr.c    **** 			UIMgr_txBuffer(" ",1);
550
 428:FrameMgr.c    **** 
551
 429:FrameMgr.c    **** 			pixelCount += *pSendData;	/* run-length is second byte */
552
 430:FrameMgr.c    **** 			memset(asciiBuffer,0x00,5);
553
 431:FrameMgr.c    **** 			itoa(*pSendData++,asciiBuffer,10);
554
 432:FrameMgr.c    **** 			UIMgr_txBuffer(asciiBuffer,3);
555
 433:FrameMgr.c    **** 			UIMgr_txBuffer(" ",1);
556
 434:FrameMgr.c    **** 		}
557
 435:FrameMgr.c    **** 		UIMgr_txBuffer("\n\r",2);
558
 436:FrameMgr.c    **** 
559
 437:FrameMgr.c    **** 		trackedLineCount++;
560
 438:FrameMgr.c    **** 		if (trackedLineCount == 144)
561
 439:FrameMgr.c    **** 		{
562
 440:FrameMgr.c    **** 			UIMgr_txBuffer("  FC  \n\r",8);
563
 441:FrameMgr.c    **** 			trackedLineCount = 0;
564
 442:FrameMgr.c    **** 			PUBLISH_EVENT(EV_PROCESS_FRAME_COMPLETE);
565
 443:FrameMgr.c    **** 		}
566
 444:FrameMgr.c    **** 		else
567
 445:FrameMgr.c    **** 		{
568
 446:FrameMgr.c    **** 			PUBLISH_EVENT(EV_PROCESS_LINE_COMPLETE);
569
 447:FrameMgr.c    **** 		}	
570
 448:FrameMgr.c    **** #else
571
 449:FrameMgr.c    ****         /* determine if any of the RLE blocks overlap */
572
 450:FrameMgr.c    **** 		FrameMgr_findConnectedness();
573
 451:FrameMgr.c    ****         
574
 452:FrameMgr.c    ****         /* we also want to remove any objects that are less than
575
 453:FrameMgr.c    ****         a minimum height...we already removed portions of the 
576
 454:FrameMgr.c    ****         run-length that are less than MIN_PIXEL_WIDTH in the
577
 455:FrameMgr.c    ****         findConnectedness() routine...doing it here instead of 
578
 456:FrameMgr.c    ****         a function to speed things up...this may end up slowing down the
579
 457:FrameMgr.c    ****         frame rate slightly, and can be removed if this isn't needed */
580
 458:FrameMgr.c    ****   
581
 459:FrameMgr.c    ****         /* run this routine once every 8 lines */       
582
 460:FrameMgr.c    ****         if ( (trackedLineCount & RUN_OBJECT_FILTER_MASK) == RUN_OBJECT_FILTER_MASK)
583
 461:FrameMgr.c    ****         {
584
 462:FrameMgr.c    ****             for (i=0; i<MAX_TRACKED_OBJECTS; i++)
585
 463:FrameMgr.c    ****             {
586
 464:FrameMgr.c    ****                 if ( *(pTrackedObjectData + VALID_OBJECT_OFFSET) == TRUE)
587
 465:FrameMgr.c    ****                 {
588
 466:FrameMgr.c    ****                     /* check to see if the object is already in
589
 467:FrameMgr.c    ****                     our past...i.e., its last */
590
 468:FrameMgr.c    ****                     if ( (*(pTrackedObjectData + Y_LOWER_RIGHT_OFFSET) - 
591
 469:FrameMgr.c    ****                           *(pTrackedObjectData + Y_UPPER_LEFT_OFFSET)) < MIN_OBJECT_TRACKING_HEIGHT
592
 470:FrameMgr.c    ****                     {
593
 471:FrameMgr.c    ****                         /* the object is less than the minimum height...see if it is adjacent
594
 472:FrameMgr.c    ****                         to the current line we just processed...if so, leave it here...otherwise,
595
 473:FrameMgr.c    ****                         it needs to be invalidated since its too small */
596
 474:FrameMgr.c    ****                         if ( trackedLineCount - *(pTrackedObjectData + Y_LOWER_RIGHT_OFFSET) > 2)
597
 475:FrameMgr.c    ****                         {
598
 476:FrameMgr.c    ****                             /* invalidate the object */
599
 477:FrameMgr.c    ****                             *(pTrackedObjectData + VALID_OBJECT_OFFSET) = FALSE;
600
 478:FrameMgr.c    ****                             numCurrTrackedObjects--;
182 kaklik 601
GAS LISTING /tmp/ccQRbLT3.s 			page 11
151 kaklik 602
 
603
 
604
 479:FrameMgr.c    ****                         }
605
 480:FrameMgr.c    ****                     }
606
 481:FrameMgr.c    ****                 }
607
 482:FrameMgr.c    ****                 pTrackedObjectData += SIZE_OF_TRACKED_OBJECT;
608
 483:FrameMgr.c    ****             }
609
 484:FrameMgr.c    ****         }     
610
 485:FrameMgr.c    ****  
611
 486:FrameMgr.c    **** 		trackedLineCount++;
612
 487:FrameMgr.c    **** 		if (trackedLineCount == ACTUAL_NUM_LINES_IN_A_FRAME)
613
 488:FrameMgr.c    **** 		{
614
 489:FrameMgr.c    **** 			/* an entire frame of tracking data has been acquired, so
615
 490:FrameMgr.c    **** 			publish an event letting the system know this fact */
616
 491:FrameMgr.c    **** 			PUBLISH_EVENT(EV_ACQUIRE_FRAME_COMPLETE);
617
 492:FrameMgr.c    **** 			/* disable the PCLK counting overflow interrupt */
618
 493:FrameMgr.c    **** 			TIMSK &= DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK;
619
 494:FrameMgr.c    **** 			trackedLineCount = 0;
620
 495:FrameMgr.c    **** 		}
621
 496:FrameMgr.c    **** 		else
622
 497:FrameMgr.c    **** 		{
623
 498:FrameMgr.c    **** 			PUBLISH_FAST_EVENT(FEV_PROCESS_LINE_COMPLETE);
624
 499:FrameMgr.c    **** 		}
625
 500:FrameMgr.c    **** #endif		
626
 501:FrameMgr.c    **** 	}
627
 502:FrameMgr.c    **** 	else
628
 503:FrameMgr.c    **** 	{
629
 504:FrameMgr.c    **** 		/* ...and here? */
630
 505:FrameMgr.c    **** 	}
631
 506:FrameMgr.c    **** }
632
 507:FrameMgr.c    **** 
633
 508:FrameMgr.c    **** /***********************************************************
634
 509:FrameMgr.c    **** 	Function Name: FrameMgr_processFrame
635
 510:FrameMgr.c    **** 	Function Description: This function is responsible for
636
 511:FrameMgr.c    **** 	parsing the completed frame and performing all actions
637
 512:FrameMgr.c    **** 	needed at this level.
638
 513:FrameMgr.c    **** 	Inputs:  none
639
 514:FrameMgr.c    **** 	Outputs: none
640
 515:FrameMgr.c    **** ***********************************************************/	
641
 516:FrameMgr.c    **** void FrameMgr_processFrame(void)
642
 517:FrameMgr.c    **** {
643
  93               		.stabn	68,0,517,.LM0-FrameMgr_processFrame
644
  94               	.LM0:
645
  95               	/* prologue: frame size=0 */
646
  96 0000 DF92      		push r13
647
  97 0002 EF92      		push r14
648
  98 0004 FF92      		push r15
649
  99 0006 0F93      		push r16
650
 100 0008 1F93      		push r17
651
 101 000a CF93      		push r28
652
 102 000c DF93      		push r29
653
 103               	/* prologue end (size=7) */
654
 518:FrameMgr.c    **** 	unsigned char i,k,color;
655
 519:FrameMgr.c    **** #if DEBUG_FRAME_DATA    
656
 520:FrameMgr.c    **** 	unsigned char asciiBuffer[5];
657
 521:FrameMgr.c    ****     unsigned char j;
658
 522:FrameMgr.c    **** #endif    
659
 523:FrameMgr.c    **** 	unsigned char *pTableData = (unsigned char *)pCurrentTrackedObjectTable;
660
 104               		.stabn	68,0,523,.LM1-FrameMgr_processFrame
182 kaklik 661
GAS LISTING /tmp/ccQRbLT3.s 			page 12
151 kaklik 662
 
663
 
664
 105               	.LM1:
665
 106 000e 2091 0000 		lds r18,pCurrentTrackedObjectTable
666
 107 0012 3091 0000 		lds r19,(pCurrentTrackedObjectTable)+1
667
 524:FrameMgr.c    **** 	unsigned char tmpUpperLeftX,tmpUpperLeftY,tmpLowerRightX,tmpLowerRightY;
668
 525:FrameMgr.c    **** 	
669
 526:FrameMgr.c    **** #if DEBUG_FRAME_DATA	
670
 527:FrameMgr.c    **** 	/* we want to send all of the currently tracked table out
671
 528:FrameMgr.c    **** 	the serial port for debugging */
672
 529:FrameMgr.c    **** 	for (i=0; i<numCurrTrackedObjects; i++)
673
 530:FrameMgr.c    **** 	{
674
 531:FrameMgr.c    **** 		UIMgr_txBuffer("----------\r\n",12);
675
 532:FrameMgr.c    **** 		for (j=0; j<SIZE_OF_TRACKED_OBJECT; j++)
676
 533:FrameMgr.c    **** 		{
677
 534:FrameMgr.c    **** 			memset(asciiBuffer,0x00,5);
678
 535:FrameMgr.c    **** 			itoa(*pTableData++,asciiBuffer,10);
679
 536:FrameMgr.c    **** 			UIMgr_txBuffer(asciiBuffer,3); /* 3 ascii bytes for data
680
 537:FrameMgr.c    **** 														+ 1 space */
681
 538:FrameMgr.c    **** 			UIMgr_txBuffer("\r\n",2);
682
 539:FrameMgr.c    **** 		}
683
 540:FrameMgr.c    **** 	}
684
 541:FrameMgr.c    **** 	
685
 542:FrameMgr.c    **** 	/* finally, send a new line */
686
 543:FrameMgr.c    **** 	UIMgr_txBuffer("\r\n",2);
687
 544:FrameMgr.c    **** 	
688
 545:FrameMgr.c    **** 	memset(asciiBuffer,0x00,5);
689
 546:FrameMgr.c    **** 	itoa(numCurrTrackedObjects,asciiBuffer,10);
690
 547:FrameMgr.c    **** 	UIMgr_txBuffer(asciiBuffer,3);
691
 548:FrameMgr.c    **** 	UIMgr_txBuffer(" PFC\r\n",5);
692
 549:FrameMgr.c    **** 
693
 550:FrameMgr.c    **** #else	
694
 551:FrameMgr.c    **** 	/* we only send tracking packets if there are tracked objects */	        
695
 552:FrameMgr.c    ****     
696
 553:FrameMgr.c    **** 	if (numCurrTrackedObjects > 0)
697
 108               		.stabn	68,0,553,.LM2-FrameMgr_processFrame
698
 109               	.LM2:
699
 110 0016 8091 0000 		lds r24,numCurrTrackedObjects
700
 111 001a 8823      		tst r24
701
 112 001c 09F4      		brne .+2
702
 113 001e 3FC0      		rjmp .L2
703
 114               		.stabn	68,0,523,.LM3-FrameMgr_processFrame
704
 115               	.LM3:
705
 116 0020 E901      		movw r28,r18
706
 554:FrameMgr.c    **** 	{		
707
 555:FrameMgr.c    **** 		UIMgr_writeTxFifo(0x0A);					/* header byte for a tracking packet */
708
 117               		.stabn	68,0,555,.LM4-FrameMgr_processFrame
709
 118               	.LM4:
710
 119 0022 8AE0      		ldi r24,lo8(10)
711
 120 0024 00D0      		rcall UIMgr_writeTxFifo
712
 556:FrameMgr.c    ****         /* reset the pointer */
713
 557:FrameMgr.c    ****         pTableData = (unsigned char *)pCurrentTrackedObjectTable;
714
 558:FrameMgr.c    ****         
715
 559:FrameMgr.c    **** 		UIMgr_writeTxFifo(numCurrTrackedObjects);	/* num of objects tracked */
716
 121               		.stabn	68,0,559,.LM5-FrameMgr_processFrame
717
 122               	.LM5:
718
 123 0026 8091 0000 		lds r24,numCurrTrackedObjects
719
 124 002a 00D0      		rcall UIMgr_writeTxFifo
720
 125 002c DD24      		clr r13
182 kaklik 721
GAS LISTING /tmp/ccQRbLT3.s 			page 13
151 kaklik 722
 
723
 
724
 126               	.L4:
725
 560:FrameMgr.c    **** 		for (i=0; i<MAX_TRACKED_OBJECTS; i++)
726
 561:FrameMgr.c    **** 		{
727
 562:FrameMgr.c    ****             /* we only want to process objects that have their objectValid flag
728
 563:FrameMgr.c    ****             set to TRUE */
729
 564:FrameMgr.c    ****             if ( *(pTableData + VALID_OBJECT_OFFSET) == TRUE)
730
 127               		.stabn	68,0,564,.LM6-FrameMgr_processFrame
731
 128               	.LM6:
732
 129 002e 8F81      		ldd r24,Y+7
733
 130 0030 8130      		cpi r24,lo8(1)
734
 131 0032 69F5      		brne .L5
735
 565:FrameMgr.c    ****             {
736
 566:FrameMgr.c    ****                 /* the object is valid...convert the color from bit position to value...remember, 
737
 567:FrameMgr.c    ****                 each bit in the "color" byte corresponds to a color */
738
 568:FrameMgr.c    ****                 k=0;
739
 569:FrameMgr.c    ****                 color = *(pTableData + COLOR_OFFSET);
740
 132               		.stabn	68,0,569,.LM7-FrameMgr_processFrame
741
 133               	.LM7:
742
 134 0034 8881      		ld r24,Y
743
 570:FrameMgr.c    ****                 if (color == 128) k=0;
744
 135               		.stabn	68,0,570,.LM8-FrameMgr_processFrame
745
 136               	.LM8:
746
 137 0036 8038      		cpi r24,lo8(-128)
747
 138 0038 E1F0      		breq .L7
748
 571:FrameMgr.c    ****                 else if (color == 64) k=1;
749
 139               		.stabn	68,0,571,.LM9-FrameMgr_processFrame
750
 140               	.LM9:
751
 141 003a 8034      		cpi r24,lo8(64)
752
 142 003c 11F4      		brne .L9
753
 143 003e 81E0      		ldi r24,lo8(1)
754
 144 0040 19C0      		rjmp .L11
755
 145               	.L9:
756
 572:FrameMgr.c    ****                 else if (color == 32) k=2;
757
 146               		.stabn	68,0,572,.LM10-FrameMgr_processFrame
758
 147               	.LM10:
759
 148 0042 8032      		cpi r24,lo8(32)
760
 149 0044 11F4      		brne .L12
761
 150 0046 82E0      		ldi r24,lo8(2)
762
 151 0048 15C0      		rjmp .L11
763
 152               	.L12:
764
 573:FrameMgr.c    ****                 else if (color == 16) k=3;
765
 153               		.stabn	68,0,573,.LM11-FrameMgr_processFrame
766
 154               	.LM11:
767
 155 004a 8031      		cpi r24,lo8(16)
768
 156 004c 11F4      		brne .L14
769
 157 004e 83E0      		ldi r24,lo8(3)
770
 158 0050 11C0      		rjmp .L11
771
 159               	.L14:
772
 574:FrameMgr.c    ****                 else if (color == 8)  k=4;
773
 160               		.stabn	68,0,574,.LM12-FrameMgr_processFrame
774
 161               	.LM12:
775
 162 0052 8830      		cpi r24,lo8(8)
776
 163 0054 11F4      		brne .L16
777
 164 0056 84E0      		ldi r24,lo8(4)
778
 165 0058 0DC0      		rjmp .L11
779
 166               	.L16:
780
 575:FrameMgr.c    ****                 else if (color == 4)  k=5;
182 kaklik 781
GAS LISTING /tmp/ccQRbLT3.s 			page 14
151 kaklik 782
 
783
 
784
 167               		.stabn	68,0,575,.LM13-FrameMgr_processFrame
785
 168               	.LM13:
786
 169 005a 8430      		cpi r24,lo8(4)
787
 170 005c 11F4      		brne .L18
788
 171 005e 85E0      		ldi r24,lo8(5)
789
 172 0060 09C0      		rjmp .L11
790
 173               	.L18:
791
 576:FrameMgr.c    ****                 else if (color == 2)  k=6;
792
 174               		.stabn	68,0,576,.LM14-FrameMgr_processFrame
793
 175               	.LM14:
794
 176 0062 8230      		cpi r24,lo8(2)
795
 177 0064 11F4      		brne .L20
796
 178 0066 86E0      		ldi r24,lo8(6)
797
 179 0068 05C0      		rjmp .L11
798
 180               	.L20:
799
 577:FrameMgr.c    ****                 else if (color == 1)  k=7;
800
 181               		.stabn	68,0,577,.LM15-FrameMgr_processFrame
801
 182               	.LM15:
802
 183 006a 8130      		cpi r24,lo8(1)
803
 184 006c 11F4      		brne .L7
804
 185 006e 87E0      		ldi r24,lo8(7)
805
 186 0070 01C0      		rjmp .L11
806
 187               	.L7:
807
 188 0072 80E0      		ldi r24,lo8(0)
808
 189               	.L11:
809
 578:FrameMgr.c    ****                 
810
 579:FrameMgr.c    ****                 tmpUpperLeftX = *(pTableData + X_UPPER_LEFT_OFFSET);	    /* get the upper left X */
811
 190               		.stabn	68,0,579,.LM16-FrameMgr_processFrame
812
 191               	.LM16:
813
 192 0074 1B81      		ldd r17,Y+3
814
 580:FrameMgr.c    ****                 tmpUpperLeftY = *(pTableData + Y_UPPER_LEFT_OFFSET);		/* get the upper left Y */		
815
 193               		.stabn	68,0,580,.LM17-FrameMgr_processFrame
816
 194               	.LM17:
817
 195 0076 0C81      		ldd r16,Y+4
818
 581:FrameMgr.c    ****                 tmpLowerRightX = *(pTableData + X_LOWER_RIGHT_OFFSET);		/* get the lower right X */
819
 196               		.stabn	68,0,581,.LM18-FrameMgr_processFrame
820
 197               	.LM18:
821
 198 0078 FD80      		ldd r15,Y+5
822
 582:FrameMgr.c    ****                 tmpLowerRightY = *(pTableData + Y_LOWER_RIGHT_OFFSET);		/* get the lower right Y */
823
 199               		.stabn	68,0,582,.LM19-FrameMgr_processFrame
824
 200               	.LM19:
825
 201 007a EE80      		ldd r14,Y+6
826
 583:FrameMgr.c    ****                 
827
 584:FrameMgr.c    ****                 UIMgr_writeTxFifo(k);				  	/* send the color first */
828
 202               		.stabn	68,0,584,.LM20-FrameMgr_processFrame
829
 203               	.LM20:
830
 204 007c 00D0      		rcall UIMgr_writeTxFifo
831
 585:FrameMgr.c    ****                 UIMgr_writeTxFifo(tmpUpperLeftX);
832
 205               		.stabn	68,0,585,.LM21-FrameMgr_processFrame
833
 206               	.LM21:
834
 207 007e 812F      		mov r24,r17
835
 208 0080 00D0      		rcall UIMgr_writeTxFifo
836
 586:FrameMgr.c    ****                 UIMgr_writeTxFifo(tmpUpperLeftY);
837
 209               		.stabn	68,0,586,.LM22-FrameMgr_processFrame
838
 210               	.LM22:
839
 211 0082 802F      		mov r24,r16
840
 212 0084 00D0      		rcall UIMgr_writeTxFifo
182 kaklik 841
GAS LISTING /tmp/ccQRbLT3.s 			page 15
151 kaklik 842
 
843
 
844
 587:FrameMgr.c    ****                 UIMgr_writeTxFifo(tmpLowerRightX);
845
 213               		.stabn	68,0,587,.LM23-FrameMgr_processFrame
846
 214               	.LM23:
847
 215 0086 8F2D      		mov r24,r15
848
 216 0088 00D0      		rcall UIMgr_writeTxFifo
849
 588:FrameMgr.c    ****                 UIMgr_writeTxFifo(tmpLowerRightY);			
850
 217               		.stabn	68,0,588,.LM24-FrameMgr_processFrame
851
 218               	.LM24:
852
 219 008a 8E2D      		mov r24,r14
853
 220 008c 00D0      		rcall UIMgr_writeTxFifo
854
 221               	.L5:
855
 222               		.stabn	68,0,560,.LM25-FrameMgr_processFrame
856
 223               	.LM25:
857
 224 008e D394      		inc r13
858
 225 0090 88E0      		ldi r24,lo8(8)
859
 226 0092 D816      		cp r13,r24
860
 227 0094 11F0      		breq .L23
861
 589:FrameMgr.c    ****             }
862
 590:FrameMgr.c    **** 
863
 591:FrameMgr.c    ****             /* move our pointer up to the beginning of the next object */
864
 592:FrameMgr.c    ****             pTableData += SIZE_OF_TRACKED_OBJECT;
865
 228               		.stabn	68,0,592,.LM26-FrameMgr_processFrame
866
 229               	.LM26:
867
 230 0096 2896      		adiw r28,8
868
 231 0098 CACF      		rjmp .L4
869
 232               	.L23:
870
 593:FrameMgr.c    ****         }
871
 594:FrameMgr.c    **** 		
872
 595:FrameMgr.c    **** 		/* all done...send the end of tracking packets char */
873
 596:FrameMgr.c    **** 		UIMgr_writeTxFifo(0xFF);
874
 233               		.stabn	68,0,596,.LM27-FrameMgr_processFrame
875
 234               	.LM27:
876
 235 009a 8FEF      		ldi r24,lo8(-1)
877
 236 009c 00D0      		rcall UIMgr_writeTxFifo
878
 237               	.L2:
879
 597:FrameMgr.c    **** 	}	
880
 598:FrameMgr.c    **** #endif	
881
 599:FrameMgr.c    **** 
882
 600:FrameMgr.c    ****     /* the tracked object table will be cleared out right before we start
883
 601:FrameMgr.c    ****     to wait for VSYNC to indicate a new frame...so it doesn't need to be
884
 602:FrameMgr.c    ****     done now */
885
 603:FrameMgr.c    ****     
886
 604:FrameMgr.c    **** 	/* schedule the next action to acquire a new frame */	
887
 605:FrameMgr.c    **** 	PUBLISH_EVENT(EV_PROCESS_FRAME_COMPLETE);
888
 238               		.stabn	68,0,605,.LM28-FrameMgr_processFrame
889
 239               	.LM28:
890
 240 009e 84E0      		ldi r24,lo8(4)
891
 241 00a0 00D0      		rcall Exec_writeEventFifo
892
 242               	/* epilogue: frame size=0 */
893
 243 00a2 DF91      		pop r29
894
 244 00a4 CF91      		pop r28
895
 245 00a6 1F91      		pop r17
896
 246 00a8 0F91      		pop r16
897
 247 00aa FF90      		pop r15
898
 248 00ac EF90      		pop r14
899
 249 00ae DF90      		pop r13
900
 250 00b0 0895      		ret
182 kaklik 901
GAS LISTING /tmp/ccQRbLT3.s 			page 16
151 kaklik 902
 
903
 
904
 251               	/* epilogue end (size=8) */
905
 252               	/* function FrameMgr_processFrame size 88 (73) */
906
 253               		.size	FrameMgr_processFrame, .-FrameMgr_processFrame
907
 254               		.stabs	"i:r(0,11)",64,0,518,13
908
 255               		.stabs	"k:r(0,11)",64,0,518,24
909
 256               		.stabs	"color:r(0,11)",64,0,518,24
910
 257               		.stabs	"pTableData:r(0,22)=*(0,11)",64,0,523,28
911
 258               		.stabs	"tmpUpperLeftX:r(0,11)",64,0,524,17
912
 259               		.stabs	"tmpUpperLeftY:r(0,11)",64,0,524,16
913
 260               		.stabs	"tmpLowerRightX:r(0,11)",64,0,524,15
914
 261               		.stabs	"tmpLowerRightY:r(0,11)",64,0,524,14
915
 262               		.stabn	192,0,0,FrameMgr_processFrame-FrameMgr_processFrame
916
 263               		.stabn	224,0,0,.Lscope0-FrameMgr_processFrame
917
 264               	.Lscope0:
918
 265               		.stabs	"",36,0,0,.Lscope0-FrameMgr_processFrame
919
 266               		.stabd	78,0,0
920
 267               		.stabs	"FrameMgr_processLine:F(0,15)",36,0,342,FrameMgr_processLine
921
 268               	.global	FrameMgr_processLine
922
 269               		.type	FrameMgr_processLine, @function
923
 270               	FrameMgr_processLine:
924
 271               		.stabd	46,0,0
925
 272               		.stabn	68,0,342,.LM29-FrameMgr_processLine
926
 273               	.LM29:
927
 274               	/* prologue: frame size=1 */
928
 275 00b2 2F92      		push r2
929
 276 00b4 3F92      		push r3
930
 277 00b6 4F92      		push r4
931
 278 00b8 5F92      		push r5
932
 279 00ba 6F92      		push r6
933
 280 00bc 7F92      		push r7
934
 281 00be 8F92      		push r8
935
 282 00c0 9F92      		push r9
936
 283 00c2 AF92      		push r10
937
 284 00c4 BF92      		push r11
938
 285 00c6 CF92      		push r12
939
 286 00c8 DF92      		push r13
940
 287 00ca EF92      		push r14
941
 288 00cc FF92      		push r15
942
 289 00ce 0F93      		push r16
943
 290 00d0 1F93      		push r17
944
 291 00d2 CF93      		push r28
945
 292 00d4 DF93      		push r29
946
 293 00d6 CDB7      		in r28,__SP_L__
947
 294 00d8 DEB7      		in r29,__SP_H__
948
 295 00da 2197      		sbiw r28,1
949
 296 00dc 0FB6      		in __tmp_reg__,__SREG__
950
 297 00de F894      		cli
951
 298 00e0 DEBF      		out __SP_H__,r29
952
 299 00e2 0FBE      		out __SREG__,__tmp_reg__
953
 300 00e4 CDBF      		out __SP_L__,r28
954
 301               	/* prologue end (size=26) */
955
 302               		.stabn	68,0,345,.LM30-FrameMgr_processLine
956
 303               	.LM30:
957
 304 00e6 0091 0000 		lds r16,pCurrentTrackedObjectTable
958
 305 00ea 1091 0000 		lds r17,(pCurrentTrackedObjectTable)+1
959
 306               		.stabn	68,0,352,.LM31-FrameMgr_processLine
960
 307               	.LM31:
182 kaklik 961
GAS LISTING /tmp/ccQRbLT3.s 			page 17
151 kaklik 962
 
963
 
964
 308 00ee 8091 0000 		lds r24,currentState
965
 309 00f2 8230      		cpi r24,lo8(2)
966
 310 00f4 09F0      		breq .+2
967
 311 00f6 6AC0      		rjmp .L27
968
 312               		.stabn	68,0,361,.LM32-FrameMgr_processLine
969
 313               	.LM32:
970
 314 00f8 8BE0      		ldi r24,lo8(11)
971
 315 00fa 00D0      		rcall UartInt_txByte
972
 316               		.stabn	68,0,362,.LM33-FrameMgr_processLine
973
 317               	.LM33:
974
 318 00fc 8091 0000 		lds r24,lineCount
975
 319 0100 00D0      		rcall UartInt_txByte
976
 320 0102 0F2E      		mov __tmp_reg__,r31
977
 321 0104 F0E0      		ldi r31,lo8(currentLineBuffer)
978
 322 0106 CF2E      		mov r12,r31
979
 323 0108 F0E0      		ldi r31,hi8(currentLineBuffer)
980
 324 010a DF2E      		mov r13,r31
981
 325 010c F02D      		mov r31,__tmp_reg__
982
 326 010e 00E0      		ldi r16,lo8(0)
983
 327 0110 10E0      		ldi r17,hi8(0)
984
 328 0112 0F2E      		mov __tmp_reg__,r31
985
 329 0114 F0E0      		ldi r31,lo8(previousLineBuffer)
986
 330 0116 EF2E      		mov r14,r31
987
 331 0118 F0E0      		ldi r31,hi8(previousLineBuffer)
988
 332 011a FF2E      		mov r15,r31
989
 333 011c F02D      		mov r31,__tmp_reg__
990
 334               	.L29:
991
 335               		.stabn	68,0,370,.LM34-FrameMgr_processLine
992
 336               	.LM34:
993
 337 011e F601      		movw r30,r12
994
 338 0120 8081      		ld r24,Z
995
 339 0122 8983      		std Y+1,r24
996
 340               		.stabn	68,0,371,.LM35-FrameMgr_processLine
997
 341               	.LM35:
998
 342 0124 8981      		ldd r24,Y+1
999
 343 0126 8F70      		andi r24,lo8(15)
1000
 344 0128 8983      		std Y+1,r24
1001
 345               		.stabn	68,0,372,.LM36-FrameMgr_processLine
1002
 346               	.LM36:
1003
 347 012a 8981      		ldd r24,Y+1
1004
 348 012c 8295      		swap r24
1005
 349 012e 807F      		andi r24,0xf0
1006
 350 0130 8983      		std Y+1,r24
1007
 351               		.stabn	68,0,373,.LM37-FrameMgr_processLine
1008
 352               	.LM37:
1009
 353 0132 9981      		ldd r25,Y+1
1010
 354 0134 F701      		movw r30,r14
1011
 355 0136 8081      		ld r24,Z
1012
 356 0138 8F70      		andi r24,lo8(15)
1013
 357 013a 892B      		or r24,r25
1014
 358 013c 8983      		std Y+1,r24
1015
 359               		.stabn	68,0,376,.LM38-FrameMgr_processLine
1016
 360               	.LM38:
1017
 361 013e 8981      		ldd r24,Y+1
1018
 362 0140 00D0      		rcall UartInt_txByte
1019
 363               		.stabn	68,0,379,.LM39-FrameMgr_processLine
1020
 364               	.LM39:
182 kaklik 1021
GAS LISTING /tmp/ccQRbLT3.s 			page 18
151 kaklik 1022
 
1023
 
1024
 365 0142 D801      		movw r26,r16
1025
 366 0144 1196      		adiw r26,1
1026
 367 0146 FD01      		movw r30,r26
1027
 368 0148 E050      		subi r30,lo8(-(previousLineBuffer))
1028
 369 014a F040      		sbci r31,hi8(-(previousLineBuffer))
1029
 370 014c 8081      		ld r24,Z
1030
 371 014e 8983      		std Y+1,r24
1031
 372               		.stabn	68,0,380,.LM40-FrameMgr_processLine
1032
 373               	.LM40:
1033
 374 0150 8981      		ldd r24,Y+1
1034
 375 0152 8F70      		andi r24,lo8(15)
1035
 376 0154 8983      		std Y+1,r24
1036
 377               		.stabn	68,0,381,.LM41-FrameMgr_processLine
1037
 378               	.LM41:
1038
 379 0156 8981      		ldd r24,Y+1
1039
 380 0158 8295      		swap r24
1040
 381 015a 807F      		andi r24,0xf0
1041
 382 015c 8983      		std Y+1,r24
1042
 383               		.stabn	68,0,382,.LM42-FrameMgr_processLine
1043
 384               	.LM42:
1044
 385 015e 9981      		ldd r25,Y+1
1045
 386 0160 A050      		subi r26,lo8(-(currentLineBuffer))
1046
 387 0162 B040      		sbci r27,hi8(-(currentLineBuffer))
1047
 388 0164 8C91      		ld r24,X
1048
 389 0166 8F70      		andi r24,lo8(15)
1049
 390 0168 892B      		or r24,r25
1050
 391 016a 8983      		std Y+1,r24
1051
 392               		.stabn	68,0,385,.LM43-FrameMgr_processLine
1052
 393               	.LM43:
1053
 394 016c 8981      		ldd r24,Y+1
1054
 395 016e 00D0      		rcall UartInt_txByte
1055
 396 0170 82E0      		ldi r24,lo8(2)
1056
 397 0172 90E0      		ldi r25,hi8(2)
1057
 398 0174 C80E      		add r12,r24
1058
 399 0176 D91E      		adc r13,r25
1059
 400 0178 0E5F      		subi r16,lo8(-(2))
1060
 401 017a 1F4F      		sbci r17,hi8(-(2))
1061
 402 017c E80E      		add r14,r24
1062
 403 017e F91E      		adc r15,r25
1063
 404               		.stabn	68,0,363,.LM44-FrameMgr_processLine
1064
 405               	.LM44:
1065
 406 0180 003B      		cpi r16,176
1066
 407 0182 1105      		cpc r17,__zero_reg__
1067
 408 0184 61F6      		brne .L29
1068
 409               		.stabn	68,0,387,.LM45-FrameMgr_processLine
1069
 410               	.LM45:
1070
 411 0186 8FE0      		ldi r24,lo8(15)
1071
 412 0188 00D0      		rcall UartInt_txByte
1072
 413               		.stabn	68,0,391,.LM46-FrameMgr_processLine
1073
 414               	.LM46:
1074
 415 018a 8091 0000 		lds r24,lineCount
1075
 416 018e 8F5F      		subi r24,lo8(-(1))
1076
 417 0190 8093 0000 		sts lineCount,r24
1077
 418               		.stabn	68,0,394,.LM47-FrameMgr_processLine
1078
 419               	.LM47:
1079
 420 0194 8834      		cpi r24,lo8(72)
1080
 421 0196 60F0      		brlo .L31
182 kaklik 1081
GAS LISTING /tmp/ccQRbLT3.s 			page 19
151 kaklik 1082
 
1083
 
1084
 422               		.stabn	68,0,398,.LM48-FrameMgr_processLine
1085
 423               	.LM48:
1086
 424 0198 1092 0000 		sts lineCount,__zero_reg__
1087
 425               		.stabn	68,0,399,.LM49-FrameMgr_processLine
1088
 426               	.LM49:
1089
 427 019c 1092 0000 		sts currentState,__zero_reg__
1090
 428               		.stabn	68,0,402,.LM50-FrameMgr_processLine
1091
 429               	.LM50:
1092
 430 01a0 89B7      		in r24,89-0x20
1093
 431 01a2 8B7F      		andi r24,lo8(-5)
1094
 432 01a4 89BF      		out 89-0x20,r24
1095
 433               		.stabn	68,0,404,.LM51-FrameMgr_processLine
1096
 434               	.LM51:
1097
 435 01a6 60E0      		ldi r22,lo8(0)
1098
 436 01a8 81E1      		ldi r24,lo8(17)
1099
 437 01aa 00D0      		rcall CamConfig_setCamReg
1100
 438               		.stabn	68,0,405,.LM52-FrameMgr_processLine
1101
 439               	.LM52:
1102
 440 01ac 00D0      		rcall CamConfig_sendFifoCmds
1103
 441 01ae C8C0      		rjmp .L71
1104
 442               	.L31:
1105
 443               		.stabn	68,0,410,.LM53-FrameMgr_processLine
1106
 444               	.LM53:
1107
 445 01b0 8091 0000 		lds r24,fastEventBitmask
1108
 446 01b4 8260      		ori r24,lo8(2)
1109
 447 01b6 8093 0000 		sts fastEventBitmask,r24
1110
 448 01ba C2C0      		rjmp .L71
1111
 449               	.L72:
1112
 450               		.stabn	68,0,491,.LM54-FrameMgr_processLine
1113
 451               	.LM54:
1114
 452 01bc 80E2      		ldi r24,lo8(32)
1115
 453 01be 00D0      		rcall Exec_writeEventFifo
1116
 454               		.stabn	68,0,493,.LM55-FrameMgr_processLine
1117
 455               	.LM55:
1118
 456 01c0 89B7      		in r24,89-0x20
1119
 457 01c2 8B7F      		andi r24,lo8(-5)
1120
 458 01c4 89BF      		out 89-0x20,r24
1121
 459               		.stabn	68,0,494,.LM56-FrameMgr_processLine
1122
 460               	.LM56:
1123
 461 01c6 1092 0000 		sts trackedLineCount,__zero_reg__
1124
 462 01ca BAC0      		rjmp .L71
1125
 463               	.L27:
1126
 464               		.stabn	68,0,413,.LM57-FrameMgr_processLine
1127
 465               	.LM57:
1128
 466 01cc 8130      		cpi r24,lo8(1)
1129
 467 01ce 09F0      		breq .+2
1130
 468 01d0 B7C0      		rjmp .L71
1131
 469               	.LBB4:
1132
 470               	.LBB5:
1133
 606:FrameMgr.c    **** }
1134
 607:FrameMgr.c    **** 
1135
 608:FrameMgr.c    **** /***********************************************************
1136
 609:FrameMgr.c    **** 	Function Name: FrameMgr_findConnectedness
1137
 610:FrameMgr.c    **** 	Function Description: This function is responsible for
1138
 611:FrameMgr.c    **** 	finding the connectedness between two particular run-
1139
 612:FrameMgr.c    **** 	length encoded lines of pixel data.  It updates the
1140
 613:FrameMgr.c    **** 	trackingTable as needed.
182 kaklik 1141
GAS LISTING /tmp/ccQRbLT3.s 			page 20
151 kaklik 1142
 
1143
 
1144
 614:FrameMgr.c    **** 	Inputs:  none
1145
 615:FrameMgr.c    **** 	Outputs: none
1146
 616:FrameMgr.c    **** ***********************************************************/	
1147
 617:FrameMgr.c    **** static void FrameMgr_findConnectedness(void)
1148
 618:FrameMgr.c    **** {
1149
 619:FrameMgr.c    **** 	trackedColor_t currColor;
1150
 620:FrameMgr.c    **** 	unsigned char *pCurrLineColorInfo = currentLineBuffer;
1151
 621:FrameMgr.c    **** 	unsigned char *pTrackedObjectData;
1152
 622:FrameMgr.c    **** 	register unsigned char currPixelRunStart=0;
1153
 623:FrameMgr.c    **** 	register unsigned char currPixelRunFinish=0; 
1154
 624:FrameMgr.c    **** 	register unsigned char lastLineXStart=0;
1155
 625:FrameMgr.c    **** 	register unsigned char lastLineXFinish=0;  
1156
 626:FrameMgr.c    **** 	register unsigned char runLength=1;
1157
 627:FrameMgr.c    **** 	unsigned char i;
1158
 628:FrameMgr.c    **** 	bool_t colorConnected;	
1159
 629:FrameMgr.c    **** 	
1160
 630:FrameMgr.c    **** 	do
1161
 631:FrameMgr.c    **** 	{
1162
 632:FrameMgr.c    **** 		/* grab both the current color and the number of pixels
1163
 633:FrameMgr.c    **** 		in the run...remember, pixels start at 1, not 0! */
1164
 634:FrameMgr.c    **** 		colorConnected = FALSE;
1165
 635:FrameMgr.c    **** 		currColor = *pCurrLineColorInfo++;
1166
 636:FrameMgr.c    **** 		currPixelRunStart += runLength;
1167
 637:FrameMgr.c    **** 		runLength = *pCurrLineColorInfo++;
1168
 638:FrameMgr.c    **** 		currPixelRunFinish += runLength;
1169
 639:FrameMgr.c    ****       
1170
 640:FrameMgr.c    ****         /* make sure that the run-length is at least as wide as
1171
 641:FrameMgr.c    ****         the minimum horizontal tracking width, and we care about the color */ 
1172
 642:FrameMgr.c    ****         
1173
 643:FrameMgr.c    **** 		if ( (currColor != notTracked) && (runLength > MIN_OBJECT_TRACKING_WIDTH) )
1174
 644:FrameMgr.c    **** 		{			
1175
 645:FrameMgr.c    ****             /* this run contains a color we care about, so 
1176
 646:FrameMgr.c    **** 			either it will begin a new tracked object, or it
1177
 647:FrameMgr.c    **** 			is connected to a currently tracked object...
1178
 648:FrameMgr.c    **** 			compare it with each object in the tracking
1179
 649:FrameMgr.c    **** 			table...we can't just look at the numTrackedObjects because
1180
 650:FrameMgr.c    ****             it is entirely possible that the first couple of objects could
1181
 651:FrameMgr.c    ****             be invalid...
1182
 652:FrameMgr.c    **** 
1183
 653:FrameMgr.c    ****             NOTE: Instead of accessing each element in the trackedObjectTable
1184
 654:FrameMgr.c    ****             through the 'i' index, and then accessing the fields in each structure,
1185
 655:FrameMgr.c    ****             a pointer to each entry is established each time through the loop, followed
1186
 656:FrameMgr.c    ****             by accessing the elements through specified offsets.  GCC seems to be
1187
 657:FrameMgr.c    ****             able to optimize this code much better than simply accessing the elements
1188
 658:FrameMgr.c    ****             of each structure in the array the more normal way...*/
1189
 659:FrameMgr.c    ****             
1190
 660:FrameMgr.c    ****             pTrackedObjectData = (unsigned char *)pCurrentTrackedObjectTable;
1191
 661:FrameMgr.c    **** 			for (i=0; i<MAX_TRACKED_OBJECTS; i++)
1192
 662:FrameMgr.c    **** 			{
1193
 663:FrameMgr.c    **** 				if ( (currColor == *(pTrackedObjectData + COLOR_OFFSET)) && 
1194
 664:FrameMgr.c    ****                      (*(pTrackedObjectData + VALID_OBJECT_OFFSET) == TRUE) &&
1195
 665:FrameMgr.c    ****                      (*(pTrackedObjectData + Y_LOWER_RIGHT_OFFSET) == trackedLineCount - 1) )
1196
 666:FrameMgr.c    **** 				{
1197
 667:FrameMgr.c    **** 					/* found a color match and the object is valid...check to see if there is
1198
 668:FrameMgr.c    **** 					connectedness */
1199
 669:FrameMgr.c    **** 					lastLineXStart = *(pTrackedObjectData + LAST_LINE_X_START_OFFSET);
1200
 670:FrameMgr.c    **** 					lastLineXFinish = *(pTrackedObjectData + LAST_LINE_X_FINISH_OFFSET);
182 kaklik 1201
GAS LISTING /tmp/ccQRbLT3.s 			page 21
151 kaklik 1202
 
1203
 
1204
 671:FrameMgr.c    **** 					
1205
 672:FrameMgr.c    **** 					/* Check for the 5 following types of line connectedness:
1206
 673:FrameMgr.c    **** 					---------------------
1207
 674:FrameMgr.c    **** 					|                   |
1208
 675:FrameMgr.c    **** 					---------------------
1209
 676:FrameMgr.c    **** 					         -------------------------
1210
 677:FrameMgr.c    **** 							 |                       |
1211
 678:FrameMgr.c    **** 							 -------------------------  */
1212
 679:FrameMgr.c    **** 					if ( (	(currPixelRunStart >= lastLineXStart) &&
1213
 680:FrameMgr.c    **** 							(currPixelRunStart <= lastLineXFinish) )  ||
1214
 681:FrameMgr.c    **** 							
1215
 682:FrameMgr.c    **** 					/*               ---------------------
1216
 683:FrameMgr.c    **** 					                 |                   |
1217
 684:FrameMgr.c    **** 									 ---------------------
1218
 685:FrameMgr.c    **** 						-------------------
1219
 686:FrameMgr.c    **** 						|                 |
1220
 687:FrameMgr.c    **** 						-------------------  
1221
 688:FrameMgr.c    **** 						                   OR
1222
 689:FrameMgr.c    **** 						     ------------------------------
1223
 690:FrameMgr.c    **** 							 |                            |
1224
 691:FrameMgr.c    **** 							 ------------------------------
1225
 692:FrameMgr.c    **** 							              ---------
1226
 693:FrameMgr.c    **** 										  |       |
1227
 694:FrameMgr.c    **** 										  ---------  */
1228
 695:FrameMgr.c    **** 						 (	(currPixelRunFinish >= lastLineXStart) && 
1229
 696:FrameMgr.c    **** 							(currPixelRunFinish <= lastLineXFinish) ) ||
1230
 697:FrameMgr.c    **** 							
1231
 698:FrameMgr.c    **** 							
1232
 699:FrameMgr.c    **** 					/*     -------------------------------
1233
 700:FrameMgr.c    **** 					       |                             |
1234
 701:FrameMgr.c    **** 						   -------------------------------
1235
 702:FrameMgr.c    **** 						   -------------------------------
1236
 703:FrameMgr.c    **** 						   |                             |
1237
 704:FrameMgr.c    **** 						   -------------------------------
1238
 705:FrameMgr.c    **** 						                  OR
1239
 706:FrameMgr.c    **** 								     -------------
1240
 707:FrameMgr.c    **** 									 |           |
1241
 708:FrameMgr.c    **** 									 -------------
1242
 709:FrameMgr.c    **** 							-------------------------------
1243
 710:FrameMgr.c    **** 							|                             |
1244
 711:FrameMgr.c    **** 							-------------------------------   */
1245
 712:FrameMgr.c    **** 						 (  (currPixelRunStart <= lastLineXStart) &&
1246
 713:FrameMgr.c    **** 							(currPixelRunFinish >= lastLineXFinish) ) )
1247
 714:FrameMgr.c    **** 					{
1248
 715:FrameMgr.c    **** 						/* THERE IS CONNECTEDNESS...update the lastLineXStart and lastLineXFinish
1249
 716:FrameMgr.c    **** 						data pointed to by pTrackedObjectData */
1250
 717:FrameMgr.c    **** 						*(pTrackedObjectData + LAST_LINE_X_START_OFFSET) = currPixelRunStart;
1251
 718:FrameMgr.c    **** 						*(pTrackedObjectData + LAST_LINE_X_FINISH_OFFSET) = currPixelRunFinish;
1252
 719:FrameMgr.c    **** 						
1253
 720:FrameMgr.c    **** 						/* check if the bounding box needs to be updated */
1254
 721:FrameMgr.c    **** 						if (*(pTrackedObjectData + X_UPPER_LEFT_OFFSET) > currPixelRunStart)
1255
 722:FrameMgr.c    **** 						{
1256
 723:FrameMgr.c    **** 							/* need to update the bounding box for the upper left point to 
1257
 724:FrameMgr.c    **** 							enclose this new left-most point...we never have to update the
1258
 725:FrameMgr.c    **** 							upper left Y point, since each scan line we process moves from
1259
 726:FrameMgr.c    **** 							top to bottom */
1260
 727:FrameMgr.c    **** 							*(pTrackedObjectData + X_UPPER_LEFT_OFFSET) = currPixelRunStart;
182 kaklik 1261
GAS LISTING /tmp/ccQRbLT3.s 			page 22
151 kaklik 1262
 
1263
 
1264
 728:FrameMgr.c    **** 						}
1265
 729:FrameMgr.c    **** 
1266
 730:FrameMgr.c    **** 						if ( *(pTrackedObjectData + X_LOWER_RIGHT_OFFSET) < currPixelRunFinish)
1267
 731:FrameMgr.c    **** 						{
1268
 732:FrameMgr.c    **** 							/* need to update the bounding box for the lower right X point to
1269
 733:FrameMgr.c    **** 							enclose this new right-most point */
1270
 734:FrameMgr.c    **** 							*(pTrackedObjectData + X_LOWER_RIGHT_OFFSET) = currPixelRunFinish;
1271
 735:FrameMgr.c    **** 						}
1272
 736:FrameMgr.c    **** 						
1273
 737:FrameMgr.c    **** 						/* the lower right 'y' point always gets updated when connectedness is found */
1274
 738:FrameMgr.c    **** 						*(pTrackedObjectData + Y_LOWER_RIGHT_OFFSET) = trackedLineCount;
1275
 739:FrameMgr.c    **** 						
1276
 740:FrameMgr.c    **** 						/* set a flag indicating that that color run is part of another
1277
 741:FrameMgr.c    **** 						object and thus doesn't need to be added as a new entry into the
1278
 742:FrameMgr.c    **** 						tracking table */
1279
 743:FrameMgr.c    **** 						colorConnected = TRUE;
1280
 744:FrameMgr.c    **** 						break;
1281
 745:FrameMgr.c    **** 					}
1282
 746:FrameMgr.c    **** 				}
1283
 747:FrameMgr.c    ****                 
1284
 748:FrameMgr.c    ****                 /* go to the next object */
1285
 749:FrameMgr.c    ****                 pTrackedObjectData += SIZE_OF_TRACKED_OBJECT;
1286
 750:FrameMgr.c    **** 			}
1287
 751:FrameMgr.c    **** 			
1288
 752:FrameMgr.c    **** 			if (colorConnected == FALSE)
1289
 753:FrameMgr.c    **** 			{
1290
 754:FrameMgr.c    **** 				/* a new entry needs to be made to the tracking table, since we have
1291
 755:FrameMgr.c    **** 				a run-length with a color, and it isn't connected to anything...but we
1292
 756:FrameMgr.c    **** 				can only do this if there is space left in the trackedObject table */
1293
 757:FrameMgr.c    **** 				if (numCurrTrackedObjects < MAX_TRACKED_OBJECTS)
1294
 758:FrameMgr.c    **** 				{                
1295
 759:FrameMgr.c    ****                     /* space is available...add the object...but first we need to find an
1296
 760:FrameMgr.c    ****                     invalid object in the object tracking table */
1297
 761:FrameMgr.c    ****                     pTrackedObjectData = (unsigned char *)pCurrentTrackedObjectTable;
1298
 762:FrameMgr.c    ****                     for (i=0; i<MAX_TRACKED_OBJECTS; i++)
1299
 763:FrameMgr.c    ****                     {
1300
 764:FrameMgr.c    ****                         if ( *(pTrackedObjectData + VALID_OBJECT_OFFSET) == FALSE)  break;
1301
 765:FrameMgr.c    ****                         
1302
 766:FrameMgr.c    ****                         /* if we haven't broken above, then the object must have been valid...
1303
 767:FrameMgr.c    ****                         go ahead and move the pointer to the next object to check it */
1304
 768:FrameMgr.c    ****                         pTrackedObjectData += SIZE_OF_TRACKED_OBJECT;
1305
 769:FrameMgr.c    ****                     }
1306
 770:FrameMgr.c    ****                     
1307
 771:FrameMgr.c    **** 					
1308
 772:FrameMgr.c    **** 					/* now that we have a pointer to the tracked object to be updated, update all
1309
 773:FrameMgr.c    **** 					the fields */
1310
 774:FrameMgr.c    **** 					*(pTrackedObjectData + COLOR_OFFSET)                = currColor;			/* color */
1311
 775:FrameMgr.c    **** 					*(pTrackedObjectData + LAST_LINE_X_START_OFFSET)    = currPixelRunStart; 	/* lastLineXStart */
1312
 776:FrameMgr.c    **** 					*(pTrackedObjectData + LAST_LINE_X_FINISH_OFFSET)   = currPixelRunFinish;	/* lastLineXFinish *
1313
 777:FrameMgr.c    **** 					*(pTrackedObjectData + X_UPPER_LEFT_OFFSET)         = currPixelRunStart;	/* x_upperLeft */
1314
 778:FrameMgr.c    **** 					*(pTrackedObjectData + Y_UPPER_LEFT_OFFSET)         = trackedLineCount;	/* y_upperLeft */
1315
 471               		.stabn	68,0,778,.LM58-FrameMgr_processLine
1316
 472               	.LM58:
1317
 473 01d2 F090 0000 		lds r15,trackedLineCount
1318
 474               		.stabn	68,0,663,.LM59-FrameMgr_processLine
1319
 475               	.LM59:
1320
 476 01d6 CF2C      		mov r12,r15
182 kaklik 1321
GAS LISTING /tmp/ccQRbLT3.s 			page 23
151 kaklik 1322
 
1323
 
1324
 477 01d8 DD24      		clr r13
1325
 478 01da 3601      		movw r6,r12
1326
 479 01dc 0894      		sec
1327
 480 01de 6108      		sbc r6,__zero_reg__
1328
 481 01e0 7108      		sbc r7,__zero_reg__
1329
 482 01e2 7091 0000 		lds r23,numCurrTrackedObjects
1330
 483 01e6 0F2E      		mov __tmp_reg__,r31
1331
 484 01e8 F0E0      		ldi r31,lo8(currentLineBuffer)
1332
 485 01ea 2F2E      		mov r2,r31
1333
 486 01ec F0E0      		ldi r31,hi8(currentLineBuffer)
1334
 487 01ee 3F2E      		mov r3,r31
1335
 488 01f0 F02D      		mov r31,__tmp_reg__
1336
 489 01f2 50E0      		ldi r21,lo8(0)
1337
 490 01f4 40E0      		ldi r20,lo8(0)
1338
 491 01f6 61E0      		ldi r22,lo8(1)
1339
 492 01f8 EF2C      		mov r14,r15
1340
 493 01fa E394      		inc r14
1341
 494               	.L35:
1342
 495               		.stabn	68,0,635,.LM60-FrameMgr_processLine
1343
 496               	.LM60:
1344
 497 01fc F101      		movw r30,r2
1345
 498 01fe 3081      		ld r19,Z
1346
 499               		.stabn	68,0,636,.LM61-FrameMgr_processLine
1347
 500               	.LM61:
1348
 501 0200 560F      		add r21,r22
1349
 502               		.stabn	68,0,637,.LM62-FrameMgr_processLine
1350
 503               	.LM62:
1351
 504 0202 6181      		ldd r22,Z+1
1352
 505 0204 82E0      		ldi r24,lo8(2)
1353
 506 0206 90E0      		ldi r25,hi8(2)
1354
 507 0208 280E      		add r2,r24
1355
 508 020a 391E      		adc r3,r25
1356
 509               		.stabn	68,0,638,.LM63-FrameMgr_processLine
1357
 510               	.LM63:
1358
 511 020c 460F      		add r20,r22
1359
 512               		.stabn	68,0,643,.LM64-FrameMgr_processLine
1360
 513               	.LM64:
1361
 514 020e 3323      		tst r19
1362
 515 0210 09F4      		brne .+2
1363
 516 0212 5CC0      		rjmp .L36
1364
 517 0214 6430      		cpi r22,lo8(4)
1365
 518 0216 08F4      		brsh .+2
1366
 519 0218 59C0      		rjmp .L36
1367
 520 021a D801      		movw r26,r16
1368
 521 021c 20E0      		ldi r18,lo8(0)
1369
 522               	.L39:
1370
 523               		.stabn	68,0,663,.LM65-FrameMgr_processLine
1371
 524               	.LM65:
1372
 525 021e 8C91      		ld r24,X
1373
 526 0220 3817      		cp r19,r24
1374
 527 0222 C9F5      		brne .L40
1375
 528 0224 FD01      		movw r30,r26
1376
 529 0226 8781      		ldd r24,Z+7
1377
 530 0228 8130      		cpi r24,lo8(1)
1378
 531 022a A9F5      		brne .L40
1379
 532 022c 0F2E      		mov __tmp_reg__,r31
1380
 533 022e F6E0      		ldi r31,lo8(6)
182 kaklik 1381
GAS LISTING /tmp/ccQRbLT3.s 			page 24
151 kaklik 1382
 
1383
 
1384
 534 0230 AF2E      		mov r10,r31
1385
 535 0232 BB24      		clr r11
1386
 536 0234 F02D      		mov r31,__tmp_reg__
1387
 537 0236 AA0E      		add r10,r26
1388
 538 0238 BB1E      		adc r11,r27
1389
 539 023a 8681      		ldd r24,Z+6
1390
 540 023c 9927      		clr r25
1391
 541 023e 8615      		cp r24,r6
1392
 542 0240 9705      		cpc r25,r7
1393
 543 0242 49F5      		brne .L40
1394
 544 0244 2D01      		movw r4,r26
1395
 545 0246 0894      		sec
1396
 546 0248 411C      		adc r4,__zero_reg__
1397
 547 024a 511C      		adc r5,__zero_reg__
1398
 548               		.stabn	68,0,669,.LM66-FrameMgr_processLine
1399
 549               	.LM66:
1400
 550 024c 8181      		ldd r24,Z+1
1401
 551 024e 8824      		clr r8
1402
 552 0250 9924      		clr r9
1403
 553 0252 6894      		set
1404
 554 0254 81F8      		bld r8,1
1405
 555 0256 8A0E      		add r8,r26
1406
 556 0258 9B1E      		adc r9,r27
1407
 557               		.stabn	68,0,670,.LM67-FrameMgr_processLine
1408
 558               	.LM67:
1409
 559 025a 9281      		ldd r25,Z+2
1410
 560               		.stabn	68,0,679,.LM68-FrameMgr_processLine
1411
 561               	.LM68:
1412
 562 025c 5817      		cp r21,r24
1413
 563 025e 10F0      		brlo .L44
1414
 564 0260 9517      		cp r25,r21
1415
 565 0262 40F4      		brsh .L46
1416
 566               	.L44:
1417
 567 0264 4817      		cp r20,r24
1418
 568 0266 10F0      		brlo .L47
1419
 569 0268 9417      		cp r25,r20
1420
 570 026a 20F4      		brsh .L46
1421
 571               	.L47:
1422
 572 026c 8517      		cp r24,r21
1423
 573 026e 98F0      		brlo .L40
1424
 574 0270 4917      		cp r20,r25
1425
 575 0272 88F0      		brlo .L40
1426
 576               	.L46:
1427
 577               		.stabn	68,0,717,.LM69-FrameMgr_processLine
1428
 578               	.LM69:
1429
 579 0274 F201      		movw r30,r4
1430
 580 0276 5083      		st Z,r21
1431
 581               		.stabn	68,0,718,.LM70-FrameMgr_processLine
1432
 582               	.LM70:
1433
 583 0278 F401      		movw r30,r8
1434
 584 027a 4083      		st Z,r20
1435
 585               		.stabn	68,0,721,.LM71-FrameMgr_processLine
1436
 586               	.LM71:
1437
 587 027c FD01      		movw r30,r26
1438
 588 027e 8381      		ldd r24,Z+3
1439
 589 0280 5817      		cp r21,r24
1440
 590 0282 08F4      		brsh .L50
182 kaklik 1441
GAS LISTING /tmp/ccQRbLT3.s 			page 25
151 kaklik 1442
 
1443
 
1444
 591               		.stabn	68,0,727,.LM72-FrameMgr_processLine
1445
 592               	.LM72:
1446
 593 0284 5383      		std Z+3,r21
1447
 594               	.L50:
1448
 595               		.stabn	68,0,730,.LM73-FrameMgr_processLine
1449
 596               	.LM73:
1450
 597 0286 FD01      		movw r30,r26
1451
 598 0288 8581      		ldd r24,Z+5
1452
 599 028a 8417      		cp r24,r20
1453
 600 028c 08F4      		brsh .L52
1454
 601               		.stabn	68,0,734,.LM74-FrameMgr_processLine
1455
 602               	.LM74:
1456
 603 028e 4583      		std Z+5,r20
1457
 604               	.L52:
1458
 605               		.stabn	68,0,738,.LM75-FrameMgr_processLine
1459
 606               	.LM75:
1460
 607 0290 F501      		movw r30,r10
1461
 608 0292 F082      		st Z,r15
1462
 609 0294 1BC0      		rjmp .L36
1463
 610               	.L40:
1464
 611               		.stabn	68,0,661,.LM76-FrameMgr_processLine
1465
 612               	.LM76:
1466
 613 0296 2F5F      		subi r18,lo8(-(1))
1467
 614 0298 2830      		cpi r18,lo8(8)
1468
 615 029a 09F4      		brne .+2
1469
 616 029c 4DC0      		rjmp .L54
1470
 617               		.stabn	68,0,749,.LM77-FrameMgr_processLine
1471
 618               	.LM77:
1472
 619 029e 1896      		adiw r26,8
1473
 620 02a0 BECF      		rjmp .L39
1474
 621               	.L56:
1475
 622 02a2 D801      		movw r26,r16
1476
 623 02a4 90E0      		ldi r25,lo8(0)
1477
 624               	.L57:
1478
 625               		.stabn	68,0,764,.LM78-FrameMgr_processLine
1479
 626               	.LM78:
1480
 627 02a6 FD01      		movw r30,r26
1481
 628 02a8 8781      		ldd r24,Z+7
1482
 629 02aa 8823      		tst r24
1483
 630 02ac 21F0      		breq .L58
1484
 631               		.stabn	68,0,768,.LM79-FrameMgr_processLine
1485
 632               	.LM79:
1486
 633 02ae 1896      		adiw r26,8
1487
 634               		.stabn	68,0,762,.LM80-FrameMgr_processLine
1488
 635               	.LM80:
1489
 636 02b0 9F5F      		subi r25,lo8(-(1))
1490
 637 02b2 9830      		cpi r25,lo8(8)
1491
 638 02b4 C1F7      		brne .L57
1492
 639               	.L58:
1493
 640               		.stabn	68,0,774,.LM81-FrameMgr_processLine
1494
 641               	.LM81:
1495
 642 02b6 3C93      		st X,r19
1496
 643               		.stabn	68,0,775,.LM82-FrameMgr_processLine
1497
 644               	.LM82:
1498
 645 02b8 FD01      		movw r30,r26
1499
 646 02ba 5183      		std Z+1,r21
1500
 647               		.stabn	68,0,776,.LM83-FrameMgr_processLine
182 kaklik 1501
GAS LISTING /tmp/ccQRbLT3.s 			page 26
151 kaklik 1502
 
1503
 
1504
 648               	.LM83:
1505
 649 02bc 4283      		std Z+2,r20
1506
 650               		.stabn	68,0,777,.LM84-FrameMgr_processLine
1507
 651               	.LM84:
1508
 652 02be 5383      		std Z+3,r21
1509
 653               		.stabn	68,0,778,.LM85-FrameMgr_processLine
1510
 654               	.LM85:
1511
 655 02c0 F482      		std Z+4,r15
1512
 779:FrameMgr.c    **** 					*(pTrackedObjectData + X_LOWER_RIGHT_OFFSET)        = currPixelRunFinish;	/* x_lowerRight */
1513
 656               		.stabn	68,0,779,.LM86-FrameMgr_processLine
1514
 657               	.LM86:
1515
 658 02c2 4583      		std Z+5,r20
1516
 780:FrameMgr.c    **** 					*(pTrackedObjectData + Y_LOWER_RIGHT_OFFSET)        = trackedLineCount;	/* y_lowerRight */
1517
 659               		.stabn	68,0,780,.LM87-FrameMgr_processLine
1518
 660               	.LM87:
1519
 661 02c4 F682      		std Z+6,r15
1520
 781:FrameMgr.c    ****                     *(pTrackedObjectData + VALID_OBJECT_OFFSET)         = TRUE;                /* o
1521
 662               		.stabn	68,0,781,.LM88-FrameMgr_processLine
1522
 663               	.LM88:
1523
 664 02c6 81E0      		ldi r24,lo8(1)
1524
 665 02c8 8783      		std Z+7,r24
1525
 782:FrameMgr.c    **** 						
1526
 783:FrameMgr.c    **** 					numCurrTrackedObjects++;
1527
 666               		.stabn	68,0,783,.LM89-FrameMgr_processLine
1528
 667               	.LM89:
1529
 668 02ca 7F5F      		subi r23,lo8(-(1))
1530
 669               	.L36:
1531
 784:FrameMgr.c    **** 				}
1532
 785:FrameMgr.c    **** 			}
1533
 786:FrameMgr.c    ****             
1534
 787:FrameMgr.c    ****             /* move the pointer to the beginning of the next tracked object */
1535
 788:FrameMgr.c    ****             pTrackedObjectData += SIZE_OF_TRACKED_OBJECT;
1536
 789:FrameMgr.c    **** 		}
1537
 790:FrameMgr.c    **** 	} while(currPixelRunFinish < ACTUAL_NUM_PIXELS_IN_A_LINE);
1538
 670               		.stabn	68,0,790,.LM90-FrameMgr_processLine
1539
 671               	.LM90:
1540
 672 02cc 403B      		cpi r20,lo8(-80)
1541
 673 02ce 08F4      		brsh .+2
1542
 674 02d0 95CF      		rjmp .L35
1543
 675 02d2 7093 0000 		sts numCurrTrackedObjects,r23
1544
 676               	.LBE5:
1545
 677               	.LBE4:
1546
 678               		.stabn	68,0,460,.LM91-FrameMgr_processLine
1547
 679               	.LM91:
1548
 680 02d6 C601      		movw r24,r12
1549
 681 02d8 8770      		andi r24,lo8(7)
1550
 682 02da 9070      		andi r25,hi8(7)
1551
 683 02dc 0797      		sbiw r24,7
1552
 684 02de 01F5      		brne .L61
1553
 685 02e0 D801      		movw r26,r16
1554
 686 02e2 1796      		adiw r26,7
1555
 687 02e4 40E0      		ldi r20,lo8(0)
1556
 688               	.L63:
1557
 689               		.stabn	68,0,464,.LM92-FrameMgr_processLine
1558
 690               	.LM92:
1559
 691 02e6 8C91      		ld r24,X
1560
 692 02e8 8130      		cpi r24,lo8(1)
182 kaklik 1561
GAS LISTING /tmp/ccQRbLT3.s 			page 27
151 kaklik 1562
 
1563
 
1564
 693 02ea A1F4      		brne .L64
1565
 694 02ec FD01      		movw r30,r26
1566
 695 02ee 3197      		sbiw r30,1
1567
 696               		.stabn	68,0,468,.LM93-FrameMgr_processLine
1568
 697               	.LM93:
1569
 698 02f0 9081      		ld r25,Z
1570
 699 02f2 FD01      		movw r30,r26
1571
 700 02f4 3397      		sbiw r30,3
1572
 701 02f6 8081      		ld r24,Z
1573
 702 02f8 292F      		mov r18,r25
1574
 703 02fa 3327      		clr r19
1575
 704 02fc F901      		movw r30,r18
1576
 705 02fe E81B      		sub r30,r24
1577
 706 0300 F109      		sbc r31,__zero_reg__
1578
 707 0302 3397      		sbiw r30,3
1579
 708 0304 3CF4      		brge .L64
1580
 709               		.stabn	68,0,474,.LM94-FrameMgr_processLine
1581
 710               	.LM94:
1582
 711 0306 C601      		movw r24,r12
1583
 712 0308 821B      		sub r24,r18
1584
 713 030a 930B      		sbc r25,r19
1585
 714 030c 0397      		sbiw r24,3
1586
 715 030e 14F0      		brlt .L64
1587
 716               		.stabn	68,0,477,.LM95-FrameMgr_processLine
1588
 717               	.LM95:
1589
 718 0310 1C92      		st X,__zero_reg__
1590
 719               		.stabn	68,0,478,.LM96-FrameMgr_processLine
1591
 720               	.LM96:
1592
 721 0312 7150      		subi r23,lo8(-(-1))
1593
 722               	.L64:
1594
 723               		.stabn	68,0,462,.LM97-FrameMgr_processLine
1595
 724               	.LM97:
1596
 725 0314 4F5F      		subi r20,lo8(-(1))
1597
 726 0316 1896      		adiw r26,8
1598
 727 0318 4830      		cpi r20,lo8(8)
1599
 728 031a 29F7      		brne .L63
1600
 729 031c 7093 0000 		sts numCurrTrackedObjects,r23
1601
 730               	.L61:
1602
 731               		.stabn	68,0,486,.LM98-FrameMgr_processLine
1603
 732               	.LM98:
1604
 733 0320 E092 0000 		sts trackedLineCount,r14
1605
 734               		.stabn	68,0,487,.LM99-FrameMgr_processLine
1606
 735               	.LM99:
1607
 736 0324 F0E9      		ldi r31,lo8(-112)
1608
 737 0326 EF16      		cp r14,r31
1609
 738 0328 09F4      		brne .+2
1610
 739 032a 48CF      		rjmp .L72
1611
 740               		.stabn	68,0,498,.LM100-FrameMgr_processLine
1612
 741               	.LM100:
1613
 742 032c 8091 0000 		lds r24,fastEventBitmask
1614
 743 0330 8260      		ori r24,lo8(2)
1615
 744 0332 8093 0000 		sts fastEventBitmask,r24
1616
 745 0336 04C0      		rjmp .L71
1617
 746               	.L54:
1618
 747               	.LBB6:
1619
 748               	.LBB7:
1620
 749               		.stabn	68,0,757,.LM101-FrameMgr_processLine
182 kaklik 1621
GAS LISTING /tmp/ccQRbLT3.s 			page 28
151 kaklik 1622
 
1623
 
1624
 750               	.LM101:
1625
 751 0338 7830      		cpi r23,lo8(8)
1626
 752 033a 08F4      		brsh .+2
1627
 753 033c B2CF      		rjmp .L56
1628
 754 033e C6CF      		rjmp .L36
1629
 755               	.L71:
1630
 756               	.LBE7:
1631
 757               	.LBE6:
1632
 758               	/* epilogue: frame size=1 */
1633
 759 0340 2196      		adiw r28,1
1634
 760 0342 0FB6      		in __tmp_reg__,__SREG__
1635
 761 0344 F894      		cli
1636
 762 0346 DEBF      		out __SP_H__,r29
1637
 763 0348 0FBE      		out __SREG__,__tmp_reg__
1638
 764 034a CDBF      		out __SP_L__,r28
1639
 765 034c DF91      		pop r29
1640
 766 034e CF91      		pop r28
1641
 767 0350 1F91      		pop r17
1642
 768 0352 0F91      		pop r16
1643
 769 0354 FF90      		pop r15
1644
 770 0356 EF90      		pop r14
1645
 771 0358 DF90      		pop r13
1646
 772 035a CF90      		pop r12
1647
 773 035c BF90      		pop r11
1648
 774 035e AF90      		pop r10
1649
 775 0360 9F90      		pop r9
1650
 776 0362 8F90      		pop r8
1651
 777 0364 7F90      		pop r7
1652
 778 0366 6F90      		pop r6
1653
 779 0368 5F90      		pop r5
1654
 780 036a 4F90      		pop r4
1655
 781 036c 3F90      		pop r3
1656
 782 036e 2F90      		pop r2
1657
 783 0370 0895      		ret
1658
 784               	/* epilogue end (size=25) */
1659
 785               	/* function FrameMgr_processLine size 355 (304) */
1660
 786               		.size	FrameMgr_processLine, .-FrameMgr_processLine
1661
 787               		.stabs	"i:r(0,11)",64,0,343,20
1662
 788               		.stabs	"dataToSend:(0,23)=B(0,11)",128,0,344,1
1663
 789               		.stabs	"pTrackedObjectData:r(0,22)",64,0,345,26
1664
 790               		.stabn	192,0,0,FrameMgr_processLine-FrameMgr_processLine
1665
 791               		.stabn	224,0,0,.Lscope1-FrameMgr_processLine
1666
 792               	.Lscope1:
1667
 793               		.stabs	"",36,0,0,.Lscope1-FrameMgr_processLine
1668
 794               		.stabd	78,0,0
1669
 795               		.stabs	"FrameMgr_init:F(0,15)",36,0,191,FrameMgr_init
1670
 796               	.global	FrameMgr_init
1671
 797               		.type	FrameMgr_init, @function
1672
 798               	FrameMgr_init:
1673
 799               		.stabd	46,0,0
1674
 800               		.stabn	68,0,191,.LM102-FrameMgr_init
1675
 801               	.LM102:
1676
 802               	/* prologue: frame size=0 */
1677
 803               	/* prologue end (size=0) */
1678
 804               		.stabn	68,0,192,.LM103-FrameMgr_init
1679
 805               	.LM103:
1680
 806 0372 80E4      		ldi r24,lo8(64)
182 kaklik 1681
GAS LISTING /tmp/ccQRbLT3.s 			page 29
151 kaklik 1682
 
1683
 
1684
 807 0374 E0E0      		ldi r30,lo8(trackedObjectTable)
1685
 808 0376 F0E0      		ldi r31,hi8(trackedObjectTable)
1686
 809 0378 1192      		st Z+,__zero_reg__
1687
 810 037a 8A95      	        dec r24
1688
 811 037c E9F7      		brne .-6
1689
 812               	/* epilogue: frame size=0 */
1690
 813 037e 0895      		ret
1691
 814               	/* epilogue end (size=1) */
1692
 815               	/* function FrameMgr_init size 7 (6) */
1693
 816               		.size	FrameMgr_init, .-FrameMgr_init
1694
 817               	.Lscope2:
1695
 818               		.stabs	"",36,0,0,.Lscope2-FrameMgr_init
1696
 819               		.stabd	78,0,0
1697
 820               		.stabs	"FrameMgr_acquireLine:F(0,15)",36,0,287,FrameMgr_acquireLine
1698
 821               	.global	FrameMgr_acquireLine
1699
 822               		.type	FrameMgr_acquireLine, @function
1700
 823               	FrameMgr_acquireLine:
1701
 824               		.stabd	46,0,0
1702
 825               		.stabn	68,0,287,.LM104-FrameMgr_acquireLine
1703
 826               	.LM104:
1704
 827               	/* prologue: frame size=0 */
1705
 828               	/* prologue end (size=0) */
1706
 829               		.stabn	68,0,297,.LM105-FrameMgr_acquireLine
1707
 830               	.LM105:
1708
 831 0380 8091 0000 		lds r24,currentState
1709
 832 0384 8230      		cpi r24,lo8(2)
1710
 833 0386 49F5      		brne .L83
1711
 834               		.stabn	68,0,299,.LM106-FrameMgr_acquireLine
1712
 835               	.LM106:
1713
 836 0388 8091 0000 		lds r24,lineCount
1714
 837 038c 282F      		mov r18,r24
1715
 838 038e 220F      		lsl r18
1716
 839               		.stabn	68,0,305,.LM107-FrameMgr_acquireLine
1717
 840               	.LM107:
1718
 841 0390 80EB      		ldi r24,lo8(-80)
1719
 842 0392 E0E0      		ldi r30,lo8(currentLineBuffer)
1720
 843 0394 F0E0      		ldi r31,hi8(currentLineBuffer)
1721
 844 0396 982F      		mov r25,r24
1722
 845 0398 1192      		st Z+,__zero_reg__
1723
 846 039a 9A95      	        dec r25
1724
 847 039c E9F7      		brne .-6
1725
 848               		.stabn	68,0,306,.LM108-FrameMgr_acquireLine
1726
 849               	.LM108:
1727
 850 039e E0E0      		ldi r30,lo8(previousLineBuffer)
1728
 851 03a0 F0E0      		ldi r31,hi8(previousLineBuffer)
1729
 852 03a2 1192      		st Z+,__zero_reg__
1730
 853 03a4 8A95      	        dec r24
1731
 854 03a6 E9F7      		brne .-6
1732
 855               	.L85:
1733
 856               		.stabn	68,0,309,.LM109-FrameMgr_acquireLine
1734
 857               	.LM109:
1735
 858 03a8 829B      		sbis 48-0x20,2
1736
 859 03aa FECF      		rjmp .L85
1737
 860               	.L101:
1738
 861               		.stabn	68,0,310,.LM110-FrameMgr_acquireLine
1739
 862               	.LM110:
1740
 863 03ac 829B      		sbis 48-0x20,2
182 kaklik 1741
GAS LISTING /tmp/ccQRbLT3.s 			page 30
151 kaklik 1742
 
1743
 
1744
 864 03ae 07C0      		rjmp .L110
1745
 865 03b0 FDCF      		rjmp .L101
1746
 866               	.L88:
1747
 867 03b2 90E0      		ldi r25,lo8(0)
1748
 868               	.L114:
1749
 869               		.stabn	68,0,316,.LM111-FrameMgr_acquireLine
1750
 870               	.LM111:
1751
 871 03b4 849B      		sbis 48-0x20,4
1752
 872 03b6 FECF      		rjmp .L114
1753
 873               	.L102:
1754
 874               		.stabn	68,0,318,.LM112-FrameMgr_acquireLine
1755
 875               	.LM112:
1756
 876 03b8 849B      		sbis 48-0x20,4
1757
 877 03ba 04C0      		rjmp .L111
1758
 878 03bc FDCF      		rjmp .L102
1759
 879               	.L110:
1760
 880               		.stabn	68,0,314,.LM113-FrameMgr_acquireLine
1761
 881               	.LM113:
1762
 882 03be 2223      		tst r18
1763
 883 03c0 C1F7      		brne .L88
1764
 884 03c2 05C0      		rjmp .L92
1765
 885               	.L111:
1766
 886 03c4 9150      		subi r25,lo8(-(-1))
1767
 887 03c6 822F      		mov r24,r18
1768
 888 03c8 8195      		neg r24
1769
 889 03ca 9817      		cp r25,r24
1770
 890 03cc 99F7      		brne .L114
1771
 891               	.L92:
1772
 892               		.stabn	68,0,322,.LM114-FrameMgr_acquireLine
1773
 893               	.LM114:
1774
 894 03ce 60E0      		ldi r22,lo8(previousLineBuffer)
1775
 895 03d0 70E0      		ldi r23,hi8(previousLineBuffer)
1776
 896 03d2 80E0      		ldi r24,lo8(currentLineBuffer)
1777
 897 03d4 90E0      		ldi r25,hi8(currentLineBuffer)
1778
 898 03d6 00D0      		rcall CamIntAsm_acquireDumpLine
1779
 899 03d8 0895      		ret
1780
 900               	.L83:
1781
 901               		.stabn	68,0,324,.LM115-FrameMgr_acquireLine
1782
 902               	.LM115:
1783
 903 03da 8130      		cpi r24,lo8(1)
1784
 904 03dc 39F4      		brne .L96
1785
 905               	.L103:
1786
 906               		.stabn	68,0,326,.LM116-FrameMgr_acquireLine
1787
 907               	.LM116:
1788
 908 03de 8499      		sbic 48-0x20,4
1789
 909 03e0 FECF      		rjmp .L103
1790
 910               		.stabn	68,0,327,.LM117-FrameMgr_acquireLine
1791
 911               	.LM117:
1792
 912 03e2 60E0      		ldi r22,lo8(colorMap)
1793
 913 03e4 70E0      		ldi r23,hi8(colorMap)
1794
 914 03e6 80E0      		ldi r24,lo8(currentLineBuffer)
1795
 915 03e8 90E0      		ldi r25,hi8(currentLineBuffer)
1796
 916 03ea 00D0      		rcall CamIntAsm_acquireTrackingLine
1797
 917               	.L96:
1798
 918 03ec 0895      		ret
1799
 919               	/* epilogue: frame size=0 */
1800
 920               	/* epilogue: noreturn */
182 kaklik 1801
GAS LISTING /tmp/ccQRbLT3.s 			page 31
151 kaklik 1802
 
1803
 
1804
 921               	/* epilogue end (size=0) */
1805
 922               	/* function FrameMgr_acquireLine size 55 (55) */
1806
 923               		.size	FrameMgr_acquireLine, .-FrameMgr_acquireLine
1807
 924               		.stabs	"tmpLineCount:r(0,11)",64,0,288,18
1808
 925               		.stabn	192,0,0,FrameMgr_acquireLine-FrameMgr_acquireLine
1809
 926               		.stabn	224,0,0,.Lscope3-FrameMgr_acquireLine
1810
 927               	.Lscope3:
1811
 928               		.stabs	"",36,0,0,.Lscope3-FrameMgr_acquireLine
1812
 929               		.stabd	78,0,0
1813
 930               		.stabs	"FrameMgr_acquireFrame:F(0,15)",36,0,261,FrameMgr_acquireFrame
1814
 931               	.global	FrameMgr_acquireFrame
1815
 932               		.type	FrameMgr_acquireFrame, @function
1816
 933               	FrameMgr_acquireFrame:
1817
 934               		.stabd	46,0,0
1818
 935               		.stabn	68,0,261,.LM118-FrameMgr_acquireFrame
1819
 936               	.LM118:
1820
 937               	/* prologue: frame size=0 */
1821
 938               	/* prologue end (size=0) */
1822
 939               		.stabn	68,0,262,.LM119-FrameMgr_acquireFrame
1823
 940               	.LM119:
1824
 941 03ee 8091 0000 		lds r24,currentState
1825
 942 03f2 8130      		cpi r24,lo8(1)
1826
 943 03f4 A9F4      		brne .L120
1827
 944               		.stabn	68,0,264,.LM120-FrameMgr_acquireFrame
1828
 945               	.LM120:
1829
 946 03f6 1092 0000 		sts trackedLineCount,__zero_reg__
1830
 947               		.stabn	68,0,265,.LM121-FrameMgr_acquireFrame
1831
 948               	.LM121:
1832
 949 03fa 8091 0000 		lds r24,numCurrTrackedObjects
1833
 950 03fe 8093 0000 		sts numPrevTrackedObjects,r24
1834
 951               		.stabn	68,0,266,.LM122-FrameMgr_acquireFrame
1835
 952               	.LM122:
1836
 953 0402 1092 0000 		sts numCurrTrackedObjects,__zero_reg__
1837
 954               		.stabn	68,0,270,.LM123-FrameMgr_acquireFrame
1838
 955               	.LM123:
1839
 956 0406 80E4      		ldi r24,lo8(64)
1840
 957 0408 E0E0      		ldi r30,lo8(trackedObjectTable)
1841
 958 040a F0E0      		ldi r31,hi8(trackedObjectTable)
1842
 959 040c 1192      		st Z+,__zero_reg__
1843
 960 040e 8A95      	        dec r24
1844
 961 0410 E9F7      		brne .-6
1845
 962               	.L118:
1846
 963               		.stabn	68,0,272,.LM124-FrameMgr_acquireFrame
1847
 964               	.LM124:
1848
 965 0412 829B      		sbis 48-0x20,2
1849
 966 0414 FECF      		rjmp .L118
1850
 967               		.stabn	68,0,273,.LM125-FrameMgr_acquireFrame
1851
 968               	.LM125:
1852
 969 0416 60E0      		ldi r22,lo8(colorMap)
1853
 970 0418 70E0      		ldi r23,hi8(colorMap)
1854
 971 041a 80E0      		ldi r24,lo8(currentLineBuffer)
1855
 972 041c 90E0      		ldi r25,hi8(currentLineBuffer)
1856
 973 041e 00D0      		rcall CamIntAsm_acquireTrackingLine
1857
 974               	.L120:
1858
 975 0420 0895      		ret
1859
 976               	/* epilogue: frame size=0 */
1860
 977               	/* epilogue: noreturn */
182 kaklik 1861
GAS LISTING /tmp/ccQRbLT3.s 			page 32
151 kaklik 1862
 
1863
 
1864
 978               	/* epilogue end (size=0) */
1865
 979               	/* function FrameMgr_acquireFrame size 26 (26) */
1866
 980               		.size	FrameMgr_acquireFrame, .-FrameMgr_acquireFrame
1867
 981               	.Lscope4:
1868
 982               		.stabs	"",36,0,0,.Lscope4-FrameMgr_acquireFrame
1869
 983               		.stabd	78,0,0
1870
 984               		.stabs	"FrameMgr_dispatchEvent:F(0,15)",36,0,205,FrameMgr_dispatchEvent
1871
 985               		.stabs	"event:P(0,11)",64,0,204,24
1872
 986               	.global	FrameMgr_dispatchEvent
1873
 987               		.type	FrameMgr_dispatchEvent, @function
1874
 988               	FrameMgr_dispatchEvent:
1875
 989               		.stabd	46,0,0
1876
 990               		.stabn	68,0,205,.LM126-FrameMgr_dispatchEvent
1877
 991               	.LM126:
1878
 992               	/* prologue: frame size=0 */
1879
 993               	/* prologue end (size=0) */
1880
 994               		.stabn	68,0,206,.LM127-FrameMgr_dispatchEvent
1881
 995               	.LM127:
1882
 996 0422 8430      		cpi r24,lo8(4)
1883
 997 0424 19F1      		breq .L127
1884
 998               		.stabn	68,0,206,.LM128-FrameMgr_dispatchEvent
1885
 999               	.LM128:
1886
 1000 0426 8530      		cpi r24,lo8(5)
1887
 1001 0428 28F4      		brsh .L131
1888
 1002 042a 8130      		cpi r24,lo8(1)
1889
 1003 042c 09F1      		breq .L125
1890
 1004 042e 8230      		cpi r24,lo8(2)
1891
 1005 0430 41F5      		brne .L133
1892
 1006 0432 07C0      		rjmp .L126
1893
 1007               	.L131:
1894
 1008 0434 8038      		cpi r24,lo8(-128)
1895
 1009 0436 99F0      		breq .L129
1896
 1010 0438 8138      		cpi r24,lo8(-127)
1897
 1011 043a 09F1      		breq .L130
1898
 1012 043c 8032      		cpi r24,lo8(32)
1899
 1013 043e 09F5      		brne .L133
1900
 1014 0440 13C0      		rjmp .L128
1901
 1015               	.L126:
1902
 1016               		.stabn	68,0,211,.LM129-FrameMgr_dispatchEvent
1903
 1017               	.LM129:
1904
 1018 0442 61E0      		ldi r22,lo8(1)
1905
 1019 0444 81E1      		ldi r24,lo8(17)
1906
 1020 0446 00D0      		rcall CamConfig_setCamReg
1907
 1021               		.stabn	68,0,212,.LM130-FrameMgr_dispatchEvent
1908
 1022               	.LM130:
1909
 1023 0448 00D0      		rcall CamConfig_sendFifoCmds
1910
 1024               		.stabn	68,0,213,.LM131-FrameMgr_dispatchEvent
1911
 1025               	.LM131:
1912
 1026 044a 88EE      		ldi r24,lo8(1000)
1913
 1027 044c 93E0      		ldi r25,hi8(1000)
1914
 1028 044e 00D0      		rcall Utility_delay
1915
 1029               		.stabn	68,0,214,.LM132-FrameMgr_dispatchEvent
1916
 1030               	.LM132:
1917
 1031 0450 1092 0000 		sts lineCount,__zero_reg__
1918
 1032               		.stabn	68,0,215,.LM133-FrameMgr_dispatchEvent
1919
 1033               	.LM133:
1920
 1034 0454 82E0      		ldi r24,lo8(2)
182 kaklik 1921
GAS LISTING /tmp/ccQRbLT3.s 			page 33
151 kaklik 1922
 
1923
 
1924
 1035 0456 8093 0000 		sts currentState,r24
1925
 1036               		.stabn	68,0,217,.LM134-FrameMgr_dispatchEvent
1926
 1037               	.LM134:
1927
 1038 045a 92DF      		rcall FrameMgr_acquireLine
1928
 1039 045c 0895      		ret
1929
 1040               	.L129:
1930
 1041               		.stabn	68,0,221,.LM135-FrameMgr_dispatchEvent
1931
 1042               	.LM135:
1932
 1043 045e 81E0      		ldi r24,lo8(1)
1933
 1044 0460 8093 0000 		sts currentState,r24
1934
 1045               		.stabn	68,0,222,.LM136-FrameMgr_dispatchEvent
1935
 1046               	.LM136:
1936
 1047 0464 C4DF      		rcall FrameMgr_acquireFrame
1937
 1048 0466 0895      		ret
1938
 1049               	.L128:
1939
 1050               		.stabn	68,0,226,.LM137-FrameMgr_dispatchEvent
1940
 1051               	.LM137:
1941
 1052 0468 CBDD      		rcall FrameMgr_processFrame
1942
 1053 046a 0895      		ret
1943
 1054               	.L127:
1944
 1055               		.stabn	68,0,230,.LM138-FrameMgr_dispatchEvent
1945
 1056               	.LM138:
1946
 1057 046c C0DF      		rcall FrameMgr_acquireFrame
1947
 1058 046e 0895      		ret
1948
 1059               	.L125:
1949
 1060               		.stabn	68,0,234,.LM139-FrameMgr_dispatchEvent
1950
 1061               	.LM139:
1951
 1062 0470 8091 0000 		lds r24,currentState
1952
 1063 0474 8823      		tst r24
1953
 1064 0476 29F0      		breq .L133
1954
 1065               		.stabn	68,0,240,.LM140-FrameMgr_dispatchEvent
1955
 1066               	.LM140:
1956
 1067 0478 84E0      		ldi r24,lo8(4)
1957
 1068 047a 00D0      		rcall Exec_writeEventFifo
1958
 1069 047c 0895      		ret
1959
 1070               	.L130:
1960
 1071               		.stabn	68,0,246,.LM141-FrameMgr_dispatchEvent
1961
 1072               	.LM141:
1962
 1073 047e 1092 0000 		sts currentState,__zero_reg__
1963
 1074               	.L133:
1964
 1075 0482 0895      		ret
1965
 1076               	/* epilogue: frame size=0 */
1966
 1077               	/* epilogue: noreturn */
1967
 1078               	/* epilogue end (size=0) */
1968
 1079               	/* function FrameMgr_dispatchEvent size 49 (49) */
1969
 1080               		.size	FrameMgr_dispatchEvent, .-FrameMgr_dispatchEvent
1970
 1081               	.Lscope5:
1971
 1082               		.stabs	"",36,0,0,.Lscope5-FrameMgr_dispatchEvent
1972
 1083               		.stabd	78,0,0
1973
 1084               		.data
1974
 1085               		.type	pCurrentTrackedObjectTable, @object
1975
 1086               		.size	pCurrentTrackedObjectTable, 2
1976
 1087               	pCurrentTrackedObjectTable:
1977
 1088 0000 0000      		.word	trackedObjectTable
1978
 1089               		.lcomm numCurrTrackedObjects,1
1979
 1090               		.lcomm currentState,1
1980
 1091               		.lcomm lineCount,1
182 kaklik 1981
GAS LISTING /tmp/ccQRbLT3.s 			page 34
151 kaklik 1982
 
1983
 
1984
 1092               		.lcomm trackedLineCount,1
1985
 1093               		.lcomm numPrevTrackedObjects,1
1986
 1094               		.lcomm trackedObjectTable,64
1987
 1095               		.stabs	"trackedObjectTable:S(0,24)=ar(0,25)=r(0,25);0;0177777;;0;7;(0,20)",40,0,162,trackedObjectT
1988
 1096               		.stabs	"pCurrentTrackedObjectTable:S(0,26)=*(0,20)",38,0,163,pCurrentTrackedObjectTable
1989
 1097               		.stabs	"lineCount:S(0,11)",38,0,164,lineCount
1990
 1098               		.stabs	"currentState:S(0,17)",38,0,165,currentState
1991
 1099               		.stabs	"numCurrTrackedObjects:S(0,11)",38,0,166,numCurrTrackedObjects
1992
 1100               		.stabs	"numPrevTrackedObjects:S(0,11)",38,0,167,numPrevTrackedObjects
1993
 1101               		.stabs	"trackedLineCount:S(0,11)",38,0,168,trackedLineCount
1994
 1102               		.text
1995
 1103               		.stabs	"",100,0,0,.Letext0
1996
 1104               	.Letext0:
1997
 1105               	/* File "FrameMgr.c": code  580 = 0x0244 ( 513), prologues  33, epilogues  34 */
182 kaklik 1998
GAS LISTING /tmp/ccQRbLT3.s 			page 35
151 kaklik 1999
 
2000
 
2001
DEFINED SYMBOLS
2002
                            *ABS*:00000000 FrameMgr.c
182 kaklik 2003
     /tmp/ccQRbLT3.s:3      *ABS*:0000003f __SREG__
2004
     /tmp/ccQRbLT3.s:4      *ABS*:0000003e __SP_H__
2005
     /tmp/ccQRbLT3.s:5      *ABS*:0000003d __SP_L__
2006
     /tmp/ccQRbLT3.s:6      *ABS*:00000000 __tmp_reg__
2007
     /tmp/ccQRbLT3.s:7      *ABS*:00000001 __zero_reg__
2008
     /tmp/ccQRbLT3.s:91     .text:00000000 FrameMgr_processFrame
2009
     /tmp/ccQRbLT3.s:1087   .data:00000000 pCurrentTrackedObjectTable
151 kaklik 2010
                             .bss:00000000 numCurrTrackedObjects
182 kaklik 2011
     /tmp/ccQRbLT3.s:270    .text:000000b2 FrameMgr_processLine
2012
     /tmp/ccQRbLT3.s:1089   .bss:00000001 currentState
2013
     /tmp/ccQRbLT3.s:1090   .bss:00000002 lineCount
2014
     /tmp/ccQRbLT3.s:1091   .bss:00000003 trackedLineCount
2015
     /tmp/ccQRbLT3.s:798    .text:00000372 FrameMgr_init
2016
     /tmp/ccQRbLT3.s:1093   .bss:00000005 trackedObjectTable
2017
     /tmp/ccQRbLT3.s:823    .text:00000380 FrameMgr_acquireLine
2018
     /tmp/ccQRbLT3.s:933    .text:000003ee FrameMgr_acquireFrame
2019
     /tmp/ccQRbLT3.s:1092   .bss:00000004 numPrevTrackedObjects
2020
     /tmp/ccQRbLT3.s:988    .text:00000422 FrameMgr_dispatchEvent
151 kaklik 2021
 
2022
UNDEFINED SYMBOLS
2023
__do_copy_data
2024
__do_clear_bss
2025
UIMgr_writeTxFifo
2026
Exec_writeEventFifo
2027
UartInt_txByte
2028
currentLineBuffer
2029
previousLineBuffer
2030
CamConfig_setCamReg
2031
CamConfig_sendFifoCmds
2032
fastEventBitmask
2033
CamIntAsm_acquireDumpLine
2034
colorMap
2035
CamIntAsm_acquireTrackingLine
2036
Utility_delay