// Demo.cpp : �������̨Ӧ�ó������ڵ㡣
//

#include "stdafx.h"
#include "Demo.h"
#include "TCLCommand.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Ψһ��Ӧ�ó������

CWinApp theApp;

using namespace std;

void test();
void test1();

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // ��ʼ�� MFC ����ʧ��ʱ��ʾ����
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: ���Ĵ�������Է���������Ҫ
        _tprintf(_T("����: MFC ��ʼ��ʧ��\n"));
        nRetCode = 1;
    }
    else
    {
        // TODO: �ڴ˴�ΪӦ�ó������Ϊ��д���롣
        test1();
        system("pause");
    }

    return nRetCode;
}


void test()
{
#if 0
        TCLCommand tcl(true);
        std::string cmds;
        std::vector<CommandParam> vtCommandParams;
        utils::GetResourceData(BIN_CMD, "BIN", cmds);
        if ( cmds.size() ) {
            tcl.parse_cmds_from_string(cmds, vtCommandParams);
        }

        if (tcl.Open(21, _T("baud=115200 parity=N data=8 stop=1")) )
        {
            tcl.SetTimeouts();
            //tcl.parse_cmds_from_file("F:\\source\\scbc_repos\\Serail-Demo\\Demo\\command.data", vtCommandParams);
            for ( std::vector<CommandParam>::iterator it = vtCommandParams.begin(); it != vtCommandParams.end(); it++ )
            {
                if ( !_tcsicmp(it->name.c_str(), _T("LeaveFactory")) )
                    break;
                byte szData[1024] = {0};
                tcl.PackingCommand(*it, _T(""), 0);
                if (tcl.WriteSync((void*)it->_cmdContext.c_str(), it->_cmdContext.size()) )
                {
                    Sleep(it->read_wait_time);
                    int c = tcl.ReadSync(szData, 1024);
                    std::string str = utils::BytesToHexString(szData, c, ' ');
                    utils::_dprintf("�����%s", str.c_str());

                    str = "";
                    str.append((char*)szData, c);
                    tcl.ParseResultString(*it, str, str.size());
                    
                    Sleep(it->cmd_wait_time);
                }
            }
        }
#else
        TCLCommand tcl(false);
        std::string cmds;
        std::vector<CommandParam> vtCommandParams;
        utils::GetResourceData(BIN_CMD, "BIN", cmds);
        if ( cmds.size() ) {
            tcl.parse_cmds_from_string(cmds, vtCommandParams);
        }

        if ( tcl.Open(21, _T("baud=115200 parity=N data=8 stop=1") ) )
        {
            tcl.SetTimeouts();
            //tcl.parse_cmds_from_file("F:\\source\\scbc_repos\\Serail-Demo\\Demo\\command.data", vtCommandParams);
            for ( std::vector<CommandParam>::iterator it = vtCommandParams.begin(); it != vtCommandParams.end(); it++ )
            {
                if ( !_tcsicmp(it->name.c_str(), _T("LeaveFactory")) )
                    break;
                byte szData[1024] = {0};
                tcl.PackingCommand(*it, _T(""), 0);
                //sb.Read(szData, 1024, 100);
                if ( tcl.Write((void*)it->_cmdContext.c_str(), it->_cmdContext.size()) )
                {
                    Sleep(it->read_wait_time);
                    int c = tcl.Read(szData, 1024, 200);
                    std::string str = utils::BytesToHexString(szData, c, ' ');
                    utils::_dprintf("�����%s", str.c_str());

                    str = "";
                    str.append((char*)szData, c);
                    tcl.ParseResultString(*it, str, str.size());
                    Sleep(it->cmd_wait_time);
                }

                tcl.ClearCommBuffer();
            }
        }
#endif
}

void test1()
{
    TCLCommand tcl(false);
    tcl.SetInternalCMDParams(BIN_CMD);
    tcl.SetExternalCMDParams(_T("F:\\cmds.bin"));

    if (tcl.Open(21, _T("baud=115200 parity=N data=8 stop=1")) )
    {
        tcl.SetTimeouts();
        tcl.EnterFactory();

        int pid;
        tcl.GetProjectId(pid);

        std::string value;
        tcl.GetSoftVersion(value);
        tcl.GetDeviceId(value);
        tcl.GetClientType(value);
        tcl.GetMAC(value);
        tcl.GetHDCPKey(value);

        tcl.GetHDCPKey22(value);
        tcl.GetWidi(value);
        tcl.GetNetflixESN(value);
        tcl.GetWidevine(value);
        tcl.GetCiKey(value);
        tcl.GetOSDLanguage(value);
        tcl.GetShopLanguage(value);
        tcl.GetChannel(value);

        tcl.LeaveFactory();
    }
}