Subversion Repositories HomeAutomation

Rev

Rev 270 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. // canBootloader.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp
  5.  
  6.  
  7. #define STRICT
  8. #include <tchar.h>
  9. #include <windows.h>
  10. #include <stdio.h>
  11. //#include "Serial.h"
  12. #include "HexFile.h"
  13. #include "CanProtoMessage.h"
  14. //#include "SerialReader.h"
  15. #include "DownloadState.h"
  16. #include "SerialConnection.h"
  17.  
  18. bool parseInput(char instr[]);
  19. bool serialSetConnected(bool connected);
  20. bool isConnected(void);
  21.  
  22. #define INPUT_BUFFER_SIZE 128
  23. #define FILEPATH1 "F:/MCP/projects/CAN/canNode/_output/canNode.hex"
  24. #define FILEPATH2 "F:/MCP/projects/CAN/canDebug/canDebug.hex"
  25.  
  26. //static CSerial serial;
  27. static SerialConnection scp(TEXT("COM2"),SerialConnection::EBaud115200,SerialConnection::EData8,SerialConnection::EParNone,SerialConnection::EStop1);
  28. static HexFile hf;
  29.  
  30. int _tmain(int argc, _TCHAR* argv[])
  31. {
  32.  
  33.     char inbuff[INPUT_BUFFER_SIZE];
  34.  
  35.     printf("Main: ");
  36.  
  37.     // Forever input read loop.
  38.     do
  39.     {
  40.         // Read user input.
  41.         gets_s(inbuff,INPUT_BUFFER_SIZE);
  42.     } while(parseInput(inbuff));
  43.  
  44.     // Close the port again
  45.     if(isConnected()) serialSetConnected(false);
  46.  
  47.     return 0;
  48. }
  49.  
  50.  
  51. bool parseInput(char instr[])
  52. {
  53.     LONG    lLastError = ERROR_SUCCESS;
  54.  
  55.     // Make instr lower.
  56.     _strlwr_s(instr,INPUT_BUFFER_SIZE);
  57.  
  58.     if (strcmp(instr,"exit")==0) return false; // If exit, exit.
  59.     else if (strcmp(instr,"go")==0)
  60.     {
  61.         // Download program.
  62.         if (hf.isValid())
  63.             printf("GO!\n");
  64.         else
  65.             printf("Un-GO!\n");
  66.  
  67.         // First connect
  68.         scp.open();
  69.         //serialSetConnected(true);
  70.         // download program
  71.         downloadStart(&scp,&hf);
  72.  
  73.     }
  74.     else if (strcmp(instr,"load debug")==0)
  75.     {
  76.         // Load debug app.
  77.     }
  78.     else if (strcmp(instr,"load")==0)
  79.     {
  80.         // load regular app.
  81.         if (hf.loadHex(FILEPATH1,true)) { printf("File %s loaded sucessfully!\n",hf.filepath); printf("File size: %lu, upper addr: %lu, lower addr: %lu\n",hf.getLength(),hf.getAddrUpper(),hf.getAddrLower()); }
  82.         else { printf(hf.lastError); }
  83.  
  84.     }
  85.     /*
  86.     else if (strcmp(instr,"put")==0)
  87.     {
  88.         // Put dummy packet
  89.  
  90.         unsigned char canmsg[17];
  91.         canmsg[0]=253;
  92.         canmsg[16]=250;
  93.         if (isConnected())
  94.             {
  95.             lLastError = serial.Write(canmsg,17);
  96.             if (lLastError != ERROR_SUCCESS)
  97.             {
  98.                 printf("Unable to send data\n");
  99.             }
  100.         } else { printf("Err! No connected to serial port.\n"); }
  101.     }
  102. */
  103.  
  104.     else if (strcmp(instr,"conn")==0)
  105.     {
  106.         // Connect to serial port.
  107.  
  108.         if (isConnected()) { printf("Err! Alredy connected to serial port.\n"); }
  109.         else { serialSetConnected(true); }
  110.     }
  111.     else if (strcmp(instr,"diss")==0)
  112.     {      
  113.         // Dissconnect from serial port.
  114.  
  115.         if (!isConnected()) { printf("Err! Not connected to serial port.\n"); }
  116.         else { serialSetConnected(false); }
  117.     }
  118.     else if (strcmp(instr,"test2")==0)
  119.     {
  120.         //serialReaderStart(&serial);
  121.     }
  122.     else if (strcmp(instr,"test2 stop")==0)
  123.     {
  124.         //serialReaderStop();
  125.     }
  126.     else if (strcmp(instr,"test3")==0)
  127.     {
  128.         DCB dcb;
  129.         HANDLE hCom;
  130.         bool fSuccess;
  131.  
  132.  
  133.        hCom = ::CreateFile(_T("COM2"),
  134.                         GENERIC_READ | GENERIC_WRITE,
  135.                         0,    // must be opened with exclusive-access
  136.                         0, // no security attributes
  137.                         OPEN_EXISTING, // must use OPEN_EXISTING
  138.                         FILE_FLAG_OVERLAPPED,    // not overlapped I/O
  139.                         0  // hTemplate must be NULL for comm devices
  140.                         );
  141.  
  142.        if (hCom == INVALID_HANDLE_VALUE)
  143.        {
  144.            // Handle the error.
  145.            printf ("Err: %d.\n",GetLastError());
  146.        }
  147.  
  148.  
  149.         // Build on the current configuration, and skip setting the size
  150.        // of the input and output buffers with SetupComm.
  151.  
  152.        fSuccess = GetCommState(hCom, &dcb);
  153.  
  154.        if (!fSuccess)
  155.        {
  156.           // Handle the error.
  157.           printf ("GetCommState failed with error %d.\n", GetLastError());
  158.        }
  159.  
  160.         // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
  161.  
  162.        dcb.BaudRate = CBR_57600;     // set the baud rate
  163.        dcb.ByteSize = 8;             // data size, xmit, and rcv
  164.        dcb.Parity = NOPARITY;        // no parity bit
  165.        dcb.StopBits = ONESTOPBIT;    // one stop bit
  166.  
  167.        fSuccess = SetCommState(hCom, &dcb);
  168.  
  169.        if (!fSuccess)
  170.        {
  171.           // Handle the error.
  172.           printf ("SetCommState failed with error %d.\n", GetLastError());
  173.        }
  174.  
  175.        printf ("Serial port successfully reconfigured.\n");
  176.        
  177.  
  178.  
  179.     }
  180.     else if (strcmp(instr,"test4")==0)
  181.     {
  182.  
  183.         scp.open();
  184.    
  185.         char data[] = "hej";
  186.         unsigned char data2[17];
  187.  
  188.         CanProtoMessage cpm(0x01,0x01,0x01,0x01,1,(unsigned char *)data);
  189.        
  190.         cpm.getBytes(data2);
  191.  
  192.         scp.write(data2,17);
  193.  
  194.         //serialReaderStartSerCon(&scp);
  195.  
  196.         //scp.close();
  197.     }
  198.     else if(strcmp(instr,"tick")==0)
  199.     {
  200.       printf ("actual:%ld\n", GetTickCount());
  201.  
  202.     }
  203.     else if (strcmp(instr,"test")==0)
  204.     {
  205.         // Debug for testing canProtoMessage
  206.  
  207.         unsigned char dat[8];
  208.        
  209.         for (int i=0;i<8;i++) dat[i]=0x10+i*2;
  210.        
  211.         unsigned char dat2[17];
  212.  
  213.         CanProtoMessage cpm1(0x07,0x91,0x10,0x87,8,&dat[0]);
  214.        
  215.         cpm1.getBytes(&dat2[0]);
  216.    
  217.  
  218.         CanProtoMessage cpm2(&dat2[0],1);
  219.    
  220.         if (cpm1.equals(&cpm2)) printf("OK!\n"); else printf("Not OK!\n");
  221.  
  222.     }
  223.     else
  224.     {
  225.         printf("Command not found.\n");
  226.     }
  227.  
  228.     printf("Main: ");
  229.  
  230.     return true;
  231. }
  232.  
  233.  
  234. bool serialSetConnected(bool connected)
  235. {
  236.     /*
  237.     LONG    lLastError = ERROR_SUCCESS;
  238.  
  239.     if (connected)
  240.     {
  241.         // Attempt to open the serial port (COM1)
  242.         lLastError = serial.Open(_T("COM2"),0,0,true);
  243.         if (lLastError != ERROR_SUCCESS)
  244.         {
  245.             printf("Unable to open COM-port\n");
  246.             return false;
  247.         }
  248.         // Setup the serial port (9600,N81) using hardware handshaking
  249.         lLastError = serial.Setup(CSerial::EBaud115200,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
  250.         if (lLastError != ERROR_SUCCESS)
  251.         {
  252.                 printf("Unable to set COM-port setting\n");
  253.             return false;
  254.         }
  255.         // Setup handshaking
  256.         lLastError = serial.SetupHandshaking(CSerial::EHandshakeOff);
  257.         if (lLastError != ERROR_SUCCESS)
  258.         {
  259.             printf("Unable to set COM-port handshaking\n");
  260.             return false;
  261.         }
  262.  
  263.         return true;
  264.     }
  265.     else
  266.     {
  267.         serial.Close();
  268.         return true;
  269.     }
  270. */
  271.     return false;
  272.  
  273. }
  274.  
  275. bool isConnected(void)
  276. {
  277.     //return serial.IsOpen();
  278.     return true;
  279. }