USB 蓝牙数据收发问题

USB接收的数据

void DevEP2_OUT_Deal( uint8_t l )

  uint8_t i;


  app_usb_notify(pEP2_OUT_DataBuf, l);

}

用什么方法把HID报告填入

static void hidEmuSendTouchReport(uint8_t touch, uint8_t ID, uint16_t X_data, uint16_t Y_data)

{

    uint8_t buf[HID_TOUCH_IN_RPT_LEN];


    buf[0] = touch;                  // touch or not

    buf[1] = ID;                     // touch ID

    buf[2] = (uint8_t)X_data;        // X axis data low 8bit

    buf[3] = (uint8_t)(X_data >> 8); // X axis data high 8bit

    buf[4] = (uint8_t)Y_data;        // Y axis data low 8bit

    buf[5] = (uint8_t)(Y_data >> 8); // Y axis data high 8bit


    HidDev_Report(HID_RPT_ID_TOUCH_IN, HID_REPORT_TYPE_INPUT,

                  HID_TOUCH_IN_RPT_LEN, buf);

}

函数中发送出去。

您好,数据填写是根据上位机下发格式决定的,比如说上位机下发一串数据0x....01020304....,那可以提取合并成0x0102和0x0304两个16位的数据,往hidEmuSendTouchReport的形参X_data、Y_data的位置填写,关键是上位机和MCU通信的数据格式,是要提前制定,严格遵守的;Touch参数一般给0或者1,0标识松开,1表示按下;TouchID通常用于多个触点同时按下的情况,一般从0计起。


有参考的例子吗


没有例程,加几行逻辑就可以的,您可以参考我前面的回复编写代码。


例如我要点击坐标 press (500,500,100),100ms 抬起手指,上位机是否需要对坐标进行转换,如果需要,能否给我一个方法。


您好,坐标一般是X、Y轴的,从0起的正整数,最大数值根据分辨率的大小而不同,16位无符号数据一般可以放下。

是否需要坐标转换,需要看您想做到什么效果。分辨率不同,驱动不同,在不同上位机的效果就不同,您可以先烧录代码,用几个点试一下,如果说(500,500)这个点可以由上位机识别,并且刚好在您期望的位置,就不用转换。


只有登录才能回复,可以选择微信账号登录