添加tran命令透传小板命令

添加slave_info命令测试小板通信状态
  添加cfginfo命令显示配置文件信息
  按键处于按下状态才响应检测命令
This commit is contained in:
ranchuan
2023-12-29 18:09:10 +08:00
parent 92f3ebbe33
commit 66ecf9c411
12 changed files with 212 additions and 50 deletions

View File

@@ -124,13 +124,17 @@ int CodecYm::packCheck(myarray data)
return ack;
}
uint8_t chk_a = 0, chk_b = 0;
uint8_t rchk_a=uint8_t(data[data.size() - 2]),rchk_b=uint8_t(data[data.size() - 1]);
crc::crc16((uint8_t *)data.data(), 2, len + 4, &chk_a, &chk_b);
if (chk_a != uint8_t(data[data.size() - 2]) || chk_b != uint8_t(data[data.size() - 1]))
if (chk_a != rchk_a || chk_b != rchk_b)
{
// crc校验不对
qWarning("recv data check error:%02x,%02x %02x,%02x", chk_a, chk_b, int(data[data.size() - 2]),
int(data[data.size() - 1]));
failed=true;
if(rchk_a!=0xff||rchk_b!=0xff){
qWarning("recv data check error:%02x,%02x %02x,%02x", chk_a, chk_b, rchk_a, rchk_b);
failed=true;
}else{
qWarning("recv data check is 0xff 0xff,seen as check right.");
}
}
// 保存此流水号
cmd_no = data[5] | (data[6] << 8);

View File

@@ -80,6 +80,7 @@ can_host::can_host(int bitrate)
this->bitrate = bitrate;
this->can_ = nullptr;
timer_ = nullptr;
recv_cb_fun=nullptr;
}
can_host::~can_host()
@@ -166,8 +167,7 @@ void can_host::freams_sent_cb(qint64 count)
void can_host::recv_data_cb()
{
YeCanID_un frame_id;
while (can_->framesAvailable())
{
while (can_->framesAvailable()){
const QCanBusFrame frame = can_->readFrame();
frame_id.Exide = frame.frameId();
if (frame_id.Exide == 0x000000)
@@ -178,49 +178,47 @@ void can_host::recv_data_cb()
uint8_t seg_flag = frame_id.yecanid.SegFlag;
int seg_num = frame_id.yecanid.SegNum;
can_slave &slave = get_slave_by_addr(slave_addr);
if (seg_flag == 0x00)
{
if (seg_flag == 0x00){
// 不分段
slave.clear();
slave.append(payload);
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
if (dst_addr == 0){
if (irq_fun)
{
if (irq_fun){
irq_fun(myarray(slave.get_data()));
}
if(recv_cb_fun){
recv_cb_fun(slave_addr,myarray(slave.get_data()));
}
emit recv_data_signal(slave_addr,slave.get_data());
}
}
else if (seg_flag == 0x01)
{
else if (seg_flag == 0x01){
// 首段
slave.clear();
slave.append(payload);
}
else if (seg_flag == 0x02)
{
else if (seg_flag == 0x02){
// 中段
slave.append(payload);
}
else if (seg_flag == 0x03)
{
else if (seg_flag == 0x03){
// 尾段
slave.append(payload);
if (slave.get_pack_num() - 1 == seg_num)
{
if (slave.get_pack_num() - 1 == seg_num){
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
if (dst_addr == 0){
if (irq_fun)
{
if (irq_fun){
irq_fun(myarray(slave.get_data()));
}
if(recv_cb_fun){
recv_cb_fun(slave_addr,myarray(slave.get_data()));
}
emit recv_data_signal(slave_addr,slave.get_data());
}
}
else
{
qDebug() << "can data from: " << QString::number(slave_addr, 10) << "recv error";
else{
qDebug() << "can data from: " << slave_addr << "recv error";
}
}
}

View File

@@ -10,6 +10,16 @@
#include "QTimer"
#include "interface/interface.h"
using namespace std;
using namespace std::placeholders;
typedef std::function<void(int src,myarray data)> can_recv_cb;
// 定义can从机对象
class can_slave : public QObject
{
@@ -48,7 +58,9 @@ public:
void init();
int write(myarray data){return 0;}
int write(int dst,myarray data);
void set_irq(can_recv_cb fun){
recv_cb_fun=fun;
}
private:
can_slave &get_slave_by_addr(uint8_t addr);
void append(uint8_t addr, uint8_t fun_class, QByteArray data);
@@ -70,6 +82,7 @@ private:
QList<QCanBusFrame> send_packets;
QList<QCanBusFrame> recv_packets;
QTimer *timer_;
can_recv_cb recv_cb_fun;
};
#endif