Subversion Repositories NedoOS

Rev

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