sdkcreationmw/sdkruntimes/bluetoothdriver/Bluetooth/sbt/sbt.c
author Shabe Razvi <shaber@symbian.org>
Thu, 04 Nov 2010 17:22:05 +0000
changeset 4 b3b823debf08
parent 0 b26acd06ea60
permissions -rw-r--r--
Workaround for Bug 3917 - CWinsockInterface::DataSent calls NotifyDataSent which is not implemented.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
* Copyright (c) 2000 - 2006 Nokia Corporation and/or its subsidiary(-ies).
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
* All rights reserved.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
* Initial Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
* Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    14
* Description:  Test utility
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
#include "s_lib.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
#include "bt_ioctl.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
#include "vid.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
static char pname[] = "sbt";
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
static char BtControlDeviceName[] = "\\\\.\\HciUsbControl";
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
/**
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
 * Opens a handle to the driver's control device object.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
 * Prints error message in case of failure, which usually indicates
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
 * that driver is not loaded.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
 */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
STATIC HANDLE SBT_OpenDriver()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
    HANDLE hDriver = CreateFile(BtControlDeviceName, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
        FILE_GENERIC_READ | FILE_GENERIC_WRITE,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
        FILE_SHARE_READ | FILE_SHARE_WRITE,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
        NULL, OPEN_EXISTING, 0, NULL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
    if (hDriver == INVALID_HANDLE_VALUE) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
        PRINT_Verbose("%s: failed to open %s, error %d\n",pname,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
            BtControlDeviceName, GetLastError());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
        PRINT_Error("%s: driver is not loaded\n",pname);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
    } else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
        BtVersion v;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
        ULONG nbytes = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
        ZeroMemory(&v, sizeof(v));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
        if (DeviceIoControl(hDriver, IOCTL_S60BT_VERSION, NULL, 0, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
            &v, sizeof(v), &nbytes, NULL)) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
            ASSERT(nbytes == sizeof(v));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
            PRINT_Verbose("%s: driver version %d.%d.%d\n",pname,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
                v.major, v.minor, v.micro);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
        } else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
            PRINT_Error("%s: failed to query driver version\n",pname);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
    return hDriver;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
/**
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
 * Lists the ports created by the driver and their status.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
 */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
STATIC void SBT_ListPorts(HANDLE hDriver)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
    ULONG nbytes = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
    BtPortList* list = MEM_New(BtPortList);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
    if (list) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
        ZeroMemory(list, sizeof(*list));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
        if (DeviceIoControl(hDriver, IOCTL_S60BT_GET_PORT_LIST, NULL, 0, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
            list, sizeof(*list), &nbytes, NULL)) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
            BtUint32 i;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
            while (list && list->totalCount > list->infoCount) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
                int n = list->totalCount;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
                int size = sizeof(BtPortList) + n*sizeof(BtPortInfo);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
                MEM_Free(list);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
                list = MEM_Alloc(size);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
                if (list) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
                    ZeroMemory(list, sizeof(BtPortList));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
                    nbytes = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
                    DeviceIoControl(hDriver, IOCTL_S60BT_GET_PORT_LIST, NULL, 0, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
                        list, size, &nbytes, NULL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
                }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
            }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
            
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
            if (list) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
                PRINT_Output("%s: found %d port%s\n", pname, list->totalCount,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
                    ((list->totalCount % 10) == 1)? "" : "s");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
                for (i=0; i<list->totalCount; i++) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
                    BtPortInfo* p = ((BtPortInfo*)(list+1)) + i;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
                    PRINT_Output("COM%d: %savailable\n", p->portNum, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
                        p->openCount ? "not " : "");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
                    if (PRINT_GetMask() & TRACE_VERBOSE) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    91
                        Str vendorName = VID_GetVendorName(p->vid);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    92
                        if (vendorName) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    93
                            PRINT_Verbose("  USB Vendor ID:  0x%04X (%s)\n",
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    94
                                p->vid, vendorName);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    95
                        } else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    96
                            PRINT_Verbose("  USB Vendor ID:  0x%04X\n",
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    97
                                p->vid);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    98
                        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    99
                        PRINT_Verbose("  USB Product ID: 0x%04X\n", p->pid);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   100
                        if (p->manufacturer[0]) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   101
                            PRINT_Verbose("  Manufacturer:   %ls\n", 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   102
                                p->manufacturer);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   103
                        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   104
                        if (p->productName[0]) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   105
                            PRINT_Verbose("  Product name:   %ls\n", 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   106
                                p->productName);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   107
                        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   108
                        if (p->serialNumber[0]) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   109
                            PRINT_Verbose("  Serial number:  %ls\n",
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   110
                                p->serialNumber);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   111
                        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   112
                    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   113
                }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   114
                MEM_Free(list);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   115
            }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   116
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   117
        } else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   118
            PRINT_Verbose("%s: DeviceIoControl error %d\n",pname,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   119
                GetLastError());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   120
            PRINT_Error("%s: failed to query port list\n",pname);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   121
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   122
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   123
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   124
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   125
/**
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   126
 * The program entry point.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   127
 */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   128
int main(int argc, char* argv[])
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   129
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   130
    CmdLine * c;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   131
    SLIB_InitModules();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   132
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   133
    /* Parse the comment line */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   134
    c = CMDLINE_Create(pname);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   135
    if (c) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   136
        Bool help = False;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   137
        Bool verbose = False;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   138
        CMDLINE_AddTrueOpt(c,'h',"help","print this help and exit",&help);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   139
        CMDLINE_AddTrueOpt(c,'v',"verbose","produce verbose output",&verbose);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   140
        CMDLINE_SetMaxArgs(c, 0);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   141
        CMDLINE_SetApp(c, pname);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   142
        if (CMDLINE_Parse(c, argv+1, argc-1, PARSE_NO_DUP, NULL) && !help) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   143
            HANDLE hDriver;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   144
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   145
            /* Set TRACE_ALL flags if verbose mode is selected */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   146
            if (verbose) PRINT_SetMask(TRACE_ALL);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   147
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   148
            /* Open the driver */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   149
            hDriver = SBT_OpenDriver();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   150
            if (hDriver != INVALID_HANDLE_VALUE) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   151
                SBT_ListPorts(hDriver);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   152
                CloseHandle(hDriver);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   153
            }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   154
        } else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   155
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   156
            /* Print the usage summary. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   157
            CMDLINE_Usage(c, NULL, 0);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   158
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   159
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   160
    SLIB_Shutdown();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   161
}