Subversion Repositories svnkaklik

Rev

Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
151 kaklik 1
GAS LISTING /tmp/cc2L16GD.s 			page 1
2
 
3
 
4
   1               		.file	"UIMgr.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
13
  10               		.stabs	"/home/kaklik/projects/roboti/istrobot/2007/ATmega8/AVRcam/",100,0,2,.Ltext0
14
  11               		.stabs	"UIMgr.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/avr/io.h",130,0,0,0
34
  31               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/sfr_defs.h",130,0,0,0
35
  32               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/inttypes.h",130,0,0,0
36
  33               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdint.h",130,0,0,0
37
  34               		.stabs	"int8_t:t(4,1)=(0,10)",128,0,116,0
38
  35               		.stabs	"uint8_t:t(4,2)=(0,11)",128,0,117,0
39
  36               		.stabs	"int16_t:t(4,3)=(0,1)",128,0,118,0
40
  37               		.stabs	"uint16_t:t(4,4)=(0,4)",128,0,119,0
41
  38               		.stabs	"int32_t:t(4,5)=(0,3)",128,0,120,0
42
  39               		.stabs	"uint32_t:t(4,6)=(0,5)",128,0,121,0
43
  40               		.stabs	"int64_t:t(4,7)=(0,6)",128,0,122,0
44
  41               		.stabs	"uint64_t:t(4,8)=(0,7)",128,0,123,0
45
  42               		.stabs	"intptr_t:t(4,9)=(4,3)",128,0,135,0
46
  43               		.stabs	"uintptr_t:t(4,10)=(4,4)",128,0,140,0
47
  44               		.stabs	"int_least8_t:t(4,11)=(4,1)",128,0,152,0
48
  45               		.stabs	"uint_least8_t:t(4,12)=(4,2)",128,0,157,0
49
  46               		.stabs	"int_least16_t:t(4,13)=(4,3)",128,0,162,0
50
  47               		.stabs	"uint_least16_t:t(4,14)=(4,4)",128,0,167,0
51
  48               		.stabs	"int_least32_t:t(4,15)=(4,5)",128,0,172,0
52
  49               		.stabs	"uint_least32_t:t(4,16)=(4,6)",128,0,177,0
53
  50               		.stabs	"int_least64_t:t(4,17)=(4,7)",128,0,182,0
54
  51               		.stabs	"uint_least64_t:t(4,18)=(4,8)",128,0,187,0
55
  52               		.stabs	"int_fast8_t:t(4,19)=(4,1)",128,0,200,0
56
  53               		.stabs	"uint_fast8_t:t(4,20)=(4,2)",128,0,205,0
57
  54               		.stabs	"int_fast16_t:t(4,21)=(4,3)",128,0,210,0
58
  55               		.stabs	"uint_fast16_t:t(4,22)=(4,4)",128,0,215,0
59
  56               		.stabs	"int_fast32_t:t(4,23)=(4,5)",128,0,220,0
60
  57               		.stabs	"uint_fast32_t:t(4,24)=(4,6)",128,0,225,0
61
GAS LISTING /tmp/cc2L16GD.s 			page 2
62
 
63
 
64
  58               		.stabs	"int_fast64_t:t(4,25)=(4,7)",128,0,230,0
65
  59               		.stabs	"uint_fast64_t:t(4,26)=(4,8)",128,0,235,0
66
  60               		.stabs	"intmax_t:t(4,27)=(4,7)",128,0,249,0
67
  61               		.stabs	"uintmax_t:t(4,28)=(4,8)",128,0,254,0
68
  62               		.stabn	162,0,0,0
69
  63               		.stabs	"int_farptr_t:t(3,1)=(4,5)",128,0,76,0
70
  64               		.stabs	"uint_farptr_t:t(3,2)=(4,6)",128,0,80,0
71
  65               		.stabn	162,0,0,0
72
  66               		.stabn	162,0,0,0
73
  67               		.stabn	162,0,0,0
74
  68               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdlib.h",130,0,0,0
75
  69               		.stabs	"/usr/lib/gcc/avr/4.1.0/include/stddef.h",130,0,0,0
76
  70               		.stabs	"size_t:t(6,1)=(0,4)",128,0,214,0
77
  71               		.stabs	"wchar_t:t(6,2)=(0,1)",128,0,326,0
78
  72               		.stabn	162,0,0,0
79
  73               		.stabs	"div_t:t(5,1)=(5,2)=s4quot:(0,1),0,16;rem:(0,1),16,16;;",128,0,69,0
80
  74               		.stabs	"ldiv_t:t(5,3)=(5,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;",128,0,75,0
81
  75               		.stabs	"__compar_fn_t:t(5,5)=(5,6)=*(5,7)=f(0,1)",128,0,78,0
82
  76               		.stabn	162,0,0,0
83
  77               		.stabs	"CommonDefs.h",130,0,0,0
84
  78               		.stabs	"bool_t:t(7,1)=(0,11)",128,0,56,0
85
  79               		.stabn	162,0,0,0
86
  80               		.stabs	"CamConfig.h",130,0,0,0
87
  81               		.stabs	"I2CInterface.h",130,0,0,0
88
  82               		.stabs	"i2cCmd_t:t(9,1)=(9,2)=s2configReg:(0,11),0,8;data:(0,11),8,8;;",128,0,53,0
89
  83               		.stabn	162,0,0,0
90
  84               		.stabn	162,0,0,0
91
  85               		.stabs	" :T(0,16)=@s8;egetVersionCmd:0,pingCmd:1,setCameraRegsCmd:2,dumpFrameCmd:3,enableTrackingC
92
  86               		.stabs	"UIMgr_Cmd_t:t(0,17)=(0,16)",128,0,81,0
93
  87               		.stabs	" :T(0,18)=@s8;esetRed:0,setGreen:1,setBlue:2,;",128,0,0,0
94
  88               		.stabs	"setColorState_t:t(0,19)=(0,18)",128,0,88,0
95
  89               		.stabs	"UIMgr_writeBufferToTxFifo:F(0,15)",36,0,547,UIMgr_writeBufferToTxFifo
96
  90               		.stabs	"pData:P(0,20)=*(0,11)",64,0,546,26
97
  91               		.stabs	"length:P(0,11)",64,0,546,24
98
  92               	.global	UIMgr_writeBufferToTxFifo
99
  93               		.type	UIMgr_writeBufferToTxFifo, @function
100
  94               	UIMgr_writeBufferToTxFifo:
101
  95               		.stabd	46,0,0
102
   1:UIMgr.c       **** /*
103
   2:UIMgr.c       ****     Copyright (C) 2004    John Orlando
104
   3:UIMgr.c       ****     
105
   4:UIMgr.c       ****    AVRcam: a small real-time image processing engine.
106
   5:UIMgr.c       **** 
107
   6:UIMgr.c       ****     This program is free software; you can redistribute it and/or
108
   7:UIMgr.c       ****     modify it under the terms of the GNU General Public
109
   8:UIMgr.c       ****     License as published by the Free Software Foundation; either
110
   9:UIMgr.c       ****     version 2 of the License, or (at your option) any later version.
111
  10:UIMgr.c       **** 
112
  11:UIMgr.c       ****     This program is distributed in the hope that it will be useful,
113
  12:UIMgr.c       ****     but WITHOUT ANY WARRANTY; without even the implied warranty of
114
  13:UIMgr.c       ****     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
115
  14:UIMgr.c       ****     General Public License for more details.
116
  15:UIMgr.c       **** 
117
  16:UIMgr.c       ****     You should have received a copy of the GNU General Public
118
  17:UIMgr.c       ****     License along with this program; if not, write to the Free Software
119
  18:UIMgr.c       ****     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
120
  19:UIMgr.c       **** 
121
GAS LISTING /tmp/cc2L16GD.s 			page 3
122
 
123
 
124
  20:UIMgr.c       ****    For more information on the AVRcam, please contact:
125
  21:UIMgr.c       **** 
126
  22:UIMgr.c       ****    john@jrobot.net
127
  23:UIMgr.c       **** 
128
  24:UIMgr.c       ****    or go to www.jrobot.net for more details regarding the system.
129
  25:UIMgr.c       **** */
130
  26:UIMgr.c       **** /***********************************************************
131
  27:UIMgr.c       **** 	Module Name: UIMgr.c
132
  28:UIMgr.c       **** 	Module Date: 04/10/2004
133
  29:UIMgr.c       **** 	Module Auth: John Orlando
134
  30:UIMgr.c       **** 	
135
  31:UIMgr.c       **** 	Description: This module is responsible for providing
136
  32:UIMgr.c       **** 	the processing to manage the user interface of the
137
  33:UIMgr.c       **** 	system.  This user interface is provided via the UART.
138
  34:UIMgr.c       **** 	This module handles the incoming serial commands, and
139
  35:UIMgr.c       **** 	performs the needed functionality.  It is then
140
  36:UIMgr.c       **** 	responsible for generating any needed response to
141
  37:UIMgr.c       **** 	the external entity.
142
  38:UIMgr.c       ****     
143
  39:UIMgr.c       ****     Revision History:
144
  40:UIMgr.c       ****     Date        Rel Ver.    Notes
145
  41:UIMgr.c       ****     4/10/2004      0.1     Module created
146
  42:UIMgr.c       ****     6/30/2004      1.0     Initial release for Circuit Cellar
147
  43:UIMgr.c       ****                            contest.
148
  44:UIMgr.c       ****     11/15/2004     1.2     Updated version string to 1.2.
149
  45:UIMgr.c       ****     1/16/2005      1.4     Added code to write the colorMap
150
  46:UIMgr.c       ****                            to EEPROM one byte at a time, 
151
  47:UIMgr.c       ****                            ensuring that the EEPROM is only
152
  48:UIMgr.c       ****                            written when the data is different
153
  49:UIMgr.c       ****                            than the current value (thus saving
154
  50:UIMgr.c       ****                            EEPROM writes).  Updated version
155
  51:UIMgr.c       ****                            string to 1.4.
156
  52:UIMgr.c       **** ***********************************************************/
157
  53:UIMgr.c       **** 
158
  54:UIMgr.c       **** /*	Includes */
159
  55:UIMgr.c       **** #include <avr/io.h>
160
  56:UIMgr.c       **** #include <stdlib.h>
161
  57:UIMgr.c       **** #include <string.h>
162
  58:UIMgr.c       **** #include <avr/eeprom.h>
163
  59:UIMgr.c       **** #include "CommonDefs.h"
164
  60:UIMgr.c       **** #include "UIMgr.h"
165
  61:UIMgr.c       **** #include "UartInterface.h"
166
  62:UIMgr.c       **** #include "CamConfig.h"
167
  63:UIMgr.c       **** #include "Utility.h"
168
  64:UIMgr.c       **** #include "Executive.h"
169
  65:UIMgr.c       **** #include "CamInterface.h"
170
  66:UIMgr.c       **** 
171
  67:UIMgr.c       **** /* 	Local Structures and Typedefs */
172
  68:UIMgr.c       **** 
173
  69:UIMgr.c       **** typedef enum
174
  70:UIMgr.c       **** {
175
  71:UIMgr.c       **** 	getVersionCmd,
176
  72:UIMgr.c       **** 	pingCmd,
177
  73:UIMgr.c       **** 	setCameraRegsCmd,
178
  74:UIMgr.c       **** 	dumpFrameCmd,
179
  75:UIMgr.c       **** 	enableTrackingCmd,
180
  76:UIMgr.c       **** 	disableTrackingCmd,
181
GAS LISTING /tmp/cc2L16GD.s 			page 4
182
 
183
 
184
  77:UIMgr.c       **** 	setColorMapCmd,
185
  78:UIMgr.c       **** 	resetCameraCmd,
186
  79:UIMgr.c       **** 	noCmd,
187
  80:UIMgr.c       **** 	invalidCmd
188
  81:UIMgr.c       **** } UIMgr_Cmd_t;
189
  82:UIMgr.c       **** 
190
  83:UIMgr.c       **** typedef enum
191
  84:UIMgr.c       **** {
192
  85:UIMgr.c       **** 	setRed,
193
  86:UIMgr.c       **** 	setGreen,
194
  87:UIMgr.c       **** 	setBlue
195
  88:UIMgr.c       **** } setColorState_t;
196
  89:UIMgr.c       **** 	
197
  90:UIMgr.c       **** 
198
  91:UIMgr.c       **** /*  Local Variables */
199
  92:UIMgr.c       **** static unsigned char charCount = 0; 
200
  93:UIMgr.c       **** static unsigned char charIndex = 0;
201
  94:UIMgr.c       **** static unsigned char asciiTokenBuffer[MAX_TOKEN_LENGTH+1]; /* +1 to ensure NULL at end */
202
  95:UIMgr.c       **** static unsigned char tokenCount = 0;
203
  96:UIMgr.c       **** static unsigned char tokenBuffer[MAX_TOKEN_COUNT];
204
  97:UIMgr.c       **** static UIMgr_Cmd_t receivedCmd = noCmd;
205
  98:UIMgr.c       **** static unsigned char AVRcamVersion[] = "AVRcam v1.4\r";
206
  99:UIMgr.c       **** 
207
 100:UIMgr.c       **** /*  Local Function Declaration */
208
 101:UIMgr.c       **** static unsigned char UIMgr_readRxFifo(void);
209
 102:UIMgr.c       **** static unsigned char UIMgr_readTxFifo(void);
210
 103:UIMgr.c       **** static unsigned char UIMgr_readRxFifo(void);
211
 104:UIMgr.c       **** static void UIMgr_sendNck(void);
212
 105:UIMgr.c       **** static void UIMgr_sendAck(void);
213
 106:UIMgr.c       **** static void UIMgr_convertTokenToCmd(void);
214
 107:UIMgr.c       **** static void UIMgr_convertTokenToValue(void);
215
 108:UIMgr.c       **** static void UIMgr_executeCmd(void);
216
 109:UIMgr.c       **** 
217
 110:UIMgr.c       **** /*  Extern Variables */
218
 111:UIMgr.c       **** unsigned char UIMgr_rxFifo[UI_MGR_RX_FIFO_SIZE];
219
 112:UIMgr.c       **** unsigned char UIMgr_rxFifoHead=0;
220
 113:UIMgr.c       **** unsigned char UIMgr_rxFifoTail=0;
221
 114:UIMgr.c       **** 
222
 115:UIMgr.c       **** unsigned char UIMgr_txFifo[UI_MGR_TX_FIFO_SIZE];
223
 116:UIMgr.c       **** unsigned char UIMgr_txFifoHead=0;
224
 117:UIMgr.c       **** unsigned char UIMgr_txFifoTail=0;
225
 118:UIMgr.c       **** 
226
 119:UIMgr.c       **** /*  Definitions */
227
 120:UIMgr.c       **** #define IS_DATA_IN_TX_FIFO() (!(UIMgr_txFifoHead == UIMgr_txFifoTail))
228
 121:UIMgr.c       **** #define IS_DATA_IN_RX_FIFO() (!(UIMgr_rxFifoHead == UIMgr_rxFifoTail))
229
 122:UIMgr.c       **** 
230
 123:UIMgr.c       **** /* MAX_EEPROM_WRITE_ATTEMPTS limits the number of writes that can be
231
 124:UIMgr.c       **** done to a particular EEPROM cell, so that it can't possible just 
232
 125:UIMgr.c       **** write to the same cell over and over */
233
 126:UIMgr.c       **** #define MAX_EEPROM_WRITE_ATTEMPTS 3
234
 127:UIMgr.c       **** 
235
 128:UIMgr.c       **** /***********************************************************
236
 129:UIMgr.c       **** 	Function Name: UIMgr_init
237
 130:UIMgr.c       **** 	Function Description: This function is responsible for
238
 131:UIMgr.c       **** 	initializing the UIMgr module.  It sets up the fifo
239
 132:UIMgr.c       **** 	used to hold incoming data, etc.
240
 133:UIMgr.c       **** 	Inputs:  none 
241
GAS LISTING /tmp/cc2L16GD.s 			page 5
242
 
243
 
244
 134:UIMgr.c       **** 	Outputs: none
245
 135:UIMgr.c       **** ***********************************************************/	
246
 136:UIMgr.c       **** void UIMgr_init(void)
247
 137:UIMgr.c       **** {
248
 138:UIMgr.c       **** 	memset(asciiTokenBuffer,0x00,MAX_TOKEN_LENGTH+1);
249
 139:UIMgr.c       **** 	memset(tokenBuffer,0x00,MAX_TOKEN_COUNT);
250
 140:UIMgr.c       **** 	memset(UIMgr_txFifo,0x00,UI_MGR_TX_FIFO_SIZE);
251
 141:UIMgr.c       **** 	memset(UIMgr_rxFifo,0x00,UI_MGR_RX_FIFO_SIZE);
252
 142:UIMgr.c       **** }
253
 143:UIMgr.c       **** 
254
 144:UIMgr.c       **** /***********************************************************
255
 145:UIMgr.c       **** 	Function Name: UIMgr_dispatchEvent
256
 146:UIMgr.c       **** 	Function Description: This function is responsible for
257
 147:UIMgr.c       **** 	processing events that pertain to the UIMgr.
258
 148:UIMgr.c       **** 	Inputs:  event - the generated event
259
 149:UIMgr.c       **** 	Outputs: none
260
 150:UIMgr.c       **** ***********************************************************/	
261
 151:UIMgr.c       **** void UIMgr_dispatchEvent(unsigned char event)
262
 152:UIMgr.c       **** {
263
 153:UIMgr.c       **** 	switch(event)
264
 154:UIMgr.c       **** 	{
265
 155:UIMgr.c       **** 		case EV_ACQUIRE_LINE_COMPLETE:
266
 156:UIMgr.c       **** 			UIMgr_transmitPendingData();
267
 157:UIMgr.c       **** 			break;
268
 158:UIMgr.c       **** 			
269
 159:UIMgr.c       **** 		case EV_SERIAL_DATA_RECEIVED:		
270
 160:UIMgr.c       **** 			UIMgr_processReceivedData();
271
 161:UIMgr.c       **** 			break;
272
 162:UIMgr.c       **** 			
273
 163:UIMgr.c       **** 		case EV_SERIAL_DATA_PENDING_TX:
274
 164:UIMgr.c       **** 			UIMgr_flushTxBuffer();
275
 165:UIMgr.c       **** 			break;
276
 166:UIMgr.c       **** 	}
277
 167:UIMgr.c       **** }
278
 168:UIMgr.c       **** /***********************************************************
279
 169:UIMgr.c       **** 	Function Name: UIMgr_transmitPendingData
280
 170:UIMgr.c       **** 	Function Description: This function is responsible for
281
 171:UIMgr.c       **** 	transmitting a single byte of data if data is waiting
282
 172:UIMgr.c       **** 	to be sent.  Otherwise, if nothing is waiting, the
283
 173:UIMgr.c       **** 	function just returns.
284
 174:UIMgr.c       **** 	Inputs:  none 
285
 175:UIMgr.c       **** 	Outputs: none
286
 176:UIMgr.c       **** ***********************************************************/
287
 177:UIMgr.c       **** void UIMgr_transmitPendingData(void)
288
 178:UIMgr.c       **** {
289
 179:UIMgr.c       **** 	if (IS_DATA_IN_TX_FIFO() == TRUE)
290
 180:UIMgr.c       **** 	{
291
 181:UIMgr.c       **** 		/* data is waiting...send a single byte */
292
 182:UIMgr.c       **** 		UartInt_txByte( UIMgr_readTxFifo() );
293
 183:UIMgr.c       **** 	}
294
 184:UIMgr.c       **** }
295
 185:UIMgr.c       **** /***********************************************************
296
 186:UIMgr.c       **** 	Function Name: UIMgr_processReceivedData
297
 187:UIMgr.c       **** 	Function Description: This function is responsible for
298
 188:UIMgr.c       **** 	parsing any serial data waiting in the rx fifo
299
 189:UIMgr.c       **** 	Inputs:  none 
300
 190:UIMgr.c       **** 	Outputs: none
301
GAS LISTING /tmp/cc2L16GD.s 			page 6
302
 
303
 
304
 191:UIMgr.c       **** ***********************************************************/
305
 192:UIMgr.c       **** void UIMgr_processReceivedData(void)
306
 193:UIMgr.c       **** {
307
 194:UIMgr.c       **** 	unsigned char tmpData = 0;
308
 195:UIMgr.c       **** 
309
 196:UIMgr.c       **** 	/* still need to add a mechanism to handle token counts 
310
 197:UIMgr.c       **** 	that are excessive!!! FIX ME!!! */
311
 198:UIMgr.c       ****     
312
 199:UIMgr.c       **** 	while(IS_DATA_IN_RX_FIFO() == TRUE)
313
 200:UIMgr.c       **** 	{
314
 201:UIMgr.c       **** 		tmpData = UIMgr_readRxFifo();
315
 202:UIMgr.c       **** 		if (tmpData == '\r') 
316
 203:UIMgr.c       **** 		{
317
 204:UIMgr.c       **** 			/* we have reached a token separator */
318
 205:UIMgr.c       **** 			if (tokenCount == 0)
319
 206:UIMgr.c       **** 			{
320
 207:UIMgr.c       **** 				/* convert the command */
321
 208:UIMgr.c       **** 				UIMgr_convertTokenToCmd();				
322
 209:UIMgr.c       **** 			}
323
 210:UIMgr.c       **** 			else
324
 211:UIMgr.c       **** 			{
325
 212:UIMgr.c       **** 				/* convert a value */
326
 213:UIMgr.c       **** 				UIMgr_convertTokenToValue();
327
 214:UIMgr.c       **** 				tokenCount++;
328
 215:UIMgr.c       **** 			}
329
 216:UIMgr.c       **** 			/* either way, it is time to try to process the received
330
 217:UIMgr.c       **** 			token list since we have reached the end of the cmd. */
331
 218:UIMgr.c       **** 			Utility_delay(100);
332
 219:UIMgr.c       **** 			if (receivedCmd == invalidCmd ||
333
 220:UIMgr.c       **** 			     receivedCmd == noCmd )
334
 221:UIMgr.c       **** 			{
335
 222:UIMgr.c       **** 				UIMgr_sendNck();
336
 223:UIMgr.c       **** 				PUBLISH_EVENT(EV_SERIAL_DATA_PENDING_TX);
337
 224:UIMgr.c       **** 			}
338
 225:UIMgr.c       **** 			else
339
 226:UIMgr.c       **** 			{
340
 227:UIMgr.c       **** 				UIMgr_sendAck();
341
 228:UIMgr.c       **** 				/* publish the serial data pending event, so it
342
 229:UIMgr.c       **** 				will push the ACK out before we execute the cmd */
343
 230:UIMgr.c       **** 				PUBLISH_EVENT(EV_SERIAL_DATA_PENDING_TX);
344
 231:UIMgr.c       **** 				UIMgr_executeCmd();
345
 232:UIMgr.c       **** 			}
346
 233:UIMgr.c       **** 			
347
 234:UIMgr.c       **** 			/* reset any necessary data */
348
 235:UIMgr.c       **** 			tokenCount = 0;
349
 236:UIMgr.c       **** 			memset(tokenBuffer,0x00,MAX_TOKEN_COUNT);
350
 237:UIMgr.c       **** 		}
351
 238:UIMgr.c       **** 		else if (tmpData == ' ')  /* space char */
352
 239:UIMgr.c       **** 		{
353
 240:UIMgr.c       **** 			/* the end of a token has been reached */
354
 241:UIMgr.c       **** 			if (tokenCount == 0)
355
 242:UIMgr.c       **** 			{
356
 243:UIMgr.c       **** 				UIMgr_convertTokenToCmd();
357
 244:UIMgr.c       **** 				tokenCount++;   /* check this...why is this being incremented here??? This
358
 245:UIMgr.c       ****                 means we have received a token, with tokenCount == 0, which means it is a
359
 246:UIMgr.c       ****                 command...why is this contributing to tokenCount?
360
 247:UIMgr.c       ****                 This might cause the set color map command to include too much data, since
361
GAS LISTING /tmp/cc2L16GD.s 			page 7
362
 
363
 
364
 248:UIMgr.c       ****                 it sets the color map based on tokenCount...CHECK*/
365
 249:UIMgr.c       **** 			}
366
 250:UIMgr.c       **** 			else
367
 251:UIMgr.c       **** 			{
368
 252:UIMgr.c       **** 				/* check to see if this token is going to push
369
 253:UIMgr.c       **** 				us over the limit...if so, abort the transaction */
370
 254:UIMgr.c       **** 				if (tokenCount+1 >= MAX_TOKEN_COUNT)
371
 255:UIMgr.c       **** 				{
372
 256:UIMgr.c       **** 					/* we received too many tokens, and 
373
 257:UIMgr.c       **** 					need to NCK this request, since its too
374
 258:UIMgr.c       **** 					large...reset everything...*/
375
 259:UIMgr.c       **** 					charCount=0;
376
 260:UIMgr.c       **** 					charIndex=0;
377
 261:UIMgr.c       **** 					tokenCount=0;
378
 262:UIMgr.c       **** 					receivedCmd = invalidCmd;
379
 263:UIMgr.c       **** 				}
380
 264:UIMgr.c       **** 				else
381
 265:UIMgr.c       **** 				{
382
 266:UIMgr.c       **** 					/* tokenCount is still in range...*/
383
 267:UIMgr.c       **** 					UIMgr_convertTokenToValue();
384
 268:UIMgr.c       **** 					tokenCount++;
385
 269:UIMgr.c       **** 				}
386
 270:UIMgr.c       **** 			}
387
 271:UIMgr.c       **** 		}
388
 272:UIMgr.c       **** 		else if ( (tmpData >= 'A' && tmpData <= 'Z') ||
389
 273:UIMgr.c       **** 				   (tmpData >= '0' && tmpData <= '9') )
390
 274:UIMgr.c       **** 		{
391
 275:UIMgr.c       **** 			/* a valid range of token was received */
392
 276:UIMgr.c       **** 			asciiTokenBuffer[charIndex] = tmpData;
393
 277:UIMgr.c       **** 			charCount++;
394
 278:UIMgr.c       **** 			charIndex++;
395
 279:UIMgr.c       **** 			if (charCount > MAX_TOKEN_LENGTH)
396
 280:UIMgr.c       **** 			{
397
 281:UIMgr.c       **** 				/* we have received a token that cannot be handled...
398
 282:UIMgr.c       **** 				set the received cmd to an invalid cmd, and wait
399
 283:UIMgr.c       **** 				for the \r to process it */
400
 284:UIMgr.c       **** 				receivedCmd = invalidCmd;
401
 285:UIMgr.c       **** 				charIndex = 0;  /* ...so we won't overwrite memory */
402
 286:UIMgr.c       **** 			}
403
 287:UIMgr.c       **** 		}
404
 288:UIMgr.c       **** 		else
405
 289:UIMgr.c       **** 		{
406
 290:UIMgr.c       **** 			/* an invalid character was received */
407
 291:UIMgr.c       **** 			receivedCmd = invalidCmd;
408
 292:UIMgr.c       **** 		}
409
 293:UIMgr.c       **** 	}  /* end while */
410
 294:UIMgr.c       **** 	
411
 295:UIMgr.c       **** 	asm volatile("clt"::);  /* clear out the T flag in case it wasn't
412
 296:UIMgr.c       **** 								 cleared already */
413
 297:UIMgr.c       **** }						
414
 298:UIMgr.c       **** 
415
 299:UIMgr.c       **** /***********************************************************
416
 300:UIMgr.c       **** 	Function Name: UIMgr_executeCmd
417
 301:UIMgr.c       **** 	Function Description: This function is responsible for
418
 302:UIMgr.c       **** 	executing whatever cmd is stored in the receivedCmd
419
 303:UIMgr.c       **** 	object.
420
 304:UIMgr.c       **** 	Inputs:  none 
421
GAS LISTING /tmp/cc2L16GD.s 			page 8
422
 
423
 
424
 305:UIMgr.c       **** 	Outputs: none
425
 306:UIMgr.c       **** ***********************************************************/
426
 307:UIMgr.c       **** static void UIMgr_executeCmd(void)
427
 308:UIMgr.c       **** {
428
 309:UIMgr.c       **** 	unsigned char i,eepromData, num_writes=0;
429
 310:UIMgr.c       **** 	unsigned char *pData;
430
 311:UIMgr.c       ****     unsigned char eeprom_write_succeeded = FALSE;
431
 312:UIMgr.c       **** #if	DEBUG_COLOR_MAP	
432
 313:UIMgr.c       **** 	unsigned char asciiBuffer[5];
433
 314:UIMgr.c       **** #endif
434
 315:UIMgr.c       **** 
435
 316:UIMgr.c       **** 	if (receivedCmd == pingCmd) 
436
 317:UIMgr.c       **** 	{
437
 318:UIMgr.c       **** 	}
438
 319:UIMgr.c       **** 	else if (receivedCmd == getVersionCmd)
439
 320:UIMgr.c       **** 	{
440
 321:UIMgr.c       **** 		pData = AVRcamVersion;
441
 322:UIMgr.c       **** 		while(*pData != 0)
442
 323:UIMgr.c       **** 		{		
443
 324:UIMgr.c       **** 			UIMgr_writeTxFifo(*pData++);
444
 325:UIMgr.c       **** 		}
445
 326:UIMgr.c       **** 	}		
446
 327:UIMgr.c       **** 	else if (receivedCmd == resetCameraCmd)
447
 328:UIMgr.c       **** 	{
448
 329:UIMgr.c       **** 		CamInt_resetCam();
449
 330:UIMgr.c       **** 	}
450
 331:UIMgr.c       **** 	else if (receivedCmd == dumpFrameCmd)
451
 332:UIMgr.c       **** 	{
452
 333:UIMgr.c       **** 		/* publish the event that will indicate that
453
 334:UIMgr.c       **** 		a request has come to dump a frame...this will
454
 335:UIMgr.c       **** 		be received by the FrameMgr, which will begin
455
 336:UIMgr.c       **** 		dumping the frame...a short delay is needed
456
 337:UIMgr.c       **** 		here to keep the Java demo app happy (sometimes
457
 338:UIMgr.c       **** 		it wouldn't be able to receive the serial data
458
 339:UIMgr.c       **** 		as quickly as AVRcam can provide it). */
459
 340:UIMgr.c       **** 		Utility_delay(100);
460
 341:UIMgr.c       **** 		PUBLISH_EVENT(EV_DUMP_FRAME);
461
 342:UIMgr.c       **** 	}
462
 343:UIMgr.c       **** 	else if (receivedCmd == setCameraRegsCmd)
463
 344:UIMgr.c       **** 	{
464
 345:UIMgr.c       **** 		/* we need to gather the tokens and
465
 346:UIMgr.c       **** 		build config cmds to be sent to the camera */
466
 347:UIMgr.c       **** 		for (i=1; i<tokenCount; i+=2)  /* starts at 1 since first token
467
 348:UIMgr.c       **** 											is the CR cmd */
468
 349:UIMgr.c       **** 		{
469
 350:UIMgr.c       **** 			CamConfig_setCamReg(tokenBuffer[i],tokenBuffer[i+1]);
470
 351:UIMgr.c       **** 		}
471
 352:UIMgr.c       **** 		CamConfig_sendFifoCmds();
472
 353:UIMgr.c       **** 	}
473
 354:UIMgr.c       **** 	else if (receivedCmd == enableTrackingCmd)
474
 355:UIMgr.c       **** 	{
475
 356:UIMgr.c       **** 		/* publish the event...again with a short delay */
476
 357:UIMgr.c       **** 		Utility_delay(100);
477
 358:UIMgr.c       **** 		PUBLISH_EVENT(EV_ENABLE_TRACKING);
478
 359:UIMgr.c       **** 	}
479
 360:UIMgr.c       **** 	else if (receivedCmd == disableTrackingCmd)
480
 361:UIMgr.c       **** 	{
481
GAS LISTING /tmp/cc2L16GD.s 			page 9
482
 
483
 
484
 362:UIMgr.c       **** 		PUBLISH_EVENT(EV_DISABLE_TRACKING);
485
 363:UIMgr.c       **** 	}
486
 364:UIMgr.c       **** 	else if (receivedCmd == setColorMapCmd)
487
 365:UIMgr.c       **** 	{
488
 366:UIMgr.c       **** 		/* copy the received tokens into the color map */
489
 367:UIMgr.c       **** 		for (i=0; i<tokenCount; i++)
490
 368:UIMgr.c       **** 		{
491
 369:UIMgr.c       **** 			colorMap[i] = tokenBuffer[i+1];
492
 370:UIMgr.c       ****             
493
 371:UIMgr.c       ****             /* write each colorMap byte to EEPROM, but only those
494
 372:UIMgr.c       ****             that changed...this will help reduce wear on the EEPROM */
495
 373:UIMgr.c       ****             eepromData = eeprom_read_byte( (unsigned char*)(i+1));
496
 374:UIMgr.c       ****             if (eepromData != colorMap[i])
497
 375:UIMgr.c       ****             {
498
 376:UIMgr.c       ****                 /* need to actually perform the write because the
499
 377:UIMgr.c       ****                 data in eeprom is different than the current colorMap */
500
 378:UIMgr.c       ****                 eeprom_write_succeeded = FALSE;
501
 379:UIMgr.c       ****                 while(eeprom_write_succeeded == FALSE && num_writes < MAX_EEPROM_WRITE_ATTEMPTS)
502
 380:UIMgr.c       ****                 {
503
 381:UIMgr.c       ****                     eeprom_write_byte((unsigned char*)(i+1),colorMap[i]);
504
 382:UIMgr.c       ****                     num_writes++;
505
 383:UIMgr.c       ****                     eepromData = eeprom_read_byte( (unsigned char*)(i+1));
506
 384:UIMgr.c       ****                     if (eepromData == colorMap[i])
507
 385:UIMgr.c       ****                     {
508
 386:UIMgr.c       ****                         eeprom_write_succeeded = TRUE;
509
 387:UIMgr.c       ****                     }
510
 388:UIMgr.c       ****                 }
511
 389:UIMgr.c       ****                 num_writes = 0;
512
 390:UIMgr.c       ****             }
513
 391:UIMgr.c       **** 		}
514
 392:UIMgr.c       **** 
515
 393:UIMgr.c       **** #if	DEBUG_COLOR_MAP			
516
 394:UIMgr.c       ****             			/* for debugging...send out the entire color map */
517
 395:UIMgr.c       ****         UIMgr_txBuffer("\r\n",2);
518
 396:UIMgr.c       **** 		for (i=0; i<NUM_ELEMENTS_IN_COLOR_MAP; i++)
519
 397:UIMgr.c       **** 		{
520
 398:UIMgr.c       **** 			memset(asciiBuffer,0x00,5);
521
 399:UIMgr.c       **** 			itoa(colorMap[i],asciiBuffer,10);
522
 400:UIMgr.c       **** 			UIMgr_txBuffer(asciiBuffer,3);
523
 401:UIMgr.c       **** 			UIMgr_txBuffer(" ",1);
524
 402:UIMgr.c       **** 			if (i==15 || i == 31)
525
 403:UIMgr.c       **** 			{
526
 404:UIMgr.c       **** 				/* break up the output */
527
 405:UIMgr.c       **** 				UIMgr_txBuffer("\r\n",2);
528
 406:UIMgr.c       **** 			}
529
 407:UIMgr.c       **** 		}
530
 408:UIMgr.c       **** #endif			
531
 409:UIMgr.c       **** 	}
532
 410:UIMgr.c       **** }
533
 411:UIMgr.c       **** 
534
 412:UIMgr.c       **** /***********************************************************
535
 413:UIMgr.c       **** 	Function Name: UIMgr_convertTokenToValue
536
 414:UIMgr.c       **** 	Function Description: This function is responsible for
537
 415:UIMgr.c       **** 	converting a received token to a hex value It will
538
 416:UIMgr.c       **** 	access the asciiTokenBuffer directly, and store the
539
 417:UIMgr.c       **** 	result in the appropriate token buffer.
540
 418:UIMgr.c       **** 	Inputs:  none 
541
GAS LISTING /tmp/cc2L16GD.s 			page 10
542
 
543
 
544
 419:UIMgr.c       **** 	Outputs: none
545
 420:UIMgr.c       **** ***********************************************************/	
546
 421:UIMgr.c       **** static void UIMgr_convertTokenToValue(void)
547
 422:UIMgr.c       **** {
548
 423:UIMgr.c       **** 	unsigned int newValue;
549
 424:UIMgr.c       **** 	
550
 425:UIMgr.c       **** 	newValue = atoi(asciiTokenBuffer);
551
 426:UIMgr.c       **** 	if (newValue > 255)
552
 427:UIMgr.c       **** 	{
553
 428:UIMgr.c       **** 		/* the value is too large */
554
 429:UIMgr.c       **** 		receivedCmd = invalidCmd;
555
 430:UIMgr.c       **** 		tokenBuffer[tokenCount] = 0xFF;  /* to indicate an error */
556
 431:UIMgr.c       **** 	}
557
 432:UIMgr.c       **** 	else
558
 433:UIMgr.c       **** 	{
559
 434:UIMgr.c       **** 		/* copy the value into the tokenBuffer */
560
 435:UIMgr.c       **** 		tokenBuffer[tokenCount] = newValue;
561
 436:UIMgr.c       **** 	}
562
 437:UIMgr.c       **** 	memset(asciiTokenBuffer,0x00,MAX_TOKEN_LENGTH);
563
 438:UIMgr.c       **** 	charIndex = 0;
564
 439:UIMgr.c       **** 	charCount = 0;
565
 440:UIMgr.c       **** }
566
 441:UIMgr.c       **** /***********************************************************
567
 442:UIMgr.c       **** 	Function Name: UIMgr_convertTokenToCmd
568
 443:UIMgr.c       **** 	Function Description: This function is responsible for
569
 444:UIMgr.c       **** 	parsing a received 2-character command.  It will
570
 445:UIMgr.c       **** 	access the asciiTokenBuffer directly.
571
 446:UIMgr.c       **** 	Inputs:  none 
572
 447:UIMgr.c       **** 	Outputs: none
573
 448:UIMgr.c       **** ***********************************************************/	
574
 449:UIMgr.c       **** static void UIMgr_convertTokenToCmd(void)
575
 450:UIMgr.c       **** {
576
 451:UIMgr.c       **** 	if ( (asciiTokenBuffer[0] == 'P') &&
577
 452:UIMgr.c       **** 		 (asciiTokenBuffer[1] == 'G') )
578
 453:UIMgr.c       **** 	{
579
 454:UIMgr.c       **** 		/* we got a "ping" command...but we still need to see
580
 455:UIMgr.c       **** 		if we are going to get the \r */
581
 456:UIMgr.c       **** 		receivedCmd = pingCmd;
582
 457:UIMgr.c       **** 	}
583
 458:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'G') &&
584
 459:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'V') )
585
 460:UIMgr.c       **** 	{
586
 461:UIMgr.c       **** 		/* we got the "get version" command */
587
 462:UIMgr.c       **** 		receivedCmd = getVersionCmd;
588
 463:UIMgr.c       **** 	}
589
 464:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'D') &&
590
 465:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'F') )
591
 466:UIMgr.c       **** 	{
592
 467:UIMgr.c       **** 		/* we should go into frame dump mode */
593
 468:UIMgr.c       **** 		receivedCmd = dumpFrameCmd;	
594
 469:UIMgr.c       **** 	}
595
 470:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'C') &&
596
 471:UIMgr.c       **** 	           (asciiTokenBuffer[1] == 'R') )
597
 472:UIMgr.c       **** 	{
598
 473:UIMgr.c       **** 		/* the user wants to set registers in the OV6620 */
599
 474:UIMgr.c       **** 		receivedCmd = setCameraRegsCmd;
600
 475:UIMgr.c       **** 	}
601
GAS LISTING /tmp/cc2L16GD.s 			page 11
602
 
603
 
604
 476:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'E') &&
605
 477:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'T') )
606
 478:UIMgr.c       **** 	{
607
 479:UIMgr.c       **** 		/* the user wants to enable tracking */
608
 480:UIMgr.c       **** 		receivedCmd = enableTrackingCmd;
609
 481:UIMgr.c       **** 	}
610
 482:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'S') &&
611
 483:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'M') )
612
 484:UIMgr.c       **** 	{
613
 485:UIMgr.c       **** 		/* the user wants to set the color map */
614
 486:UIMgr.c       **** 		receivedCmd = setColorMapCmd;
615
 487:UIMgr.c       **** 	}
616
 488:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'D') &&
617
 489:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'T') )
618
 490:UIMgr.c       **** 	{
619
 491:UIMgr.c       **** 		receivedCmd = disableTrackingCmd;
620
 492:UIMgr.c       **** 	}
621
 493:UIMgr.c       **** 	else if ( (asciiTokenBuffer[0] == 'R') &&
622
 494:UIMgr.c       **** 			   (asciiTokenBuffer[1] == 'S') )
623
 495:UIMgr.c       **** 	{
624
 496:UIMgr.c       **** 		receivedCmd = resetCameraCmd;
625
 497:UIMgr.c       **** 	}
626
 498:UIMgr.c       **** 	else
627
 499:UIMgr.c       **** 	{
628
 500:UIMgr.c       **** 		/* don't recognize the cmd */
629
 501:UIMgr.c       **** 		receivedCmd = invalidCmd;
630
 502:UIMgr.c       **** 	}
631
 503:UIMgr.c       **** 	memset(asciiTokenBuffer,0x00,MAX_TOKEN_LENGTH);
632
 504:UIMgr.c       **** 	charIndex = 0;
633
 505:UIMgr.c       **** 	charCount = 0;
634
 506:UIMgr.c       **** }
635
 507:UIMgr.c       **** /***********************************************************
636
 508:UIMgr.c       **** 	Function Name: UIMgr_sendAck
637
 509:UIMgr.c       **** 	Function Description: This function is responsible for
638
 510:UIMgr.c       **** 	queuing up an ACK to be sent to the user.
639
 511:UIMgr.c       **** 	Inputs:  none 
640
 512:UIMgr.c       **** 	Outputs: none
641
 513:UIMgr.c       **** ***********************************************************/	
642
 514:UIMgr.c       **** static void UIMgr_sendAck(void)
643
 515:UIMgr.c       **** {
644
 516:UIMgr.c       **** 	UIMgr_writeTxFifo('A');
645
 517:UIMgr.c       **** 	UIMgr_writeTxFifo('C');
646
 518:UIMgr.c       **** 	UIMgr_writeTxFifo('K');
647
 519:UIMgr.c       **** 	UIMgr_writeTxFifo('\r');
648
 520:UIMgr.c       **** }
649
 521:UIMgr.c       **** 
650
 522:UIMgr.c       **** /***********************************************************
651
 523:UIMgr.c       **** 	Function Name: UIMgr_sendNck
652
 524:UIMgr.c       **** 	Function Description: This function is responsible for
653
 525:UIMgr.c       **** 	queueing up an NCK to be sent to the user.
654
 526:UIMgr.c       **** 	Inputs:  none 
655
 527:UIMgr.c       **** 	Outputs: none
656
 528:UIMgr.c       **** ***********************************************************/	
657
 529:UIMgr.c       **** static void UIMgr_sendNck(void)
658
 530:UIMgr.c       **** {
659
 531:UIMgr.c       **** 		UIMgr_writeTxFifo('N');
660
 532:UIMgr.c       **** 		UIMgr_writeTxFifo('C');
661
GAS LISTING /tmp/cc2L16GD.s 			page 12
662
 
663
 
664
 533:UIMgr.c       **** 		UIMgr_writeTxFifo('K');
665
 534:UIMgr.c       **** 		UIMgr_writeTxFifo('\r');
666
 535:UIMgr.c       **** }
667
 536:UIMgr.c       **** 
668
 537:UIMgr.c       **** 
669
 538:UIMgr.c       **** /***********************************************************
670
 539:UIMgr.c       **** 	Function Name: UIMgr_writeBufferToTxFifo
671
 540:UIMgr.c       **** 	Function Description: This function is responsible for
672
 541:UIMgr.c       **** 	placing "length" bytes into the tx FIFO.
673
 542:UIMgr.c       **** 	Inputs:  pData -  a pointer to the data to send
674
 543:UIMgr.c       **** 	         length - the number of bytes to send
675
 544:UIMgr.c       **** 	Outputs: none
676
 545:UIMgr.c       **** ***********************************************************/	
677
 546:UIMgr.c       **** void UIMgr_writeBufferToTxFifo(unsigned char *pData, unsigned char length)
678
 547:UIMgr.c       **** {
679
  96               		.stabn	68,0,547,.LM0-UIMgr_writeBufferToTxFifo
680
  97               	.LM0:
681
  98               	/* prologue: frame size=0 */
682
  99               	/* prologue end (size=0) */
683
 100 0000 DC01      		movw r26,r24
684
 101 0002 862F      		mov r24,r22
685
 548:UIMgr.c       **** 	unsigned char tmpHead;
686
 549:UIMgr.c       **** 	if (length == 0)
687
 102               		.stabn	68,0,549,.LM1-UIMgr_writeBufferToTxFifo
688
 103               	.LM1:
689
 104 0004 6623      		tst r22
690
 105 0006 C9F0      		breq .L7
691
 550:UIMgr.c       **** 	{
692
 551:UIMgr.c       **** 		return;
693
 552:UIMgr.c       **** 	}
694
 553:UIMgr.c       **** 	
695
 554:UIMgr.c       **** 	DISABLE_INTS();
696
 106               		.stabn	68,0,554,.LM2-UIMgr_writeBufferToTxFifo
697
 107               	.LM2:
698
 108               	/* #APP */
699
 109 0008 F894      		cli
700
 555:UIMgr.c       **** 	while(length-- != 0)
701
 110               		.stabn	68,0,555,.LM3-UIMgr_writeBufferToTxFifo
702
 111               	.LM3:
703
 112               	/* #NOAPP */
704
 113 000a 6150      		subi r22,lo8(-(-1))
705
 114 000c 6F3F      		cpi r22,lo8(-1)
706
 115 000e A1F0      		breq .L4
707
 116 0010 262F      		mov r18,r22
708
 117 0012 40E0      		ldi r20,lo8(UIMgr_txFifo)
709
 118 0014 50E0      		ldi r21,hi8(UIMgr_txFifo)
710
 119 0016 861B      		sub r24,r22
711
 120 0018 682F      		mov r22,r24
712
 121 001a 6250      		subi r22,lo8(-(-2))
713
 122               	.L6:
714
 556:UIMgr.c       **** 	{
715
 557:UIMgr.c       **** 		UIMgr_txFifo[UIMgr_txFifoHead] = *pData++;
716
 123               		.stabn	68,0,557,.LM4-UIMgr_writeBufferToTxFifo
717
 124               	.LM4:
718
 125 001c 8091 0000 		lds r24,UIMgr_txFifoHead
719
 126 0020 FA01      		movw r30,r20
720
 127 0022 E80F      		add r30,r24
721
GAS LISTING /tmp/cc2L16GD.s 			page 13
722
 
723
 
724
 128 0024 F11D      		adc r31,__zero_reg__
725
 129 0026 9D91      		ld r25,X+
726
 130 0028 9083      		st Z,r25
727
 558:UIMgr.c       **** 	
728
 559:UIMgr.c       **** 		/* now move the head up */
729
 560:UIMgr.c       **** 		tmpHead = (UIMgr_txFifoHead + 1) & (UI_MGR_TX_FIFO_MASK);
730
 561:UIMgr.c       **** 		UIMgr_txFifoHead = tmpHead;
731
 131               		.stabn	68,0,561,.LM5-UIMgr_writeBufferToTxFifo
732
 132               	.LM5:
733
 133 002a 8F5F      		subi r24,lo8(-(1))
734
 134 002c 8F73      		andi r24,lo8(63)
735
 135 002e 8093 0000 		sts UIMgr_txFifoHead,r24
736
 136               		.stabn	68,0,555,.LM6-UIMgr_writeBufferToTxFifo
737
 137               	.LM6:
738
 138 0032 2150      		subi r18,lo8(-(-1))
739
 139 0034 6217      		cp r22,r18
740
 140 0036 91F7      		brne .L6
741
 141               	.L4:
742
 562:UIMgr.c       **** 	}
743
 563:UIMgr.c       **** 	ENABLE_INTS();
744
 142               		.stabn	68,0,563,.LM7-UIMgr_writeBufferToTxFifo
745
 143               	.LM7:
746
 144               	/* #APP */
747
 145 0038 7894      		sei
748
 146               	/* #NOAPP */
749
 147               	.L7:
750
 148 003a 0895      		ret
751
 149               	/* epilogue: frame size=0 */
752
 150               	/* epilogue: noreturn */
753
 151               	/* epilogue end (size=0) */
754
 152               	/* function UIMgr_writeBufferToTxFifo size 32 (32) */
755
 153               		.size	UIMgr_writeBufferToTxFifo, .-UIMgr_writeBufferToTxFifo
756
 154               	.Lscope0:
757
 155               		.stabs	"",36,0,0,.Lscope0-UIMgr_writeBufferToTxFifo
758
 156               		.stabd	78,0,0
759
 157               		.stabs	"UIMgr_readTxFifo:f(0,11)",36,0,630,UIMgr_readTxFifo
760
 158               		.type	UIMgr_readTxFifo, @function
761
 159               	UIMgr_readTxFifo:
762
 160               		.stabd	46,0,0
763
 564:UIMgr.c       **** }
764
 565:UIMgr.c       **** 
765
 566:UIMgr.c       **** /***********************************************************
766
 567:UIMgr.c       **** 	Function Name: UIMgr_txBuffer
767
 568:UIMgr.c       **** 	Function Description: This function is responsible for
768
 569:UIMgr.c       **** 	sending 'length' bytes out using the UartInterface 
769
 570:UIMgr.c       **** 	module.
770
 571:UIMgr.c       **** 	Inputs:  pData -  a pointer to the data to send
771
 572:UIMgr.c       **** 	         length - the number of bytes to send
772
 573:UIMgr.c       **** 	Outputs: none
773
 574:UIMgr.c       **** ***********************************************************/	
774
 575:UIMgr.c       **** void UIMgr_txBuffer(unsigned char *pData, unsigned char length)
775
 576:UIMgr.c       **** {
776
 577:UIMgr.c       **** 	while(length-- != 0)
777
 578:UIMgr.c       **** 	{
778
 579:UIMgr.c       **** 		UartInt_txByte(*pData++); 
779
 580:UIMgr.c       **** 	}
780
 581:UIMgr.c       **** }
781
GAS LISTING /tmp/cc2L16GD.s 			page 14
782
 
783
 
784
 582:UIMgr.c       **** 
785
 583:UIMgr.c       **** /***********************************************************
786
 584:UIMgr.c       **** 	Function Name: UIMgr_flushTxBuffer
787
 585:UIMgr.c       **** 	Function Description: This function is responsible for
788
 586:UIMgr.c       **** 	sending all data currently in the serial tx buffer
789
 587:UIMgr.c       **** 	to the user.
790
 588:UIMgr.c       **** 	Inputs:  none
791
 589:UIMgr.c       **** 	Outputs: none
792
 590:UIMgr.c       **** ***********************************************************/	
793
 591:UIMgr.c       **** void UIMgr_flushTxBuffer(void)
794
 592:UIMgr.c       **** {
795
 593:UIMgr.c       **** 	while(IS_DATA_IN_TX_FIFO() == TRUE)
796
 594:UIMgr.c       **** 	{
797
 595:UIMgr.c       **** 		UartInt_txByte(UIMgr_readTxFifo() );
798
 596:UIMgr.c       **** 	}
799
 597:UIMgr.c       **** }
800
 598:UIMgr.c       **** 
801
 599:UIMgr.c       **** /***********************************************************
802
 600:UIMgr.c       **** 	Function Name: UIMgr_readRxFifo
803
 601:UIMgr.c       **** 	Function Description: This function is responsible for
804
 602:UIMgr.c       **** 	reading a single byte of data from the rx fifo, and
805
 603:UIMgr.c       **** 	updating the appropriate pointers.
806
 604:UIMgr.c       **** 	Inputs:  none 
807
 605:UIMgr.c       **** 	Outputs: unsigned char-the data read
808
 606:UIMgr.c       **** ***********************************************************/	
809
 607:UIMgr.c       **** static unsigned char UIMgr_readRxFifo(void)
810
 608:UIMgr.c       **** {
811
 609:UIMgr.c       **** 	unsigned char dataByte, tmpTail;
812
 610:UIMgr.c       **** 	
813
 611:UIMgr.c       **** 	/* just return the current tail from the rx fifo */
814
 612:UIMgr.c       **** 	DISABLE_INTS();
815
 613:UIMgr.c       **** 	dataByte = UIMgr_rxFifo[UIMgr_rxFifoTail];	
816
 614:UIMgr.c       **** 	tmpTail = (UIMgr_rxFifoTail+1) & (UI_MGR_RX_FIFO_MASK);
817
 615:UIMgr.c       **** 	UIMgr_rxFifoTail = tmpTail;
818
 616:UIMgr.c       **** 	ENABLE_INTS();
819
 617:UIMgr.c       **** 	
820
 618:UIMgr.c       **** 	return(dataByte);
821
 619:UIMgr.c       **** }
822
 620:UIMgr.c       **** 
823
 621:UIMgr.c       **** /***********************************************************
824
 622:UIMgr.c       **** 	Function Name: UIMgr_readTxFifo
825
 623:UIMgr.c       **** 	Function Description: This function is responsible for
826
 624:UIMgr.c       **** 	reading a single byte of data from the tx fifo, and
827
 625:UIMgr.c       **** 	updating the appropriate pointers.
828
 626:UIMgr.c       **** 	Inputs:  none 
829
 627:UIMgr.c       **** 	Outputs: unsigned char-the data read
830
 628:UIMgr.c       **** ***********************************************************/	
831
 629:UIMgr.c       **** static unsigned char UIMgr_readTxFifo(void)
832
 630:UIMgr.c       **** {
833
 161               		.stabn	68,0,630,.LM8-UIMgr_readTxFifo
834
 162               	.LM8:
835
 163               	/* prologue: frame size=0 */
836
 164               	/* prologue end (size=0) */
837
 631:UIMgr.c       **** 	unsigned char dataByte, tmpTail;
838
 632:UIMgr.c       **** 	
839
 633:UIMgr.c       **** 	/* just return the current tail from the tx fifo */
840
 634:UIMgr.c       **** 	DISABLE_INTS();
841
GAS LISTING /tmp/cc2L16GD.s 			page 15
842
 
843
 
844
 165               		.stabn	68,0,634,.LM9-UIMgr_readTxFifo
845
 166               	.LM9:
846
 167               	/* #APP */
847
 168 003c F894      		cli
848
 635:UIMgr.c       **** 	dataByte = UIMgr_txFifo[UIMgr_txFifoTail];	
849
 169               		.stabn	68,0,635,.LM10-UIMgr_readTxFifo
850
 170               	.LM10:
851
 171               	/* #NOAPP */
852
 172 003e 9091 0000 		lds r25,UIMgr_txFifoTail
853
 173 0042 E0E0      		ldi r30,lo8(UIMgr_txFifo)
854
 174 0044 F0E0      		ldi r31,hi8(UIMgr_txFifo)
855
 175 0046 E90F      		add r30,r25
856
 176 0048 F11D      		adc r31,__zero_reg__
857
 177 004a 8081      		ld r24,Z
858
 636:UIMgr.c       **** 	tmpTail = (UIMgr_txFifoTail+1) & (UI_MGR_TX_FIFO_MASK);
859
 637:UIMgr.c       **** 	UIMgr_txFifoTail = tmpTail;
860
 178               		.stabn	68,0,637,.LM11-UIMgr_readTxFifo
861
 179               	.LM11:
862
 180 004c 9F5F      		subi r25,lo8(-(1))
863
 181 004e 9F73      		andi r25,lo8(63)
864
 182 0050 9093 0000 		sts UIMgr_txFifoTail,r25
865
 638:UIMgr.c       **** 	ENABLE_INTS();
866
 183               		.stabn	68,0,638,.LM12-UIMgr_readTxFifo
867
 184               	.LM12:
868
 185               	/* #APP */
869
 186 0054 7894      		sei
870
 639:UIMgr.c       **** 	
871
 640:UIMgr.c       **** 	return(dataByte);
872
 641:UIMgr.c       **** }
873
 187               		.stabn	68,0,641,.LM13-UIMgr_readTxFifo
874
 188               	.LM13:
875
 189               	/* #NOAPP */
876
 190 0056 9927      		clr r25
877
 191               	/* epilogue: frame size=0 */
878
 192 0058 0895      		ret
879
 193               	/* epilogue end (size=1) */
880
 194               	/* function UIMgr_readTxFifo size 17 (16) */
881
 195               		.size	UIMgr_readTxFifo, .-UIMgr_readTxFifo
882
 196               		.stabs	"dataByte:r(0,11)",64,0,631,24
883
 197               		.stabn	192,0,0,UIMgr_readTxFifo-UIMgr_readTxFifo
884
 198               		.stabn	224,0,0,.Lscope1-UIMgr_readTxFifo
885
 199               	.Lscope1:
886
 200               		.stabs	"",36,0,0,.Lscope1-UIMgr_readTxFifo
887
 201               		.stabd	78,0,0
888
 202               		.stabs	"UIMgr_writeTxFifo:F(0,15)",36,0,652,UIMgr_writeTxFifo
889
 203               		.stabs	"data:P(0,11)",64,0,651,24
890
 204               	.global	UIMgr_writeTxFifo
891
 205               		.type	UIMgr_writeTxFifo, @function
892
 206               	UIMgr_writeTxFifo:
893
 207               		.stabd	46,0,0
894
 642:UIMgr.c       **** 
895
 643:UIMgr.c       **** /***********************************************************
896
 644:UIMgr.c       **** 	Function Name: UIMgr_writeTxFifo
897
 645:UIMgr.c       **** 	Function Description: This function is responsible for
898
 646:UIMgr.c       **** 	writing a single byte to the TxFifo and
899
 647:UIMgr.c       **** 	updating the appropriate pointers.
900
 648:UIMgr.c       **** 	Inputs:  data - the byte to write to the Fifo 
901
GAS LISTING /tmp/cc2L16GD.s 			page 16
902
 
903
 
904
 649:UIMgr.c       **** 	Outputs: none
905
 650:UIMgr.c       **** ***********************************************************/	
906
 651:UIMgr.c       **** void UIMgr_writeTxFifo(unsigned char data)
