Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программирование Bluetooth, передать файл с ПК на КПК или мобилу 
:(
    Опции темы
rlepricon
Дата 27.4.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Првиет...

Подскажите, плиз, как передать файлик с ПК на мобилу или КПК через Bluetooth. Как это делать через инфоракрасник я разобрался... Щас надо сделать это через Bluetooth. Наскока я понял надо выполнить следующие шаги:

1. Обнаружение устройств.
2. Выбор устройства.
3. Установление соединения с выбранным устройством.
4. Авторизация на выбранном устройстве.
5. Передача файла
6. Дисконнект.

У меня по большому засада уже не первом пункте :-(

Если кто делал помогите, плиз!!!
 
PM MAIL   Вверх
Nuzur
Дата 28.4.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Поделись способами по инфрокраснику плиз.
Тема интерестна и мне(я про синий зуб). 


--------------------
Never again...
PM MAIL   Вверх
rlepricon
Дата 28.4.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



До дома дойду выложу исходники по IRDA... 
PM MAIL   Вверх
rlepricon
Дата 29.4.2006, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Как и обещал выкладываю исходник:

файл obex.h (содержит объявления констант)

Код

// OBEX Operation Codes
#define OBEX_PUT                (BYTE)    0x02
#define OBEX_PUT_FINAL            (BYTE)    0x82
#define OBEX_CONNECT            (BYTE)    0x80
#define OBEX_DISCONNECT            (BYTE)    0x81

// OBEX Header Codes
#define OBEX_NAME                (BYTE)    0x01
#define OBEX_LENGTH                (BYTE)    0xC3
#define OBEX_DESCRIPTION        (BYTE)    0x05
#define OBEX_PALM_CREATOR_ID    (BYTE)    0xCF
#define OBEX_BODY                (BYTE)    0x48
#define OBEX_END_OF_BODY        (BYTE)    0x49

// OBEX Response Codes
#define OBEX_CONTINUE            (BYTE)    0x90
#define OBEX_SUCCESS            (BYTE)    0xA0

#define OBEX_VERSION            (BYTE)    0x10
#define OBEX_CONNECT_FLAGS        (BYTE)    0x00

файл main.cpp

#include <winsock2.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>

#ifndef _WIN32_WINNT
#define _WIN32_WINNT
#endif

#include <af_irda.h>

#define MAX_RETRIES 10
#define MAX_BUFFER 0x200
#define MAX_PKT_SIZE 0x800

#include "obex.h"

SOCKET sock;
int FindDevices(SOCKET s,DEVICELIST *devlist) 
{
    DWORD dwNumRetries = 0;
    int dwDevListSz;
    int ret;
    dwDevListSz = sizeof(*devlist);
    devlist->numDevice = 0;
    while ((devlist->numDevice == 0)&&(dwNumRetries <= MAX_RETRIES)) 
   {
        ret = getsockopt(s,SOL_IRLMP,IRLMP_ENUMDEVICES,(char*)devlist,&dwDevListSz);
        if (ret == SOCKET_ERROR) 
       {
            fprintf(stderr,"getsockopt(IRLMP_ENUMDEVICES) failed: %h\n",WSAGetLastError());
            return 0;
        };
        dwNumRetries++;
        Sleep(1000);
    };
    if (dwNumRetries > MAX_RETRIES) 
    {
        return 0;
    };
    return devlist->numDevice;
};

int main(int argc, char **argv) 
{
    WSADATA wsd;
    SOCKADDR_IRDA irAddr = {AF_IRDA, 0, 0, 0, 0, "OBEX"};
    DWORD dwIrSize = sizeof(SOCKADDR_IRDA);
    DEVICELIST devlist;
    WORD wVersion;
    char *FileName = "010.gif";
        wVersion = MAKEWORD(2,2);
    if (WSAStartup(wVersion, &wsd) !=0) 
{
        printf("Unable to load Winsock library\n");
        return 1;
    };
    sock = socket(AF_IRDA,SOCK_STREAM,0);
    if (sock == INVALID_SOCKET) 
{
        printf("socket() failed: %d",WSAGetLastError());
        return 1;
    };
    if (FindDevices(sock,&devlist) == 0) 
{
        printf("No IrDA devices in range\n");
        return 1;
    };

    printf("Device ID: %d\n", devlist.Device[0].irdaDeviceID);
    printf("Device Name: %s\n", devlist.Device[0].irdaDeviceName);

    int i=0;
    for(i=0;i<4;i++) irAddr.irdaDeviceID[i] = devlist.Device[0].irdaDeviceID[i];

    if (connect(sock,(struct sockaddr*)&irAddr,sizeof(irAddr)) == SOCKET_ERROR) 
{
        printf("Unable to locate service: %s\n",irAddr.irdaServiceName);
        printf("connect() error: %d\n", WSAGetLastError());
        return 1;
    };

    printf("Connected\n");
    char sndBuff[MAX_BUFFER] = {0};
    char rcvBuff[MAX_BUFFER] = {0};
    sndBuff[0] = (char)0x80;
    sndBuff[1] = (char)0x00;
    sndBuff[2] = (char)0x07;
    sndBuff[3] = (char)0x10;
    sndBuff[4] = (char)0x00;
    sndBuff[5] = (char)0x02;
    sndBuff[6] = (char)0x00;
    if (send(sock,sndBuff,7,0)==SOCKET_ERROR) 
{
        printf("Send Error: %d\n",WSAGetLastError());
        return 1;
    };

    if ((recv(sock,rcvBuff,MAX_BUFFER,0)==SOCKET_ERROR)||(rcvBuff[0]!=(char)0xA0)) 
{
        printf("Recive Error: %d\n",WSAGetLastError());
        return 1;
    };

    wchar_t filelen = (strlen(FileName)+1)*sizeof(wchar_t);
    sndBuff[0] = 0x02;
    *((unsigned short*)&sndBuff[1])=htons((unsigned short)(filelen+6));
    sndBuff[3] = 0x01;
    *((unsigned short*)&sndBuff[4])=htons((unsigned short)(filelen+3));
    for (i=0;i<((int)(filelen/2));i++)
        *((unsigned short *)&sndBuff[6+2*i])=htons((unsigned short)FileName[i]);

    if (send(sock,sndBuff,filelen+6,0)==SOCKET_ERROR) 
{
        printf("Send Error: %d\n",WSAGetLastError());
        return 1;
    };

    if ((recv(sock,rcvBuff,MAX_BUFFER,0)==SOCKET_ERROR)||(rcvBuff[0]!=(char)0x90)) 
{
        printf("Recive Error: %d\n",WSAGetLastError());
        return 1;
    };

// Загрузка файла    
    HANDLE f = CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    char FileBuff[0x32000];
    DWORD BytesRead;
    ReadFile(f,FileBuff,0x32000,&BytesRead,NULL);
    printf("Bytes read: %d\n",BytesRead);
//----------------

    DWORD j = 0;
    DWORD k = 0;
    DWORD pkgsize = 0;
    DWORD pkgcount = 1;

    while (j < BytesRead) 
{
        sndBuff[0]=0x02;
        sndBuff[1]=0x02;
        sndBuff[2]=0x00;
        sndBuff[3]=0x48;
        sndBuff[4]=0x01;
        sndBuff[5]=0xFD;
        pkgsize = MAX_BUFFER-6;
        if (BytesRead-j<=pkgsize) 
        {
            pkgsize=BytesRead-j;
            sndBuff[0]=0x82;
            *((unsigned short*)&sndBuff[1])=htons((unsigned short)pkgsize+6);
            sndBuff[3]=0x49;
            *((unsigned short*)&sndBuff[4])=htons((unsigned short)pkgsize+3);
        };
        for(k=0;k<pkgsize;k++) { sndBuff[6+k]=FileBuff[j+k]; };
        
        if (send(sock,sndBuff,pkgsize+6,0)==SOCKET_ERROR) 
{
            printf("Send Error: %d\n",WSAGetLastError());
            return 1;
        };

        if ((recv(sock,rcvBuff,MAX_BUFFER,0)==SOCKET_ERROR)
            ||((rcvBuff[0]!=(char)0x90)&&(sndBuff[0]==0x02))
            ||((rcvBuff[0]!=(char)0xA0)&&(sndBuff[0]==0x82))) {
            printf("Recive Error: %d\n",WSAGetLastError());
            return 1;
        };
        
        j+=pkgsize;
        printf("Pakage size: %d, Pakage number: %d\n",pkgsize,pkgcount++);
        if ((sndBuff[0]==0x82)&&(rcvBuff[0]==0xA0)) {printf("File sended ok!\n"); };
    };
    
//    int BytesSent = 0;
//    if ((BytesSent = send(sock, sndBuff, BytesRead, 0)) == SOCKET_ERROR) {
//        printf("Send Error: %d\n",WSAGetLastError());
//        return 1;
//    };
    getch();
//    CloseHandle(f);
    closesocket(sock);
    WSACleanup();
    return 0;
};


если будут вопросы, спрашивай...

я компилил на VS6.0 надо компилить с библиотекой ws2_32.lib

Если надо могу проект выслать на мыло. 

Это сообщение отредактировал(а) Олег2005 - 21.4.2010, 09:02
PM MAIL   Вверх
Nuzur
Дата 2.5.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Вышли пожалуйста.

Это сообщение отредактировал(а) Nuzur - 6.7.2007, 15:38


--------------------
Never again...
PM MAIL   Вверх
rlepricon
Дата 4.5.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Если кто-то всё таки разбирался, то подскажите, где я ошибся?

Локальный Bluetooth адаптер я нахожу, и могу получить с него всю инфу, далее когда пытаюсь найти удалённые устройства он их не находит, хотя стандартными средствами Windows они находятся.

Что я не так делаю? подскажите, плиз 

Код

#include <winsock2.h>
#include <ws2bth.h>
#include <bthdef.h>

#include <BluetoothAPIs.h>

#include <stdio.h>

int main() {


// Инициализация WinSock
    WSADATA wsd;
    WORD Version = MAKEWORD(2,2);

    if (WSAStartup(Version,&wsd)!=0) {
        printf("WSAStartup error\n");
        return 1;
    }; 

// Поиск первого Bluetooth устройства установленного на компьютере
    HANDLE hRadio;
    BLUETOOTH_FIND_RADIO_PARAMS btfrp;
    HBLUETOOTH_RADIO_FIND hFind;

    BLUETOOTH_RADIO_INFO RadioInfo= {0};

    btfrp.dwSize = sizeof(btfrp);

    hFind = BluetoothFindFirstRadio(&btfrp,&hRadio);

    if (hFind != 0) {
        printf("Local radio module is found\n");
    } else {
        printf("Nothing is found\n");
        return 1;
    };

// Поиск удалённых Bluetooth устройств

    HBLUETOOTH_DEVICE_FIND hDeviceFind;
    BLUETOOTH_DEVICE_SEARCH_PARAMS btdsp;
    BLUETOOTH_DEVICE_INFO DeviceInfo = {0};

    btdsp.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
    btdsp.fReturnRemembered = true;
    btdsp.hRadio = hRadio;

    DeviceInfo.dwSize=sizeof(BLUETOOTH_DEVICE_INFO);
    hDeviceFind = BluetoothFindFirstDevice(&btdsp,&DeviceInfo);

    if (hDeviceFind!=NULL) {
        printf("Remote device is found\n");
    };
    

    BluetoothFindDeviceClose(hDeviceFind);
    CloseHandle(hRadio);

    return 0;
};
 


Локальный Bluetooth адаптер я нахожу, и могу получить с него всю инфу, далее когда пытаюсь найти удалённые устройства он их не находит, хотя стандартными средствами Windows они находятся.

Что я не так делаю? подскажите, плиз  
PM MAIL   Вверх
blur
Дата 5.5.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 9.11.2004

Репутация: 1
Всего: 1



Цитата(rlepricon @  4.5.2006,  15:50 Найти цитируемый пост)
Что я не так делаю? подскажите, плиз  

Попробуй вот такой код:

Код

#include "bthdef.h"
#include "BluetoothAPIs.h"
#pragma comment(lib, "irprops.lib")

BLUETOOTH_DEVICE_SEARCH_PARAMS bdsp;
BLUETOOTH_DEVICE_INFO bdi;
HBLUETOOTH_DEVICE_FIND hbf;

ZeroMemory(&bdsp, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS));

bdsp.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
bdsp.fReturnAuthenticated = TRUE;
bdsp.fReturnRemembered = TRUE;
bdsp.fReturnUnknown = TRUE;
bdsp.fReturnConnected = TRUE;
bdsp.fIssueInquiry = TRUE;
bdsp.cTimeoutMultiplier = 10;
bdsp.hRadio = NULL;

bdi.dwSize = sizeof(bdi);

hbf = BluetoothFindFirstDevice(&bdsp, &bdi);
DWORD dwErr = GetLastError();

if (hbf != NULL)
{
 TCHAR szDevName[MAX_PATH];

 while(1)
 {
  memset(szDevName, 0x00, sizeof(szDevName));
  sprintf(szDevName, _T("Name:%S"), bdi.szName);
  MessageBox(szDevName, _T("Bluetooth Info"));

  if (BluetoothFindNextDevice(hbf, &bdi) == FALSE)
   break;
 }

 BluetoothFindDeviceClose(hbf);
}
else
{
 //No Devices Found...
}

 
PM MAIL   Вверх
rlepricon
Дата 5.5.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Спасибо, заработало :-) 
PM MAIL   Вверх
blur
Дата 5.5.2006, 14:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 9.11.2004

Репутация: 1
Всего: 1



Цитата(rlepricon @  5.5.2006,  14:25 Найти цитируемый пост)
Спасибо, заработало :-)  

А плюсик?  smile 
 
PM MAIL   Вверх
cozzzy
Дата 5.5.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.4.2006
Где: Харьков

Репутация: нет
Всего: нет



 smile 

Цитата(blur @  5.5.2006,  13:30 Найти цитируемый пост)
А плюсик?   

Какой ты корыстный  smile 

З.Ы. Он еще не может =) 
PM MAIL   Вверх
rlepricon
Дата 5.5.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Как выяснолись пока не могу плюсики ставить постов пока мало :-( 
PM MAIL   Вверх
rlepricon
Дата 12.5.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Я сделал ЭТО!

Вообщем есть одно ограничение (в моей программе): 

Блютуц-адаптер, который подключён к компу должен определяться WinXP SP2 без установки драйверов.

и ещё не до конца разобрался с авторизацией...
 
PM MAIL   Вверх
Sambir
Дата 30.9.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.9.2006

Репутация: нет
Всего: нет



Я не могу подключить библиотеки BluetoothAPIs.h и bthdef.h что мне делать. 
!!!HELP!!!

Добавлено @ 15:25 
Я не могу подключить библиотеки BluetoothAPIs.h и bthdef.h что мне делать. 
!!!HELP!!!

Это сообщение отредактировал(а) Sambir - 4.11.2006, 00:16
PM MAIL   Вверх
Vladimir_Petrov
Дата 7.1.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.1.2007

Репутация: нет
Всего: нет



я нашел библиотеки BluetoothAPIs.h и bthdef.h (ниже), но никак не могу найти заголовочный файл ws2bth.h.
Что нужно, чтоб заработал вышеописанный код(ы)?
Пробовал VC6.0 XP SP1 или SP2 не получилось. Не хватает библиотек и мозгов.
Подскажите ПЛЗ...

Присоединённый файл ( Кол-во скачиваний: 189 )
Присоединённый файл  Bluetooth_API.rar 22,64 Kb
PM MAIL   Вверх
witex
Дата 8.1.2007, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 1
Всего: 4



Не ну я понимаю, помощь дело святое! Но зачем древние темы поднимать??? ты бы ещё прошлогодню поднял!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.