/*
 * listComPorts.c -- list COM ports
 *
 * http://github.com/todbot/usbSearch/
 *
 * 2012, Tod E. Kurt, http://todbot.com/blog/
 *
 *
 * Uses DispHealper : http://disphelper.sourceforge.net/
 *
 * Notable VIDs & PIDs combos:
 * VID 0403 - FTDI
 *
 * VID 0403 / PID 6001 - Arduino Diecimila
 *
 */
void GetAdapterList(uv_work_t* req) {
    AdapterListBaton* data = static_cast<AdapterListBaton*>(req->data);

    {
        DISPATCH_OBJ(wmiSvc);
        DISPATCH_OBJ(colDevices);

        dhInitialize(TRUE);
        dhToggleExceptions(FALSE);

        dhGetObject(L"winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2", NULL, &wmiSvc);
        dhGetValue(L"%o", &colDevices, wmiSvc, L".ExecQuery(%S)", L"Select * from Win32_PnPEntity");

        FOR_EACH(objDevice, colDevices, NULL) {
            char* name = NULL;
            char* pnpid = NULL;
            char* manu = NULL;
            char* match;

            dhGetValue(L"%s", &name,  objDevice, L".Name");
            dhGetValue(L"%s", &pnpid, objDevice, L".PnPDeviceID");

            if( name != NULL && ((match = strstr( name, "(COM" )) != NULL) ) { // look for "(COM23)"
                // 'Manufacturuer' can be null, so only get it if we need it
                dhGetValue(L"%s", &manu, objDevice,  L".Manufacturer");

                if(strcmp("SEGGER", manu) == 0)
                {
                    char* comname = strtok( match, "()");
                    AdapterListResultItem* resultItem = new AdapterListResultItem();
                    resultItem->comName = comname;
                    resultItem->manufacturer = manu;
                    resultItem->pnpId = pnpid;
                    data->results.push_back(resultItem);
                }

                dhFreeString(manu);
              }

            dhFreeString(name);
            dhFreeString(pnpid);
        } NEXT(objDevice);

        SAFE_RELEASE(colDevices);
        SAFE_RELEASE(wmiSvc);

        dhUninitialize(TRUE);
    }
/* ============================================================================ */
int main(void)
{
	const TCHAR * szServer  = TEXT("smtp_server.myisp.com");
	const TCHAR * szFrom    = TEXT("*****@*****.**");
	const TCHAR * szTo      = TEXT("*****@*****.**");
	const TCHAR * szSubject = TEXT("DispHelper Test email");

	dhInitialize(TRUE);
	dhToggleExceptions(TRUE);

	printf("Sending Email using CDO...\n");
	EmailCDO(szServer, szFrom, szTo, szSubject, TEXT("Test email using CDO."));

	printf("Sending Email using Outlook...\n");
	EmailOutlook(szTo, szSubject, TEXT("Test email using Outlook."));
	
	printf("Sending Email using Eudora...\n");
	EmailEudora(szTo, szSubject, TEXT("Test email using Eudora"));


	dhUninitialize(TRUE);
	return 0;
}