907
 652:UIMgr.c       **** {
908
 208               		.stabn	68,0,652,.LM14-UIMgr_writeTxFifo
909
 209               	.LM14:
910
 210               	/* prologue: frame size=0 */
911
 211               	/* prologue end (size=0) */
912
 653:UIMgr.c       **** 	unsigned char tmpHead;
913
 654:UIMgr.c       **** 
914
 655:UIMgr.c       **** 	DISABLE_INTS();
915
 212               		.stabn	68,0,655,.LM15-UIMgr_writeTxFifo
916
 213               	.LM15:
917
 214               	/* #APP */
918
 215 005a F894      		cli
919
 656:UIMgr.c       **** 	UIMgr_txFifo[UIMgr_txFifoHead] = data;
920
 216               		.stabn	68,0,656,.LM16-UIMgr_writeTxFifo
921
 217               	.LM16:
922
 218               	/* #NOAPP */
923
 219 005c 9091 0000 		lds r25,UIMgr_txFifoHead
924
 220 0060 E0E0      		ldi r30,lo8(UIMgr_txFifo)
925
 221 0062 F0E0      		ldi r31,hi8(UIMgr_txFifo)
926
 222 0064 E90F      		add r30,r25
927
 223 0066 F11D      		adc r31,__zero_reg__
928
 224 0068 8083      		st Z,r24
929
 657:UIMgr.c       **** 
930
 658:UIMgr.c       ****     /* now move the head up */
931
 659:UIMgr.c       ****     tmpHead = (UIMgr_txFifoHead + 1) & (UI_MGR_TX_FIFO_MASK);
932
 660:UIMgr.c       ****     UIMgr_txFifoHead = tmpHead;
933
 225               		.stabn	68,0,660,.LM17-UIMgr_writeTxFifo
934
 226               	.LM17:
935
 227 006a 9F5F      		subi r25,lo8(-(1))
936
 228 006c 9F73      		andi r25,lo8(63)
937
 229 006e 9093 0000 		sts UIMgr_txFifoHead,r25
938
 661:UIMgr.c       **** 	ENABLE_INTS();
939
 230               		.stabn	68,0,661,.LM18-UIMgr_writeTxFifo
940
 231               	.LM18:
941
 232               	/* #APP */
942
 233 0072 7894      		sei
943
 234               	/* #NOAPP */
944
 235               	/* epilogue: frame size=0 */
945
 236 0074 0895      		ret
946
 237               	/* epilogue end (size=1) */
947
 238               	/* function UIMgr_writeTxFifo size 16 (15) */
948
 239               		.size	UIMgr_writeTxFifo, .-UIMgr_writeTxFifo
949
 240               	.Lscope2:
950
 241               		.stabs	"",36,0,0,.Lscope2-UIMgr_writeTxFifo
951
 242               		.stabd	78,0,0
952
 243               		.stabs	"UIMgr_flushTxBuffer:F(0,15)",36,0,592,UIMgr_flushTxBuffer
953
 244               	.global	UIMgr_flushTxBuffer
954
 245               		.type	UIMgr_flushTxBuffer, @function
955
 246               	UIMgr_flushTxBuffer:
956
 247               		.stabd	46,0,0
957
 248               		.stabn	68,0,592,.LM19-UIMgr_flushTxBuffer
958
 249               	.LM19:
959
 250               	/* prologue: frame size=0 */
960
 251               	/* prologue end (size=0) */
961
GAS LISTING /tmp/cc2L16GD.s 			page 17
962
 
963
 
964
 252               		.stabn	68,0,593,.LM20-UIMgr_flushTxBuffer
965
 253               	.LM20:
966
 254 0076 9091 0000 		lds r25,UIMgr_txFifoHead
967
 255 007a 8091 0000 		lds r24,UIMgr_txFifoTail
968
 256 007e 9817      		cp r25,r24
969
 257 0080 41F0      		breq .L16
970
 258               	.L17:
971
 259               		.stabn	68,0,595,.LM21-UIMgr_flushTxBuffer
972
 260               	.LM21:
973
 261 0082 DCDF      		rcall UIMgr_readTxFifo
974
 262 0084 00D0      		rcall UartInt_txByte
975
 263               		.stabn	68,0,593,.LM22-UIMgr_flushTxBuffer
976
 264               	.LM22:
977
 265 0086 9091 0000 		lds r25,UIMgr_txFifoHead
978
 266 008a 8091 0000 		lds r24,UIMgr_txFifoTail
979
 267 008e 9817      		cp r25,r24
980
 268 0090 C1F7      		brne .L17
981
 269               	.L16:
982
 270 0092 0895      		ret
983
 271               	/* epilogue: frame size=0 */
984
 272               	/* epilogue: noreturn */
985
 273               	/* epilogue end (size=0) */
986
 274               	/* function UIMgr_flushTxBuffer size 15 (15) */
987
 275               		.size	UIMgr_flushTxBuffer, .-UIMgr_flushTxBuffer
988
 276               	.Lscope3:
989
 277               		.stabs	"",36,0,0,.Lscope3-UIMgr_flushTxBuffer
990
 278               		.stabd	78,0,0
991
 279               		.stabs	"UIMgr_txBuffer:F(0,15)",36,0,576,UIMgr_txBuffer
992
 280               		.stabs	"pData:P(0,20)",64,0,575,28
993
 281               		.stabs	"length:P(0,11)",64,0,575,24
994
 282               	.global	UIMgr_txBuffer
995
 283               		.type	UIMgr_txBuffer, @function
996
 284               	UIMgr_txBuffer:
997
 285               		.stabd	46,0,0
998
 286               		.stabn	68,0,576,.LM23-UIMgr_txBuffer
999
 287               	.LM23:
1000
 288               	/* prologue: frame size=0 */
1001
 289 0094 0F93      		push r16
1002
 290 0096 1F93      		push r17
1003
 291 0098 CF93      		push r28
1004
 292 009a DF93      		push r29
1005
 293               	/* prologue end (size=4) */
1006
 294 009c EC01      		movw r28,r24
1007
 295 009e 862F      		mov r24,r22
1008
 296               		.stabn	68,0,577,.LM24-UIMgr_txBuffer
1009
 297               	.LM24:
1010
 298 00a0 6150      		subi r22,lo8(-(-1))
1011
 299 00a2 6F3F      		cpi r22,lo8(-1)
1012
 300 00a4 49F0      		breq .L23
1013
 301               		.stabn	68,0,577,.LM25-UIMgr_txBuffer
1014
 302               	.LM25:
1015
 303 00a6 162F      		mov r17,r22
1016
 304 00a8 861B      		sub r24,r22
1017
 305 00aa 082F      		mov r16,r24
1018
 306 00ac 0250      		subi r16,lo8(-(-2))
1019
 307               	.L22:
1020
 308               		.stabn	68,0,579,.LM26-UIMgr_txBuffer
1021
GAS LISTING /tmp/cc2L16GD.s 			page 18
1022
 
1023
 
1024
 309               	.LM26:
1025
 310 00ae 8991      		ld r24,Y+
1026
 311 00b0 00D0      		rcall UartInt_txByte
1027
 312               		.stabn	68,0,577,.LM27-UIMgr_txBuffer
1028
 313               	.LM27:
1029
 314 00b2 1150      		subi r17,lo8(-(-1))
1030
 315 00b4 0117      		cp r16,r17
1031
 316 00b6 D9F7      		brne .L22
1032
 317               	.L23:
1033
 318               	/* epilogue: frame size=0 */
1034
 319 00b8 DF91      		pop r29
1035
 320 00ba CF91      		pop r28
1036
 321 00bc 1F91      		pop r17
1037
 322 00be 0F91      		pop r16
1038
 323 00c0 0895      		ret
1039
 324               	/* epilogue end (size=5) */
1040
 325               	/* function UIMgr_txBuffer size 23 (14) */
1041
 326               		.size	UIMgr_txBuffer, .-UIMgr_txBuffer
1042
 327               	.Lscope4:
1043
 328               		.stabs	"",36,0,0,.Lscope4-UIMgr_txBuffer
1044
 329               		.stabd	78,0,0
1045
 330               		.stabs	"UIMgr_transmitPendingData:F(0,15)",36,0,178,UIMgr_transmitPendingData
1046
 331               	.global	UIMgr_transmitPendingData
1047
 332               		.type	UIMgr_transmitPendingData, @function
1048
 333               	UIMgr_transmitPendingData:
1049
 334               		.stabd	46,0,0
1050
 335               		.stabn	68,0,178,.LM28-UIMgr_transmitPendingData
1051
 336               	.LM28:
1052
 337               	/* prologue: frame size=0 */
1053
 338               	/* prologue end (size=0) */
1054
 339               		.stabn	68,0,179,.LM29-UIMgr_transmitPendingData
1055
 340               	.LM29:
1056
 341 00c2 9091 0000 		lds r25,UIMgr_txFifoHead
1057
 342 00c6 8091 0000 		lds r24,UIMgr_txFifoTail
1058
 343 00ca 9817      		cp r25,r24
1059
 344 00cc 11F0      		breq .L28
1060
 345               		.stabn	68,0,182,.LM30-UIMgr_transmitPendingData
1061
 346               	.LM30:
1062
 347 00ce B6DF      		rcall UIMgr_readTxFifo
1063
 348 00d0 00D0      		rcall UartInt_txByte
1064
 349               	.L28:
1065
 350 00d2 0895      		ret
1066
 351               	/* epilogue: frame size=0 */
1067
 352               	/* epilogue: noreturn */
1068
 353               	/* epilogue end (size=0) */
1069
 354               	/* function UIMgr_transmitPendingData size 9 (9) */
1070
 355               		.size	UIMgr_transmitPendingData, .-UIMgr_transmitPendingData
1071
 356               	.Lscope5:
1072
 357               		.stabs	"",36,0,0,.Lscope5-UIMgr_transmitPendingData
1073
 358               		.stabd	78,0,0
1074
 359               		.stabs	"UIMgr_convertTokenToCmd:f(0,15)",36,0,450,UIMgr_convertTokenToCmd
1075
 360               		.type	UIMgr_convertTokenToCmd, @function
1076
 361               	UIMgr_convertTokenToCmd:
1077
 362               		.stabd	46,0,0
1078
 363               		.stabn	68,0,450,.LM31-UIMgr_convertTokenToCmd
1079
 364               	.LM31:
1080
 365               	/* prologue: frame size=0 */
1081
GAS LISTING /tmp/cc2L16GD.s 			page 19
1082
 
1083
 
1084
 366               	/* prologue end (size=0) */
1085
 367               		.stabn	68,0,451,.LM32-UIMgr_convertTokenToCmd
1086
 368               	.LM32:
1087
 369 00d4 9091 0000 		lds r25,asciiTokenBuffer
1088
 370 00d8 9035      		cpi r25,lo8(80)
1089
 371 00da 41F4      		brne .L30
1090
 372               		.stabn	68,0,451,.LM33-UIMgr_convertTokenToCmd
1091
 373               	.LM33:
1092
 374 00dc 8091 0000 		lds r24,asciiTokenBuffer+1
1093
 375 00e0 8734      		cpi r24,lo8(71)
1094
 376 00e2 09F5      		brne .L32
1095
 377               		.stabn	68,0,456,.LM34-UIMgr_convertTokenToCmd
1096
 378               	.LM34:
1097
 379 00e4 81E0      		ldi r24,lo8(1)
1098
 380 00e6 8093 0000 		sts receivedCmd,r24
1099
 381 00ea 48C0      		rjmp .L34
1100
 382               	.L30:
1101
 383               		.stabn	68,0,458,.LM35-UIMgr_convertTokenToCmd
1102
 384               	.LM35:
1103
 385 00ec 9734      		cpi r25,lo8(71)
1104
 386 00ee 39F4      		brne .L35
1105
 387 00f0 8091 0000 		lds r24,asciiTokenBuffer+1
1106
 388 00f4 8635      		cpi r24,lo8(86)
1107
 389 00f6 09F5      		brne .L37
1108
 390               		.stabn	68,0,462,.LM36-UIMgr_convertTokenToCmd
1109
 391               	.LM36:
1110
 392 00f8 1092 0000 		sts receivedCmd,__zero_reg__
1111
 393 00fc 3FC0      		rjmp .L34
1112
 394               	.L35:
1113
 395               		.stabn	68,0,464,.LM37-UIMgr_convertTokenToCmd
1114
 396               	.LM37:
1115
 397 00fe 9434      		cpi r25,lo8(68)
1116
 398 0100 41F4      		brne .L39
1117
 399 0102 8091 0000 		lds r24,asciiTokenBuffer+1
1118
 400 0106 8634      		cpi r24,lo8(70)
1119
 401 0108 11F5      		brne .L41
1120
 402               		.stabn	68,0,468,.LM38-UIMgr_convertTokenToCmd
1121
 403               	.LM38:
1122
 404 010a 83E0      		ldi r24,lo8(3)
1123
 405 010c 8093 0000 		sts receivedCmd,r24
1124
 406 0110 35C0      		rjmp .L34
1125
 407               	.L39:
1126
 408               		.stabn	68,0,470,.LM39-UIMgr_convertTokenToCmd
1127
 409               	.LM39:
1128
 410 0112 9334      		cpi r25,lo8(67)
1129
 411 0114 41F4      		brne .L32
1130
 412 0116 8091 0000 		lds r24,asciiTokenBuffer+1
1131
 413 011a 8235      		cpi r24,lo8(82)
1132
 414 011c 11F5      		brne .L44
1133
 415               		.stabn	68,0,474,.LM40-UIMgr_convertTokenToCmd
1134
 416               	.LM40:
1135
 417 011e 82E0      		ldi r24,lo8(2)
1136
 418 0120 8093 0000 		sts receivedCmd,r24
1137
 419 0124 2BC0      		rjmp .L34
1138
 420               	.L32:
1139
 421               		.stabn	68,0,476,.LM41-UIMgr_convertTokenToCmd
1140
 422               	.LM41:
1141
GAS LISTING /tmp/cc2L16GD.s 			page 20
1142
 
1143
 
1144
 423 0126 9534      		cpi r25,lo8(69)
1145
 424 0128 41F4      		brne .L37
1146
 425 012a 8091 0000 		lds r24,asciiTokenBuffer+1
1147
 426 012e 8435      		cpi r24,lo8(84)
1148
 427 0130 11F5      		brne .L47
1149
 428               		.stabn	68,0,480,.LM42-UIMgr_convertTokenToCmd
1150
 429               	.LM42:
1151
 430 0132 84E0      		ldi r24,lo8(4)
1152
 431 0134 8093 0000 		sts receivedCmd,r24
1153
 432 0138 21C0      		rjmp .L34
1154
 433               	.L37:
1155
 434               		.stabn	68,0,482,.LM43-UIMgr_convertTokenToCmd
1156
 435               	.LM43:
1157
 436 013a 9335      		cpi r25,lo8(83)
1158
 437 013c 41F4      		brne .L41
1159
 438 013e 8091 0000 		lds r24,asciiTokenBuffer+1
1160
 439 0142 8D34      		cpi r24,lo8(77)
1161
 440 0144 C1F4      		brne .L47
1162
 441               		.stabn	68,0,486,.LM44-UIMgr_convertTokenToCmd
1163
 442               	.LM44:
1164
 443 0146 86E0      		ldi r24,lo8(6)
1165
 444 0148 8093 0000 		sts receivedCmd,r24
1166
 445 014c 17C0      		rjmp .L34
1167
 446               	.L41:
1168
 447               		.stabn	68,0,488,.LM45-UIMgr_convertTokenToCmd
1169
 448               	.LM45:
1170
 449 014e 9434      		cpi r25,lo8(68)
1171
 450 0150 41F4      		brne .L44
1172
 451 0152 8091 0000 		lds r24,asciiTokenBuffer+1
1173
 452 0156 8435      		cpi r24,lo8(84)
1174
 453 0158 71F4      		brne .L47
1175
 454               		.stabn	68,0,491,.LM46-UIMgr_convertTokenToCmd
1176
 455               	.LM46:
1177
 456 015a 85E0      		ldi r24,lo8(5)
1178
 457 015c 8093 0000 		sts receivedCmd,r24
1179
 458 0160 0DC0      		rjmp .L34
1180
 459               	.L44:
1181
 460               		.stabn	68,0,493,.LM47-UIMgr_convertTokenToCmd
1182
 461               	.LM47:
1183
 462 0162 9235      		cpi r25,lo8(82)
1184
 463 0164 41F4      		brne .L47
1185
 464 0166 8091 0000 		lds r24,asciiTokenBuffer+1
1186
 465 016a 8335      		cpi r24,lo8(83)
1187
 466 016c 21F4      		brne .L47
1188
 467               		.stabn	68,0,496,.LM48-UIMgr_convertTokenToCmd
1189
 468               	.LM48:
1190
 469 016e 87E0      		ldi r24,lo8(7)
1191
 470 0170 8093 0000 		sts receivedCmd,r24
1192
 471 0174 03C0      		rjmp .L34
1193
 472               	.L47:
1194
 473               		.stabn	68,0,501,.LM49-UIMgr_convertTokenToCmd
1195
 474               	.LM49:
1196
 475 0176 89E0      		ldi r24,lo8(9)
1197
 476 0178 8093 0000 		sts receivedCmd,r24
1198
 477               	.L34:
1199
 478               		.stabn	68,0,503,.LM50-UIMgr_convertTokenToCmd
1200
 479               	.LM50:
1201
GAS LISTING /tmp/cc2L16GD.s 			page 21
1202
 
1203
 
1204
 480 017c 83E0      		ldi r24,lo8(3)
1205
 481 017e E0E0      		ldi r30,lo8(asciiTokenBuffer)
1206
 482 0180 F0E0      		ldi r31,hi8(asciiTokenBuffer)
1207
 483 0182 1192      		st Z+,__zero_reg__
1208
 484 0184 8A95      	        dec r24
1209
 485 0186 E9F7      		brne .-6
1210
 486               		.stabn	68,0,504,.LM51-UIMgr_convertTokenToCmd
1211
 487               	.LM51:
1212
 488 0188 1092 0000 		sts charIndex,__zero_reg__
1213
 489               		.stabn	68,0,505,.LM52-UIMgr_convertTokenToCmd
1214
 490               	.LM52:
1215
 491 018c 1092 0000 		sts charCount,__zero_reg__
1216
 492               	/* epilogue: frame size=0 */
1217
 493 0190 0895      		ret
1218
 494               	/* epilogue end (size=1) */
1219
 495               	/* function UIMgr_convertTokenToCmd size 95 (94) */
1220
 496               		.size	UIMgr_convertTokenToCmd, .-UIMgr_convertTokenToCmd
1221
 497               	.Lscope6:
1222
 498               		.stabs	"",36,0,0,.Lscope6-UIMgr_convertTokenToCmd
1223
 499               		.stabd	78,0,0
1224
 500               		.stabs	"UIMgr_init:F(0,15)",36,0,137,UIMgr_init
1225
 501               	.global	UIMgr_init
1226
 502               		.type	UIMgr_init, @function
1227
 503               	UIMgr_init:
1228
 504               		.stabd	46,0,0
1229
 505               		.stabn	68,0,137,.LM53-UIMgr_init
1230
 506               	.LM53:
1231
 507               	/* prologue: frame size=0 */
1232
 508               	/* prologue end (size=0) */
1233
 509               		.stabn	68,0,138,.LM54-UIMgr_init
1234
 510               	.LM54:
1235
 511 0192 1092 0000 		sts asciiTokenBuffer,__zero_reg__
1236
 512 0196 1092 0000 		sts (asciiTokenBuffer)+1,__zero_reg__
1237
 513 019a 1092 0000 		sts (asciiTokenBuffer)+2,__zero_reg__
1238
 514 019e 1092 0000 		sts (asciiTokenBuffer)+3,__zero_reg__
1239
 515               		.stabn	68,0,139,.LM55-UIMgr_init
1240
 516               	.LM55:
1241
 517 01a2 80E4      		ldi r24,lo8(64)
1242
 518 01a4 E0E0      		ldi r30,lo8(tokenBuffer)
1243
 519 01a6 F0E0      		ldi r31,hi8(tokenBuffer)
1244
 520 01a8 982F      		mov r25,r24
1245
 521 01aa 1192      		st Z+,__zero_reg__
1246
 522 01ac 9A95      	        dec r25
1247
 523 01ae E9F7      		brne .-6
1248
 524               		.stabn	68,0,140,.LM56-UIMgr_init
1249
 525               	.LM56:
1250
 526 01b0 E0E0      		ldi r30,lo8(UIMgr_txFifo)
1251
 527 01b2 F0E0      		ldi r31,hi8(UIMgr_txFifo)
1252
 528 01b4 1192      		st Z+,__zero_reg__
1253
 529 01b6 8A95      	        dec r24
1254
 530 01b8 E9F7      		brne .-6
1255
 531               		.stabn	68,0,141,.LM57-UIMgr_init
1256
 532               	.LM57:
1257
 533 01ba 80E2      		ldi r24,lo8(32)
1258
 534 01bc E0E0      		ldi r30,lo8(UIMgr_rxFifo)
1259
 535 01be F0E0      		ldi r31,hi8(UIMgr_rxFifo)
1260
 536 01c0 1192      		st Z+,__zero_reg__
1261
GAS LISTING /tmp/cc2L16GD.s 			page 22
1262
 
1263
 
1264
 537 01c2 8A95      	        dec r24
1265
 538 01c4 E9F7      		brne .-6
1266
 539               	/* epilogue: frame size=0 */
1267
 540 01c6 0895      		ret
1268
 541               	/* epilogue end (size=1) */
1269
 542               	/* function UIMgr_init size 27 (26) */
1270
 543               		.size	UIMgr_init, .-UIMgr_init
1271
 544               	.Lscope7:
1272
 545               		.stabs	"",36,0,0,.Lscope7-UIMgr_init
1273
 546               		.stabd	78,0,0
1274
 547               		.stabs	"UIMgr_convertTokenToValue:f(0,15)",36,0,422,UIMgr_convertTokenToValue
1275
 548               		.type	UIMgr_convertTokenToValue, @function
1276
 549               	UIMgr_convertTokenToValue:
1277
 550               		.stabd	46,0,0
1278
 551               		.stabn	68,0,422,.LM58-UIMgr_convertTokenToValue
1279
 552               	.LM58:
1280
 553               	/* prologue: frame size=0 */
1281
 554               	/* prologue end (size=0) */
1282
 555               		.stabn	68,0,425,.LM59-UIMgr_convertTokenToValue
1283
 556               	.LM59:
1284
 557 01c8 80E0      		ldi r24,lo8(asciiTokenBuffer)
1285
 558 01ca 90E0      		ldi r25,hi8(asciiTokenBuffer)
1286
 559 01cc 00D0      		rcall atoi
1287
 560 01ce 9C01      		movw r18,r24
1288
 561               		.stabn	68,0,426,.LM60-UIMgr_convertTokenToValue
1289
 562               	.LM60:
1290
 563 01d0 8F3F      		cpi r24,255
1291
 564 01d2 9105      		cpc r25,__zero_reg__
1292
 565 01d4 69F0      		breq .L59
1293
 566 01d6 60F0      		brlo .L59
1294
 567               		.stabn	68,0,429,.LM61-UIMgr_convertTokenToValue
1295
 568               	.LM61:
1296
 569 01d8 89E0      		ldi r24,lo8(9)
1297
 570 01da 8093 0000 		sts receivedCmd,r24
1298
 571               		.stabn	68,0,430,.LM62-UIMgr_convertTokenToValue
1299
 572               	.LM62:
1300
 573 01de 8091 0000 		lds r24,tokenCount
1301
 574 01e2 E0E0      		ldi r30,lo8(tokenBuffer)
1302
 575 01e4 F0E0      		ldi r31,hi8(tokenBuffer)
1303
 576 01e6 E80F      		add r30,r24
1304
 577 01e8 F11D      		adc r31,__zero_reg__
1305
 578 01ea 8FEF      		ldi r24,lo8(-1)
1306
 579 01ec 8083      		st Z,r24
1307
 580 01ee 07C0      		rjmp .L61
1308
 581               	.L59:
1309
 582               		.stabn	68,0,435,.LM63-UIMgr_convertTokenToValue
1310
 583               	.LM63:
1311
 584 01f0 8091 0000 		lds r24,tokenCount
1312
 585 01f4 E0E0      		ldi r30,lo8(tokenBuffer)
1313
 586 01f6 F0E0      		ldi r31,hi8(tokenBuffer)
1314
 587 01f8 E80F      		add r30,r24
1315
 588 01fa F11D      		adc r31,__zero_reg__
1316
 589 01fc 2083      		st Z,r18
1317
 590               	.L61:
1318
 591               		.stabn	68,0,437,.LM64-UIMgr_convertTokenToValue
1319
 592               	.LM64:
1320
 593 01fe 83E0      		ldi r24,lo8(3)
1321
GAS LISTING /tmp/cc2L16GD.s 			page 23
1322
 
1323
 
1324
 594 0200 E0E0      		ldi r30,lo8(asciiTokenBuffer)
1325
 595 0202 F0E0      		ldi r31,hi8(asciiTokenBuffer)
1326
 596 0204 1192      		st Z+,__zero_reg__
1327
 597 0206 8A95      	        dec r24
1328
 598 0208 E9F7      		brne .-6
1329
 599               		.stabn	68,0,438,.LM65-UIMgr_convertTokenToValue
1330
 600               	.LM65:
1331
 601 020a 1092 0000 		sts charIndex,__zero_reg__
1332
 602               		.stabn	68,0,439,.LM66-UIMgr_convertTokenToValue
1333
 603               	.LM66:
1334
 604 020e 1092 0000 		sts charCount,__zero_reg__
1335
 605               	/* epilogue: frame size=0 */
1336
 606 0212 0895      		ret
1337
 607               	/* epilogue end (size=1) */
1338
 608               	/* function UIMgr_convertTokenToValue size 38 (37) */
1339
 609               		.size	UIMgr_convertTokenToValue, .-UIMgr_convertTokenToValue
1340
 610               		.stabs	"newValue:r(0,4)",64,0,423,18
1341
 611               		.stabn	192,0,0,UIMgr_convertTokenToValue-UIMgr_convertTokenToValue
1342
 612               		.stabn	224,0,0,.Lscope8-UIMgr_convertTokenToValue
1343
 613               	.Lscope8:
1344
 614               		.stabs	"",36,0,0,.Lscope8-UIMgr_convertTokenToValue
1345
 615               		.stabd	78,0,0
1346
 616               		.stabs	"UIMgr_processReceivedData:F(0,15)",36,0,193,UIMgr_processReceivedData
1347
 617               	.global	UIMgr_processReceivedData
1348
 618               		.type	UIMgr_processReceivedData, @function
1349
 619               	UIMgr_processReceivedData:
1350
 620               		.stabd	46,0,0
1351
 621               		.stabn	68,0,193,.LM67-UIMgr_processReceivedData
1352
 622               	.LM67:
1353
 623               	/* prologue: frame size=0 */
1354
 624 0214 FF92      		push r15
1355
 625 0216 0F93      		push r16
1356
 626 0218 1F93      		push r17
1357
 627 021a CF93      		push r28
1358
 628 021c DF93      		push r29
1359
 629               	/* prologue end (size=5) */
1360
 630 021e 0F2E      		mov __tmp_reg__,r31
1361
 631 0220 F9E0      		ldi r31,lo8(9)
1362
 632 0222 FF2E      		mov r15,r31
1363
 633 0224 F02D      		mov r31,__tmp_reg__
1364
 634 0226 FFC0      		rjmp .L119
1365
 635               	.L65:
1366
 636               	.LBB22:
1367
 637               	.LBB23:
1368
 638               		.stabn	68,0,612,.LM68-UIMgr_processReceivedData
1369
 639               	.LM68:
1370
 640               	/* #APP */
1371
 641 0228 F894      		cli
1372
 642               		.stabn	68,0,613,.LM69-UIMgr_processReceivedData
1373
 643               	.LM69:
1374
 644               	/* #NOAPP */
1375
 645 022a E22F      		mov r30,r18
1376
 646 022c FF27      		clr r31
1377
 647 022e E050      		subi r30,lo8(-(UIMgr_rxFifo))
1378
 648 0230 F040      		sbci r31,hi8(-(UIMgr_rxFifo))
1379
 649 0232 9081      		ld r25,Z
1380
 650               		.stabn	68,0,615,.LM70-UIMgr_processReceivedData
1381
GAS LISTING /tmp/cc2L16GD.s 			page 24
1382
 
1383
 
1384
 651               	.LM70:
1385
 652 0234 822F      		mov r24,r18
1386
 653 0236 8F5F      		subi r24,lo8(-(1))
1387
 654 0238 8F71      		andi r24,lo8(31)
1388
 655 023a 8093 0000 		sts UIMgr_rxFifoTail,r24
1389
 656               		.stabn	68,0,616,.LM71-UIMgr_processReceivedData
1390
 657               	.LM71:
1391
 658               	/* #APP */
1392
 659 023e 7894      		sei
1393
 660               	/* #NOAPP */
1394
 661               	.LBE23:
1395
 662               	.LBE22:
1396
 663               		.stabn	68,0,202,.LM72-UIMgr_processReceivedData
1397
 664               	.LM72:
1398
 665 0240 9D30      		cpi r25,lo8(13)
1399
 666 0242 09F0      		breq .+2
1400
 667 0244 B1C0      		rjmp .L66
1401
 668               		.stabn	68,0,205,.LM73-UIMgr_processReceivedData
1402
 669               	.LM73:
1403
 670 0246 8091 0000 		lds r24,tokenCount
1404
 671 024a 8823      		tst r24
1405
 672 024c 11F4      		brne .L68
1406
 673               		.stabn	68,0,208,.LM74-UIMgr_processReceivedData
1407
 674               	.LM74:
1408
 675 024e 42DF      		rcall UIMgr_convertTokenToCmd
1409
 676 0250 06C0      		rjmp .L70
1410
 677               	.L68:
1411
 678               		.stabn	68,0,213,.LM75-UIMgr_processReceivedData
1412
 679               	.LM75:
1413
 680 0252 BADF      		rcall UIMgr_convertTokenToValue
1414
 681               		.stabn	68,0,214,.LM76-UIMgr_processReceivedData
1415
 682               	.LM76:
1416
 683 0254 8091 0000 		lds r24,tokenCount
1417
 684 0258 8F5F      		subi r24,lo8(-(1))
1418
 685 025a 8093 0000 		sts tokenCount,r24
1419
 686               	.L70:
1420
 687               		.stabn	68,0,218,.LM77-UIMgr_processReceivedData
1421
 688               	.LM77:
1422
 689 025e 84E6      		ldi r24,lo8(100)
1423
 690 0260 90E0      		ldi r25,hi8(100)
1424
 691 0262 00D0      		rcall Utility_delay
1425
 692               		.stabn	68,0,219,.LM78-UIMgr_processReceivedData
1426
 693               	.LM78:
1427
 694 0264 8091 0000 		lds r24,receivedCmd
1428
 695 0268 8850      		subi r24,lo8(-(-8))
1429
 696 026a 8230      		cpi r24,lo8(2)
1430
 697 026c 58F4      		brsh .L71
1431
 698               	.LBB24:
1432
 699               	.LBB25:
1433
 700               		.stabn	68,0,531,.LM79-UIMgr_processReceivedData
1434
 701               	.LM79:
1435
 702 026e 8EE4      		ldi r24,lo8(78)
1436
 703 0270 F4DE      		rcall UIMgr_writeTxFifo
1437
 704               		.stabn	68,0,532,.LM80-UIMgr_processReceivedData
1438
 705               	.LM80:
1439
 706 0272 83E4      		ldi r24,lo8(67)
1440
 707 0274 F2DE      		rcall UIMgr_writeTxFifo
1441
GAS LISTING /tmp/cc2L16GD.s 			page 25
1442
 
1443
 
1444
 708               		.stabn	68,0,533,.LM81-UIMgr_processReceivedData
1445
 709               	.LM81:
1446
 710 0276 8BE4      		ldi r24,lo8(75)
1447
 711 0278 F0DE      		rcall UIMgr_writeTxFifo
1448
 712               		.stabn	68,0,534,.LM82-UIMgr_processReceivedData
1449
 713               	.LM82:
1450
 714 027a 8DE0      		ldi r24,lo8(13)
1451
 715 027c EEDE      		rcall UIMgr_writeTxFifo
1452
 716               	.LBE25:
1453
 717               	.LBE24:
1454
 718               		.stabn	68,0,223,.LM83-UIMgr_processReceivedData
1455
 719               	.LM83:
1456
 720 027e 80E9      		ldi r24,lo8(-112)
1457
 721 0280 00D0      		rcall Exec_writeEventFifo
1458
 722 0282 89C0      		rjmp .L73
1459
 723               	.L71:
1460
 724               	.LBB26:
1461
 725               	.LBB27:
1462
 726               		.stabn	68,0,516,.LM84-UIMgr_processReceivedData
1463
 727               	.LM84:
1464
 728 0284 81E4      		ldi r24,lo8(65)
1465
 729 0286 E9DE      		rcall UIMgr_writeTxFifo
1466
 730               		.stabn	68,0,517,.LM85-UIMgr_processReceivedData
1467
 731               	.LM85:
1468
 732 0288 83E4      		ldi r24,lo8(67)
1469
 733 028a E7DE      		rcall UIMgr_writeTxFifo
1470
 734               		.stabn	68,0,518,.LM86-UIMgr_processReceivedData
1471
 735               	.LM86:
1472
 736 028c 8BE4      		ldi r24,lo8(75)
1473
 737 028e E5DE      		rcall UIMgr_writeTxFifo
1474
 738               		.stabn	68,0,519,.LM87-UIMgr_processReceivedData
1475
 739               	.LM87:
1476
 740 0290 8DE0      		ldi r24,lo8(13)
1477
 741 0292 E3DE      		rcall UIMgr_writeTxFifo
1478
 742               	.LBE27:
1479
 743               	.LBE26:
1480
 744               		.stabn	68,0,230,.LM88-UIMgr_processReceivedData
1481
 745               	.LM88:
1482
 746 0294 80E9      		ldi r24,lo8(-112)
1483
 747 0296 00D0      		rcall Exec_writeEventFifo
1484
 748               	.LBB28:
1485
 749               	.LBB29:
1486
 750               		.stabn	68,0,316,.LM89-UIMgr_processReceivedData
1487
 751               	.LM89:
1488
 752 0298 8091 0000 		lds r24,receivedCmd
1489
 753 029c 8130      		cpi r24,lo8(1)
1490
 754 029e 09F4      		brne .+2
1491
 755 02a0 7AC0      		rjmp .L73
1492
 756               		.stabn	68,0,319,.LM90-UIMgr_processReceivedData
1493
 757               	.LM90:
1494
 758 02a2 8823      		tst r24
1495
 759 02a4 71F4      		brne .L75
1496
 760               		.stabn	68,0,322,.LM91-UIMgr_processReceivedData
1497
 761               	.LM91:
1498
 762 02a6 8091 0000 		lds r24,AVRcamVersion
1499
 763 02aa 8823      		tst r24
1500
 764 02ac 09F4      		brne .+2
1501
GAS LISTING /tmp/cc2L16GD.s 			page 26
1502
 
1503
 
1504
 765 02ae 73C0      		rjmp .L73
1505
 766 02b0 C0E0      		ldi r28,lo8(AVRcamVersion)
1506
 767 02b2 D0E0      		ldi r29,hi8(AVRcamVersion)
1507
 768               	.L78:
1508
 769               		.stabn	68,0,324,.LM92-UIMgr_processReceivedData
1509
 770               	.LM92:
1510
 771 02b4 2196      		adiw r28,1
1511
 772 02b6 D1DE      		rcall UIMgr_writeTxFifo
1512
 773               		.stabn	68,0,322,.LM93-UIMgr_processReceivedData
1513
 774               	.LM93:
1514
 775 02b8 8881      		ld r24,Y
1515
 776 02ba 8823      		tst r24
1516
 777 02bc 09F4      		brne .+2
1517
 778 02be 6BC0      		rjmp .L73
1518
 779 02c0 F9CF      		rjmp .L78
1519
 780               	.L75:
1520
 781               		.stabn	68,0,327,.LM94-UIMgr_processReceivedData
1521
 782               	.LM94:
1522
 783 02c2 8730      		cpi r24,lo8(7)
1523
 784 02c4 11F4      		brne .L79
1524
 785               		.stabn	68,0,329,.LM95-UIMgr_processReceivedData
1525
 786               	.LM95:
1526
 787 02c6 00D0      		rcall CamInt_resetCam
1527
 788 02c8 66C0      		rjmp .L73
1528
 789               	.L79:
1529
 790               		.stabn	68,0,331,.LM96-UIMgr_processReceivedData
1530
 791               	.LM96:
1531
 792 02ca 8330      		cpi r24,lo8(3)
1532
 793 02cc 31F4      		brne .L81
1533
 794               		.stabn	68,0,340,.LM97-UIMgr_processReceivedData
1534
 795               	.LM97:
1535
 796 02ce 84E6      		ldi r24,lo8(100)
1536
 797 02d0 90E0      		ldi r25,hi8(100)
1537
 798 02d2 00D0      		rcall Utility_delay
1538
 799               		.stabn	68,0,341,.LM98-UIMgr_processReceivedData
1539
 800               	.LM98:
1540
 801 02d4 82E0      		ldi r24,lo8(2)
1541
 802 02d6 00D0      		rcall Exec_writeEventFifo
1542
 803 02d8 5EC0      		rjmp .L73
1543
 804               	.L81:
1544
 805               		.stabn	68,0,343,.LM99-UIMgr_processReceivedData
1545
 806               	.LM99:
1546
 807 02da 8230      		cpi r24,lo8(2)
1547
 808 02dc 99F4      		brne .L83
1548
 809               		.stabn	68,0,347,.LM100-UIMgr_processReceivedData
1549
 810               	.LM100:
1550
 811 02de 8091 0000 		lds r24,tokenCount
1551
 812 02e2 8230      		cpi r24,lo8(2)
1552
 813 02e4 68F0      		brlo .L85
1553
 814 02e6 11E0      		ldi r17,lo8(1)
1554
 815               	.L87:
1555
 816               		.stabn	68,0,350,.LM101-UIMgr_processReceivedData
1556
 817               	.LM101:
1557
 818 02e8 E12F      		mov r30,r17
1558
 819 02ea FF27      		clr r31
1559
 820 02ec E050      		subi r30,lo8(-(tokenBuffer))
1560
 821 02ee F040      		sbci r31,hi8(-(tokenBuffer))
1561
GAS LISTING /tmp/cc2L16GD.s 			page 27
1562
 
1563
 
1564
 822 02f0 6181      		ldd r22,Z+1
1565
 823 02f2 8081      		ld r24,Z
1566
 824 02f4 00D0      		rcall CamConfig_setCamReg
1567
 825               		.stabn	68,0,347,.LM102-UIMgr_processReceivedData
1568
 826               	.LM102:
1569
 827 02f6 1E5F      		subi r17,lo8(-(2))
1570
 828 02f8 8091 0000 		lds r24,tokenCount
1571
 829 02fc 1817      		cp r17,r24
1572
 830 02fe A0F3      		brlo .L87
1573
 831               	.L85:
1574
 832               		.stabn	68,0,352,.LM103-UIMgr_processReceivedData
1575
 833               	.LM103:
1576
 834 0300 00D0      		rcall CamConfig_sendFifoCmds
1577
 835 0302 49C0      		rjmp .L73
1578
 836               	.L83:
1579
 837               		.stabn	68,0,354,.LM104-UIMgr_processReceivedData
1580
 838               	.LM104:
1581
 839 0304 8430      		cpi r24,lo8(4)
1582
 840 0306 31F4      		brne .L88
1583
 841               		.stabn	68,0,357,.LM105-UIMgr_processReceivedData
1584
 842               	.LM105:
1585
 843 0308 84E6      		ldi r24,lo8(100)
1586
 844 030a 90E0      		ldi r25,hi8(100)
1587
 845 030c 00D0      		rcall Utility_delay
1588
 846               		.stabn	68,0,358,.LM106-UIMgr_processReceivedData
1589
 847               	.LM106:
1590
 848 030e 80E8      		ldi r24,lo8(-128)
1591
 849 0310 00D0      		rcall Exec_writeEventFifo
1592
 850 0312 41C0      		rjmp .L73
1593
 851               	.L88:
1594
 852               		.stabn	68,0,360,.LM107-UIMgr_processReceivedData
1595
 853               	.LM107:
1596
 854 0314 8530      		cpi r24,lo8(5)
1597
 855 0316 19F4      		brne .L90
1598
 856               		.stabn	68,0,362,.LM108-UIMgr_processReceivedData
1599
 857               	.LM108:
1600
 858 0318 81E8      		ldi r24,lo8(-127)
1601
 859 031a 00D0      		rcall Exec_writeEventFifo
1602
 860 031c 3CC0      		rjmp .L73
1603
 861               	.L90:
1604
 862               		.stabn	68,0,364,.LM109-UIMgr_processReceivedData
1605
 863               	.LM109:
1606
 864 031e 8630      		cpi r24,lo8(6)
1607
 865 0320 09F0      		breq .+2
1608
 866 0322 39C0      		rjmp .L73
1609
 867               		.stabn	68,0,367,.LM110-UIMgr_processReceivedData
1610
 868               	.LM110:
1611
 869 0324 8091 0000 		lds r24,tokenCount
1612
 870 0328 8823      		tst r24
1613
 871 032a 09F4      		brne .+2
1614
 872 032c 34C0      		rjmp .L73
1615
 873 032e 40E0      		ldi r20,lo8(0)
1616
 874 0330 00E0      		ldi r16,lo8(tokenBuffer)
1617
 875 0332 10E0      		ldi r17,hi8(tokenBuffer)
1618
 876 0334 60E0      		ldi r22,lo8(colorMap)
1619
 877 0336 70E0      		ldi r23,hi8(colorMap)
1620
 878               	.L94:
1621
GAS LISTING /tmp/cc2L16GD.s 			page 28
1622
 
1623
 
1624
 879               		.stabn	68,0,369,.LM111-UIMgr_processReceivedData
1625
 880               	.LM111:
1626
 881 0338 842F      		mov r24,r20
1627
 882 033a 9927      		clr r25
1628
 883 033c 9C01      		movw r18,r24
1629
 884 033e 2F5F      		subi r18,lo8(-(1))
1630
 885 0340 3F4F      		sbci r19,hi8(-(1))
1631
 886 0342 F901      		movw r30,r18
1632
 887 0344 E00F      		add r30,r16
1633
 888 0346 F11F      		adc r31,r17
1634
 889 0348 E081      		ld r30,Z
1635
 890 034a EC01      		movw r28,r24
1636
 891 034c C60F      		add r28,r22
1637
 892 034e D71F      		adc r29,r23
1638
 893 0350 E883      		st Y,r30
1639
 894               	.LBB30:
1640
 895               	.LBB31:
1641
 896               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext1
1642
 897               	.Ltext1:
1643
   1:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* Copyright (c) 2002, 2003, 2004 Marek Michalkiewicz
1644
   2:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Copyright (c) 2005, 2006 Bjoern Haase
1645
   3:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    All rights reserved.
1646
   4:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1647
   5:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Redistribution and use in source and binary forms, with or without
1648
   6:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    modification, are permitted provided that the following conditions are met:
1649
   7:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1650
   8:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Redistributions of source code must retain the above copyright
1651
   9:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer.
1652
  10:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1653
  11:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Redistributions in binary form must reproduce the above copyright
1654
  12:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer in
1655
  13:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      the documentation and/or other materials provided with the
1656
  14:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      distribution.
1657
  15:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1658
  16:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Neither the name of the copyright holders nor the names of
1659
  17:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      contributors may be used to endorse or promote products derived
1660
  18:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      from this software without specific prior written permission.
1661
  19:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1662
  20:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1663
  21:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1664
  22:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1665
  23:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
1666
  24:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1667
  25:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1668
  26:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1669
  27:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1670
  28:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1671
  29:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
1672
  30:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   POSSIBILITY OF SUCH DAMAGE. */
1673
  31:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1674
  32:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* $Id: eeprom.h,v 1.17.2.1 2006/02/26 21:51:04 aesok Exp $ */
1675
  33:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1676
  34:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /*
1677
  35:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    eeprom.h
1678
  36:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1679
  37:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Contributors:
1680
  38:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Created by Marek Michalkiewicz <marekm@linux.org.pl>
1681
GAS LISTING /tmp/cc2L16GD.s 			page 29
1682
 
1683
 
1684
  39:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      eeprom_write_word and eeprom_write_block added by Artur Lipowski 
1685
  40:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      <LAL@pro.onet.pl>
1686
  41:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Complete rewrite using the original interface by Bjoern Haase 
1687
  42:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      <bjoern.haase@de.bosch.com>. 
1688
  43:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****  */
1689
  44:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1690
  45:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef _EEPROM_H_
1691
  46:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _EEPROM_H_ 1
1692
  47:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1693
  48:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define __need_size_t
1694
  49:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <stddef.h>
1695
  50:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <inttypes.h>
1696
  51:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1697
  52:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1698
  53:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifdef __AVR_MEGA__
1699
  54:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define XCALL "call"
1700
  55:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #else
1701
  56:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define XCALL "rcall"
1702
  57:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
1703
  58:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1704
  59:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <avr/io.h>
1705
  60:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef __EEPROM_REG_LOCATIONS__
1706
  61:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def __EEPROM_REG_LOCATIONS__
1707
  62:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
1708
  63:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      In order to be able to work without a requiring a multilib 
1709
  64:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      approach for dealing with controllers having the EEPROM registers
1710
  65:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      at different positions in memory space, the eeprom functions evaluate
1711
  66:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      __EEPROM_REG_LOCATIONS__: It is assumed to be defined by
1712
  67:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      the device io header and contains 6 uppercase hex digits encoding the 
1713
  68:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      addresses of EECR,EEDR and EEAR. 
1714
  69:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      First two letters:  EECR address.
1715
  70:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Second two letters: EEDR address.
1716
  71:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Last two letters:   EEAR address.
1717
  72:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      The default 1C1D1E corresponds to the
1718
  73:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      register location that is valid for most controllers. The value
1719
  74:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      of this define symbol is used for appending it to the base name of the
1720
  75:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      assembler functions.  */
1721
  76:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define __EEPROM_REG_LOCATIONS__ 1C1D1E
1722
  77:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
1723
  78:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _STR2(EXP) _STR1(EXP)
1724
  79:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _STR1(EXP) #EXP
1725
  80:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _REG_LOCATION_SUFFIX _STR2(__EEPROM_REG_LOCATIONS__)
1726
  81:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1727
  82:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef CR_TAB
1728
  83:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define CR_TAB "\n\t"
1729
  84:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
1730
  85:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1731
  86:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1732
  87:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
1733
  88:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \code #include <avr/eeprom.h> \endcode
1734
  89:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1735
  90:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     This header file declares the interface to some simple library
1736
  91:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     routines suitable for handling the data EEPROM contained in the
1737
  92:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     AVR microcontrollers.  The implementation uses a simple polled
1738
  93:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     mode interface.  Applications that require interrupt-controlled
1739
  94:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     EEPROM access to ensure that no time will be wasted in spinloops
1740
  95:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     will have to deploy their own implementation.
1741
GAS LISTING /tmp/cc2L16GD.s 			page 30
1742
 
1743
 
1744
  96:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1745
  97:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note All of the read/write functions first make sure the EEPROM
1746
  98:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      is ready to be accessed.  Since this may cause long delays if a
1747
  99:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      write operation is still pending, time-critical applications
1748
 100:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      should first poll the EEPROM e. g. using eeprom_is_ready() before
1749
 101:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      attempting any actual I/O.
1750
 102:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1751
 103:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note This header file declares inline functions that call the
1752
 104:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      assembler subroutines directly. This prevents that the compiler
1753
 105:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      generates push/pops for the call-clobbered registers. This way
1754
 106:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      also a specific calling convention could be used for the eeprom
1755
 107:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      routines e.g. by passing values in __tmp_reg__, eeprom addresses in
1756
 108:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      X and memory addresses in Z registers. Method is optimized for code 
1757
 109:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      size.
1758
 110:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1759
 111:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note Presently supported are two locations of the EEPROM register
1760
 112:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      set: 0x1F,0x20,0x21 and 0x1C,0x1D,0x1E 
1761
 113:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      (see ::__EEPROM_REG_LOCATIONS__).
1762
 114:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1763
 115:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note As these functions modify IO registers, they are known to be
1764
 116:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      non-reentrant.  If any of these functions are used from both,
1765
 117:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      standard and interrupt context, the applications must ensure
1766
 118:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      proper protection (e.g. by disabling interrupts before accessing
1767
 119:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      them).
1768
 120:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1769
 121:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** */
1770
 122:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1771
 123:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1772
 124:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* forward declarations of the inline functions so that doxygen does
1773
 125:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    not get confused by the attribute expression.  */
1774
 126:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1775
 127:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline uint8_t __attribute__ ((always_inline))
1776
 128:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr);
