Subversion Repositories pentevo

Rev

Rev 601 | 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. #define p_wind_t_rs_1 ((const P_WIND_DESC)&wind_t_rs_1)
  46. #define p_wind_t_rs_2 ((const P_WIND_DESC)&wind_t_rs_2)
  47. #define p_wind_t_rs_3 ((const P_WIND_DESC)&wind_t_rs_3)
  48. #define p_wind_t_rs_4 ((const P_WIND_DESC)&wind_t_rs_4)
  49. #define p_wind_t_rs_5 ((const P_WIND_DESC)&wind_t_rs_5)
  50.  
  51. //-----------------------------------------------------------------------------
  52.  
  53. void t_rs_clrbuffs(void)
  54. {
  55.  cli();
  56.  uart_rx_hd=0;
  57.  uart_rx_tl=0;
  58.  uart_tx_hd=0;
  59.  uart_tx_tl=0;
  60.  RTS_CLR();
  61.  sei();
  62. }
  63.  
  64. //-----------------------------------------------------------------------------
  65.  
  66. void t_rsbar0(u8 sz)
  67. {
  68.  if (sz)  scr_fill_char(0xdb,sz);               // '█'
  69.  sz=32-sz;
  70.  if (sz)  scr_fill_char(0xb0,sz);               // '░'
  71.  scr_putchar(0x20);
  72. }
  73.  
  74. //-----------------------------------------------------------------------------
  75.  
  76. void t_rs_status(TRS *trs)
  77. {
  78.  set_timeout_ms(&trs->timeout,1000);
  79.  
  80.  scr_set_cursor(32,16);
  81.  trs->seconds++;
  82.  if (trs->seconds==0)
  83.  {
  84.   trs->count_last=0;
  85.   trs->count_total=0;
  86.  }
  87.  print_dec16(trs->seconds);
  88.  
  89.  scr_set_cursor(18,17);
  90.  print_dec16(trs->count_last);
  91.  trs->count_last=0;
  92.  
  93.  scr_set_cursor(32,17);
  94.  if (trs->seconds)
  95.   print_dec16((u16)(trs->count_total/trs->seconds));
  96.  else
  97.   print_dec16(0);
  98. }
  99.  
  100. //-----------------------------------------------------------------------------
  101.  
  102. void Test_RS232(void)
  103. {
  104.  flags1&=0b11111100;
  105.  flags1|=0b00000100;
  106.  scr_window(p_wind_t_rs_1);
  107.  scr_window(p_wind_t_rs_2);
  108.  scr_window(p_wind_t_rs_3);
  109.  scr_window(p_wind_t_rs_4);
  110.  scr_window(p_wind_t_rs_5);
  111.  scr_print_msg(msg_trs_1);
  112.  TRS trs;
  113.  u8 go2;
  114.  
  115.  do
  116.  {
  117.   trs.seconds=0xffff;
  118.   flags1|=0b00010000;
  119.   t_rs_clrbuffs();
  120.   t_rs_status(&trs);
  121.   do
  122.   {
  123.    go2=GO_READKEY;
  124.    u16 key;
  125.    if (inkey(&key))
  126.    {
  127.     if ((u8)(key>>8)==KEY_SPACE)
  128.      go2=GO_RESTART;
  129.     else if ( (!((u8)key&(1<<PS2K_BIT_EXTKEY))) && ((u8)(key>>8)==KEY_ESC) )
  130.      go2=GO_EXIT;
  131.    }
  132.  
  133.    if (go2==GO_READKEY)
  134.    {
  135.     if (check_timeout_ms(&trs.timeout))  t_rs_status(&trs);
  136.  
  137.     scr_set_cursor(12,18);
  138.     {
  139.      u8 ln;
  140.      ln=(uart_rx_hd-uart_rx_tl)&U_RX_MASK;
  141. #if (UART_RXBUFF_SIZE>128)
  142.      ln>>=1;
  143. #endif
  144. #if (UART_RXBUFF_SIZE>64)
  145.      ln>>=1;
  146. #endif
  147. #if (UART_RXBUFF_SIZE>32)
  148.      ln++;
  149.      ln>>=1;
  150. #endif
  151.      t_rsbar0(ln);
  152.     }
  153.     {
  154.      u8 attr;
  155.      if (PIND&(1<<PD5)) attr=0xae; else attr=0xc0;
  156.      scr_fill_attr(attr,3);
  157.     }
  158.     scr_set_attr(0xdf);
  159.  
  160.     scr_set_cursor(12,19);
  161.     {
  162.      u8 ln;
  163.      ln=(uart_tx_hd-uart_tx_tl)&U_TX_MASK;
  164. #if (UART_RXBUFF_SIZE>128)
  165.      ln>>=1;
  166. #endif
  167. #if (UART_RXBUFF_SIZE>64)
  168.      ln>>=1;
  169. #endif
  170. #if (UART_RXBUFF_SIZE>32)
  171.      ln++;
  172.      ln>>=1;
  173. #endif
  174.      t_rsbar0(ln);
  175.     }
  176.     {
  177.      u8 attr;
  178.      if (PINB&(1<<PB6)) attr=0xae; else attr=0xc0;
  179.      scr_fill_attr(attr,3);
  180.     }
  181.     scr_set_attr(0xdf);
  182.  
  183.     while (1)
  184.     {
  185.      uart_chk_cts();
  186.      if (((uart_tx_tl-uart_tx_hd-1)&U_TX_MASK)==0) break;
  187.      u8 data;
  188.      if (!(uart_getchar(&data))) break;
  189.      uart_putchar(data);
  190.      trs.count_total++;
  191.      trs.count_last++;
  192.     }
  193.    }
  194.  
  195.   }while (go2==GO_READKEY);
  196.  
  197.  }while (go2!=GO_EXIT);
  198.  
  199.  t_rs_clrbuffs();
  200.  flags1&=0b11101111;
  201. }
  202.  
  203. //-----------------------------------------------------------------------------
  204.