@@ -84,8 +84,7 @@ static void evt_received(TL_EvtPacket_t *hcievt)
84
84
85
85
// We need to memcpy the data before passing to higher layers.
86
86
switch (hcievt->evtserial .type ) {
87
- case TL_BLEEVT_PKT_TYPE:
88
-
87
+ case TL_BLEEVT_PKT_TYPE: {
89
88
#if defined(DEBUG)
90
89
#if defined(PRINT_HCI_DATA)
91
90
printf (" RX<< EVT :" );
@@ -101,7 +100,7 @@ static void evt_received(TL_EvtPacket_t *hcievt)
101
100
#endif /* DEBUG*/
102
101
103
102
if (phase_running ==false ) {
104
- /* check the Rx event of complete the previous bd_addr opcode0xfc0c */
103
+ /* check the Rx event of complete the previous bd_addr opcode0xFC0C */
105
104
if ((hcievt->evtserial .evt .evtcode == TL_BLEEVT_CC_OPCODE) &&
106
105
(hcievt->evtserial .evt .payload [0 ] ==0x01 ) &&
107
106
(hcievt->evtserial .evt .payload [1 ] ==0x0C ) &&
@@ -157,31 +156,32 @@ __disable_irq();
157
156
_write_index += len;
158
157
// TODO: control the _rxbuff cannot overflow
159
158
__enable_irq ();
159
+ }
160
160
break ;
161
161
case TL_ACL_DATA_PKT_TYPE: {
162
+ TL_AclDataSerial_t *acl = &(((TL_AclDataPacket_t *)hcievt)->AclDataSerial );
163
+ __disable_irq ();
164
+ len = acl->length +5 ;
165
+ memcpy ((uint8_t *)&_rxbuff[_write_index], (uint8_t *)acl, len);
166
+ /* move index*/
167
+ _write_index += len;
168
+ // TODO: control the _rxbuff cannot overflow
169
+ __enable_irq ();
162
170
#if defined(DEBUG)
163
171
#if defined(PRINT_HCI_DATA)
164
172
printf (" RX<< ACL :" );
165
- printf (" Type %#x" ,hcievt-> evtserial . type );
166
- printf (" evt %#x" ,hcievt-> evtserial . evt . evtcode );
167
- printf (" Len %#d" ,hcievt-> evtserial . evt . plen );
173
+ printf (" Type %#x" ,acl-> type );
174
+ printf (" evt %#x" ,acl-> handle );
175
+ printf (" Len %#d" ,acl-> length );
168
176
printf (" :" );
169
- for (uint8_t i =0 ; i <hcievt-> evtserial . evt . plen ; i++) {
170
- printf (" %02X" ,hcievt-> evtserial . evt . payload [i]);
177
+ for (uint8_t i =0 ; i <acl-> length ; i++) {
178
+ printf (" %02X" ,acl-> acl_data [i]);
171
179
}
172
180
printf (" \r\n " );
173
181
#endif /* PRINT_HCI_DATA*/
174
182
#endif /* DEBUG*/
175
- TL_AclDataSerial_t *acl = &(((TL_AclDataPacket_t *)hcievt)->AclDataSerial );
176
- __disable_irq ();
177
- len = acl->length +5 ;
178
- memcpy ((uint8_t *)&_rxbuff[_write_index], (uint8_t *)&acl, len);
179
- /* move index*/
180
- _write_index += len;
181
- // TODO: control the _rxbuff cannot overflow
182
- __enable_irq ();
183
183
}
184
- break ;
184
+ break ;
185
185
default :
186
186
// should not happen - let's block to check
187
187
#if defined(DEBUG)
@@ -388,16 +388,11 @@ int HCISharedMemTransportClass::available()
388
388
if (_read_index != _write_index) {
389
389
return 1 ;
390
390
}else {
391
- return 0 ;
391
+ return 0 ;
392
392
}
393
393
}else {
394
394
return 0 ;
395
395
}
396
- if (sys_event) {
397
- sys_event =false ;
398
-
399
- return 1 ;
400
- }
401
396
402
397
return 0 ;
403
398
}
@@ -474,12 +469,8 @@ size_t HCISharedMemTransportClass::write(const uint8_t* data, size_t length)
474
469
LL_RCC_ReleaseBackupDomainReset ();
475
470
}
476
471
477
- /* Switch OFF LSI*/
472
+ /* Switch OFF LSIas LSE is the source clock */
478
473
LL_RCC_LSI2_Disable ();
479
-
480
- /* Select wakeup source of BLE RF*/
481
- LL_RCC_SetRFWKPClockSource (LL_RCC_RFWKP_CLKSOURCE_LSE);
482
-
483
474
}
484
475
485
476
void stm32wb_reset (void )
@@ -595,10 +586,8 @@ size_t HCISharedMemTransportClass::write(const uint8_t* data, size_t length)
595
586
tl_ble_config.IoBusEvtCallBack = evt_received;
596
587
tl_ble_config.IoBusAclDataTxAck = acl_data_ack;
597
588
TL_BLE_Init ((void *)&tl_ble_config);
598
-
599
589
}
600
590
601
- #if 1
602
591
/* This function fills in a BD address table*/
603
592
bool get_bd_address (uint8_t *bd_addr)
604
593
{
@@ -692,7 +681,7 @@ static int bt_ipm_set_power(void)
692
681
return 1 ;/* success*/
693
682
}
694
683
695
- #else
684
+ #if 0
696
685
int bt_ipm_ble_init(void)
697
686
{
698
687
uint16_t opcode;
@@ -953,16 +942,11 @@ static int bt_ipm_set_power(void)
953
942
TL_BLE_SendCmd (NULL ,0 );// unused parameters for now
954
943
break ;
955
944
case 2 :// ACL DATA
956
- if (!acl_data) {
957
- #if defined(DEBUG)
958
- printf (" ERROR: previous ACL message not ACK'd\r\n " );
959
- #endif /* DEBUG*/
960
- /* return number of bytes sent, 0 in this error case*/
961
- return 0 ;
962
- }
963
- memcpy ((void *)
964
- &((TL_AclDataPacket_t *)HciAclDataBuffer)->AclDataSerial , pData, len);
965
- TL_BLE_SendAclData (NULL ,0 );// unused parameters for now
945
+ /* memcpy((void *)
946
+ &((TL_AclDataPacket_t *)HciAclDataBuffer)->AclDataSerial, pData, len);*/
947
+ TL_AclDataSerial_t *aclDataSerial = (TL_AclDataSerial_t *)(HciAclDataBuffer +sizeof (TL_PacketHeader_t));
948
+ aclDataSerial->type = type;// for now this param is overwritten in TL_BLE_SendCmd
949
+ memcpy (HciAclDataBuffer + +sizeof (TL_PacketHeader_t) +sizeof (type), pData, len);
966
950
#if defined(DEBUG)
967
951
#if defined(PRINT_HCI_DATA)
968
952
printf (" TX>> ACL :" );
@@ -972,6 +956,7 @@ static int bt_ipm_set_power(void)
972
956
printf (" \r\n " );
973
957
#endif /* PRINT_HCI_DATA*/
974
958
#endif /* DEBUG*/
959
+ TL_BLE_SendAclData (NULL ,0 );// unused parameters for now
975
960
break ;
976
961
}
977
962
return len;