1777
 129:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1778
 130:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline uint16_t __attribute__ ((always_inline)) 
1779
 131:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr);
1780
 132:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1781
 133:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
1782
 134:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
1783
 135:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
1784
 136:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    size_t size);
1785
 137:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1786
 138:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
1787
 139:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value);
1788
 140:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1789
 141:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
1790
 142:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_word (uint16_t *addr,uint16_t value);
1791
 143:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1792
 144:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
1793
 145:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_block (const void *pointer_ram,
1794
 146:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                     void *pointer_eeprom,
1795
 147:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                     size_t size);
1796
 148:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1797
 149:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \name avr-libc declarations */
1798
 150:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1799
 151:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /*@{*/
1800
 152:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1801
GAS LISTING /tmp/cc2L16GD.s 			page 31
1802
 
1803
 
1804
 153:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def EEMEM
1805
 154:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
1806
 155:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Attribute expression causing a variable to be allocated within the .eeprom
1807
 156:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      section.  */
1808
 157:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define EEMEM __attribute__((section(".eeprom")))
1809
 158:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1810
 159:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_is_ready
1811
 160:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
1812
 161:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not. */
1813
 162:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1814
 163:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #if defined(__DOXYGEN__)
1815
 164:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready()
1816
 165:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(EEWE)
