Subversion Repositories HomeAutomation

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

// canBootloader.cpp : Defines the entry point for the console application.
//

//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp


#define STRICT
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
//#include "Serial.h"
#include "HexFile.h"
#include "CanProtoMessage.h"
//#include "SerialReader.h"
#include "DownloadState.h"
#include "SerialConnection.h"

bool parseInput(char instr[]);
bool serialSetConnected(bool connected);
bool isConnected(void);

#define INPUT_BUFFER_SIZE 128
#define FILEPATH1 "F:/MCP/projects/CAN/canNode/_output/canNode.hex"
#define FILEPATH2 "F:/MCP/projects/CAN/canDebug/canDebug.hex"

//static CSerial serial;
static SerialConnection scp(TEXT("COM2"),SerialConnection::EBaud115200,SerialConnection::EData8,SerialConnection::EParNone,SerialConnection::EStop1);
static HexFile hf;

int _tmain(int argc, _TCHAR* argv[])
{

    char inbuff[INPUT_BUFFER_SIZE];

    printf("Main: ");

    // Forever input read loop.
    do
    {
        // Read user input.
        gets_s(inbuff,INPUT_BUFFER_SIZE);
    } while(parseInput(inbuff));

    // Close the port again
    if(isConnected()) serialSetConnected(false);

    return 0;
}


bool parseInput(char instr[])
{
    LONG    lLastError = ERROR_SUCCESS;

    // Make instr lower.
    _strlwr_s(instr,INPUT_BUFFER_SIZE);

    if (strcmp(instr,"exit")==0) return false; // If exit, exit.
    else if (strcmp(instr,"go")==0)
    {
        // Download program.
        if (hf.isValid())
            printf("GO!\n");
        else 
            printf("Un-GO!\n");

        // First connect
        scp.open();
        //serialSetConnected(true);
        // download program
        downloadStart(&scp,&hf);

    }
    else if (strcmp(instr,"load debug")==0)
    {
        // Load debug app.
    }
    else if (strcmp(instr,"load")==0)
    {
        // load regular app.
        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()); }
        else { printf(hf.lastError); }

    }
    /*
    else if (strcmp(instr,"put")==0)
    {
        // Put dummy packet

        unsigned char canmsg[17];
        canmsg[0]=253;
        canmsg[16]=250;
        if (isConnected())
            {
            lLastError = serial.Write(canmsg,17);
            if (lLastError != ERROR_SUCCESS)
            {
                printf("Unable to send data\n");
            }
        } else { printf("Err! No connected to serial port.\n"); }
    }
*/

    else if (strcmp(instr,"conn")==0)
    {
        // Connect to serial port.

        if (isConnected()) { printf("Err! Alredy connected to serial port.\n"); }
        else { serialSetConnected(true); }
    }
    else if (strcmp(instr,"diss")==0)
    {       
        // Dissconnect from serial port.

        if (!isConnected()) { printf("Err! Not connected to serial port.\n"); }
        else { serialSetConnected(false); }
    }
    else if (strcmp(instr,"test2")==0)
    {
        //serialReaderStart(&serial);
    }
    else if (strcmp(instr,"test2 stop")==0)
    {
        //serialReaderStop();
    }
    else if (strcmp(instr,"test3")==0)
    {
        DCB dcb;
        HANDLE hCom;
        bool fSuccess;


       hCom = ::CreateFile(_T("COM2"),
                        GENERIC_READ | GENERIC_WRITE,
                        0,    // must be opened with exclusive-access
                        0, // no security attributes
                        OPEN_EXISTING, // must use OPEN_EXISTING
                        FILE_FLAG_OVERLAPPED,    // not overlapped I/O
                        0  // hTemplate must be NULL for comm devices
                        );

       if (hCom == INVALID_HANDLE_VALUE) 
       {
           // Handle the error.
           printf ("Err: %d.\n",GetLastError());
       }


        // Build on the current configuration, and skip setting the size
       // of the input and output buffers with SetupComm.

       fSuccess = GetCommState(hCom, &dcb);

       if (!fSuccess) 
       {
          // Handle the error.
          printf ("GetCommState failed with error %d.\n", GetLastError());
       }

        // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

       dcb.BaudRate = CBR_57600;     // set the baud rate
       dcb.ByteSize = 8;             // data size, xmit, and rcv
       dcb.Parity = NOPARITY;        // no parity bit
       dcb.StopBits = ONESTOPBIT;    // one stop bit

       fSuccess = SetCommState(hCom, &dcb);

       if (!fSuccess) 
       {
          // Handle the error.
          printf ("SetCommState failed with error %d.\n", GetLastError());
       }

       printf ("Serial port successfully reconfigured.\n");
        


    }
    else if (strcmp(instr,"test4")==0)
    {

        scp.open();
    
        char data[] = "hej";
        unsigned char data2[17];

        CanProtoMessage cpm(0x01,0x01,0x01,0x01,1,(unsigned char *)data);
        
        cpm.getBytes(data2);

        scp.write(data2,17);

        //serialReaderStartSerCon(&scp);

        //scp.close();
    }
    else if(strcmp(instr,"tick")==0)
    { 
      printf ("actual:%ld\n", GetTickCount());

    }
    else if (strcmp(instr,"test")==0)
    {
        // Debug for testing canProtoMessage

        unsigned char dat[8];
        
        for (int i=0;i<8;i++) dat[i]=0x10+i*2;
        
        unsigned char dat2[17];

        CanProtoMessage cpm1(0x07,0x91,0x10,0x87,8,&dat[0]);
        
        cpm1.getBytes(&dat2[0]);
    

        CanProtoMessage cpm2(&dat2[0],1);
    
        if (cpm1.equals(&cpm2)) printf("OK!\n"); else printf("Not OK!\n");

    }
    else
    {
        printf("Command not found.\n");
    }

    printf("Main: ");

    return true;
}


bool serialSetConnected(bool connected)
{
    /*
    LONG    lLastError = ERROR_SUCCESS;

    if (connected)
    {
        // Attempt to open the serial port (COM1)
        lLastError = serial.Open(_T("COM2"),0,0,true);
        if (lLastError != ERROR_SUCCESS)
        {
            printf("Unable to open COM-port\n");
            return false;
        }
        // Setup the serial port (9600,N81) using hardware handshaking
        lLastError = serial.Setup(CSerial::EBaud115200,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
        if (lLastError != ERROR_SUCCESS)
        {
                printf("Unable to set COM-port setting\n");
            return false;
        }
        // Setup handshaking
        lLastError = serial.SetupHandshaking(CSerial::EHandshakeOff);
        if (lLastError != ERROR_SUCCESS)
        {
            printf("Unable to set COM-port handshaking\n");
            return false;
        }

        return true;
    }
    else
    {
        serial.Close();
        return true;
    }
*/
    return false;

}

bool isConnected(void)
{
    //return serial.IsOpen();
    return true;
}