Advertisement
Guest User

PROGRAM

a guest
Feb 19th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.99 KB | None | 0 0
  1. #include <built_in.h>
  2. // duplex config flags
  3. #define Spi_Ethernet_HALFDUPLEX     0x00
  4. #define Spi_Ethernet_FULLDUPLEX     0x01
  5.  
  6. // mE ehternet NIC pinout
  7. sfr sbit SPI_Ethernet_Rst at GPIOE_ODR.B7;
  8. sfr sbit SPI_Ethernet_CS  at GPIOE_ODR.B8;
  9.  
  10.  
  11. // TCP flags
  12. typedef struct {
  13.   unsigned canCloseTCP: 1;  // flag which closes TCP socket (not relevant to UDP)
  14.   unsigned isBroadcast: 1;  // flag which denotes that the IP package has been received via subnet broadcast address
  15. } TEthPktFlags;
  16.  
  17. //ROM constant strings
  18. const unsigned char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: ";  // HTTP header
  19. const unsigned char httpMimeTypeHTML[] = "text/html\n\n";              // HTML MIME type
  20. const unsigned char httpMimeTypeScript[] = "text/plain\n\n";           // TEXT MIME type
  21. unsigned char httpMethod[] = "GET /";
  22.  
  23. /*
  24. * web page, splited into 2 parts :
  25. * when coming short of ROM, fragmented data is handled more efficiently by linker
  26. *
  27. * this HTML page calls the boards to get its status, and builds itself with javascript
  28. */
  29. const code   char    *indexPage =                   // Change the IP address of the page to be refreshed
  30. "<meta http-equiv=\"refresh\" content=\"3;url=http://192.168.0.107\">\
  31. <HTML><HEAD></HEAD><BODY>\
  32. <h1><center>ROV KONTROLA</h1> <center> \
  33. <center>\
  34. <a >Reload</a>\
  35. <script src=/s></script>\
  36. <table><tr><td valign=top><table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
  37. </table></td><td><table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
  38. <tr><th colspan=2></th></tr>\
  39. <script>\
  40. var str,i;\
  41. str=\"\";\
  42. for(i=0;i<8;i++)\
  43. {str+=\"<tr><td bgcolor=RED>SENZOR #\"+i+\"</td>\";\
  44. if(PORTD&(1<<i)){str+=\"<td bgcolor=red>ON\";}\
  45. else {str+=\"<td bgcolor=#cccccc>OFF\";}\
  46. str+=\"</td></tr>\";}\
  47. document.write(str) ;\
  48. function salji() {     \
  49. //socket= new WebSocket('192.168.0.107:12345');   \
  50. socket.onopen= function() {      \
  51.    socket.send('hello');  \
  52. };\
  53. socket.onmessage= function(s) {\
  54.    alert(s);    \
  55. };    \
  56. }    \
  57. </script>\
  58. " ;
  59.  
  60. const code   char    *indexPage2 =  "</table></td><td>\
  61. <table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
  62. <tr><th colspan=3>LED</th></tr>\
  63. <script>\
  64. var str,i;\
  65. str=\"\";\
  66. for(i=1;i<8;i++)\
  67. {str+=\"<tr><td bgcolor=RED>LED\"+i+\"</td>\";\
  68. if(PORTE&(1<<i)){str+=\"<td  bgcolor=GREEN>ON\";}\
  69. else {str+=\"<td onclick=""salji()"" bgcolor=RED>OFF\";}\
  70. str+=\"</td><td><a href=/t\"+i+\">AKTIVIRAJ</a></td></tr>\";}\
  71. document.write(str) ;\
  72. </script>\
  73. </table></td></tr></table>\
  74. " ;
  75.  
  76. // RAM variables
  77. unsigned char   myMacAddr[6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f};   // my MAC address
  78. unsigned char   myIpAddr[4]  = {192, 168,  0, 107 };                   // my IP address
  79. unsigned char   gwIpAddr[4]  = {192, 168,  20,  6 };                   // gateway (router) IP address
  80. unsigned char   ipMask[4]    = {255, 255, 255,  0 };                   // network mask (for example : 255.255.255.0)
  81. unsigned char   dnsIpAddr[4] = {192, 168,  20,  1 };                   // DNS server IP address
  82.  
  83. unsigned char   getRequest[15];                                        // HTTP request buffer
  84. unsigned char   dyna[30];                                              // buffer for dynamic response
  85. unsigned long   httpCounter = 0;                                       // counter of HTTP requests
  86.  
  87. #define putConstString  SPI_Ethernet_putConstString
  88.  
  89.  
  90. #define putString  SPI_Ethernet_putString
  91.  
  92. unsigned int  SPI_Ethernet_UserTCP(unsigned char *remoteHost, unsigned int remotePort,
  93.                                unsigned int localPort, unsigned int reqLength, TEthPktFlags *flags) {
  94.   unsigned int    len = 0 ;                   // my reply length
  95.   unsigned int    i ;                         // general purpose integer
  96.  
  97.   // should we close tcp socket after response is sent?
  98.   // library closes tcp socket by default if canClose flag is not reset here
  99.   // flags->canClose = 0; // 0 - do not close socket
  100.                           // otherwise - close socket
  101.  
  102. if (localPort == 12345){
  103.     for (i=0; i<reqLength;i++)
  104.       getRequest[i] = SPI_Ethernet_getByte();
  105.  
  106.              len = putConstString("BACAM BURE!\n");
  107.              len += putString(getRequest);
  108.     return(len);
  109.   }
  110.   if(localPort != 80) {                        // I listen only to web request on port 80
  111.     return(0) ;
  112.   }
  113.  
  114.   // get 10 first bytes only of the request, the rest does not matter here
  115.   for(i = 0 ; i < 10 ; i++) {
  116.     getRequest[i] = SPI_Ethernet_getByte() ;
  117.   }
  118.   getRequest[i] = 0 ;
  119.   i = 0;
  120.  
  121.   if(memcmp(getRequest, httpMethod, 5)) {      // only GET method is supported here
  122.     return(0) ;
  123.   }
  124.  
  125.   httpCounter++ ;                              // one more request done
  126.  
  127.   if(getRequest[5] == 's') {                   // if request path name starts with s, store dynamic data in transmit buffer
  128.     // the text string replied by this request can be interpreted as javascript statements
  129.     // by browsers
  130.     len = putConstString(httpHeader) ;         // HTTP header
  131.     len += putConstString(httpMimeTypeScript); // with text MIME type
  132.  
  133.     // add AN2 value to reply
  134.     IntToStr(ADC1_Get_Sample(3), dyna) ;
  135.     len += putConstString("var AN3=") ;
  136.     len += putString(dyna) ;
  137.     len += putConstString(";") ;
  138.  
  139.     // add PORTB value (buttons) to reply
  140.     len += putConstString("var PORTD=") ;
  141.     IntToStr(GPIOD_IDR, dyna) ;
  142.     len += putString(dyna) ;
  143.     len += putConstString(";") ;
  144.  
  145.     // add PORTD value (LEDs) to reply
  146.     len += putConstString("var PORTE=") ;
  147.     WordToStr(GPIOE_ODR >> 8, dyna) ;
  148.     len += putString(dyna) ;
  149.     len += putConstString(";") ;
  150.  
  151.     // add HTTP requests counter to reply
  152.     IntToStr(httpCounter, dyna) ;
  153.     len += putConstString("var REQ=") ;
  154.     len += putString(dyna) ;
  155.     len += putConstString(";") ;
  156.   }
  157.  
  158.   else if(getRequest[5] == 't') {             // if request path name starts with t, toggle PORTD (LED) bit number that comes after
  159.     unsigned long   bitMask = 0 ;             // for bit mask
  160.  
  161.     if(isdigit(getRequest[6])) {              // if 0 <= bit number <= 9, bits 8 & 9 does not exist but does not matter
  162.       bitMask = getRequest[6] - '0' ;         // convert ASCII to integer
  163.       bitMask = 1 << (bitMask + 8);           // create bit mask
  164.       GPIOE_ODR ^= bitMask ;                  // toggle PORTD with xor operator
  165.     }
  166.   }
  167.  
  168.   if(len == 0) {                              // what do to by default
  169.     len =  putConstString(httpHeader) ;       // HTTP header
  170.     len += putConstString(httpMimeTypeHTML);  // with HTML MIME type
  171.     len += putConstString(indexPage) ;        // HTML page first part
  172.     len += putConstString(indexPage2) ;       // HTML page second part
  173.   }
  174.  
  175.   return(len) ;                               // return to the library with the number of bytes to transmit
  176. }
  177.  
  178. unsigned int  SPI_Ethernet_UserUDP(unsigned char *remoteHost, unsigned int remotePort,
  179.                                    unsigned int destPort, unsigned int reqLength, TEthPktFlags *flags) {
  180.    return 0;              // back to the library with the length of the UDP reply
  181. }
  182.  
  183. /**************************************************************************************************
  184. * MAIN PROGRAM
  185. **************************************************************************************************/
  186. void main(){
  187.  
  188.   GPIO_Digital_Input(&GPIOC_BASE, _GPIO_PINMASK_LOW);
  189.   GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_HIGH);
  190.  
  191.   ADC1_Init();
  192.   ADC_Set_Input_Channel(_ADC_CHANNEL_3);
  193.  
  194.   SPI3_Init_Advanced(_SPI_FPCLK_DIV4, _SPI_MASTER  | _SPI_8_BIT |
  195.                      _SPI_CLK_IDLE_LOW | _SPI_FIRST_CLK_EDGE_TRANSITION |
  196.                      _SPI_MSB_FIRST | _SPI_SS_DISABLE | _SPI_SSM_ENABLE | _SPI_SSI_1,
  197.                      &_GPIO_MODULE_SPI3_PC10_11_12);
  198.  
  199.  
  200.   SPI_Ethernet_Init(myMacAddr, myIpAddr, Spi_Ethernet_FULLDUPLEX) ;
  201.  
  202.   while(1) {                            // do forever
  203.     /*
  204.      * if necessary, test the return value to get error code
  205.      */
  206.     SPI_Ethernet_doPacket() ;   // process incoming Ethernet packets
  207.  
  208.   }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement