Skip to content

Commit 590f799

Browse files
authored
Merge pull request #2 from MiRoboticsLab/v1.3.0.0
V1.3.0.0
2 parents 06b9687 + d7d8f4f commit 590f799

4 files changed

Lines changed: 68 additions & 20 deletions

File tree

cyberdog_bluetooth/cyberdog_bluetooth/bluetooth_node.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def __init__(self, node_name: str):
179179
self.__self_check_status_code = -1
180180
self.__notification_thread.start()
181181
self.__joy_polling_thread.start()
182+
self.__bt_central.RemoveUnrecordedDevices(self.__getHistoryConnectionInfo())
182183

183184
def __del__(self):
184185
self.__notification_thread.join()
@@ -305,7 +306,7 @@ def __connect_callback(self, req, res):
305306
self.__tryToReleaseMutex(self.__poll_mutex)
306307
# res.result = self.__waitForUWBResponse(False)
307308
self.__disconnectPeripheral()
308-
self.__bt_central.RemoveUnRecordedDevices(self.__getHistoryConnectionInfo())
309+
self.__bt_central.RemoveUnrecordedDevices(self.__getHistoryConnectionInfo())
309310
self.__connect_timeout_timer.reset()
310311
if self.__bt_central.ConnectToBLE(
311312
req.selected_device.mac,
@@ -694,7 +695,7 @@ def __notificationTimerCB(self):
694695
if self.__connecting or not self.__bt_central.IsConnected():
695696
self.__tryToReleaseMutex(self.__poll_mutex)
696697
return
697-
notified = self.__bt_central.WaitForNotifications(0.5)
698+
notified = self.__bt_central.WaitForNotifications(0.25)
698699
self.__tryToReleaseMutex(self.__poll_mutex)
699700
if notified == 3:
700701
self.__disconnectUnexpectedly()
@@ -917,7 +918,7 @@ def __deleteHistory(self, mac):
917918
i = 0
918919
found = False
919920
for dev_info in history_info_list:
920-
if dev_info['mac'] == mac:
921+
if dev_info['mac'] == mac or dev_info['mac'] == mac.lower():
921922
found = True
922923
break
923924
i += 1
@@ -932,8 +933,10 @@ def __deleteHistory(self, mac):
932933
return False
933934

934935
def __deleteHistoryCB(self, req, res):
935-
res.result = self.__deleteHistory(req.map_url)
936-
self.__unpair(req.map_url)
936+
res.result = False
937+
if not self.__connecting and not self.__dfu_processing:
938+
res.result = self.__deleteHistory(req.map_url)
939+
self.__unpair(req.map_url)
937940
return res
938941

939942
def __tryToReleaseMutex(self, mutex):
@@ -1015,7 +1018,7 @@ def __joyPubPolling(self):
10151018
sleep(0.05)
10161019

10171020
def __activateDFU(self):
1018-
if not self.__poll_mutex.acquire(blocking=True, timeout=0.75):
1021+
if not self.__poll_mutex.acquire(blocking=True, timeout=1.0):
10191022
self.__logger.warning('Unable to acquire __poll_mutex')
10201023
return False
10211024
dfu_handle = self.__bt_central.SetNotificationByUUID( # indicate
@@ -1242,11 +1245,10 @@ def __taskStatusCB(self, msg):
12421245
self.__task_status = msg.task_status
12431246

12441247
def __unpair(self, mac: str):
1245-
if not self.__connecting and not self.__dfu_processing:
1246-
if not self.__bt_central.Unpair(mac):
1247-
self.__disconnectPeripheral()
1248-
self.__logger.info('Unpaired current device')
1249-
self.__logger.info('Unpaired device %s' % mac)
1248+
if not self.__bt_central.Unpair(mac):
1249+
self.__disconnectPeripheral()
1250+
self.__logger.info('Unpaired current device')
1251+
self.__logger.info('Unpaired device %s' % mac)
12501252

12511253
def __intervalTimerCB(self):
12521254
self.__logger.info('Intermission is off')

cyberdog_bluetooth/cyberdog_bluetooth/bt_core.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ def Disconnect(self):
129129
except AttributeError as e:
130130
self.__logger.error(
131131
'AttributeError: %s Exeption while disconnecting!' % e)
132+
except BrokenPipeError as e:
133+
self.__logger.error(
134+
'BrokenPipeError: %s Exeption while disconnecting!' % e)
132135
finally:
133136
self.__connected = False
134137
self.__peripheral_name = ''
@@ -372,7 +375,8 @@ def SetNotificationByCharacteristicUUID(self, char_uuid: UUID, enable=True, indi
372375
return characteristic_handle
373376

374377
def Unpair(self, addr: str):
375-
if self.__connected and addr == self.__peripheral.addr:
378+
if self.__connected and\
379+
(addr == self.__peripheral.addr or addr.lower() == self.__peripheral.addr):
376380
try:
377381
self.__peripheral.unpair()
378382
except BTLEManagementError as e:
@@ -449,26 +453,28 @@ def __runCommand(self, cmd: str):
449453
tmp = str(output.stdout.read(), encoding='utf-8')
450454
return tmp
451455

452-
def RemoveUnRecordedDevices(self, devices):
453-
if devices is None or len(devices) == 0:
454-
return
456+
def RemoveUnrecordedDevices(self, devices):
455457
mac_list = []
456-
for info in devices:
457-
mac_list.append(info['mac'].upper())
458+
if devices is not None and len(devices) != 0:
459+
for info in devices:
460+
mac_list.append(info['mac'].upper())
461+
self.__logger.info('%s is in history list' % mac_list[-1])
458462
raw_result = self.__runCommand('echo list | bluetoothctl | grep Device')
459463
str_list = raw_result.split('\n')
460464
device_num = len(str_list)
461465
if device_num < 2:
462-
self.__logger.error('No bluetooth devices founded in system')
466+
self.__logger.warning('No bluetooth devices found in system')
463467
return
464468
device_num -= 1
465469
i = 0
466470
while i < device_num:
467471
found_i = str_list[i].find('Device ')
468-
if found_i == -1:
472+
cyberdog_i = str_list[i].find('CyberdogRemote')
473+
if found_i == -1 or cyberdog_i == -1:
469474
i += 1
470475
continue
471476
mac = str_list[i][found_i + 7: found_i + 24]
477+
self.__logger.info('%s is a paired device' % mac)
472478
if mac not in mac_list:
473479
self.__logger.warning(
474480
'%s is not recorded in known file, remove it from system' % mac)

cyberdog_bms/include/cyberdog_bms/bms_plugin.hpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,29 @@ class BMSCarpo : public cyberdog::device::BMSBase
7373
uint8_t wireless_charging_temp;
7474
uint16_t batt_loop_number;
7575
uint8_t batt_health;
76-
uint16_t batt_st;
76+
// uint16_t batt_st;
77+
union {
78+
uint16_t batt_st;
79+
struct
80+
{
81+
uint16_t charge_over_current : 1;
82+
uint16_t discharge_over_current : 1;
83+
uint16_t cell_over_voltage : 1;
84+
uint16_t cell_under_voltage : 1;
85+
uint16_t cell_volt_abnormal : 1;
86+
uint16_t mos_over_temp : 1;
87+
uint16_t discharge_short : 1;
88+
uint16_t fuse : 1;
89+
uint16_t discharge_over_tmp : 1;
90+
uint16_t discharge_under_tmp : 1;
91+
uint16_t charge_over_temp : 1;
92+
uint16_t charge_under_temp : 1;
93+
uint16_t charge_mos_state : 1;
94+
uint16_t discharge_mos_state : 1;
95+
uint16_t chg_mos_fault : 1;
96+
uint16_t dsg_mos_fault : 1;
97+
};
98+
};
7799
union {
78100
uint8_t bms_state1;
79101
struct

cyberdog_bms/src/bms_plugin.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,24 @@ void BMSCarpo::BatteryMsgCall(EP::DataLabel & label, std::shared_ptr<BatteryMsg>
216216
message.batt_loop_number = data->batt_loop_number;
217217
message.batt_health = data->batt_health;
218218
message.batt_st = data->batt_st;
219+
220+
message.charge_over_current = data->charge_over_current;
221+
message.discharge_over_current = data->discharge_over_current;
222+
message.cell_over_voltage = data->cell_over_voltage;
223+
message.cell_under_voltage = data->cell_under_voltage;
224+
message.cell_volt_abnormal = data->cell_volt_abnormal;
225+
message.mos_over_temp = data->mos_over_temp;
226+
message.discharge_short = data->discharge_short;
227+
message.fuse = data->fuse;
228+
message.discharge_over_tmp = data->discharge_over_tmp;
229+
message.discharge_under_tmp = data->discharge_under_tmp;
230+
message.charge_over_temp = data->charge_over_temp;
231+
message.charge_under_temp = data->charge_under_temp;
232+
message.charge_mos_state = data->charge_mos_state;
233+
message.discharge_mos_state = data->discharge_mos_state;
234+
message.chg_mos_fault = data->chg_mos_fault;
235+
message.dsg_mos_fault = data->dsg_mos_fault;
236+
219237
message.bms_state_one = data->bms_state1;
220238
message.power_normal = data->power_normal;
221239
message.power_wired_charging = data->power_wired_charging;

0 commit comments

Comments
 (0)