📄 j1939_tl.c
字号:
}
else
{
go_on = FALSE;//break;
}
}
else
{
go_on = FALSE;//break;
}
break;
}
case INIT_REASSEMBLE_STRUCTURE: //INIT_REASSEMBLE_STRUCTURE和CHECK_PACKET
{ //合成为一个状态
if(ReceiveStatuMachine.TP==TP_CM_RTS) //面向连接的长报文传输请求
{
}
else if(ReceiveStatuMachine.TP==TP_CM_BAM) //面向未连接的BAM请求
{
if(ReceiveStatuMachine.byte_count<NUMBER_TRANS_RX_BUFFERS) //判断是否超出缓冲区
{
J1939MPMessage.PGN = ReceiveStatuMachine.PGN;
J1939MPMessage.dest_addr = ReceiveStatuMachine.dest_addr;
J1939MPMessage.source_addr = ReceiveStatuMachine.source_addr;
J1939MPMessage.byte_count = ReceiveStatuMachine.byte_count;
for(i=0;i<NUMBER_TRANS_RX_BUFFERS;i++)
{
J1939MPMessage.data[i] = 0;
}
ReceiveStatuMachine.status = WAIT_FOR_DATA;
}
else
{
ReceiveStatuMachine.status= WAIT_FOR_MESSAGE;
ReceiveStatuMachine.timer_counter = 0;
go_on = FALSE;
//break;
}
}
else
{
ReceiveStatuMachine.status = WAIT_FOR_MESSAGE;
ReceiveStatuMachine.timer_counter = 0;
go_on = FALSE;
//break;
}
break;
}
case CHECK_PACKET:
{
break;
}
case SEND_ABORT:
{
break;
}
case SEND_CTS_WITH_COUNT:
{
break;
}
case WAIT_FOR_DATA:
{
//printp("mn=%d",J1939PDU.data[0]);//test
if(J1939PDU.PGN==TP_DT)
{
ReceiveStatuMachine.status = CHECK_DATA_PACKET;
// printp("mn=%d",J1939PDU.data[0]);//test
//break;
}
else
{
ReceiveStatuMachine.status = CHECK_TIMER;
//break;
}
break;
}
case CHECK_TIMER:
{
if(ReceiveStatuMachine.timer_counter>(750/TICK)) //750ms超时
{
ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE;
//ReceiveStatuMachine.timer_counter = 0;
//break;
}
else
{
ReceiveStatuMachine.status = WAIT_FOR_DATA;
go_on = FALSE;//break;
}
break;
}
case RESET_REASSEMBLY_STRUCTURE:
{
ReceiveStatuMachine.PGN = 0;
ReceiveStatuMachine.dest_addr = 0;
ReceiveStatuMachine.source_addr = 0;
ReceiveStatuMachine.packet_number = 0;
ReceiveStatuMachine.timer_counter = 0;
ReceiveStatuMachine.total_packet_number = 0;
ReceiveStatuMachine.byte_count = 0;
J1939MPMessage.PGN = 0;
J1939MPMessage.dest_addr = 0;
J1939MPMessage.source_addr = 0;
J1939MPMessage.byte_count = 0;
for(i=0;i<NUMBER_TRANS_RX_BUFFERS;i++)
{
J1939MPMessage.data[i] = 0;
}
ReceiveStatuMachine.status = WAIT_FOR_MESSAGE;
go_on = FALSE;
break;
}
case CHECK_DATA_PACKET:
{
if(ReceiveStatuMachine.TP==TP_CM_BAM) //面向未连接的BAM
{
if(J1939PDU.source_addr==ReceiveStatuMachine.source_addr&&
J1939PDU.dest_addr==ReceiveStatuMachine.dest_addr)
{
//printp("mn=%d",J1939PDU.data[0]);//test
if(ReceiveStatuMachine.packet_number==J1939PDU.data[0]-1)
{
ReceiveStatuMachine.status = SAVE_DATA;
ReceiveStatuMachine.timer_counter = 0;
J1939PDU.data[0] = 0;
}
else if(J1939PDU.data[0]!=0)
{
ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE; //包序号错错
}
else
{
ReceiveStatuMachine.status = WAIT_FOR_DATA;
go_on = FALSE;
}
}
else
{
ReceiveStatuMachine.status = WAIT_FOR_DATA;
go_on = FALSE;
}
}
else if(ReceiveStatuMachine.TP==TP_CM_RTS) //面向连接的长报文传输
{}
else
{}
break;
}
case SAVE_DATA:
{
i=0;
while((i<7)&&((ReceiveStatuMachine.packet_number*7+i)<=ReceiveStatuMachine.byte_count))
{
J1939MPMessage.data[ReceiveStatuMachine.packet_number*7+i] = J1939PDU.data[i+1];
J1939PDU.data[i+1] = 0;
i++;
}
ReceiveStatuMachine.packet_number++;
if(ReceiveStatuMachine.packet_number==ReceiveStatuMachine.total_packet_number)
{
ReceiveStatuMachine.status = FILL_USER_MESSAGE;
}
else
{
ReceiveStatuMachine.status = WAIT_FOR_DATA;
go_on = FALSE;
}
break;
}
case SEND_EOM:
{
}
case SEND_CTS:
{
}
case FILL_USER_MESSAGE:
{
ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE;
ReceiveStatuMachine.timer_counter = 0;
NML_process(&J1939MPMessage); //处理报文
//go_on = FALSE;
break;
}
default:
{
go_on = FALSE;
break;
}
}//end switch
}//end while
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -