Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хост для USB HID Термометр, Хост для USB HID Термометр (Linux, C) 
:(
    Опции темы
XELFAER
Дата 19.3.2013, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возникла проблема с написанием программы (host) USB HID Термометр на языке С для Linux, с использованием библиотеки libusb. Прошивку взял пока готовую с сайта, по аналогии идущей в комплекте программы host'a начал делать сам на С. 
Оборудование находится по VID:PID. Cчитываю 8 байт, конвертирую и получаю непонятный результат  который не меняеться (+32,0 С). При просмотре содержимого буфера - оно меняется при каждом опросе. Не могу понять что делаю не так. Может кто в курсе.
Код программы:
Код

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <math.h>
#include <libusb-1.0/libusb.h>
#include <iostream>
using namespace std;

#define DEV_VID 0xaaaa
#define DEV_PID 0xef04
#define DATA_SIZE 8
//#define DEV_CONFIG 1
#define DEV_INTF 0
#define EP_IN 0x81
#define EP_OUT 0x01

int main(int argc, char * argv[])
{
    libusb_device_handle * handle;
    
    int ret;
    unsigned char buf[DATA_SIZE];
    
    libusb_init(NULL);
    libusb_set_debug(NULL, 3);

    //получим handle устройства    
    handle = libusb_open_device_with_vid_pid(NULL, DEV_VID, DEV_PID);
    if (handle == NULL) {
        printf("Не удалось найти устройство\n");
        libusb_exit(NULL);
        return 0;
    }
    if (libusb_kernel_driver_active(handle,DEV_INTF))
        libusb_detach_kernel_driver(handle, DEV_INTF);

    //захватываем интерфейс
    if (libusb_claim_interface(handle,  DEV_INTF) < 0)
    {
        printf("Ошибка интерфейса\n");
        libusb_close(handle);
        libusb_exit(NULL);
        return 0;
    }
    
    //считываем данные в буфер
    int returned = libusb_interrupt_transfer(handle, EP_IN, buf, DATA_SIZE, &ret, 5000);
    if (returned >= 0) {
            std::cout << "buf[0] = " << (int)buf[0] << std::endl;
            std::cout << "buf[1] = " << (int)buf[1] << std::endl;
            std::cout << "buf[2] = " << (int)buf[2] << std::endl;
            std::cout << "buf[3] = " << (int)buf[3] << std::endl;
        std::cout << "buf[4] = " << (int)buf[4] << std::endl;
            std::cout << "buf[5] = " << (int)buf[5] << std::endl;
            std::cout << "buf[6] = " << (int)buf[6] << std::endl;
            std::cout << "buf[7] = " << (int)buf[7] << std::endl;
        }
    
    //вывод содержимого буфера на экран
    for (int i = 0; i < DATA_SIZE; i++)
        std::cout << buf << std::endl;

//переводим данные в hex
        {
            printf("Buf: ");
            for(unsigned i = 0; i<sizeof(buf); i++){
                printf("0x%02x ", buf[i] & 0xff);
            }
            printf("\n");
        }
//конвертируем данные
                
        uint8_t temp_lo = buf[1] & 0xff;
        uint8_t temp_hi = buf[0] & 0xff;
        int16_t temp = (temp_hi << 8) | (temp_lo);
        float temp_f = temp / 16.0; // low 4 bits of temp are fractional part
        {
            temp_f *= 10;
            temp_f = round(temp_f);
            temp_f /= 10;
            printf("%+.1f\n", temp_f);
        }
                           
// отдаем интерфейс и закрыаем библиотеку
    libusb_attach_kernel_driver(handle, DEV_INTF);
    libusb_close(handle);
    libusb_exit(NULL);
    return 0;
}


компилирую: 
Код

g++ -o usb main.c  -lusb-1.0

PM MAIL WWW   Вверх
Romikgy
Дата 21.3.2013, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



а что меняется в буфере ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
XELFAER
Дата 23.3.2013, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Romikgy @  21.3.2013,  13:49 Найти цитируемый пост)
а что меняется в буфере ?

 ./usb 
Hl�#�
Hl�#�
Hl�#�
Hl�#�
Hl�#�
Hl�#�
Hl�#�
Hl�#�
Buf: 0x48 0x6c 0xfa 0x23 0x80 0x7f 0x00 0x00 
+1158.8

 ./usb 
H�T2
H�T2
H�T2
H�T2
H�T2
H�T2
H�T2
H�T2
Buf: 0x48 0xec 0x54 0x7f 0x32 0x7f 0x00 0x00 
+1166.8

это при нескольких вызовах программы
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




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


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

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