Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.04 KB | None | 0 0
  1. // BeVolt Telemetry 10-June-19
  2.  
  3. #include "mbed.h"
  4. #include "EthernetInterface.h"
  5. #include <stdint.h>
  6. #include "canIds.h"
  7. #include "TCPServer.h"
  8. #include "TCPSocket.h"
  9.  
  10. #include <sstream>
  11.  
  12. #define TRIT_DC_BASE     0x220
  13. #define TRIT_DC_DRIVE    0x01
  14.  
  15. CAN can(PD_0,PD_1); // for the F429ZI  (Rx, Tx)
  16. Serial          pc(USBTX, USBRX);
  17. DigitalOut      led(LED1);
  18. CANMessage      msg;
  19. Thread canThread;
  20. Thread serverThread;
  21. int counter = 0;
  22. int CanID = 0x0000002;
  23. TCPServer srv;
  24. TCPSocket clt_sock;
  25. SocketAddress clt_addr;
  26. EthernetInterface eth;
  27.  
  28. #define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
  29.  
  30. #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
  31.  
  32. #define HTTP_MESSAGE_BODY "" \
  33. "<html>" "\r\n" \
  34. " <body style=\"display:flex;text-align:left\">" "\r\n" \
  35. " <div style=\"margin:auto\">" "\r\n" \
  36. " <h1>BeVolt Telemetry</h1>" "\r\n" \
  37. //" <p>Data: </p>" "\r\n" \
  38. " </div>" "\r\n" \
  39. //" </body>" "\r\n" \
  40. "</html>"
  41.  
  42. #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \
  43. HTTP_HEADER_FIELDS "\r\n" \
  44. "\r\n" \
  45. HTTP_MESSAGE_BODY "\r\n"
  46.  
  47. //#define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
  48. //#define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
  49. //#define HTTP_MESSAGE_BODY ""                                     \
  50. //"<html>" "\r\n" \
  51. //"<head>" "\r\n" \
  52. //"<meta http-equiv=\"refresh\" content=\"1\">" "\r\n" \
  53. //"</head>" "\r\n"  \
  54. //"  <body style=\"display:flex;text-align:left\">" "\r\n"       \
  55. ////"    <div style=\"margin:auto\">" "\r\n"                         \
  56. //"    <div>" "\r\n" \
  57. //"    BeVolt Telemetry" "\r\n"                              \
  58. //"    </div>" "\r\n"                                              \
  59. //"</body>" "\r\n" \
  60. //"</html>"
  61. //
  62. //#define HTTP_RESPONSE \
  63. //                    HTTP_STATUS_LINE "\r\n"   \
  64. //                      HTTP_HEADER_FIELDS "\r\n" \
  65. //                      "\r\n"                    \
  66. //                      HTTP_MESSAGE_BODY "\r\n"
  67.                      
  68. char begdiv[] = "<div style=\"margin:auto;text-align:center\">";
  69. char enddiv[] = "</div>";
  70.  
  71. char title[] = "<h1> BeVolt Telemetry </h1>";
  72.  
  73. char voltbuff[] = "<br>Voltage : ";
  74. char tempbuff[] = "<br>Temp: ";
  75. char currbuff[] = "<br>Current: ";
  76. char newl[] = "\n";
  77.  
  78. float bytes2Float(uint8_t* bytes_array) {
  79.     union {
  80.         float f;
  81.         uint8_t b[4];
  82.     } u;
  83.     u.b[3] = bytes_array[0];
  84.     u.b[2] = bytes_array[1];
  85.     u.b[1] = bytes_array[2];
  86.     u.b[0] = bytes_array[3];
  87.     return u.f;
  88. }
  89.  
  90.  
  91.  
  92. float receiveCan(void) {
  93.     uint32_t received;
  94.    
  95.     pc.printf("Inside receive can\n");
  96.    
  97.     if (can.read(msg)) {
  98.         received = *((uint32_t*) msg.data);
  99.     } else {
  100.         pc.printf("Could not receive message\n");
  101.         return -1;
  102.     }
  103.     pc.printf("-----------------------\r\n");
  104.    
  105.     if (msg.id == BPS_TRIP) {
  106.         received = msg.data[0];
  107.         pc.printf("BPS Trip is %d\n", received);
  108.     } else if (msg.id == BPS_ALL_CLEAR) {
  109.         received = msg.data[0];
  110.         pc.printf("BPS All Clear is %d\n", received);
  111.     } else if (msg.id == BPS_OFF) {
  112.         received = msg.data[0];
  113.         pc.printf("BPS Off is %d\n", received);    
  114.     } else if (msg.id == WDOG_TRIGGERED) {
  115.         received = msg.data[0];
  116.         pc.printf("WDOG Triggered is %d\n", received);    
  117.     } else if (msg.id == CAN_ERROR) {
  118.         received = msg.data[0];
  119.         pc.printf("CAN Error is %d\n", received);    
  120.     } else if (msg.id == VOLTAGE_DATA) {
  121.         // voltage
  122.         float voltage = bytes2Float(&msg.data[1]);
  123.         pc.printf("Voltage is %.3fV from array index %d\n", voltage, msg.data[0]);
  124.         return voltage;
  125.     } else if (msg.id == TEMPERATURE_DATA){
  126.         // temperature
  127.         float temp = bytes2Float(&msg.data[1]);
  128.         pc.printf("Temp is %.3f from array index %d\n", temp, msg.data[0]);  
  129.         return temp;
  130.     } else if(msg.id == SOC_DATA){
  131.         // state of charge
  132.         float soc = bytes2Float(msg.data);
  133.         pc.printf("SoC is %.3f%%\n", soc);
  134.         return received;
  135.     } else if(msg.id == CURRENT_DATA){
  136.         // current
  137.         float current = bytes2Float(msg.data);
  138.         pc.printf("Current is %.3fA\n", current);
  139.         return current;
  140.     }
  141.     pc.printf("-----------------------\r\n");
  142.     //wait(1.0);
  143.     //Thread::wait(1000);
  144.     return -1;
  145. }
  146.  
  147. void received(){
  148.     while(1) {
  149.         pc.printf("In can receive thread\n");
  150.         receiveCan();
  151.         Thread::wait(1000);
  152.     }
  153. }
  154.  
  155. void serverStuff(){
  156.     eth.connect();
  157.     printf("The target IP address is '%s'\r\n", eth.get_ip_address());
  158.    
  159.     /* Open the server on ethernet stack */
  160.     srv.open(&eth);
  161.     /* Bind the HTTP port (TCP 80) to the server */
  162.     srv.bind(eth.get_ip_address(), 31); // 23 ->80?
  163.     /* Can handle 5 simultaneous connections */
  164.     srv.listen(1);
  165.    
  166.     // while
  167.     while(1){
  168.         printf("In server thread\n");
  169.            
  170.         clt_sock.send(HTTP_RESPONSE, strlen(HTTP_RESPONSE));
  171.         //wait(1.0);
  172.         Thread::wait(10);
  173.     }
  174.    
  175.     //clt_sock.close();
  176. }
  177.  
  178. void acceptFunction(){
  179.     while(1){
  180.         srv.accept(&clt_sock, &clt_addr);           // Might need this in another thread
  181.         printf("accept %s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port());
  182.         Thread::wait(1000);
  183.     }
  184. }
  185.  
  186.  
  187.  
  188. int main()
  189. {    
  190. //    canThread.start(received);
  191.     Thread canThread(received);
  192.     wait(1);
  193. //  serverThread.start(serverStuff);
  194.     Thread serverThread(serverStuff);
  195.     wait(2);
  196.     Thread acceptThread(acceptFunction);
  197.     wait(3);
  198.  
  199.     char sbuffer[] = "<br>Pedal Position Voltage (uV):  ";
  200.     char motcur[10];
  201.     int alive = 0;  
  202.     char rdata[8];
  203.     int id1 = TRIT_DC_BASE + TRIT_DC_DRIVE;
  204.     int MotCur_int;
  205.  
  206.     CANMessage msg;
  207.     pc.baud(9600);          // set serial speed
  208.     can.frequency(500000);//(150000); // max 1Mbps, usually 150000
  209.    
  210.     union {
  211.     char rcvdata[4];
  212.     float rxdata;
  213.     } urxdata;
  214.    
  215.     printf("BeVolt Telemetry\r\n");
  216.    
  217.    
  218.     while(1) {
  219.         wait(1);   
  220.     }
  221.    
  222.     // Thread initialization
  223.    
  224.  
  225.     //wait(2.0);
  226.    
  227.     //while(1) {
  228.         //receiveCan();
  229. //        Thread::wait(1000);
  230.         //alive=0;
  231. //
  232. //        while (alive == 0) {
  233. //          if(can1.read(msg) && msg.id == id1 ) {
  234. //              printf("  ID      = 0x%.3x\r\n", msg.id);
  235. //              printf("  Type    = %d\r\n", msg.type);
  236. //              printf("  Format  = %d\r\n", msg.format);
  237. //              printf("  Length  = %d\r\n", msg.len);
  238. //              printf("  Data    =");
  239. //              for(int i = 0; i < msg.len; i++) {
  240. //                      printf(" 0x%.2X", msg.data[i]);
  241. //                      rdata[i] = msg.data[i];
  242. //              }
  243. //              printf("\r\n");
  244. //              urxdata.rcvdata[3] = rdata[7];
  245. //              urxdata.rcvdata[2] = rdata[6];
  246. //              urxdata.rcvdata[1] = rdata[5];
  247. //              urxdata.rcvdata[0] = rdata[4];
  248. //              printf(" Motor Current (pedal voltage) = %f",urxdata.rxdata);
  249. //              printf("\r\n");
  250. //              MotCur_int = urxdata.rxdata*1000000;
  251. //              alive = 1;
  252. //          }
  253. //      }
  254.    
  255.     //sprintf(motcur,"%d",MotCur_int);
  256. //    printf(" Pedal Voltage (uV): ");  
  257. //    for(int i = 0; i < 10; i++) {
  258. //        printf("%c", motcur[i]);
  259. //    }
  260. //    printf("\r\n");
  261.     //***************
  262.    
  263.  
  264. //    clt_sock.close();
  265.     // **************
  266.     // clt_sock.send(sbuffer, strlen(sbuffer));
  267.     // clt_sock.send(motcur, 10);
  268.        
  269.         //uint8_t volt = (rand() % (40 - 27 + 1)) + 27;
  270. //      uint8_t curr = (rand() % (60 - 50 + 1)) + 50;
  271. //      uint8_t temp = (rand() % (73 - 0 + 1)) + 0;
  272. //
  273. //      char voltarr[4];   
  274. //      char currarr[4];
  275. //      char temparr[4];
  276. //
  277. //      sprintf(voltarr, "%d", volt);
  278. //      sprintf(currarr, "%d", curr);
  279. //      sprintf(temparr, "%d", temp);
  280. //     
  281. //     
  282. //      clt_sock.send(begdiv, strlen(begdiv));
  283. //      clt_sock.send(title, strlen(title));
  284. //     
  285. //      clt_sock.send(voltbuff, 14);
  286. //      clt_sock.send(voltarr, 4);
  287. //      clt_sock.send(tempbuff, 10);
  288. //      clt_sock.send(temparr, 4);
  289. //      clt_sock.send(currbuff, 13);
  290. //      clt_sock.send(currarr, 4);
  291. //      clt_sock.send(enddiv, strlen(enddiv));
  292.  
  293.        
  294.    
  295.     //}
  296. //    clt_sock.close();
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement