Subversion Repositories pentevo

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. /*3                                             9
  2.  ┌───────────────────────────────────────────────┐
  3.  │      ┌──────────┬─────────────────────┐       │
  4.  │      │ pc/win32 │  TESTCOM            │       │
  5.  │      ├──────────┘                     │       │
  6.  │      │ Bit rate 115200   No parity    │       │
  7.  │      │ Data bits 8       Flow control │       │
  8.  │      │ Stop bits 2        √ RTS/CTS   │       │
  9.  │      │                   DSR - Ignored│       │
  10.  │      │           Start BERT           │       │
  11.  │      └───────────────┬────────────────┘       │
  12.  │                      │COM port                │
  13.  │                      │                        │
  14.  │                RS-232│                        │
  15.  │┌────────┬────────────┴───────────────────────┐│
  16.  ││ ZX-Evo │   Last sec        65535 sec        ││16
  17.  │├────────┘     10472            10472         ││17
  18.  ││ RxBuff ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ RTS ││18
  19.  ││ TxBuff ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ CTS ││19
  20.  │└─────────────────────────────────────────────┘│20
  21.  └───────────────────────────────────────────────┘
  22.   3                                             9 */
  23. //-----------------------------------------------------------------------------
  24.  
  25. #include "_global.h"
  26. #include "_screen.h"
  27. #include "_ps2k.h"
  28. #include <avr/interrupt.h>
  29. #include "_uart.h"
  30.  
  31. typedef struct {
  32.  u16 timeout;
  33.  u16 seconds;
  34.  u16 count_last;
  35.  u32 count_total;
  36. } TRS;
  37.  
  38. //-----------------------------------------------------------------------------
  39.  
  40. const WIND_DESC wind_t_rs_1 PROGMEM = { 2, 2,49,20,0xdf,0x01 };
  41. const WIND_DESC wind_t_rs_2 PROGMEM = { 9, 3,34, 9,0xdf,0x00 };
  42. const WIND_DESC wind_t_rs_3 PROGMEM = { 9, 3,12, 3,0xdf,0x00 };
  43. const WIND_DESC wind_t_rs_4 PROGMEM = { 3,15,47, 6,0xdf,0x00 };
  44. const WIND_DESC wind_t_rs_5 PROGMEM = { 3,15,10, 3,0xdf,0x00 };
  45.  
  46. //-----------------------------------------------------------------------------
  47.  
  48. void t_rs_clrbuffs(void)
  49. {
  50.  cli();
  51.  uart_rx_hd=0;
  52.  uart_rx_tl=0;
  53.  uart_tx_hd=0;
  54.  uart_tx_tl=0;
  55.  RTS_CLR();
  56.  sei();
  57. }
  58.  
  59. //-----------------------------------------------------------------------------
  60.  
  61. void t_rsbar0(u8 sz)
  62. {
  63.  if (sz)  scr_fill_char(0xdb,sz);               // '█'
  64.  sz=32-sz;
  65.  if (sz)  scr_fill_char(0xb0,sz);               // '░'
  66.  scr_putchar(0x20);
  67. }
  68.  
  69. //-----------------------------------------------------------------------------
  70.  
  71. void t_rs_status(TRS *trs)
  72. {
  73.  set_timeout_ms(&trs->timeout,1000);
  74.  
  75.  scr_set_cursor(32,16);
  76.  trs->seconds++;
  77.  if (trs->seconds==0)
  78.  {
  79.   trs->count_last=0;
  80.   trs->count_total=0;
  81.  }
  82.  print_dec16(trs->seconds);
  83.  
  84.  scr_set_cursor(18,17);
  85.  print_dec16(trs->count_last);
  86.  trs->count_last=0;
  87.  
  88.  scr_set_cursor(32,17);
  89.  if (trs->seconds)
  90.   print_dec16((u16)(trs->count_total/trs->seconds));
  91.  else
  92.   print_dec16(0);
  93. }
  94.  
  95. //-----------------------------------------------------------------------------
  96.  
  97. void Test_RS232(void)
  98. {
  99.  flags1&=0b11111100;
  100.  flags1|=0b00000100;
  101.  scr_window(&wind_t_rs_1);
  102.  scr_window(&wind_t_rs_2);
  103.  scr_window(&wind_t_rs_3);
  104.  scr_window(&wind_t_rs_4);
  105.  scr_window(&wind_t_rs_5);
  106.  scr_print_msg(msg_trs_1);
  107.  TRS trs;
  108.  u8 go2;
  109.  
  110.  do
  111.  {
  112.   trs.seconds=0xffff;
  113.   flags1|=0b00010000;
  114.   t_rs_clrbuffs();
  115.   t_rs_status(&trs);
  116.   do
  117.   {
  118.    go2=GO_READKEY;
  119.    u16 key;
  120.    if (inkey(&key))
  121.    {
  122.     if ((u8)(key>>8)==KEY_SPACE)
  123.      go2=GO_RESTART;
  124.     else if ( (!((u8)key&(1<<PS2K_BIT_EXTKEY))) && ((u8)(key>>8)==KEY_ESC) )
  125.      go2=GO_EXIT;
  126.    }
  127.  
  128.    if (go2==GO_READKEY)
  129.    {
  130.     if (check_timeout_ms(&trs.timeout))  t_rs_status(&trs);
  131.  
  132.     scr_set_cursor(12,18);
  133.     {
  134.      u8 ln;
  135.      ln=(uart_rx_hd-uart_rx_tl)&U_RX_MASK;
  136. #if (UART_RXBUFF_SIZE>128)
  137.      ln>>=1;
  138. #endif
  139. #if (UART_RXBUFF_SIZE>64)
  140.      ln>>=1;
  141. #endif
  142. #if (UART_RXBUFF_SIZE>32)
  143.      ln++;
  144.      ln>>=1;
  145. #endif
  146.      t_rsbar0(ln);
  147.     }
  148.     {
  149.      u8 attr;
  150.      if (PIND&(1<<PD5)) attr=0xae; else attr=0xc0;
  151.      scr_fill_attr(attr,3);
  152.     }
  153.     scr_set_attr(0xdf);
  154.  
  155.     scr_set_cursor(12,19);
  156.     {
  157.      u8 ln;
  158.      ln=(uart_tx_hd-uart_tx_tl)&U_TX_MASK;
  159. #if (UART_RXBUFF_SIZE>128)
  160.      ln>>=1;
  161. #endif
  162. #if (UART_RXBUFF_SIZE>64)
  163.      ln>>=1;
  164. #endif
  165. #if (UART_RXBUFF_SIZE>32)
  166.      ln++;
  167.      ln>>=1;
  168. #endif
  169.      t_rsbar0(ln);
  170.     }
  171.     {
  172.      u8 attr;
  173.      if (PINB&(1<<PB6)) attr=0xae; else attr=0xc0;
  174.      scr_fill_attr(attr,3);
  175.     }
  176.     scr_set_attr(0xdf);
  177.  
  178.     while (1)
  179.     {
  180.      uart_chk_cts();
  181.      if (((uart_tx_tl-uart_tx_hd-1)&U_TX_MASK)==0) break;
  182.      u8 data;
  183.      if (!(uart_getchar(&data))) break;
  184.      uart_putchar(data);
  185.      trs.count_total++;
  186.      trs.count_last++;
  187.     }
  188.    }
  189.  
  190.   }while (go2==GO_READKEY);
  191.  
  192.  }while (go2!=GO_EXIT);
  193.  
  194.  t_rs_clrbuffs();
  195.  flags1&=0b11101111;
  196. }
  197.  
  198. //-----------------------------------------------------------------------------
  199.