Browse Source

update

master
zhaohe 1 year ago
parent
commit
16d47ca8ad
  1. 16
      README.md
  2. 2
      iflytop_canbus_protocol
  3. 2
      usrc/base/hardware.cpp
  4. 65
      usrc/protocol_impl/protocol_impl_service.cpp
  5. 2
      zsdk

16
README.md

@ -1,21 +1,7 @@
```
ref:https://iflytop1.feishu.cn/docx/FPqjdaTtkoBeU9x4qbjcD6vxnUc
设计文档:https://iflytop1.feishu.cn/wiki/CQWNw4ZBXiStBkkQRo0czgnbnxc
```
```
主动上报
发生改变->上报(最小周期)
单片机重启->触发上报
主机上线->上报
传感器异常->上报
触发上报指令下发->上报
websocket
-> 建立连接上报
-> 发生改变上报(最小周期)
-> 触发上报指令下发->上报
; 主机模式/监听模式
```

2
iflytop_canbus_protocol

@ -1 +1 @@
Subproject commit c01f84e2ad44f02f615ceec55762e9eda995c0a1
Subproject commit 0a220fccdd10378ec311e17871edbc0acf089569

2
usrc/base/hardware.cpp

@ -33,5 +33,5 @@ void Hardware::init() {
// m_motor[1].rotate(500000);
ZLOGI(TAG, "chipv0: %x, chipv1: %x", chipv0, chipv1);
m_pressureSensorBus.init(&m_modbusBlockHost, nullptr, 1000, 1000);
m_pressureSensorBus.init(&m_modbusBlockHost);
}

65
usrc/protocol_impl/protocol_impl_service.cpp

@ -31,6 +31,9 @@ using namespace iflytop;
static osTimerId HeartReportTimerId;
static osThreadId PacketRxThreadId;
static osTimerId PressureSensorDataReportTimerId; // 压力传感器数值上报
static uint32_t m_pressureSensorDataReportPeriodMs = 3000;
/***********************************************************************************************************************
* FUNCTION_IMPL *
***********************************************************************************************************************/
@ -78,7 +81,7 @@ static void basic_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t
static report_heatpacket_data_t heatpacket;
heatpacket.boardType = deviceInfo_getBoardType();
heatpacket.heartIndex = GET_PARAM(packet->params, 0);
zcanbus_send_report(kreport_heatpacket_pong, (uint8_t*)&heatpacket, sizeof(heatpacket));
zcanbus_send_report(kreport_heatpacket_pong, (uint8_t*)&heatpacket, sizeof(heatpacket), 30);
}
// 触发一次强制上报事件
if (packet->function_id == kcmd_force_report) {
@ -208,9 +211,39 @@ static void others_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_
// 压力传感器数据上报
else if (packet->function_id == kcmd_read_pressure_data) {
CHECK_PARAM_LEN(paramNum, 1);
int32_t index = GET_PARAM(packet->params, 0);
int16_t val = 0;
int32_t reportVal = 0;
bool suc = Hardware::ins().pressureSensorBus()->readData(index, &val);
reportVal = val;
if (suc) {
zcanbus_send_ack(packet, (uint8_t*)&reportVal, sizeof(reportVal));
} else {
zcanbus_send_errorack(packet, kerr_subdevice_offline);
}
}
// 压力传感器数据上报
else if (packet->function_id == kcmd_set_pressure_data_report_period_ms) {
CHECK_PARAM_LEN(paramNum, 1);
int32_t period = GET_PARAM(packet->params, 0);
ZLOGI(TAG, "set pressure sensor data report period %d ms", period);
if (period != 0) {
if (period < 200) period = 200;
osTimerStop(PressureSensorDataReportTimerId);
osTimerStart(PressureSensorDataReportTimerId, period);
m_pressureSensorDataReportPeriodMs = period;
} else {
osTimerStop(PressureSensorDataReportTimerId);
}
zcanbus_send_ack(packet, NULL, 0);
}
}
@ -241,6 +274,30 @@ static void zcanbus_on_connected(bool connected) {
ZLOGI(TAG, "disconnected from host");
}
}
static void onPressureSensorDataReportTimer(void const* argument) {
// 压力传感器数据上报
static uint8_t reportcache[100];
static report_pressure_data_t* report = (report_pressure_data_t*)reportcache;
int sensorNum = 0;
for (size_t i = 0; i < PXX_PRESSURE_SENSOR_NUM; i++) {
int16_t val = 0;
bool suc = Hardware::ins().pressureSensorBus()->readData(i, &val);
if (suc) {
report->data[sensorNum].subid = i;
report->data[sensorNum].pressureVal = val;
sensorNum++;
}
}
report->sensorDataNum = sensorNum;
zcanbus_send_report(kreport_pressure_data, (uint8_t*)report, //
sizeof(report_pressure_data_t) + sensorNum * sizeof(report->data[0]), 10);
}
/***********************************************************************************************************************
* EXT *
***********************************************************************************************************************/
@ -253,9 +310,9 @@ void protocol_impl_service_init() { //
zcanbus_reglistener(zcanbus_on_rx);
zcanbus_reg_on_connected_listener(zcanbus_on_connected);
// osTimerDef(HeartReportTimer, onHeartReportTimer);
// HeartReportTimerId = osTimerCreate(osTimer(HeartReportTimer), osTimerPeriodic, NULL);
// osTimerStart(HeartReportTimerId, HEART_PACKET_PERIOD_MS);
osTimerDef(PressureSensorDataReportTimer, onPressureSensorDataReportTimer);
PressureSensorDataReportTimerId = osTimerCreate(osTimer(PressureSensorDataReportTimer), osTimerPeriodic, NULL);
osTimerStart(PressureSensorDataReportTimerId, m_pressureSensorDataReportPeriodMs);
osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 0, 1024);
PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL);

2
zsdk

@ -1 +1 @@
Subproject commit b8f10eae25ded517701a56b1e609f6608ed04f7a
Subproject commit 2c74701b86a85d9a7658f2e64a34a3f9101a2306
Loading…
Cancel
Save