2017-01-21 1 views
-1

메신저 STM32에 새로운 메신저가 생겨서 문제가 발생했습니다. 내가 다음 코드로 USB를 통해 물건을 보내고 있어요 Qt는 응용 프로그램과 함께 STM32 USB 버퍼가 올바르게 검색되지 않았습니다.

:

if (m_hidDevice->isOpen()) 
{ 
    QByteArray buffer(m_hidDevice->readOutputBufferSize(), 0); 

    buffer[0] = 16; 
    buffer[1] = 18; 

    uint16_t number = 4096; 
    uint16_t randomValue = qrand() % number; 

    buffer[2] = (char)((randomValue >> 8) & 0x00ff); 
    buffer[3] = (char)(randomValue & 0x00ff); 

    buffer[4] = (char)((2556 >> 8) & 0x00ff); 
    buffer[5] = (char)(2556 & 0x00ff); 

    qDebug() << "------------" << randomValue; 
    qDebug() << "//" << (uint8_t)buffer[2] << "//" << (uint8_t)buffer[3]; 
    qDebug() << "//" << (uint8_t)buffer[4] << "//" << (uint8_t)buffer[5]; 

    m_hidDevice->write(buffer); 

및 사용 STM32F4 메신저에

switch (buffer[1]) 
    { 
     case 18:     
      x = ((uint16_t)buffer[2] << 8) + buffer[3]; 
      y = ((uint16_t)buffer[4] << 8) + buffer[5]; 

      sr.m_value1[0] = x; 
      sr.m_value1[1] = y; 

      do(M); 

m_value 크기 4를 가지고 있으며,이 uint16_t이다;

* Qt의 앱 출력은 STM32F4의 X에

------------ 2083 
// 8 // 35 
// 9 // 252 

동안이고, Y는 내 데이터가 8 인 동안 버퍼의 크기는 64 바이트이어야 값 지금

x = 2083 (as expected) 
y = 0 

을 5 = 40 바이트. 내 질문에 왜 내가 버퍼의 값을 올바르게 검색 할 수없는 이유는 무엇입니까? 코드에서

+0

오류가

안부, 도시하지 않음. –

+0

오류가 없으며, STM32의 버퍼에 올바른 값이 들어 있지 않습니다. y는 9 * 256 (왼쪽 시프트 8) + 252 = 2556이되어야합니다. 대신 0이됩니다 – user217354

+0

그리고 표시된 코드가 원인이 아닙니다. 보고서 설명자를 확인하십시오. 보고서를 너무 작게 선언 한 것일 수 있습니다. –

답변

0
0x09, 0x01,  // USAGE (Vendor Usage x) --> x = 1,2,3 
0x75, 0x08,  // REPORT_SIZE (8) --> 2^8 = 255 
0x15, 0x00,  // LOGICAL_MINIMUM (0) 
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) 
0x85, 0x02,  // REPORT_ID (n)   --> n must be the report id 
0x95, 0x3f,  // REPORT_COUNT (63)  --> size 
0x91, 0x02  // OUTPUT (Data,Var,Abs) 
관련 문제