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

📄 mca25.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
  71:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Delay loop using an 8-bit counter \c __count, so up to 256
  72:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 256 would have to be passed
  73:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     as 0.)  The loop executes three CPU cycles per iteration, not
  74:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     including the overhead the compiler needs to setup the counter
  75:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     register.
  76:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  77:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
  78:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     can be achieved.
  79:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** */
  80:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** void
  81:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
  82:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** {
  83:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 	__asm__ volatile (
  84:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 		"1: dec %0" "\n\t"
  85:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 		"brne 1b"
  86:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 		: "=r" (__count)
  87:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 		: "0" (__count)
  88:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 	);
  89:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** }
  90:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  91:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
  92:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  93:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Delay loop using a 16-bit counter \c __count, so up to 65536
  94:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 65536 would have to be
  95:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     passed as 0.)  The loop executes four CPU cycles per iteration,
  96:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     not including the overhead the compiler requires to setup the
  97:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     counter register pair.
  98:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  99:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
 100:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     milliseconds can be achieved.
 101:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****  */
 102:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** void
 103:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count)
 104:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** {
 105:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 	__asm__ volatile (
 134               	,105,.LM2-.LFBB1
 135               	.LM2:
 136 0004 43E3      		ldi r20,lo8(1843)
 137 0006 57E0      		ldi r21,hi8(1843)
 138 0008 00C0      		rjmp .L2
 139               	.L4:
 140               	.LBE353:
 141               	.LBE352:
 142               	.LBE351:
 143               	.LBE350:
 144               	.LBE349:
 145               	.LBE348:
 147               	.Ltext2:
 149               	.LM3:
 150 000a 9B01      		movw r18,r22
 151               	.LBB361:
 152               	.LBB360:
 153               	.LBB357:
 121:io/mca25.c    **** 
 122:io/mca25.c    **** 
 123:io/mca25.c    **** //handle channel 0x23 data
 124:io/mca25.c    **** void mca25_handle_channel_x23(void){
 125:io/mca25.c    **** 	if (mca25_mux_buffer[1] == 0xEF){
 126:io/mca25.c    **** 		//UIH
 127:io/mca25.c    **** 		if (string_compare_progmem_plen("AT*ECUR=", mca25_buffer)){
 128:io/mca25.c    **** 			//ack current request packets:
 129:io/mca25.c    **** 			// -> send mux "\r\nOK\r\n" packet:
 130:io/mca25.c    **** 			mca25_puts_progmem("\xF9\x21\xEF\x0D\x0D\x0A\x4F\x4B\x0D\x0A\x48\xF9");
 131:io/mca25.c    **** 		}else{
 132:io/mca25.c    **** 			#if MCA25_DEBUG
 133:io/mca25.c    **** 			softuart_putc('u');
 134:io/mca25.c    **** 			#endif
 135:io/mca25.c    **** 		}
 136:io/mca25.c    **** 	}else if (mca25_mux_buffer[1] == 0x3F){
 137:io/mca25.c    **** 		//SABM
 138:io/mca25.c    **** 		mca25_puts_progmem("\xF9\x23\x73\x01\x02\xF9");
 139:io/mca25.c    **** 	}
 140:io/mca25.c    **** }
 141:io/mca25.c    **** 
 142:io/mca25.c    **** //handle channel 0x03 data
 143:io/mca25.c    **** void mca25_handle_channel_x03(void){
 144:io/mca25.c    **** 	if (mca25_mux_buffer[1] == 0xEF){
 145:io/mca25.c    **** 		//UIH
 146:io/mca25.c    **** 		if (string_compare_progmem_plen("\xE1\x07\x23\x0C\x01", mca25_buffer)){
 147:io/mca25.c    **** 			mca25_puts_progmem("\xF9\x01\xEF\x0B\xE3\x07\x23\x0C\x01\x79\xF9");
 148:io/mca25.c    **** 		}else{
 149:io/mca25.c    **** 			#if MCA25_DEBUG
 150:io/mca25.c    **** 			softuart_putc('v');
 151:io/mca25.c    **** 			#endif
 152:io/mca25.c    **** 		}
 153:io/mca25.c    **** 	}else if (mca25_mux_buffer[1] == 0x3F){
 154:io/mca25.c    **** 		//SABM
 155:io/mca25.c    **** 		mca25_puts_progmem("\xF9\x03\x73\x01\xD7\xF9");
 156:io/mca25.c    **** 	}
 157:io/mca25.c    **** }
 158:io/mca25.c    **** 
 159:io/mca25.c    **** //cleanup dead connection -> run this every second !
 160:io/mca25.c    **** void mca25_cleanup(void){
 161:io/mca25.c    **** 	if (mca25_pic_state != MCA25_PIC_STATE_IDLE){
 162:io/mca25.c    **** 		if (mca25_allocated_timeout == 0){
 163:io/mca25.c    **** 			#if MCA25_DEBUG
 164:io/mca25.c    **** 			softuart_puts_progmem("CAM : allocation to socket ");
 165:io/mca25.c    **** 			softuart_put_uint8(mca25_allocated_for_socket);
 166:io/mca25.c    **** 			softuart_puts_progmem(" removed");
 167:io/mca25.c    **** 			softuart_putnewline();
 168:io/mca25.c    **** 			#endif	
 169:io/mca25.c    **** 			mca25_pic_state = MCA25_PIC_STATE_IDLE;
 170:io/mca25.c    **** 		}else{
 171:io/mca25.c    **** 			mca25_allocated_timeout--;
 172:io/mca25.c    **** 		}
 173:io/mca25.c    **** 	}
 174:io/mca25.c    **** }
 175:io/mca25.c    **** 
 176:io/mca25.c    **** //grab jpg data & store in buffer
 177:io/mca25.c    **** unsigned int mca25_grab_data(char *buffer, unsigned int datalen, unsigned long pos, unsigned char s
 178:io/mca25.c    **** 	int skip_count=0;
 179:io/mca25.c    **** 	unsigned char state=0;
 180:io/mca25.c    **** 	
 181:io/mca25.c    **** 	mca25_allocated_timeout = 5; //5sec timeout
 182:io/mca25.c    **** 
 183:io/mca25.c    **** 	//cam is used by another user -> abort
 184:io/mca25.c    **** 	if ((mca25_pic_state != MCA25_PIC_STATE_IDLE) && (mca25_allocated_for_socket != socketnum)){
 185:io/mca25.c    **** 		return 0xFFFE;
 186:io/mca25.c    **** 	}
 187:io/mca25.c    **** 
 188:io/mca25.c    **** 	//cam is no longer working -> reset !
 189:io/mca25.c    **** 	if ((mca25_pic_state == MCA25_PIC_STATE_CAM_ERROR) || (mca25_ready == 0)){
 190:io/mca25.c    **** 		//cam not initialised or missing!
 191:io/mca25.c    **** 		#if MCA25_DEBUG
 192:io/mca25.c    **** 		softuart_puts_progmem("CAM : grab -> cam error -> retry init!");
 193:io/mca25.c    **** 		softuart_putnewline();
 194:io/mca25.c    **** 		#endif
 195:io/mca25.c    **** 		mca25_init_cam();
 196:io/mca25.c    **** 		mca25_configure();
 197:io/mca25.c    **** 		//return 0xFFFF; //-> abort this image !
 198:io/mca25.c    **** 	}
 199:io/mca25.c    **** 
 200:io/mca25.c    **** 	//we need to do a preview image:
 201:io/mca25.c    **** 	if (mca25_pic_state == MCA25_PIC_STATE_IDLE){
 202:io/mca25.c    **** 		mca25_start_image_grab(socketnum);
 203:io/mca25.c    **** 	}
 204:io/mca25.c    **** 		
 205:io/mca25.c    **** #if 1
 206:io/mca25.c    **** 	softuart_puts_progmem("CAM : req byte ");
 207:io/mca25.c    **** 	softuart_put_uint16(pos);
 208:io/mca25.c    **** 	softuart_puts_progmem(" cur pos is: ");
 209:io/mca25.c    **** 	softuart_put_uint16(mca25_datapos);
 210:io/mca25.c    **** 	softuart_putnewline();
 211:io/mca25.c    **** 	//tcp stack requested data bytes we do no longer have...
 212:io/mca25.c    **** 	//hack: dont touch ethernetbuffer & hope that data is still available.
 213:io/mca25.c    **** 	//      if buffer was used during last transfer -> picture will have errors...
 214:io/mca25.c    **** 	if (pos<mca25_datapos){
 215:io/mca25.c    **** 		int adjust = (mca25_datapos-pos)-512;
 216:io/mca25.c    **** 		if (adjust == 0){
 217:io/mca25.c    **** 			//perfect
 218:io/mca25.c    **** 			return 512;
 219:io/mca25.c    **** 		}else if(adjust > 0){
 220:io/mca25.c    **** 			//we must shift the data:
 221:io/mca25.c    **** 			for(unsigned int a=0; a<512; a++){
 222:io/mca25.c    **** 				if (a+adjust <= 512)
 223:io/mca25.c    **** 					buffer[a] = buffer[a+adjust];
 224:io/mca25.c    **** 			}
 225:io/mca25.c    **** 			return adjust; //#adjusted bytes data
 226:io/mca25.c    **** 		}else{
 227:io/mca25.c    **** 			//>512 bytes of data seems to be lost -> no way to fix it...
 228:io/mca25.c    **** 			//-> dont touch the buffer, maybe we can use the data later ...
 229:io/mca25.c    **** 			return (adjust%512);
 230:io/mca25.c    **** 		}
 231:io/mca25.c    **** 	}else if(pos>mca25_datapos){
 232:io/mca25.c    **** 		//?! how could that happen ?
 233:io/mca25.c    **** 		//FIXME:
 234:io/mca25.c    **** 		//1) ignore the missing data & continue
 235:io/mca25.c    **** 		//2) skip camera data until we have the requestet data packet...
 236:io/mca25.c    **** 		//-> use (1), change to 2 later ?!
 237:io/mca25.c    **** 	}
 238:io/mca25.c    **** #endif
 239:io/mca25.c    **** 
 240:io/mca25.c    **** 	#if MCA25_DEBUG
 241:io/mca25.c    **** 	/*softuart_puts_progmem("CAM : grab data starting at byte ");
 242:io/mca25.c    **** 	softuart_put_uint16(pos>>16);
 243:io/mca25.c    **** 	softuart_put_uint16(pos&0xFFFF);
 244:io/mca25.c    **** 	softuart_puts_progmem(", current pos is ");
 245:io/mca25.c    **** 	softuart_put_uint16(mca25_datapos>>16);
 246:io/mca25.c    **** 	softuart_put_uint16(mca25_datapos&0xFFFF);
 247:io/mca25.c    **** 	softuart_putnewline();*/
 248:io/mca25.c    **** 	#endif
 249:io/mca25.c    **** 
 250:io/mca25.c    **** 	unsigned int dcnt=0;
 251:io/mca25.c    **** 	unsigned int res=0;
 252:io/mca25.c    **** 	unsigned int bufpos=0;
 253:io/mca25.c    **** 
 254:io/mca25.c    **** 	//we have received data -> send an ack !
 255:io/mca25.c    **** 	if ((mca25_pic_state == MCA25_PIC_STATE_JPG_DATA) || (mca25_pic_state ==  MCA25_PIC_STATE_LAST_DAT
 256:io/mca25.c    **** 		mca25_send_data_ack();
 257:io/mca25.c    **** 	}
 258:io/mca25.c    **** 
 259:io/mca25.c    **** 	//do the statemachine
 260:io/mca25.c    **** 	while (state != 100){
 261:io/mca25.c    **** 		if (state == 0)
 262:io/mca25.c    **** 			res = mca25_read_mux_packet(&buffer[bufpos],6);
 263:io/mca25.c    **** 		else
 264:io/mca25.c    **** 			res = mca25_read_mux_packet(&buffer[bufpos],0);
 265:io/mca25.c    **** 		if (res == 0){
 266:io/mca25.c    **** 			#if MCA25_DEBUG 
 267:io/mca25.c    **** 			softuart_puts_progmem("TIMEOUT! (MUX J)");
 268:io/mca25.c    **** 			softuart_putnewline();
 269:io/mca25.c    **** 			softuart_puts_progmem("dcount=");
 270:io/mca25.c    **** 			softuart_put_uint16(dcnt);
 271:io/mca25.c    **** 			softuart_putnewline();
 272:io/mca25.c    **** 			#endif
 273:io/mca25.c    **** 
 274:io/mca25.c    **** 			//cam error, disable !
 275:io/mca25.c    **** 			mca25_ready = 0;
 276:io/mca25.c    **** 			return 0xFFFF; //read failed -> exit!; 
 277:io/mca25.c    **** 		}
 278:io/mca25.c    **** 	
 279:io/mca25.c    **** 		if (bufpos>datalen){
 280:io/mca25.c    **** 			#if MCA25_DEBUG 
 281:io/mca25.c    **** 			softuart_puts_progmem("CAM : buf overflow! ");
 282:io/mca25.c    **** 			softuart_put_uint16(skip_count);
 283:io/mca25.c    **** 			softuart_put_uint16(bufpos);
 284:io/mca25.c    **** 			softuart_putnewline();
 285:io/mca25.c    **** 			#endif
 286:io/mca25.c    **** 			return 0xFFFF;

⌨️ 快捷键说明

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