app_host.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "system.h"
  2. #include "app_host.h"
  3. #include "hal_ble_client.h"
  4. #include "hal_ble_host.h"
  5. #include "bsp_time.h"
  6. #include "hal_led.h"
  7. #include "ble_gap.h"
  8. #include "hal_battery.h"
  9. #include "app_flash.h"
  10. #include "ble_comm.h"
  11. #include "app_client_infomation.h"
  12. #include "app_client_dataupdate.h"
  13. #include "hal_mode_manage.h"
  14. /************************ 定义 ***************************/
  15. static uint8_t vol_R = 0; //右鞋电量
  16. static uint8_t temp_R = 0; //右鞋温度
  17. static uint32_t press_R = 0; //右鞋压力
  18. uint8_t app_host_GetVol_R(void){ return vol_R; }
  19. uint8_t app_host_GetTemp_R(void){ return temp_R; }
  20. uint32_t app_host_GetPress_R(void){ return press_R; }
  21. /***************************** 主动获取从机信息 ******************************/
  22. static BLE_Host_Tx_t mBLE_Host_T_UPDATE_INFO_R = {
  23. .n = 10,
  24. .t = 1000,
  25. .cb = 0,
  26. };
  27. void app_host_GetClientInfo(void)
  28. {//AA 06 F9 A1 00 4A
  29. static uint8_t buf=BLE_Host_T_UPDATE_BASEINFO;
  30. BLE_Host_Tx_Send(&mBLE_Host_T_UPDATE_INFO_R,BLE_UPDATE,&buf,1);
  31. }
  32. static BLE_Host_Tx_t mBLE_Host_T_UPDATE_DATA_R = {
  33. .n = 0,
  34. .t = 500,
  35. .cb = 0,
  36. };
  37. void app_host_GetClientData(uint8_t temp)
  38. {//AA 06 F9 A1 01 4B
  39. static uint8_t buf=BLE_Host_T_UPDATE_DATA;
  40. BLE_Host_Tx_Send(0,BLE_UPDATE,&buf,1);
  41. if(0 == mBLE_Host_T_UPDATE_DATA_R.n && temp >=2){
  42. mBLE_Host_T_UPDATE_DATA_R.n = temp;
  43. BLE_Host_Tx_Send(&mBLE_Host_T_UPDATE_DATA_R,BLE_UPDATE,&buf,1);
  44. }
  45. }
  46. //>> 0xA1: 查询
  47. void cb_BLE_Host_R_UPDATE(void* handle)
  48. {
  49. BLE_Host_Rx_t *target = handle;
  50. uint8_t _cmd = target->pDat[0];
  51. switch(_cmd){
  52. case BLE_Host_R_UPDATE_BASEINFO:{
  53. //<< 0(子命令): 设备型号(64)+左鞋蓝牙地址(6)+硬件版本(2)+软件版本(2)+右鞋蓝牙地址(6)+硬件版本(6)+软件版本(2)
  54. uint8_t L = SHOES_NAME_LEN+6;
  55. for(int i=0;i<6;i++) mFlash.mClient.macAddr[i] = target->pDat[i+SHOES_NAME_LEN+1];
  56. mFlash.mClient.hardVersion = ((uint16_t)target->pDat[L]<<8)|((uint16_t)target->pDat[L+1]<<0);
  57. mFlash.mClient.sotfVersion = ((uint16_t)target->pDat[L+2]<<8)|((uint16_t)target->pDat[L+3]<<0);
  58. app_client_infomation_Send();
  59. break;}
  60. case BLE_Host_R_UPDATE_DATA:{
  61. //<< 1(子命令): 左鞋电量(1)+左鞋温度(1)+左鞋压力(4)+左鞋步数(4)+右鞋电量(1)+右鞋温度(1)+右鞋压力(4)+右鞋步数(4)
  62. vol_R = target->pDat[1];
  63. temp_R = target->pDat[2];
  64. press_R = ((uint32_t)target->pDat[3]<<24)|((uint32_t)target->pDat[4]<<16)|((uint32_t)target->pDat[5]<<8)|((uint32_t)target->pDat[6]<<0);
  65. mFlash.mStep.stepCur[1] = ((uint32_t)target->pDat[7]<<24)|((uint32_t)target->pDat[8]<<16)|((uint32_t)target->pDat[9]<<8)|((uint32_t)target->pDat[10]<<0);
  66. mBLE_Host_T_UPDATE_DATA_R.n = 0;
  67. app_client_DataUpdate_Send();
  68. // SEGGER_RTT_printf(0,"right step:%d\n",mFlash.mStep.stepCur[1]);
  69. break;}
  70. default:break;
  71. }
  72. }
  73. static void app_host_Process(void)
  74. {
  75. static uint8_t cnt =0;
  76. if(host_isconnect()){
  77. if(HAL_MODE_GAME == hal_mode_get()){
  78. if(cnt++ >= 3){
  79. cnt =0;
  80. app_host_GetClientData(1);
  81. }
  82. }
  83. else app_host_GetClientData(1);
  84. }
  85. }
  86. void app_host_Initialize(void)
  87. {
  88. if(mFlash.isHost==1){
  89. BLE_Host_Rx_Regist(BLE_UPDATE,cb_BLE_Host_R_UPDATE);
  90. Process_Start(3000,"app_host",app_host_Process);
  91. }
  92. }