Subversion Repositories NedoOS

Rev

Rev 2367 | Blame | Compare with Previous | Last modification | View Log | Download

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <oscalls.h>
  5. #include <osfs.h>
  6. #include <intrz80.h>
  7. #include <../common/terminal.c>
  8. #define true 1
  9. #define false 0
  10. //
  11. //const unsigned char ready[] = "ready";
  12. const unsigned char gotWiFi[] = "WIFI GOT IP";
  13.  
  14. unsigned int RBR_THR = 0xf8ef;
  15. unsigned int IER = 0xf9ef;
  16. unsigned int IIR_FCR = 0xfaef;
  17. unsigned int LCR = 0xfbef;
  18. unsigned int MCR = 0xfcef;
  19. unsigned int LSR = 0xfdef;
  20. unsigned int MSR = 0xfeef;
  21. unsigned int SR = 0xffef;
  22. unsigned int divider = 1;
  23. unsigned int comType = 0;
  24. unsigned int espType = 32;
  25. unsigned int espRetry = 5;
  26. unsigned long factor, timerok;
  27. unsigned char directMode = 0;
  28.  
  29. unsigned char key;
  30. int bufferPos = 0;
  31. int endPos = 0;
  32. int curpos = 0;
  33. int oldpos = 0;
  34.  
  35. unsigned char netbuf[8500];
  36.  
  37. void clearStatus(void)
  38. {
  39. }
  40.  
  41. void delay(unsigned long counter)
  42. {
  43.   unsigned long start, finish;
  44.   counter = counter / 20;
  45.   if (counter < 1)
  46.   {
  47.     counter = 1;
  48.   }
  49.   start = time();
  50.   finish = start + counter;
  51.  
  52.   while (start < finish)
  53.   {
  54.     start = time();
  55.   }
  56. }
  57.  
  58. ///////////////////////////
  59. #include <../common/esp-com.c>
  60. //////////////////////////
  61.  
  62. void getdata(void)
  63. {
  64.   uart_setrts(2);
  65.   while (uart_hasByte() != 0)
  66.   {
  67.     netbuf[bufferPos] = uart_read();
  68.     bufferPos++;
  69.     uart_setrts(2);
  70.  
  71.     if (bufferPos > 8191)
  72.     {
  73.       endPos = bufferPos;
  74.       bufferPos = 0;
  75.     }
  76.   }
  77. }
  78.  
  79. void renderWin(void)
  80. {
  81.   for (curpos = oldpos; curpos < bufferPos; curpos++)
  82.   {
  83.     putchar(netbuf[curpos]);
  84.   }
  85.   oldpos = curpos;
  86. }
  87.  
  88. void saveBuff(void)
  89. {
  90.   int len;
  91.   unsigned long size;
  92.   FILE *fp1;
  93.   unsigned char crlf[2] = {13, 10};
  94.   fp1 = OS_OPENHANDLE("buffer.log", 0x80);
  95.   if (((int)fp1) & 0xff)
  96.   {
  97.     puts("Open buffer.log error");
  98.     puts("Creating buffer.log file");
  99.     fp1 = OS_CREATEHANDLE("buffer.log", 0x80);
  100.     if (((int)fp1) & 0xff)
  101.     {
  102.       puts("Create buffer.log error");
  103.       return;
  104.     }
  105.     OS_CLOSEHANDLE(fp1);
  106.     fp1 = OS_OPENHANDLE("buffer.log", 0x80);
  107.     if (((int)fp1) & 0xff)
  108.     {
  109.       puts("Open buffer.log error");
  110.       return;
  111.     }
  112.   }
  113.   size = OS_GETFILESIZE(fp1);
  114.   len = curpos;
  115.   OS_SEEKHANDLE(fp1, size);
  116.   OS_WRITEHANDLE(crlf, fp1, 2);
  117.   OS_WRITEHANDLE("********************************************************************************", fp1, 80);
  118.   OS_WRITEHANDLE(crlf, fp1, 2);
  119.   OS_WRITEHANDLE(netbuf, fp1, len);
  120.   OS_CLOSEHANDLE(fp1);
  121.   puts("buffer.log saved.");
  122. }
  123.  
  124. void testQueue(void)
  125. {
  126.   sendcommand("AT+CIPSNTPTIME?");
  127.   getdata();
  128.   renderWin();
  129.   delay(500);
  130.   sendcommand("AT+CIPSNTPCFG=1,300,\"0.pool.ntp.org\",\"time.google.com\"");
  131.   getdata();
  132.   renderWin();
  133.   delay(500);
  134.   sendcommand("AT+CIPSNTPTIME?");
  135.   getdata();
  136.   renderWin();
  137. }
  138. C_task main(void)
  139. {
  140.   unsigned char cmd[512];
  141.   unsigned char cmdpos;
  142.   os_initstdio();
  143.   BOX(1, 1, 80, 25, 40, ' ');
  144.   AT(25, 1);
  145.   ATRIB(92);
  146.   puts("[UART COMMUNICATION PROGRAMM]");
  147.   loadEspConfig();
  148.   uart_init(divider);
  149.   ATRIB(93);
  150.   puts("    <ext+U> AT+CIUPDATE <End> Direct mode <PgUp> AT+GMR  <Home> testQueue()    ");
  151.   puts("             <PgDn> '+++' <ext+1...0> baudrate <ext+S> save buffer             ");
  152.   ATRIB(92);
  153.   puts("===============================================================================");
  154.  
  155.   delay(250);
  156.   cmd[0] = 0;
  157.   cmdpos = 0;
  158.   while (1)
  159.   {
  160.     unsigned char count;
  161.     getdata();
  162.     renderWin();
  163.     key = _low_level_get();
  164.     if (key != 0)
  165.     {
  166.       if (directMode == 1 && key != 0)
  167.       {
  168.         if (key == 30)
  169.         {
  170.           directMode = 0;
  171.           key = 0;
  172.           puts("\r\nDirect mode disabled.");
  173.         }
  174.         else
  175.         {
  176.           uart_write(key);
  177.           if (key == 13)
  178.           {
  179.             uart_write(10);
  180.             putchar('\r');
  181.             putchar('\n');
  182.           }
  183.         }
  184.       }
  185.       if (key != 0 && directMode == 0)
  186.       {
  187.         // printf("key = %u   ", key);
  188.         switch (key)
  189.         {
  190.         case 177:
  191.           uart_init(1);
  192.           puts("Uart inited @ 115200 [Div:1]");
  193.           key = 0;
  194.           break;
  195.  
  196.         case 178:
  197.           uart_init(2);
  198.           puts("Uart inited @ 57600 [Div:2]");
  199.           key = 0;
  200.           break;
  201.  
  202.         case 179:
  203.           uart_init(3);
  204.           puts("Uart inited @ 38400 [Div:3]");
  205.           key = 0;
  206.           break;
  207.  
  208.         case 180:
  209.           uart_init(4);
  210.           puts("Uart inited @ 28800 [Div:4]");
  211.           key = 0;
  212.           break;
  213.  
  214.         case 181:
  215.           uart_init(6);
  216.           puts("Uart inited @ 19200 [Div:6]");
  217.           key = 0;
  218.           break;
  219.  
  220.         case 182:
  221.           uart_init(8);
  222.           puts("Uart inited @ 14400 [Div:8]");
  223.           key = 0;
  224.           break;
  225.  
  226.         case 183:
  227.           uart_init(12);
  228.           puts("Uart inited @ 9600 [Div:12]");
  229.           key = 0;
  230.           break;
  231.  
  232.         case 184:
  233.           uart_init(24);
  234.           puts("Uart inited @ 4800 [Div:24]");
  235.           key = 0;
  236.           break;
  237.  
  238.         case 185:
  239.           uart_init(48);
  240.           puts("Uart inited @ 2400 [Div:48]");
  241.           key = 0;
  242.           break;
  243.  
  244.         case 176:
  245.           uart_init(96);
  246.           puts("Uart inited @ 1200 [Div:96]");
  247.           key = 0;
  248.           break;
  249.  
  250.         case 13:
  251.           cmd[cmdpos] = 0;
  252.           sendcommand(cmd);
  253.           cmdpos = 0;
  254.           cmd[cmdpos] = 0;
  255.           putchar('\r');
  256.           putchar('\n');
  257.           key = 0;
  258.           break;
  259.  
  260.         case 19:
  261.           saveBuff();
  262.           key = 0;
  263.           break;
  264.  
  265.         case 27:
  266.           exit(0);
  267.  
  268.         case 8:
  269.           if (cmdpos != 0)
  270.           {
  271.             cmdpos--;
  272.             cmd[cmdpos] = 0;
  273.             putchar('\r');
  274.             for (count = 0; count < cmdpos + 1; count++)
  275.             {
  276.               putchar(' ');
  277.             }
  278.             putchar('\r');
  279.             count = 0;
  280.             while (cmd[count] != 0)
  281.             {
  282.               putchar(cmd[count]);
  283.               count++;
  284.             }
  285.           }
  286.           key = 0;
  287.           break;
  288.  
  289.         case 246: // PgUp
  290.           sendcommand("AT+GMR");
  291.           key = 0;
  292.           break;
  293.  
  294.         case 247: // PgDn
  295.           sendcommand("+++");
  296.           key = 0;
  297.           break;
  298.  
  299.         case 30: // End
  300.           directMode = 1;
  301.           puts("\r\nDirect mode enabled.");
  302.  
  303.           key = 0;
  304.           break;
  305.  
  306.         case 28: // home
  307.           testQueue();
  308.           key = 0;
  309.           break;
  310.  
  311.         case 21: // <ext> + <U>
  312.           sendcommand("AT+CIUPDATE");
  313.           key = 0;
  314.           break;
  315.         }
  316.       }
  317.  
  318.       if (key != 0)
  319.       {
  320.         cmd[cmdpos] = key;
  321.         cmdpos++;
  322.         putchar(key);
  323.       }
  324.     }
  325.   }
  326.   return 0;
  327. }
  328.