1817
 166:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEWE)
1818
 167:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(EEPE)
1819
 168:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEPE)
1820
 169:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(DEECR) && defined(EEL)
1821
 170:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(DEECR, EEL)
1822
 171:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #else
1823
 172:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # error "No write enable bit known for this device's EEPROM."
1824
 173:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
1825
 174:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1826
 175:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_busy_wait
1827
 176:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
1828
 177:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1829
 178:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Loops until the eeprom is no longer busy.
1830
 179:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1831
 180:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \returns Nothing. */
1832
 181:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1833
 182:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
1834
 183:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1835
 184:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1836
 185:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
1837
 186:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read one byte from EEPROM address \c addr. */
1838
 187:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1839
 188:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** uint8_t 
1840
 189:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr) 
1841
 190:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
1842
 191:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   uint8_t result;
1843
 192:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   asm volatile
1844
 898               		.stabn	68,0,192,.LM112-UIMgr_processReceivedData
1845
 899               	.LM112:
1846
 900 0352 D901      		movw r26,r18
1847
 901               	/* #APP */
1848
 902 0354 00D0      		rcall __eeprom_read_byte_1C1D1E
1849
 903 0356 802D      		mov r24,__tmp_reg__
1850
 904               	/* #NOAPP */
1851
 905               	.LBE31:
1852
 906               	.LBE30:
1853
 907               		.stabs	"UIMgr.c",132,0,0,.Ltext2
1854
 908               	.Ltext2:
1855
 909               		.stabn	68,0,374,.LM113-UIMgr_processReceivedData
1856
 910               	.LM113:
1857
 911 0358 E817      		cp r30,r24
1858
 912 035a C1F0      		breq .L95
1859
 913               	.LBB32:
1860
 914               	.LBB33:
1861
GAS LISTING /tmp/cc2L16GD.s 			page 32
1862
 
1863
 
1864
 915               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext3
1865
 916               	.Ltext3:
1866
 193:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       ( XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
1867
 194:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         "mov %1,__tmp_reg__"
1868
 195:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
1869
 196:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****          "=r" (result)
1870
 197:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : );
1871
 198:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   return result;
1872
 199:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
1873
 200:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1874
 201:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
1875
 202:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read one 16-bit word (little endian) from EEPROM address \c addr. */
1876
 203:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** uint16_t
1877
 204:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr)
1878
 205:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
1879
 206:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   uint16_t result;
1880
 207:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1881
 208:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   asm ( 
1882
 209:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB
1883
 210:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
1884
 211:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****          "=z" (result)
1885
 212:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : );
1886
 213:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   return result;
1887
 214:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
1888
 215:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1889
 216:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
1890
 217:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read a block of \c n bytes from EEPROM address \c pointer_eeprom to
1891
 218:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \c pointer_ram.  For constant n <= 256 bytes a library function is used.
1892
 219:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     For block sizes unknown at compile time or block sizes > 256 an inline
1893
 220:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     loop is expanded. */
1894
 221:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1895
 222:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** void 
1896
 223:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
1897
 224:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
1898
 225:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    size_t n)
1899
 226:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
1900
 227:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   if (!__builtin_constant_p (n)
1901
 228:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       || n > 256)
1902
 229:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     {
1903
 230:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       /* make sure size is a 16 bit variable.  */
1904
 231:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       uint16_t size = n; 
1905
 232:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1906
 233:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       asm volatile ( 
1907
 234:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             ".%=_start:" CR_TAB
1908
 235:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "sbiw %2,1" CR_TAB
1909
 236:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "brlt .%=_finished" CR_TAB
1910
 237:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****              XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
1911
 238:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "st z+,__tmp_reg__" CR_TAB
1912
 239:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "rjmp .%=_start" CR_TAB
1913
 240:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             ".%=_finished:" 
1914
 241:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           : "=x" (pointer_eeprom),
1915
 242:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "=z" (pointer_ram),
1916
 243:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "+w" (size)
1917
 244:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****            : "x" (pointer_eeprom), 
1918
 245:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****              "z" (pointer_ram)
1919
 246:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****            : "memory");
1920
 247:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     }
1921
GAS LISTING /tmp/cc2L16GD.s 			page 33
1922
 
1923
 
1924
 248:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   else
1925
 249:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     {
1926
 250:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       if (n != 0)
1927
 251:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         {
1928
 252:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           if (n == 256)
1929
 253:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             {
1930
 254:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               asm volatile (
1931
 255:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX 
1932
 256:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "+x" (pointer_eeprom),
1933
 257:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   "=z" (pointer_ram)
1934
 258:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "z"  (pointer_ram)
1935
 259:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "memory");
1936
 260:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             }
1937
 261:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           else
1938
 262:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             {
1939
 263:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               /* Needed in order to truncate to 8 bit.  */
1940
 264:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               uint8_t len;
1941
 265:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               len = (uint8_t) n; 
1942
 266:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1943
 267:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               asm volatile (
1944
 268:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   "mov __zero_reg__,%2"      CR_TAB
1945
 269:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX 
1946
 270:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "+x" (pointer_eeprom),
1947
 271:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   "=z" (pointer_ram)
1948
 272:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "r"  (len),
1949
 273:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   "z"  (pointer_ram)
1950
 274:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "memory");
1951
 275:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             }
1952
 276:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         }
1953
 277:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     }
1954
 278:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
1955
 279:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1956
 280:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
1957
 281:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Write a byte \c value to EEPROM address \c addr. */
1958
 282:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
1959
 283:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** void 
1960
 284:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value)
1961
 285:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
