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

📄 mca25.lst

📁 ENC system full - ENC28J60
💻 LST
📖 第 1 页 / 共 5 页
字号:
 287:io/mca25.c    **** 		}
 288:io/mca25.c    **** 
 289:io/mca25.c    **** 		//new version, thanks to jesper ;)
 290:io/mca25.c    **** 		//softuart_put_uint8(mca25_buffer[1]);
 291:io/mca25.c    **** 		if ((mca25_mux_buffer[0] == 0x83) && (mca25_mux_buffer[1] == 0xEF) ){ //data channel & UIH packet
 292:io/mca25.c    **** 				dcnt++;
 293:io/mca25.c    **** 				
 294:io/mca25.c    **** 				switch (state){
 295:io/mca25.c    **** 					case 0: //check how many bytes cam want to send
 296:io/mca25.c    **** 						skip_count = ((int)mca25_mux_buffer[4]<<8) + mca25_mux_buffer[5];
 297:io/mca25.c    **** 
 298:io/mca25.c    **** 						if (skip_count > datalen){
 299:io/mca25.c    **** 							skip_count = datalen;
 300:io/mca25.c    **** 						}
 301:io/mca25.c    **** 						
 302:io/mca25.c    **** 						if (skip_count > 3){
 303:io/mca25.c    **** 							//only handle data packets -> ignore packets smaller 3 bytes (=acks)
 304:io/mca25.c    **** 							skip_count    -= ((mca25_mux_buffer[2])>>1);
 305:io/mca25.c    **** 							bufpos        += (mca25_mux_buffer[2]>>1)-6;
 306:io/mca25.c    **** 
 307:io/mca25.c    **** 							//last data packet ?!
 308:io/mca25.c    **** 							if (mca25_mux_buffer[3] == 0xA0){
 309:io/mca25.c    **** 								mca25_pic_state = MCA25_PIC_STATE_LAST_DATA; //no more data
 310:io/mca25.c    **** 							}else{
 311:io/mca25.c    **** 								mca25_pic_state = MCA25_PIC_STATE_JPG_DATA; //middle of pic
 312:io/mca25.c    **** 							}
 313:io/mca25.c    **** 							state = 1;
 314:io/mca25.c    **** 							
 315:io/mca25.c    **** 							if (skip_count <= 0){
 316:io/mca25.c    **** 								//softuart_putc('.');
 317:io/mca25.c    **** 								if (mca25_pic_state == MCA25_PIC_STATE_LAST_DATA){
 318:io/mca25.c    **** 									mca25_send_data_ack();
 319:io/mca25.c    **** 
 320:io/mca25.c    **** 									//reconfigure mux channel (?!)
 321:io/mca25.c    **** 									mca25_puts_progmem("\xF9\x01\xEF\x0B\xE3\x07\x23\x0C\x01\x79\xF9");
 322:io/mca25.c    **** 
 323:io/mca25.c    **** 									mca25_pic_state = MCA25_PIC_STATE_IDLE;
 324:io/mca25.c    **** 									mca25_datapos += bufpos;
 325:io/mca25.c    **** 									return bufpos;
 326:io/mca25.c    **** 								}else{
 327:io/mca25.c    **** 									mca25_datapos += bufpos;
 328:io/mca25.c    **** 							    return 0;
 329:io/mca25.c    **** 								}
 330:io/mca25.c    **** 							}
 331:io/mca25.c    **** 						}
 332:io/mca25.c    **** 						break;
 333:io/mca25.c    **** 					case 2:
 334:io/mca25.c    **** 					case 1:
 335:io/mca25.c    **** 						skip_count    -= ((mca25_mux_buffer[2])>>1);
 336:io/mca25.c    **** 						bufpos        += (mca25_mux_buffer[2]>>1)-0;
 337:io/mca25.c    **** 	
 338:io/mca25.c    **** 						if (skip_count <= 0){
 339:io/mca25.c    **** 							//softuart_putc('.');
 340:io/mca25.c    **** 							if (mca25_pic_state == MCA25_PIC_STATE_LAST_DATA){
 341:io/mca25.c    **** 								mca25_send_data_ack();
 342:io/mca25.c    **** 
 343:io/mca25.c    **** 								//reconfigure mux channel (?!)
 344:io/mca25.c    **** 								mca25_puts_progmem("\xF9\x01\xEF\x0B\xE3\x07\x23\x0C\x01\x79\xF9");
 345:io/mca25.c    **** 
 346:io/mca25.c    **** 								mca25_pic_state = MCA25_PIC_STATE_IDLE;
 347:io/mca25.c    **** 								mca25_datapos += bufpos;
 348:io/mca25.c    **** 								return bufpos; //last data packet !
 349:io/mca25.c    **** 							}else{
 350:io/mca25.c    **** 								mca25_datapos += bufpos;
 351:io/mca25.c    **** 								return 0; //state = 100;
 352:io/mca25.c    **** 							}
 353:io/mca25.c    **** 						}
 354:io/mca25.c    **** 						break;
 355:io/mca25.c    **** 
 356:io/mca25.c    **** 					default:
 357:io/mca25.c    **** 						break;
 358:io/mca25.c    **** 				} //case
 359:io/mca25.c    **** 				//softuart_put_uint16(skip_count);
 360:io/mca25.c    **** 			}else if (mca25_mux_buffer[0] == 0x23){
 361:io/mca25.c    **** 				//channel 0x23
 362:io/mca25.c    **** 				mca25_handle_channel_x23();
 363:io/mca25.c    **** 			}else if (mca25_mux_buffer[0] == 0x03){ 
 364:io/mca25.c    **** 				//channel 0x03
 365:io/mca25.c    **** 				mca25_handle_channel_x03();
 366:io/mca25.c    **** 			}else{
 367:io/mca25.c    **** 				/*for(unsigned char f=0; f<40; f++){
 368:io/mca25.c    **** 					softuart_put_uint8(f);
 369:io/mca25.c    **** 					softuart_putc('>');
 370:io/mca25.c    **** 					softuart_put_uint8(mca25_buffer[f]);
 371:io/mca25.c    **** 					softuart_putnewline();
 372:io/mca25.c    **** 				}softuart_putnewline();softuart_putnewline();*/
 373:io/mca25.c    **** 			}
 374:io/mca25.c    **** 		}	
 375:io/mca25.c    **** 		//softuart_puts_progmem("count=");
 376:io/mca25.c    **** 		//softuart_put_uint16(dcnt);
 377:io/mca25.c    **** 		//preview image #i has been grabbed.
 378:io/mca25.c    **** 		#if MCA25_DEBUG
 379:io/mca25.c    **** 		softuart_putc(' ');
 380:io/mca25.c    **** 		#endif
 381:io/mca25.c    **** 	
 382:io/mca25.c    **** 	return 0xFFFF;
 383:io/mca25.c    **** }
 384:io/mca25.c    **** 
 385:io/mca25.c    **** //start image grab, grab preview pictures and send jpg request
 386:io/mca25.c    **** unsigned char mca25_start_image_grab(unsigned char socketnum){
 387:io/mca25.c    **** 	unsigned char state;
 388:io/mca25.c    **** 	unsigned char datapos;
 389:io/mca25.c    **** 	int skip_count=0;
 390:io/mca25.c    **** 
 391:io/mca25.c    **** 	//switch light on (slow fade in !)
 392:io/mca25.c    **** 	//mpf10_fade(MPF10_FADE_IN);
 393:io/mca25.c    **** 	//without soft fade in:
 394:io/mca25.c    **** 	MPF10_ENABLE();
 395:io/mca25.c    **** 
 396:io/mca25.c    **** 	//reset global data byte counter	
 397:io/mca25.c    **** 	mca25_datapos = 0;
 398:io/mca25.c    **** 
 399:io/mca25.c    **** 	//allocate cam to current socket
 400:io/mca25.c    **** 	mca25_allocated_for_socket = socketnum;
 401:io/mca25.c    **** 
 402:io/mca25.c    **** 	//reset state
 403:io/mca25.c    **** 	mca25_pic_state = MCA25_PIC_STATE_IDLE; //not ready
 404:io/mca25.c    **** 
 405:io/mca25.c    **** 	if (mca25_ready == 0){
 406:io/mca25.c    **** 		//cam not initialised or missing!
 407:io/mca25.c    **** 		#if MCA25_DEBUG
 408:io/mca25.c    **** 		softuart_puts_progmem("CAM : cam not initialised or missing -> abort.");
 409:io/mca25.c    **** 		softuart_putnewline();
 410:io/mca25.c    **** 		#endif
 411:io/mca25.c    **** 		MPF10_DISABLE();
 412:io/mca25.c    **** 		return 0;
 413:io/mca25.c    **** 	}
 414:io/mca25.c    **** 		
 415:io/mca25.c    **** 	#if MCA25_DEBUG
 416:io/mca25.c    **** 	softuart_puts_progmem("CAM : starting image grab...");
 417:io/mca25.c    **** 	softuart_putnewline();
 418:io/mca25.c    **** 	softuart_puts_progmem("CAM : grabbing preview ");
 419:io/mca25.c    **** 	#endif
 420:io/mca25.c    **** 	
 421:io/mca25.c    **** 	//grab 5 preview pictures:
 422:io/mca25.c    **** 	for (char i=0; i<5; i++){
 423:io/mca25.c    **** 		#if MCA25_DEBUG
 424:io/mca25.c    **** 		softuart_put_uint8(i);
 425:io/mca25.c    **** 		#endif
 426:io/mca25.c    **** 
 427:io/mca25.c    **** 		//softuart_put_uint8(mca25_brightness);
 428:io/mca25.c    **** 		//mca25_brightness = 0;
 429:io/mca25.c    **** 
 430:io/mca25.c    **** 		if ((i==0) && (mca25_pic_state == MCA25_PIC_STATE_JPG_DATA)){
 431:io/mca25.c    **** 			// do not send start cmd ! an jpg request is already running 
 432:io/mca25.c    **** 			// -> use first "preview" to ack jpg data!
 433:io/mca25.c    **** 		}else{
 434:io/mca25.c    **** 			if (mca25_pic_state == MCA25_PIC_STATE_LAST_DATA){
 435:io/mca25.c    **** 				//last data -> send an ack !
 436:io/mca25.c    **** 				mca25_send_data_ack();
 437:io/mca25.c    **** 			}
 438:io/mca25.c    **** 		
 439:io/mca25.c    **** 			// send capture start cmd:
 440:io/mca25.c    **** 			mca25_puts_progmem2(MCA25_START_CAPTURING, sizeof(MCA25_START_CAPTURING)); 
 441:io/mca25.c    **** 		}
 442:io/mca25.c    **** 
 443:io/mca25.c    **** 		state = 0;
 444:io/mca25.c    **** 		datapos = 0;
 445:io/mca25.c    **** 	
 446:io/mca25.c    **** 		// grab actual image and tell cam to keep it in RAM
 447:io/mca25.c    **** 		// we acknowledge the _preview_ image and download
 448:io/mca25.c    **** 		// the full size image later...
 449:io/mca25.c    **** 		while (state != 100){
 450:io/mca25.c    **** 			
 451:io/mca25.c    **** 			if( ! mca25_read_mux_packet(mca25_buffer,0)){
 452:io/mca25.c    **** 				#if MCA25_DEBUG 
 453:io/mca25.c    **** 				softuart_puts_progmem("TIMEOUT! (MUX4) / previewpic");
 454:io/mca25.c    **** 				softuart_put_uint8(i);
 455:io/mca25.c    **** 				softuart_putnewline();
 456:io/mca25.c    **** 				#endif
 457:io/mca25.c    **** 
 458:io/mca25.c    **** 				//cam error, disable !
 459:io/mca25.c    **** 				mca25_ready = 0;
 460:io/mca25.c    **** 				MPF10_DISABLE();
 461:io/mca25.c    **** 				return 0; //read failed -> exit!; 
 462:io/mca25.c    **** 			}
 463:io/mca25.c    **** 
 464:io/mca25.c    **** 			//new version, thanks to jesper ;)
 465:io/mca25.c    **** 			//softuart_put_uint8(mca25_buffer[1]);
 466:io/mca25.c    **** 			if ((mca25_mux_buffer[0] == 0x83) && (mca25_mux_buffer[1] == 0xEF) ){ //data channel & UIH packe
 467:io/mca25.c    **** 				//softuart_put_uint16(skip_count);
 468:io/mca25.c    **** 				switch (state){
 469:io/mca25.c    **** 					case 0: //check how many bytes cam want to send
 470:io/mca25.c    **** 						skip_count = ((int)mca25_mux_buffer[4]<<8) + mca25_mux_buffer[5];
 471:io/mca25.c    **** 						
 472:io/mca25.c    **** 						if (skip_count > 3){
 473:io/mca25.c    **** 							//only handle data packets -> ignore packets smaller 3 bytes (=acks)
 474:io/mca25.c    **** 							skip_count -= ((mca25_mux_buffer[2])>>1);
 475:io/mca25.c    **** 
 476:io/mca25.c    **** 							//last data packet ?!
 477:io/mca25.c    **** 							if (mca25_buffer[0] == 0xA0) 
 478:io/mca25.c    **** 								state = 2;
 479:io/mca25.c    **** 							else 
 480:io/mca25.c    **** 								state = 1;
 481:io/mca25.c    **** 
 482:io/mca25.c    **** 							//estimate picture brightness by grabbing some bmp preview pixels
 483:io/mca25.c    **** 							///mca25_estimate_brightness(mca25_buffer[28]);
 484:io/mca25.c    **** 
 485:io/mca25.c    **** 							if (skip_count <= 0){
 486:io/mca25.c    **** 								//softuart_putc('.');
 487:io/mca25.c    **** 								mca25_send_data_ack();
 488:io/mca25.c    **** 								if (state == 2)
 489:io/mca25.c    **** 									state = 100;
 490:io/mca25.c    **** 								else
 491:io/mca25.c    **** 							    state = 0;
 492:io/mca25.c    **** 							}
 493:io/mca25.c    **** 						}
 494:io/mca25.c    **** 						break;
 495:io/mca25.c    **** 					case 2:
 496:io/mca25.c    **** 					case 1:
 497:io/mca25.c    **** 						skip_count -= ((mca25_mux_buffer[2])>>1);
 498:io/mca25.c    **** 						
 499:io/mca25.c    **** 						//estimate picture brightness by grabbing some bmp preview pixels
 500:io/mca25.c    **** 						///mca25_estimate_brightness(mca25_buffer[28]);
 501:io/mca25.c    **** 
 502:io/mca25.c    **** 						if (skip_count <= 0){
 503:io/mca25.c    **** 							softuart_putc('.');
 504:io/mca25.c    **** 							mca25_send_data_ack();
 505:io/mca25.c    **** 							if (state == 2)

⌨️ 快捷键说明

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