📄 rc7017uart.lst
字号:
267 2 else if( status&BIT4 )
268 2 psdev->remote.fiber_status[fiber] |= FIBER_E_3;
269 2 /* else if( status&BIT3 )
270 2 psdev->remote.fiber_status[fiber] |= FIBER_E_6;*/
271 2 }
272 1 }
273
274 void remote_alarm_check_fiber_status_with_als( BYTE status )
275 {
276 1 SYSTEM_INFOMATION *psys = &gSystemInfo;
277 1 BYTE xdata chip_status;
278 1
279 1 chip_status = fiber_status_form_var( psys->valar[6] );
280 1 remote_alarm_check( chip_status, status );
281 1 }
282
283 void remote_alarm_check_fiber_status_without_als( BYTE status )
284 {
285 1 SYSTEM_INFOMATION *psys = &gSystemInfo;
286 1 BYTE xdata chip_status;
287 1
288 1 chip_status = ( psys->valar[6] ) >> 6;
289 1 remote_alarm_check( chip_status, status );
290 1 }
291
292 void local_alarm_check( BYTE chip_status, BYTE status )
293 {
294 1 SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
295 1 BYTE xdata fiber;
296 1
297 1 for( fiber=0; fiber<MAX_FIBER_NOMBER; fiber++ )
298 1 {
299 2 psdev->local.fiber_status[fiber] &= FIBER_NOALARM;
300 2 if( !((chip_status>>fiber)&BIT0) )
301 2 psdev->local.fiber_status[fiber] |= FIBER_LOS;
302 2 }
C51 COMPILER V7.20 RC7017UART 02/20/2006 10:13:55 PAGE 6
303 1
304 1 fiber = get_use_fiber( psdev->local.fiber_status );
305 1 if( (psdev->local.fiber_status[fiber]&FIBER_ALARM_STATUS) == FIBER_OK )
306 1 {
307 2 if( status&BIT5 )
308 2 psdev->local.fiber_status[fiber] |= FIBER_LFA;
309 2 else if( status&BIT4 )
310 2 psdev->local.fiber_status[fiber] |= FIBER_E_3;
311 2 /* else if( status&BIT3 )
312 2 psdev->local.fiber_status[fiber] |= FIBER_E_6;*/
313 2 }
314 1
315 1 if( check_remote_status() == ALARM )
316 1 {
317 2 psdev->remote.fiber_status[0] &= FIBER_NOALARM;
318 2 psdev->remote.fiber_status[1] &= FIBER_NOALARM;
319 2 }
320 1 }
321
322 void local_alarm_check_fiber_status_with_als( BYTE status )
323 {
324 1 BYTE xdata chip_status;
325 1 BYTE xdata local_chip;
326 1
327 1 local_chip = ReadChip( LOCAL_STATUS_ADDR );
328 1
329 1 chip_status = fiber_status_form_chip( local_chip );
330 1 local_alarm_check( chip_status, status );
331 1 }
332
333 void local_alarm_check_fiber_status_without_als( BYTE status )
334 {
335 1 BYTE xdata chip_status;
336 1
337 1 chip_status = ReadChip( LOCAL_STATUS_ADDR );
338 1
339 1 local_alarm_check( chip_status, status );
340 1 }
341
342 BYTE get_local_als_status( void )
343 {
344 1 SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
345 1
346 1 if( psdev->local.program&BIT1 )
347 1 return 0;
348 1 return 1;
349 1 }
350
351 void local_alarm_check_fiber_status( BYTE status )
352 {
353 1 if( get_local_als_status() )
354 1 local_alarm_check_fiber_status_without_als( status );
355 1 else
356 1 local_alarm_check_fiber_status_with_als( status );
357 1 }
358
359 void remote_alarm_check_fiber_status( BYTE status )
360 {
361 1 if( get_local_als_status() )
362 1 remote_alarm_check_fiber_status_without_als( status );
363 1 else
364 1 remote_alarm_check_fiber_status_with_als( status );
C51 COMPILER V7.20 RC7017UART 02/20/2006 10:13:55 PAGE 7
365 1 }
366
367 void serial_alarm_command( SERIALSTRUCT *pUart, SYSTEM_INFOMATION *psys )
368 {
369 1 SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
370 1
371 1 if ( psys->sendrc7017 != SETCMDSERIAL )
372 1 psys->sendrc7017= VALARSERIAL;
373 1
374 1 memcpy( &(psys->alarm), pUart->ReceiceBuffer, pUart->ReceiceLength );
375 1
376 1 alarm_check_first_status( psdev, psys->alarm[3] );
377 1
378 1 alarm_check_local_e1_alarm_status( psdev, psys );
379 1 local_alarm_check_fiber_status( psys->alarm[6] );
380 1
381 1 alarm_check_remote_e1_alarm_status( psdev, psys );
382 1 remote_alarm_check_fiber_status( psys->alarm[9] );
383 1 }
384
385 void alarm_check_remote_e1_loop_status( SYSTEM_DEVICE_STATUS *psdev, SYSTEM_INFOMATION *psys )
386 {
387 1 BYTE counter;
388 1
389 1 for( counter=0; counter<psys->max_system_e1; counter++ )
390 1 {
391 2 psdev->local.e1_status[counter] &= E1_NOLOOP;
392 2
393 2 if( ((psys->valar[5]>>counter)&BIT0) )
394 2 psdev->local.e1_status[counter] |= E1_LOOP;
395 2 }
396 1 }
397
398 void remote_device_type( BYTE status )
399 {
400 1 SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;
401 1 BYTE xdata program_type;
402 1
403 1 program_type = (status&7) | 0x80;
404 1 psdev->remote.program = program_type;
405 1 }
406
407 void serial_valar_command( SERIALSTRUCT *pUart, SYSTEM_INFOMATION *psys )
408 {
409 1 SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
410 1 BYTE *pbuffer;
411 1
412 1 pbuffer = pUart->ReceiceBuffer;
413 1
414 1 if ( psys->sendrc7017 != SETCMDSERIAL )
415 1 psys->sendrc7017= ALARMSERIAL;
416 1
417 1 pbuffer += RC7017_VALAR_ADDRESS;
418 1 memcpy( &(psys->valar), pbuffer, RC7017_VALAR_LENGTH );
419 1
420 1
421 1 if( !((psys->valar[6])&BIT5) )
422 1 {
423 2 psdev->remote.fiber_status[0] &= FIBER_USE;
424 2 psdev->remote.fiber_status[1] |= FIBER_NOUSE;
425 2 }
426 1 else
C51 COMPILER V7.20 RC7017UART 02/20/2006 10:13:55 PAGE 8
427 1 {
428 2 psdev->remote.fiber_status[0] |= FIBER_NOUSE;
429 2 psdev->remote.fiber_status[1] &= FIBER_USE;
430 2 }
431 1
432 1 if( disable_remote_alarm_status() == ALARM )
433 1 return;
434 1
435 1 alarm_check_remote_e1_alarm_status( psdev, psys );
436 1 alarm_check_remote_e1_loop_status( psdev, psys );
437 1
438 1 psdev->remote.laser_close[0] = ((~(psys->valar[6]))&BIT3) >>3;
439 1 remote_device_type( psys->valar[7] );
440 1 }
441
442 BYTE serial_check_error( SERIALSTRUCT *pUart )
443 {
444 1 BYTE *pbuffer;
445 1
446 1 pbuffer = pUart->ReceiceBuffer;
447 1
448 1 if( *pbuffer != SYNCHR1_0X7E )
449 1 return ERROR;
450 1
451 1 pbuffer ++;
452 1 if( (*pbuffer != SYNCHR2_0X81) && (*pbuffer != SYNCHR2_0X82) )
453 1 return ERROR;
454 1
455 1 pbuffer += pUart->ReceiceLength - 2;
456 1 if( *pbuffer != SERIAL_END )
457 1 return ERROR;
458 1
459 1 return OK;
460 1 }
461
462 void process_rc7017_serial( SERIALSTRUCT *pUart, SYSTEM_INFOMATION *psys )
463 {
464 1 BYTE rc;
465 1 BYTE type;
466 1
467 1 if( ( rc = serial_check_error( pUart ) ) == ERROR )
468 1 return;
469 1
470 1 type = pUart->ReceiceBuffer[2]&0xc0;
471 1 switch( type )
472 1 {
473 2 case COMMAND_SET:
474 2 serial_set_command( psys );
475 2 break;
476 2
477 2 case COMMAND_ALARM:
478 2 serial_alarm_command( pUart, psys );
479 2 break;
480 2
481 2 case COMMAND_VALAR:
482 2 serial_valar_command( pUart, psys );
483 2 break;
484 2
485 2 default:
486 2 break;
487 2 }
488 1 return;
C51 COMPILER V7.20 RC7017UART 02/20/2006 10:13:55 PAGE 9
489 1 }
490
491 void rc7017_serial_process( SERIALSTRUCT *pUart )
492 {
493 1 SYSTEM_INFOMATION *psys = &gSystemInfo;
494 1
495 1 /*发送数据处理*/
496 1 if( psys->rc7017sendflag == SENDING )
497 1 {
498 2 EncapsulationSendBuffer( pUart, psys );
499 2
500 2 emulateStartSend();
501 2
502 2 psys->rc7017sendflag = SENDWAIT;
503 2 }
504 1
505 1 /*接收数据处理*/
506 1 if( gIoSerial.ReveiveStatus == RECEIVE_OVER )
507 1 {
508 2 process_rc7017_serial( pUart, psys );
509 2
510 2 pUart->ReceiceLength = 0;
511 2 pUart->ReveiveStatus = RECEIVE_WAIT;
512 2 }
513 1 }
514
515 /*对RC7017串口处理函数*/
516 void task_rc7017_serial_process(void)
517 {
518 1 SERIALSTRUCT *pUart = &gIoSerial;
519 1
520 1 rc7017_serial_process( pUart );
521 1 }
522
523
524
525
526 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2782 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 10 10
PDATA SIZE = ---- ----
DATA SIZE = ---- 106
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -