亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbsdk.c

?? GPS開發的sdk資料
?? C
字號:
// This file contains sample code to help application developers
// interface with Garmin USB units. This should not be viewed as a
// full implementation of PC to unit communication. It does not include
// error checking and other elements of a full implementation.
// Also, there are notes in the code suggesting other elements that
// might be necessary.

#include <stdio.h>
#include <tchar.h>

#include <windows.h>
#include <initguid.h>
#include <setupapi.h> // You may need to explicitly link with setupapi.lib
#include <winioctl.h>

DEFINE_GUID(GUID_DEVINTERFACE_GRMNUSB, 0x2c9c45c2L, 0x8e7d, 0x4c08, 0xa1, 0x2d, 0x81, 0x6b, 0xba, 0xe7, 0x22, 0xc0);

#define IOCTL_ASYNC_IN        CTL_CODE (FILE_DEVICE_UNKNOWN, 0x850, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_PACKET_SIZE CTL_CODE (FILE_DEVICE_UNKNOWN, 0x851, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define MAX_BUFFER_SIZE 4096
#define ASYNC_DATA_SIZE 64

//-----------------------------------------------------------------------------
HANDLE gHandle;
DWORD gUSBPacketSize;

//-----------------------------------------------------------------------------
#pragma pack( push, 1)
typedef struct
    {
    unsigned char  mPacketType;
    unsigned char  mReserved1;
    unsigned short mReserved2;
    unsigned short mPacketId;
    unsigned short mReserved3;
    unsigned long  mDataSize;
    BYTE           mData[1];
    } Packet_t;
#pragma pack( pop)

//-----------------------------------------------------------------------------
void
SendPacket
    (
    Packet_t aPacket
    )
{
DWORD theBytesToWrite = sizeof( aPacket ) - 1 + aPacket.mDataSize;
DWORD theBytesReturned = 0;

WriteFile( gHandle,
           &aPacket,
           theBytesToWrite,
           &theBytesReturned,
           NULL );

// If the packet size was an exact multiple of the USB packet
// size, we must make a final write call with no data
if( theBytesToWrite % gUSBPacketSize == 0 )
    {
    WriteFile( gHandle,
               0,
               0,
               &theBytesReturned,
               NULL );
    }
}

//-----------------------------------------------------------------------------
// Gets a single packet. Since packets may come simultaneously through
// asynchrous reads and normal (ReadFile) reads, a full implementation
// may require a packet queue and multiple threads.
Packet_t*
GetPacket
    (
    )
{
Packet_t* thePacket = 0;
DWORD theBufferSize = 0;
BYTE* theBuffer = 0;

for( ; ; )
    {
    // Read async data until the driver returns less than the
    // max async data size, which signifies the end of a packet
    BYTE theTempBuffer[ASYNC_DATA_SIZE];
    BYTE* theNewBuffer = 0;
    DWORD theBytesReturned = 0;

    DeviceIoControl( gHandle,
                     IOCTL_ASYNC_IN,
                     0,
                     0,
                     theTempBuffer,
                     sizeof( theTempBuffer ),
                     &theBytesReturned,
                     NULL );

    theBufferSize += ASYNC_DATA_SIZE;
    theNewBuffer = (BYTE*) malloc( theBufferSize );
    memcpy( theNewBuffer, theBuffer, theBufferSize - ASYNC_DATA_SIZE );
    memcpy( theNewBuffer + theBufferSize - ASYNC_DATA_SIZE,
            theTempBuffer,
            ASYNC_DATA_SIZE );

    free( theBuffer );

    theBuffer = theNewBuffer;

    if( theBytesReturned != ASYNC_DATA_SIZE )
        {
        thePacket = (Packet_t*) theBuffer;
        break;
        }
    }

// If this was a small "signal" packet, read a real
// packet using ReadFile
if( thePacket->mPacketType == 0 &&
    thePacket->mPacketId == 2 )
    {
    BYTE* theNewBuffer = (BYTE*) malloc( MAX_BUFFER_SIZE );
    DWORD theBytesReturned = 0;

    free( thePacket );

    // A full implementation would keep reading (and queueing)
    // packets until the driver returns a 0 size buffer.
    ReadFile( gHandle,
              theNewBuffer,
              MAX_BUFFER_SIZE,
              &theBytesReturned,
              NULL );

    return (Packet_t*) theNewBuffer;
    }
else
    {
    return thePacket;
    }
}

//-----------------------------------------------------------------------------
void
Initialize
    (
    )
{
// Make all the necessary Windows calls to get a handle
// to our USB device
DWORD theBytesReturned = 0;

PSP_INTERFACE_DEVICE_DETAIL_DATA theDevDetailData = 0;
SP_DEVINFO_DATA theDevInfoData = { sizeof( SP_DEVINFO_DATA ) };

Packet_t theStartSessionPacket = { 0, 0, 0, 5, 0 , 0 };
Packet_t* thePacket = 0;

HDEVINFO theDevInfo = SetupDiGetClassDevs(
    (GUID*) &GUID_DEVINTERFACE_GRMNUSB,
    NULL,
    NULL,
    DIGCF_PRESENT | DIGCF_INTERFACEDEVICE );

SP_DEVICE_INTERFACE_DATA theInterfaceData;
theInterfaceData.cbSize = sizeof( theInterfaceData );

if( !SetupDiEnumDeviceInterfaces( theDevInfo,
                                  NULL,
                                  (GUID*) &GUID_DEVINTERFACE_GRMNUSB,
                                  0,
                                  &theInterfaceData ) &&
    GetLastError() == ERROR_NO_MORE_ITEMS )
    {
    gHandle = 0;
    return;
    }


SetupDiGetDeviceInterfaceDetail(
    theDevInfo,
    &theInterfaceData,
    NULL,
    0,
    &theBytesReturned,
    NULL );

theDevDetailData =
    (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc( theBytesReturned );
theDevDetailData->cbSize = sizeof( SP_INTERFACE_DEVICE_DETAIL_DATA );

SetupDiGetDeviceInterfaceDetail( theDevInfo,
                                 &theInterfaceData,
                                 theDevDetailData,
                                 theBytesReturned,
                                 NULL,
                                 &theDevInfoData );

gHandle = CreateFile(
    theDevDetailData->DevicePath,
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL );

free( theDevDetailData );

// Get the USB packet size, which we need for sending packets
DeviceIoControl( gHandle,
                 IOCTL_USB_PACKET_SIZE,
                 0,
                 0,
                 &gUSBPacketSize,
                 sizeof( gUSBPacketSize ),
                 &theBytesReturned,
                 NULL );

// Tell the device that we are starting a session.
SendPacket( theStartSessionPacket );

// Wait until the device is ready to the start the session
for( ; ; )
    {
    thePacket = GetPacket();

    if( thePacket->mPacketType == 0 &&
        thePacket->mPacketId == 6 )
        {
        break;
        }

    free( thePacket );
    }

free( thePacket );
}

//-----------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
Packet_t theProductDataPacket = { 20, 0, 0, 254, 0 , 0 };
Packet_t* thePacket = 0;

Initialize();

if( gHandle == 0 )
    {
    printf( "%s", "No device" );
    return 0;
    }

// Tell the device to send product data
SendPacket( theProductDataPacket );

// Get the product data packet
for( ; ; )
    {
    thePacket = GetPacket();

    if( thePacket->mPacketType == 20 &&
        thePacket->mPacketId == 255 )
        {
        break;
        }

    free( thePacket );
    }

// Print out the product description
printf( "%s", (char*) &thePacket->mData[4] );

free( thePacket );

return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷激情综合| 成人高清免费观看| 亚洲国产欧美在线| 亚洲第一福利视频在线| 亚洲一区日韩精品中文字幕| 亚洲精品老司机| 一区二区三区av电影| 亚洲午夜三级在线| 日本在线播放一区二区三区| 蜜臀av国产精品久久久久| 美女视频网站黄色亚洲| 狠狠久久亚洲欧美| 成人aa视频在线观看| 欧美在线观看一二区| 欧美精品在线视频| 日韩欧美国产三级电影视频| 亚洲精品在线网站| 国产精品久久久久影视| 亚洲免费在线电影| 日本午夜一本久久久综合| 黄色精品一二区| 成人黄色小视频在线观看| 欧美视频一区二区在线观看| 欧美一级二级三级蜜桃| 国产日产精品1区| 一区二区三区在线视频播放| 日本成人在线网站| 成人午夜大片免费观看| 欧美视频在线一区二区三区| 欧美tk—视频vk| 亚洲精品高清在线| 美女视频一区二区| 91久久久免费一区二区| 欧美videos中文字幕| 亚洲精选在线视频| 久久成人免费日本黄色| 91在线视频免费91| 日韩亚洲欧美成人一区| 亚洲色图欧洲色图婷婷| 久久99国产乱子伦精品免费| 在线欧美一区二区| 久久精品一区蜜桃臀影院| 亚洲福中文字幕伊人影院| 国产精品白丝jk黑袜喷水| 欧美日韩和欧美的一区二区| 国产精品视频一二三区| 青娱乐精品视频在线| 97久久精品人人做人人爽| 精品国产乱子伦一区| 亚洲动漫第一页| 91网址在线看| 国产区在线观看成人精品| 蜜臀va亚洲va欧美va天堂 | 日韩毛片视频在线看| 久久er精品视频| 欧美日韩国产片| 亚洲精品视频观看| 成人高清视频在线观看| www国产精品av| 蜜桃精品在线观看| 5月丁香婷婷综合| 亚洲高清在线精品| 色婷婷精品久久二区二区蜜臂av| 国产欧美日韩综合精品一区二区| 久久精品二区亚洲w码| 欧美日韩小视频| 一二三四社区欧美黄| 99精品一区二区| 亚洲欧洲韩国日本视频| 国产99一区视频免费| 久久久久久**毛片大全| 国产综合久久久久久鬼色| 精品区一区二区| 韩国中文字幕2020精品| 亚洲精品一区二区三区影院| 麻豆中文一区二区| xvideos.蜜桃一区二区| 国产尤物一区二区| 国产欧美日韩三区| 成人免费高清在线观看| 国产精品理论片| 在线看日韩精品电影| 亚洲图片有声小说| 日韩亚洲欧美成人一区| 国产中文字幕一区| 国产精品电影院| 91久久香蕉国产日韩欧美9色| 一级精品视频在线观看宜春院| 在线观看91视频| 美女视频黄频大全不卡视频在线播放 | 欧美一区二区福利视频| 日韩国产高清影视| xnxx国产精品| 99亚偷拍自图区亚洲| 亚洲国产一区二区在线播放| 91精品婷婷国产综合久久性色| 久久99精品国产| 国产精品久久久久久久第一福利| 91亚洲精华国产精华精华液| 亚洲国产精品麻豆| 精品sm在线观看| 92精品国产成人观看免费| 婷婷六月综合网| 久久久久久电影| 色偷偷久久一区二区三区| 婷婷成人综合网| 久久夜色精品一区| 色偷偷久久人人79超碰人人澡| 亚洲成人动漫精品| 国产拍揄自揄精品视频麻豆| 在线亚洲免费视频| 精品一区二区在线看| 一区二区三区中文字幕电影| 日韩欧美区一区二| 91在线免费播放| 麻豆精品国产传媒mv男同| 亚洲人成精品久久久久| 精品福利av导航| 日本韩国精品在线| 国产精品2024| 日韩va亚洲va欧美va久久| 中文字幕国产一区二区| 欧美一区二区三区播放老司机| 不卡的av电影| 国产精品影音先锋| 日韩中文字幕一区二区三区| 中国色在线观看另类| 欧美一区国产二区| 色老汉av一区二区三区| 国产河南妇女毛片精品久久久| 日日欢夜夜爽一区| 亚洲精品国产a| 国产精品精品国产色婷婷| 日韩一区二区三区在线观看| 欧美无砖专区一中文字| 色综合咪咪久久| 99re热这里只有精品视频| 国产一区不卡在线| 老鸭窝一区二区久久精品| 三级欧美在线一区| 一区二区三区欧美视频| ...xxx性欧美| 国产精品进线69影院| 国产精品嫩草99a| 国产精品乱人伦一区二区| 久久嫩草精品久久久精品| 日韩美女一区二区三区| 欧美一二三区在线| 欧美一区二区三区啪啪| 91精品久久久久久蜜臀| 欧美日韩国产一级片| 欧美丰满美乳xxx高潮www| 欧美日韩视频在线观看一区二区三区 | 亚洲福利一区二区三区| 一区二区三区av电影 | 91精品国产综合久久香蕉麻豆| 日本韩国一区二区三区视频| 99国产精品国产精品久久| 成人性生交大片免费看视频在线| 国产91丝袜在线播放九色| 国产成人精品免费一区二区| 波多野结衣欧美| 91一区二区三区在线播放| 91成人免费网站| 精品视频1区2区| 日韩欧美在线网站| 久久久久久一级片| 亚洲欧洲日韩一区二区三区| 亚洲另类中文字| 日韩成人一级大片| 韩国精品主播一区二区在线观看 | 欧美男人的天堂一二区| 制服丝袜亚洲网站| 精品蜜桃在线看| 国产精品久久久久久久浪潮网站| 亚洲人成网站影音先锋播放| 五月天亚洲精品| 国产精品99久久久久久有的能看| 成人成人成人在线视频| 欧美日韩日本视频| 国产色婷婷亚洲99精品小说| 亚洲精品一卡二卡| 天天综合网 天天综合色| 精久久久久久久久久久| 91丨九色丨国产丨porny| 欧美色综合网站| 欧美激情一区二区三区在线| 一区二区三区成人在线视频 | 欧美激情一区二区三区全黄| 一区二区三区欧美日韩| 韩国女主播成人在线| 欧美亚洲日本国产| 国产欧美一二三区| 日韩成人精品在线| 91网上在线视频| 精品第一国产综合精品aⅴ| 亚洲免费观看高清完整版在线| 麻豆91免费观看| 欧洲激情一区二区| 中文字幕 久热精品 视频在线 |