Subversion Repositories NedoOS

Rev

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