Subversion Repositories NedoOS

Rev

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