1962
 286:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   asm volatile (
1963
 917               		.stabn	68,0,286,.LM114-UIMgr_processReceivedData
1964
 918               	.LM114:
1965
 919 035c D901      		movw r26,r18
1966
 920               	/* #APP */
1967
 921 035e 0E2E      		mov __tmp_reg__,r30
1968
 922 0360 00D0      		rcall __eeprom_write_byte_1C1D1E
1969
 923               	/* #NOAPP */
1970
 924               	.LBE33:
1971
 925               	.LBE32:
1972
 926               	.LBB34:
1973
 927               	.LBB35:
1974
 928               		.stabn	68,0,192,.LM115-UIMgr_processReceivedData
1975
 929               	.LM115:
1976
 930 0362 D901      		movw r26,r18
1977
 931               	/* #APP */
1978
 932 0364 00D0      		rcall __eeprom_read_byte_1C1D1E
1979
 933 0366 802D      		mov r24,__tmp_reg__
1980
 934               	/* #NOAPP */
1981
GAS LISTING /tmp/cc2L16GD.s 			page 34
1982
 
1983
 
1984
 935               	.LBE35:
1985
 936               	.LBE34:
1986
 937               		.stabs	"UIMgr.c",132,0,0,.Ltext4
1987
 938               	.Ltext4:
1988
 939               		.stabn	68,0,384,.LM116-UIMgr_processReceivedData
1989
 940               	.LM116:
1990
 941 0368 9881      		ld r25,Y
1991
 942 036a 9817      		cp r25,r24
1992
 943 036c 79F0      		breq .L95
1993
 944               	.LBB36:
1994
 945               	.LBB37:
1995
 946               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext5
1996
 947               	.Ltext5:
1997
 948               		.stabn	68,0,286,.LM117-UIMgr_processReceivedData
1998
 949               	.LM117:
1999
 950 036e D901      		movw r26,r18
2000
 951               	/* #APP */
2001
 952 0370 092E      		mov __tmp_reg__,r25
2002
 953 0372 00D0      		rcall __eeprom_write_byte_1C1D1E
2003
 954               	/* #NOAPP */
2004
 955               	.LBE37:
2005
 956               	.LBE36:
2006
 957               	.LBB38:
2007
 958               	.LBB39:
2008
 959               		.stabn	68,0,192,.LM118-UIMgr_processReceivedData
2009
 960               	.LM118:
2010
 961 0374 D901      		movw r26,r18
2011
 962               	/* #APP */
2012
 963 0376 00D0      		rcall __eeprom_read_byte_1C1D1E
2013
 964 0378 802D      		mov r24,__tmp_reg__
2014
 965               	/* #NOAPP */
2015
 966               	.LBE39:
2016
 967               	.LBE38:
2017
 968               		.stabs	"UIMgr.c",132,0,0,.Ltext6
2018
 969               	.Ltext6:
2019
 970               		.stabn	68,0,384,.LM119-UIMgr_processReceivedData
2020
 971               	.LM119:
2021
 972 037a 9881      		ld r25,Y
2022
 973 037c 9817      		cp r25,r24
2023
 974 037e 31F0      		breq .L95
2024
 975               	.LBB40:
2025
 976               	.LBB41:
2026
 977               		.stabs	"/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext7
2027
 978               	.Ltext7:
2028
 979               		.stabn	68,0,286,.LM120-UIMgr_processReceivedData
2029
 980               	.LM120:
2030
 981 0380 D901      		movw r26,r18
2031
 982               	/* #APP */
2032
 983 0382 092E      		mov __tmp_reg__,r25
2033
 984 0384 00D0      		rcall __eeprom_write_byte_1C1D1E
2034
 985               	/* #NOAPP */
2035
 986               	.LBE41:
2036
 987               	.LBE40:
2037
 988               	.LBB42:
2038
 989               	.LBB43:
2039
 990               		.stabn	68,0,192,.LM121-UIMgr_processReceivedData
2040
 991               	.LM121:
2041
GAS LISTING /tmp/cc2L16GD.s 			page 35
2042
 
2043
 
2044
 992 0386 D901      		movw r26,r18
2045
 993               	/* #APP */
2046
 994 0388 00D0      		rcall __eeprom_read_byte_1C1D1E
2047
 995 038a 802D      		mov r24,__tmp_reg__
2048
 996               	/* #NOAPP */
2049
 997               	.L95:
2050
 998               	.LBE43:
2051
 999               	.LBE42:
2052
 1000               		.stabs	"UIMgr.c",132,0,0,.Ltext8
2053
 1001               	.Ltext8:
2054
 1002               		.stabn	68,0,367,.LM122-UIMgr_processReceivedData
2055
 1003               	.LM122:
2056
 1004 038c 4F5F      		subi r20,lo8(-(1))
2057
 1005 038e 8091 0000 		lds r24,tokenCount
2058
 1006 0392 4817      		cp r20,r24
2059
 1007 0394 88F2      		brlo .L94
2060
 1008               	.L73:
2061
 1009               	.LBE29:
2062
 1010               	.LBE28:
2063
 1011               		.stabn	68,0,235,.LM123-UIMgr_processReceivedData
2064
 1012               	.LM123:
2065
 1013 0396 1092 0000 		sts tokenCount,__zero_reg__
2066
 1014               		.stabn	68,0,236,.LM124-UIMgr_processReceivedData
2067
 1015               	.LM124:
2068
 1016 039a 80E4      		ldi r24,lo8(64)
2069
 1017 039c E0E0      		ldi r30,lo8(tokenBuffer)
2070
 1018 039e F0E0      		ldi r31,hi8(tokenBuffer)
2071
 1019 03a0 1192      		st Z+,__zero_reg__
2072
 1020 03a2 8A95      	        dec r24
2073
 1021 03a4 E9F7      		brne .-6
2074
 1022 03a6 3FC0      		rjmp .L119
2075
 1023               	.L66:
2076
 1024               		.stabn	68,0,238,.LM125-UIMgr_processReceivedData
2077
 1025               	.LM125:
2078
 1026 03a8 9032      		cpi r25,lo8(32)
2079
 1027 03aa F1F4      		brne .L99
2080
 1028               		.stabn	68,0,241,.LM126-UIMgr_processReceivedData
2081
 1029               	.LM126:
2082
 1030 03ac 8091 0000 		lds r24,tokenCount
2083
 1031 03b0 8823      		tst r24
2084
 1032 03b2 39F4      		brne .L101
2085
 1033               		.stabn	68,0,243,.LM127-UIMgr_processReceivedData
2086
 1034               	.LM127:
2087
 1035 03b4 8FDE      		rcall UIMgr_convertTokenToCmd
2088
 1036               		.stabn	68,0,244,.LM128-UIMgr_processReceivedData
2089
 1037               	.LM128:
2090
 1038 03b6 8091 0000 		lds r24,tokenCount
2091
 1039 03ba 8F5F      		subi r24,lo8(-(1))
2092
 1040 03bc 8093 0000 		sts tokenCount,r24
2093
 1041 03c0 32C0      		rjmp .L119
2094
 1042               	.L101:
2095
 1043               		.stabn	68,0,254,.LM129-UIMgr_processReceivedData
2096
 1044               	.LM129:
2097
 1045 03c2 9927      		clr r25
2098
 1046 03c4 CF97      		sbiw r24,63
2099
 1047 03c6 4CF0      		brlt .L103
2100
 1048               		.stabn	68,0,259,.LM130-UIMgr_processReceivedData
2101
GAS LISTING /tmp/cc2L16GD.s 			page 36
2102
 
2103
 
2104
 1049               	.LM130:
2105
 1050 03c8 1092 0000 		sts charCount,__zero_reg__
2106
 1051               		.stabn	68,0,260,.LM131-UIMgr_processReceivedData
2107
 1052               	.LM131:
2108
 1053 03cc 1092 0000 		sts charIndex,__zero_reg__
2109
 1054               		.stabn	68,0,261,.LM132-UIMgr_processReceivedData
2110
 1055               	.LM132:
2111
 1056 03d0 1092 0000 		sts tokenCount,__zero_reg__
2112
 1057               		.stabn	68,0,262,.LM133-UIMgr_processReceivedData
2113
 1058               	.LM133:
2114
 1059 03d4 F092 0000 		sts receivedCmd,r15
2115
 1060 03d8 26C0      		rjmp .L119
2116
 1061               	.L103:
2117
 1062               		.stabn	68,0,267,.LM134-UIMgr_processReceivedData
2118
 1063               	.LM134:
2119
 1064 03da F6DE      		rcall UIMgr_convertTokenToValue
2120
 1065               		.stabn	68,0,268,.LM135-UIMgr_processReceivedData
2121
 1066               	.LM135:
2122
 1067 03dc 8091 0000 		lds r24,tokenCount
2123
 1068 03e0 8F5F      		subi r24,lo8(-(1))
2124
 1069 03e2 8093 0000 		sts tokenCount,r24
2125
 1070 03e6 1FC0      		rjmp .L119
2126
 1071               	.L99:
2127
 1072               		.stabn	68,0,272,.LM136-UIMgr_processReceivedData
2128
 1073               	.LM136:
2129
 1074 03e8 892F      		mov r24,r25
2130
 1075 03ea 8154      		subi r24,lo8(-(-65))
2131
 1076 03ec 8A31      		cpi r24,lo8(26)
2132
 1077 03ee 18F0      		brlo .L105
2133
 1078 03f0 8F5E      		subi r24,lo8(-(17))
2134
 1079 03f2 8A30      		cpi r24,lo8(10)
2135
 1080 03f4 B0F4      		brsh .L107
2136
 1081               	.L105:
2137
 1082               		.stabn	68,0,276,.LM137-UIMgr_processReceivedData
2138
 1083               	.LM137:
2139
 1084 03f6 8091 0000 		lds r24,charIndex
2140
 1085 03fa E82F      		mov r30,r24
2141
 1086 03fc FF27      		clr r31
2142
 1087 03fe E050      		subi r30,lo8(-(asciiTokenBuffer))
2143
 1088 0400 F040      		sbci r31,hi8(-(asciiTokenBuffer))
2144
 1089 0402 9083      		st Z,r25
2145
 1090               		.stabn	68,0,277,.LM138-UIMgr_processReceivedData
2146
 1091               	.LM138:
2147
 1092 0404 9091 0000 		lds r25,charCount
2148
 1093 0408 9F5F      		subi r25,lo8(-(1))
2149
 1094 040a 9093 0000 		sts charCount,r25
2150
 1095               		.stabn	68,0,278,.LM139-UIMgr_processReceivedData
2151
 1096               	.LM139:
2152
 1097 040e 8F5F      		subi r24,lo8(-(1))
2153
 1098 0410 8093 0000 		sts charIndex,r24
2154
 1099               		.stabn	68,0,279,.LM140-UIMgr_processReceivedData
2155
 1100               	.LM140:
2156
 1101 0414 9430      		cpi r25,lo8(4)
2157
 1102 0416 38F0      		brlo .L119
2158
 1103               		.stabn	68,0,284,.LM141-UIMgr_processReceivedData
2159
 1104               	.LM141:
2160
 1105 0418 F092 0000 		sts receivedCmd,r15
2161
GAS LISTING /tmp/cc2L16GD.s 			page 37
2162
 
2163
 
2164
 1106               		.stabn	68,0,285,.LM142-UIMgr_processReceivedData
2165
 1107               	.LM142:
2166
 1108 041c 1092 0000 		sts charIndex,__zero_reg__
2167
 1109 0420 02C0      		rjmp .L119
2168
 1110               	.L107:
2169
 1111               		.stabn	68,0,291,.LM143-UIMgr_processReceivedData
2170
 1112               	.LM143:
2171
 1113 0422 F092 0000 		sts receivedCmd,r15
2172
 1114               	.L119:
2173
 1115               		.stabn	68,0,199,.LM144-UIMgr_processReceivedData
2174
 1116               	.LM144:
2175
 1117 0426 2091 0000 		lds r18,UIMgr_rxFifoTail
2176
 1118 042a 8091 0000 		lds r24,UIMgr_rxFifoHead
2177
 1119 042e 8217      		cp r24,r18
2178
 1120 0430 09F0      		breq .+2
2179
 1121 0432 FACE      		rjmp .L65
2180
 1122               		.stabn	68,0,295,.LM145-UIMgr_processReceivedData
2181
 1123               	.LM145:
2182
 1124               	/* #APP */
2183
 1125 0434 E894      		clt
2184
 1126               	/* #NOAPP */
2185
 1127               	/* epilogue: frame size=0 */
2186
 1128 0436 DF91      		pop r29
2187
 1129 0438 CF91      		pop r28
2188
 1130 043a 1F91      		pop r17
2189
 1131 043c 0F91      		pop r16
2190
 1132 043e FF90      		pop r15
2191
 1133 0440 0895      		ret
2192
 1134               	/* epilogue end (size=6) */
2193
 1135               	/* function UIMgr_processReceivedData size 297 (286) */
2194
 1136               		.size	UIMgr_processReceivedData, .-UIMgr_processReceivedData
2195
 1137               		.stabs	"tmpData:r(0,11)",64,0,194,25
2196
 1138               		.stabn	192,0,0,UIMgr_processReceivedData-UIMgr_processReceivedData
2197
 1139               		.stabs	"dataByte:r(0,11)",64,0,609,25
2198
 1140               		.stabn	192,0,0,.LBB23-UIMgr_processReceivedData
2199
 1141               		.stabn	224,0,0,.LBE23-UIMgr_processReceivedData
2200
 1142               		.stabn	224,0,0,.Lscope9-UIMgr_processReceivedData
2201
 1143               	.Lscope9:
2202
 1144               		.stabs	"",36,0,0,.Lscope9-UIMgr_processReceivedData
2203
 1145               		.stabd	78,0,0
2204
 1146               		.stabs	"UIMgr_dispatchEvent:F(0,15)",36,0,152,UIMgr_dispatchEvent
2205
 1147               		.stabs	"event:P(0,11)",64,0,151,24
2206
 1148               	.global	UIMgr_dispatchEvent
2207
 1149               		.type	UIMgr_dispatchEvent, @function
2208
 1150               	UIMgr_dispatchEvent:
2209
 1151               		.stabd	46,0,0
2210
 1152               		.stabn	68,0,152,.LM146-UIMgr_dispatchEvent
2211
 1153               	.LM146:
2212
 1154               	/* prologue: frame size=0 */
2213
 1155               	/* prologue end (size=0) */
2214
 1156               		.stabn	68,0,153,.LM147-UIMgr_dispatchEvent
2215
 1157               	.LM147:
2216
 1158 0442 8031      		cpi r24,lo8(16)
2217
 1159 0444 29F0      		breq .L123
2218
 1160               		.stabn	68,0,153,.LM148-UIMgr_dispatchEvent
2219
 1161               	.LM148:
2220
 1162 0446 8039      		cpi r24,lo8(-112)
2221
GAS LISTING /tmp/cc2L16GD.s 			page 38
2222
 
2223
 
2224
 1163 0448 39F0      		breq .L124
2225
 1164 044a 8130      		cpi r24,lo8(1)
2226
 1165 044c 31F4      		brne .L125
2227
 1166 044e 02C0      		rjmp .L122
2228
 1167               	.L123:
2229
 1168               		.stabn	68,0,156,.LM149-UIMgr_dispatchEvent
2230
 1169               	.LM149:
2231
 1170 0450 38DE      		rcall UIMgr_transmitPendingData
2232
 1171 0452 0895      		ret
2233
 1172               	.L122:
2234
 1173               		.stabn	68,0,160,.LM150-UIMgr_dispatchEvent
2235
 1174               	.LM150:
2236
 1175 0454 DFDE      		rcall UIMgr_processReceivedData
2237
 1176 0456 0895      		ret
2238
 1177               	.L124:
2239
 1178               		.stabn	68,0,164,.LM151-UIMgr_dispatchEvent
2240
 1179               	.LM151:
2241
 1180 0458 0EDE      		rcall UIMgr_flushTxBuffer
2242
 1181               	.L125:
2243
 1182 045a 0895      		ret
2244
 1183               	/* epilogue: frame size=0 */
2245
 1184               	/* epilogue: noreturn */
2246
 1185               	/* epilogue end (size=0) */
2247
 1186               	/* function UIMgr_dispatchEvent size 13 (13) */
2248
 1187               		.size	UIMgr_dispatchEvent, .-UIMgr_dispatchEvent
2249
 1188               	.Lscope10:
2250
 1189               		.stabs	"",36,0,0,.Lscope10-UIMgr_dispatchEvent
2251
 1190               		.stabd	78,0,0
2252
 1191               	.global	UIMgr_rxFifoHead
2253
 1192               	.global	UIMgr_rxFifoHead
2254
 1193               		.section .bss
2255
 1194               		.type	UIMgr_rxFifoHead, @object
2256
 1195               		.size	UIMgr_rxFifoHead, 1
2257
 1196               	UIMgr_rxFifoHead:
2258
 1197 0000 00        		.skip 1,0
2259
 1198               	.global	UIMgr_rxFifoTail
2260
 1199               	.global	UIMgr_rxFifoTail
2261
 1200               		.type	UIMgr_rxFifoTail, @object
2262
 1201               		.size	UIMgr_rxFifoTail, 1
2263
 1202               	UIMgr_rxFifoTail:
2264
 1203 0001 00        		.skip 1,0
2265
 1204               	.global	UIMgr_txFifoHead
2266
 1205               	.global	UIMgr_txFifoHead
2267
 1206               		.type	UIMgr_txFifoHead, @object
2268
 1207               		.size	UIMgr_txFifoHead, 1
2269
 1208               	UIMgr_txFifoHead:
2270
 1209 0002 00        		.skip 1,0
2271
 1210               	.global	UIMgr_txFifoTail
2272
 1211               	.global	UIMgr_txFifoTail
2273
 1212               		.type	UIMgr_txFifoTail, @object
2274
 1213               		.size	UIMgr_txFifoTail, 1
2275
 1214               	UIMgr_txFifoTail:
2276
 1215 0003 00        		.skip 1,0
2277
 1216               		.lcomm tokenCount,1
2278
 1217               		.data
2279
 1218               		.type	receivedCmd, @object
2280
 1219               		.size	receivedCmd, 1
2281
GAS LISTING /tmp/cc2L16GD.s 			page 39
2282
 
2283
 
2284
 1220               	receivedCmd:
2285
 1221 0000 08        		.byte	8
2286
 1222               		.lcomm charCount,1
2287
 1223               		.lcomm charIndex,1
2288
 1224               		.type	AVRcamVersion, @object
2289
 1225               		.size	AVRcamVersion, 13
2290
 1226               	AVRcamVersion:
2291
 1227 0001 4156 5263 		.string	"AVRcam v1.4\r"
2292
 1227      616D 2076 
2293
 1227      312E 340D 
2294
 1227      00
2295
 1228               		.lcomm asciiTokenBuffer,4
2296
 1229               		.lcomm tokenBuffer,64
2297
 1230               		.comm UIMgr_rxFifo,32,1
2298
 1231               		.comm UIMgr_txFifo,64,1
2299
 1232               		.stabs	"charCount:S(0,11)",38,0,92,charCount
2300
 1233               		.stabs	"charIndex:S(0,11)",38,0,93,charIndex
2301
 1234               		.stabs	"asciiTokenBuffer:S(0,21)=ar(0,22)=r(0,22);0;0177777;;0;3;(0,11)",40,0,94,asciiTokenBuffer
2302
 1235               		.stabs	"tokenCount:S(0,11)",38,0,95,tokenCount
2303
 1236               		.stabs	"tokenBuffer:S(0,23)=ar(0,22);0;63;(0,11)",40,0,96,tokenBuffer
2304
 1237               		.stabs	"receivedCmd:S(0,17)",38,0,97,receivedCmd
2305
 1238               		.stabs	"AVRcamVersion:S(0,24)=ar(0,22);0;12;(0,11)",38,0,98,AVRcamVersion
2306
 1239               		.stabs	"UIMgr_rxFifo:G(0,25)=ar(0,22);0;31;(0,11)",32,0,111,0
2307
 1240               		.stabs	"UIMgr_rxFifoHead:G(0,11)",32,0,112,0
2308
 1241               		.stabs	"UIMgr_rxFifoTail:G(0,11)",32,0,113,0
2309
 1242               		.stabs	"UIMgr_txFifo:G(0,23)",32,0,115,0
2310
 1243               		.stabs	"UIMgr_txFifoHead:G(0,11)",32,0,116,0
2311
 1244               		.stabs	"UIMgr_txFifoTail:G(0,11)",32,0,117,0
2312
 1245               		.text
2313
 1246               		.stabs	"",100,0,0,.Letext0
2314
 1247               	.Letext0:
2315
 1248               	/* File "UIMgr.c": code  582 = 0x0246 ( 557), prologues   9, epilogues  16 */
2316
GAS LISTING /tmp/cc2L16GD.s 			page 40
2317
 
2318
 
2319
DEFINED SYMBOLS
2320
                            *ABS*:00000000 UIMgr.c
2321
     /tmp/cc2L16GD.s:3      *ABS*:0000003f __SREG__
2322
     /tmp/cc2L16GD.s:4      *ABS*:0000003e __SP_H__
2323
     /tmp/cc2L16GD.s:5      *ABS*:0000003d __SP_L__
2324
     /tmp/cc2L16GD.s:6      *ABS*:00000000 __tmp_reg__
2325
     /tmp/cc2L16GD.s:7      *ABS*:00000001 __zero_reg__
2326
     /tmp/cc2L16GD.s:94     .text:00000000 UIMgr_writeBufferToTxFifo
2327
                            *COM*:00000040 UIMgr_txFifo
2328
     /tmp/cc2L16GD.s:1208   .bss:00000002 UIMgr_txFifoHead
2329
     /tmp/cc2L16GD.s:159    .text:0000003c UIMgr_readTxFifo
2330
     /tmp/cc2L16GD.s:1214   .bss:00000003 UIMgr_txFifoTail
2331
     /tmp/cc2L16GD.s:206    .text:0000005a UIMgr_writeTxFifo
2332
     /tmp/cc2L16GD.s:246    .text:00000076 UIMgr_flushTxBuffer
2333
     /tmp/cc2L16GD.s:284    .text:00000094 UIMgr_txBuffer
2334
     /tmp/cc2L16GD.s:333    .text:000000c2 UIMgr_transmitPendingData
2335
     /tmp/cc2L16GD.s:361    .text:000000d4 UIMgr_convertTokenToCmd
2336
     /tmp/cc2L16GD.s:1223   .bss:00000007 asciiTokenBuffer
2337
     /tmp/cc2L16GD.s:1220   .data:00000000 receivedCmd
2338
     /tmp/cc2L16GD.s:1222   .bss:00000006 charIndex
2339
     /tmp/cc2L16GD.s:1216   .bss:00000005 charCount
2340
     /tmp/cc2L16GD.s:503    .text:00000192 UIMgr_init
2341
     /tmp/cc2L16GD.s:1228   .bss:0000000b tokenBuffer
2342
                            *COM*:00000020 UIMgr_rxFifo
2343
     /tmp/cc2L16GD.s:549    .text:000001c8 UIMgr_convertTokenToValue
2344
                             .bss:00000004 tokenCount
2345
     /tmp/cc2L16GD.s:619    .text:00000214 UIMgr_processReceivedData
2346
     /tmp/cc2L16GD.s:1202   .bss:00000001 UIMgr_rxFifoTail
2347
     /tmp/cc2L16GD.s:1226   .data:00000001 AVRcamVersion
2348
     /tmp/cc2L16GD.s:1196   .bss:00000000 UIMgr_rxFifoHead
2349
     /tmp/cc2L16GD.s:1150   .text:00000442 UIMgr_dispatchEvent
2350
 
2351
UNDEFINED SYMBOLS
2352
__do_copy_data
2353
__do_clear_bss
2354
UartInt_txByte
2355
atoi
2356
Utility_delay
2357
Exec_writeEventFifo
2358
CamInt_resetCam
2359
CamConfig_setCamReg
2360
CamConfig_sendFifoCmds
2361
colorMap
2362
__eeprom_read_byte_1C1D1E
2363
__eeprom_write_byte_1C1D1E