发 帖  
原厂入驻New
[经验]

【大联大世平ON Semiconductor BLE5.0 RSL10开发板试用体验】+ 蓝牙键盘试验

2020-9-29 10:38:10  249 大联大 开发板 蓝牙
分享
0
今天搞了一下peripheral_server_hid试验。
类似一个蓝牙USB设备
代码:
  1. #include "app.h"
  2. static struct on_semi_banner_str on_semi_banner[] =
  3. {
  4.     { 0x15,    /* Key R     */ 0x02 },
  5.     { 0x16,    /* Key S     */ 0x02 },
  6.     { 0x0f,    /* Key L     */ 0x02 },
  7.     { 0x1e,    /* Key 1     */ 0x00 },
  8.     { 0x27,    /* Key 0     */ 0x00 },
  9.     { 0x2c,    /* Key       */ 0x00 },
  10.     { 0x12,    /* Key O     */ 0x02 },
  11.     { 0x11,    /* Key N     */ 0x02 },
  12.     { 0x2c,    /* Key       */ 0x00 },
  13.     { 0x16,    /* Key S     */ 0x02 },
  14.     { 0x08,    /* Key e     */ 0x00 },
  15.     { 0x10,    /* Key m     */ 0x00 },
  16.     { 0x0c,    /* Key i     */ 0x00 },
  17.     { 0x06,    /* Key c     */ 0x00 },
  18.     { 0x12,    /* Key o     */ 0x00 },
  19.     { 0x11,    /* Key n     */ 0x00 },
  20.     { 0x07,    /* Key d     */ 0x00 },
  21.     { 0x18,    /* Key u     */ 0x00 },
  22.     { 0x06,    /* Key c     */ 0x00 },
  23.     { 0x17,    /* Key t     */ 0x00 },
  24.     { 0x12,    /* Key o     */ 0x00 },
  25.     { 0x15,    /* Key r     */ 0x00 },
  26.     { 0x2c,    /* Key       */ 0x00 },
  27.     { 0x0b,    /* Key H     */ 0x02 },
  28.     { 0x0c,    /* Key I     */ 0x02 },
  29.     { 0x07,    /* Key D     */ 0x02 },
  30.     { 0x2c,    /* Key       */ 0x00 },
  31.     { 0x0e,    /* Key K     */ 0x02 },
  32.     { 0x08,    /* Key e     */ 0x00 },
  33.     { 0x1c,    /* Key y     */ 0x00 },
  34.     { 0x05,    /* Key b     */ 0x00 },
  35.     { 0x12,    /* Key o     */ 0x00 },
  36.     { 0x04,    /* Key a     */ 0x00 },
  37.     { 0x15,    /* Key r     */ 0x00 },
  38.     { 0x07,    /* Key d     */ 0x00 },
  39.     { 0x2c,    /* Key       */ 0x00 },
  40.     { 0x07,    /* Key D     */ 0x02 },
  41.     { 0x08,    /* Key e     */ 0x00 },
  42.     { 0x10,    /* Key m     */ 0x00 },
  43.     { 0x12,    /* Key o     */ 0x00 },
  44.     { 0x2c,    /* Key       */ 0x00 },
  45.     { 0x28,    /* Key ENTER */ 0x00 }
  46. };
  47. static uint32_t on_semi_banner_size = \
  48.     sizeof(on_semi_banner) / \
  49.     sizeof(struct on_semi_banner_str);
  50. static uint32_t act_key = 0;

  51. /* ----------------------------------------------------------------------------
  52. * Function      : void DIO0_IRQHandler(void)
  53. * ----------------------------------------------------------------------------
  54. * Description   : Start the transactions
  55. * Inputs        : None
  56. * Outputs       : None
  57. * Assumptions   : None
  58. * ------------------------------------------------------------------------- */
  59. void DIO0_IRQHandler(void)
  60. {
  61.     static uint8_t ignore_next_dio_int = 0;
  62.     IF (ignore_next_dio_int)
  63.     {
  64.         ignore_next_dio_int = 0;
  65.     }
  66.     else if (DIO_DATA->ALIAS[BUTTON_DIO] == 0)
  67.     {
  68.         /* Button is pressed: Ignore next interrupt.
  69.          * This is required to deal with the de-bounce circuit limitations. */
  70.         ignore_next_dio_int = 1;

  71.         /* Set the key status */
  72.         app_env.key_pushed = true;
  73.         app_env.key_state = KEY_PUSH;
  74.     }
  75. }

  76. /* ----------------------------------------------------------------------------
  77. * Function      : void Restart_Keystroke_Env(void)
  78. * ----------------------------------------------------------------------------
  79. * Description   : Initialize keyboard environment
  80. * Inputs        : None
  81. * Outputs       : None
  82. * Assumptions   : None
  83. * ------------------------------------------------------------------------- */
  84. void Restart_Keystroke_Env(void)
  85. {
  86.     app_env.key_pushed = false;
  87.     app_env.key_state = KEY_IDLE;
  88. }

  89. /* ----------------------------------------------------------------------------
  90. * Function      : void Update_Keystroke_Env(void)
  91. * ----------------------------------------------------------------------------
  92. * Description   : Initialize keyboard environment
  93. * Inputs        : None
  94. * Outputs       : None
  95. * Assumptions   : None
  96. * ------------------------------------------------------------------------- */
  97. void Update_Keystroke_Env(void)
  98. {
  99.     app_env.key_state = KEY_UPDATE;
  100. }

  101. /* ----------------------------------------------------------------------------
  102. * Function      : Send_Keystroke(void)
  103. * ----------------------------------------------------------------------------
  104. * Description   : Send keystroke to the host
  105. * Inputs        : key, mod_id
  106. * Outputs       : None
  107. * Assumptions   : None
  108. * ------------------------------------------------------------------------- */
  109. static void Send_Keystroke(const uint8_t key, const uint8_t mod_id)
  110. {
  111.     switch (app_env.key_state)
  112.     {
  113.         case KEY_PUSH:
  114.         {
  115.             app_env.key_state = KEY_REL;
  116.             Hogpd_ReportUpdReq(ble_env[0].conidx,
  117.                                key,
  118.                                mod_id);
  119.         }
  120.         break;

  121.         case KEY_UPDATE:
  122.         {
  123.             /* Restart Keyboard Environment */
  124.             Restart_Keystroke_Env();

  125.             /* Prepare next banner's key */
  126.             act_key++;
  127.             act_key = act_key % on_semi_banner_size;
  128.         }
  129.         break;

  130.         case KEY_REL:
  131.         default:
  132.         {
  133.         }
  134.         break;
  135.     }
  136. }

  137. int main(void)
  138. {
  139.     App_Initialize();

  140.     SystemCoreclockUpdate();

  141.     /* Main application loop:
  142.      * - Run the kernel scheduler
  143.      * - Update the battery voltage
  144.      * - Refresh the watchdog and wait for an event before continuing
  145.      * - Check for the custom services
  146.      */
  147.     while (1)
  148.     {
  149.         Kernel_Schedule();

  150.         /* Send battery level to all connected clients if battery service is
  151.          * enabLED */
  152.         for (unsigned int i = 0; i < NUM_MASTERS; i++)
  153.         {
  154.             if (ble_env[i].state == APPM_CONNECTED &&
  155.                 VALID_BOND_INFO(ble_env[i].bond_info.STATE))
  156.             {
  157.                 if (app_env.send_batt_ntf[i] && bass_support_env[i].enable)
  158.                 {
  159.                     app_env.send_batt_ntf[i] = 0;
  160.                     Batt_LevelUpdateSend(ble_env[i].conidx,
  161.                                          app_env.batt_lvl, 0);
  162.                 }
  163.             }
  164.         }

  165.         /* Send keystrokes to client if DIO5 is pushed */
  166.         if (ble_env[0].state == APPM_CONNECTED &&
  167.             VALID_BOND_INFO(ble_env[0].bond_info.STATE))
  168.         {
  169.             if (hogpd_support_env.enable == true && app_env.key_pushed == true)
  170.             {
  171.                 Send_Keystroke(on_semi_banner[act_key].key,
  172.                                on_semi_banner[act_key].mod);
  173.             }
  174.         }

  175.         /* Refresh the watchdog timer */
  176.         Sys_Watchdog_Refresh();

  177.         /* Wait for an event before executing the scheduler again */
  178.         SYS_WAIT_FOR_EVENT;
  179.     }
  180. }
复制代码
下载程序后,板子灯闪。
我的电脑WIN10系统,打开设置
1.jpg
点击设备:
2.jpg
打开蓝牙:
3.jpg
显示安森美键盘已连接。
4.jpg
设备管理器里也有蓝牙键盘。
打开一个记事本文档,持续按下板子上的DIO5按键,就会在记事本上谢谢文字
5.jpg

只有小组成员才能发言,加入小组>>

89个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表