📄 nmea_srdlg.cpp
字号:
unsigned char C_HEX=0;
if(('0'<=ASCH)&&(ASCH<='9'))
{
ASCH=(ASCH-'0');
}
else if(('a'<=ASCH)&&(ASCH<='f'))
{
ASCH=(ASCH-'a'+10);
}
else if(('A'<=ASCH)&&(ASCH<='F'))
{
ASCH=(ASCH-'A'+10);
}
if(('0'<=ASCL)&&(ASCL<='9'))
{
ASCL=(ASCL-48);
}
else if(('a'<=ASCL)&&(ASCL<='f'))
{
ASCL=(ASCL-'a'+10);
}
else if(('A'<=ASCL)&&(ASCL<='F'))
{
ASCL=(ASCL-'A'+10);
}
ASCH=ASCH&0x0f;
ASCL=ASCL&0x0f;
C_HEX = (unsigned char)((ASCH <<4) +ASCL);
return C_HEX;
}
/******发送区的发送按钮******/
void CNMEA_SRDlg::OnBtnSend()
{
// TODO: Add your control notification handler code here
char data[9][2] ;
char id_num[9], dlc_len[1],port1_state[3];
PacketStruct SendPacket;
char data_len,i;
DWORD send_id=0;
BYTE temp,temp1;
////////////////////////////////
GetDlgItem(IDC_ESEND_DATALENGTH)->GetWindowText(dlc_len,2);
data_len = dlc_len[0] -'0';
SendPacket.len=data_len;
////////////////////////////////
GetDlgItem(IDC_ESEND_ID)->GetWindowText(id_num,9);
for(i=0;i<7;i++,i++)
{
temp = ASCII2HEX(id_num+i);
temp1= temp;
send_id = send_id<<8;
send_id = send_id & 0xffffff00;
send_id += temp;
}
SendPacket.id = send_id;
////////////////////////////////
GetDlgItem(IDC_ESEND_DATA0)->GetWindowText(data[0],3);
GetDlgItem(IDC_ESEND_DATA1)->GetWindowText(data[1],3);
GetDlgItem(IDC_ESEND_DATA2)->GetWindowText(data[2],3);
GetDlgItem(IDC_ESEND_DATA3)->GetWindowText(data[3],3);
GetDlgItem(IDC_ESEND_DATA4)->GetWindowText(data[4],3);
GetDlgItem(IDC_ESEND_DATA5)->GetWindowText(data[5],3);
GetDlgItem(IDC_ESEND_DATA6)->GetWindowText(data[6],3);
GetDlgItem(IDC_ESEND_DATA7)->GetWindowText(data[7],3);
for(i=0;i<data_len;i++)
{
temp = ASCII2HEX(data[i]);
SendPacket.data[i] = temp;
}
while(8>i)
{
SendPacket.data[i]=0;
i++;
}
/////////////////////写CAN卡状态信息
SendPacket.mode=1;
SendPacket.rtr=0;
CAN_ActiveBoard(0);
CAN_Status(0,1,&temp);
port1_state[0] = HEX2ASCII_H(temp);
port1_state[1] = HEX2ASCII_L(temp);
port1_state[2] = '\0';
GetDlgItem(IDC_ESEND_STATE)->SetWindowText(port1_state);
if(0x0c==temp)
{ i =0 ;
i = CAN_SendMsg(0,1,&SendPacket);
switch(i)
{
case 0:MessageBox("Send Successfully!");break;
case 2:MessageBox("Broad is not Active!");break;
case 3:MessageBox("Active Wrong!");break;
case 4:MessageBox("Port NO. is Wrong!");break;
default:MessageBox("Wrong!");break;
}
}
// GetDlgItem(IDC_ERECV_ID)->SetWindowText(id_num);
// GetDlgItem(IDC_ERECV_DATALENGTH)->SetWindowText(dlc_len);
// GetDlgItem(IDC_ERECV_DATA)->SetWindowText(data[0]);
}
/******发送区的清除按钮,清除CAN卡上的缓冲区******/
void CNMEA_SRDlg::OnBtnSendclear()
{
// TODO: Add your control notification handler code here
CAN_ActiveBoard(0);
CAN_ClearSoftBuffer(0,1);
CAN_ClearDataOverrun(0,1);
}
/******获取坐标 按钮******/
/******发送远程帧******/
void CNMEA_SRDlg::OnBtnGetgeog()
{
// TODO: Add your control notification handler code here
PacketStruct Sendremote;
int i;
unsigned char canstatus;
Sendremote.mode = 1;
Sendremote.id = 0x11111111;
Sendremote.rtr = 1;
Sendremote.len = 0;
CAN_ActiveBoard(0);
CAN_Status(0,1,&canstatus);
i = CAN_SendMsg(0,1,&Sendremote);
switch(i)
{
case 0:MessageBox("Send Successfully!");break;
case 2:MessageBox("Broad is not Active!");break;
case 3:MessageBox("Active Wrong!");break;
case 4:MessageBox("Port NO. is Wrong!");break;
default:MessageBox("Wrong!");break;
}
}
/******时间相应函数******/
char F_data1[10],F_data2[10],F_data3[9]; /******获取坐标缓冲区******/
char S_data1[10],S_data2[11]; /******船首向缓冲区******/
char T_data1[10],T_data2[10],T_data3[9],T_data4[9]; /******航路点缓冲区******/
char T_data5[8],T_data6[4],T_data7[10]; /******航路点缓冲区******/
char port1_state[3]; /******CAN卡状态缓冲区******/
PacketStruct Recv_Packet;
void CNMEA_SRDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnTimer(nIDEvent);
int i;
BYTE temp;
CAN_ActiveBoard(0);
CAN_ClearSoftBuffer(0,1);
CAN_ClearDataOverrun(0,1);
CAN_ActiveBoard(0);
CAN_Status(0,1,&temp);
port1_state[0] = HEX2ASCII_H(temp);
port1_state[1] = HEX2ASCII_L(temp);
port1_state[2] = '\0';
CAN_ActiveBoard(0);
GetDlgItem(IDC_ESEND_STATE)->SetWindowText(port1_state);
i=CAN_RxMsgCount(0,1);
if(i)
{
//MessageBox("have message");
CAN_ReceiveMsg(0,1,&Recv_Packet);
/******地理坐标******/
if(0x11111111 == Recv_Packet.id)
{
if(0x13 == Recv_Packet.data[0])
{
F_data1[0] = Recv_Packet.data[1];
F_data1[1] = Recv_Packet.data[2];
F_data1[2] = 0x20;
F_data1[3] = Recv_Packet.data[3];
F_data1[4] = Recv_Packet.data[4];
F_data1[5] = 0x20;
F_data1[6] = Recv_Packet.data[5];
F_data1[7] = Recv_Packet.data[6];
F_data1[8] = Recv_Packet.data[7];
F_data1[9] = '\0';
GetDlgItem(IDC_EGEOG_LAT)->SetWindowText(F_data1);
}
if(0x23 == Recv_Packet.data[0])
{
F_data2[0] = Recv_Packet.data[1];
F_data2[1] = Recv_Packet.data[2];
F_data2[2] = Recv_Packet.data[3];
F_data2[3] = 0x20;
F_data2[4] = Recv_Packet.data[4];
F_data2[5] = Recv_Packet.data[5];
F_data2[6] = 0x20;
F_data2[7] = Recv_Packet.data[6];
F_data2[8] = Recv_Packet.data[7];
}
if(0x33 == Recv_Packet.data[0])
{
F_data2[9] = Recv_Packet.data[1];
F_data2[10] = '\0';
GetDlgItem(IDC_EGEOG_LONG)->SetWindowText(F_data2);
F_data3[0] = Recv_Packet.data[2];
F_data3[1] = Recv_Packet.data[3];
F_data3[2] = 0x3A;
F_data3[3] = Recv_Packet.data[4];
F_data3[4] = Recv_Packet.data[5];
F_data3[5] = 0x3A;
F_data3[6] = Recv_Packet.data[6];
F_data3[7] = Recv_Packet.data[7];
F_data3[8] = '\0';
GetDlgItem(IDC_EGEOG_GMT)->SetWindowText(F_data3);
}
}
/******船首向******/
else if(0x02222222 == Recv_Packet.id)
{
if(0x12 == Recv_Packet.data[0])
{
S_data1[0] = Recv_Packet.data[1];
S_data1[1] = Recv_Packet.data[2];
S_data1[2] = Recv_Packet.data[3];
S_data1[3] = Recv_Packet.data[4];
S_data1[4] = Recv_Packet.data[5];
S_data1[5] = Recv_Packet.data[6];
S_data1[6] = Recv_Packet.data[7];
S_data1[7] = '\0';
GetDlgItem(IDC_EHEAD_TURE)->SetWindowText(S_data1);
}
if(0x22 == Recv_Packet.data[0])
{
S_data2[0] = Recv_Packet.data[1];
S_data2[1] = Recv_Packet.data[2];
S_data2[2] = Recv_Packet.data[3];
S_data2[3] = Recv_Packet.data[4];
S_data2[4] = Recv_Packet.data[5];
S_data2[5] = Recv_Packet.data[6];
S_data2[6] = Recv_Packet.data[7];
S_data2[7] = '\0';
GetDlgItem(IDC_EHEAD_MAG)->SetWindowText(S_data2);
}
}
/******航路点******/
else if(0x13333333 == Recv_Packet.id)
{
if(0x16 == Recv_Packet.data[0])
{
T_data1[0] = Recv_Packet.data[1];
T_data1[1] = Recv_Packet.data[2];
T_data1[2] = 0x20;
T_data1[3] = Recv_Packet.data[3];
T_data1[4] = Recv_Packet.data[4];
T_data1[5] = 0x20;
T_data1[6] = Recv_Packet.data[5];
T_data1[7] = Recv_Packet.data[6];
T_data1[8] = Recv_Packet.data[7];
T_data1[9] = '\0';
GetDlgItem(IDC_EWAYP_LAT)->SetWindowText(T_data1);
}
if(0x26 == Recv_Packet.data[0])
{
T_data2[0] = Recv_Packet.data[1];
T_data2[1] = Recv_Packet.data[2];
T_data2[2] = Recv_Packet.data[3];
T_data2[3] = 0x20;
T_data2[4] = Recv_Packet.data[4];
T_data2[5] = Recv_Packet.data[5];
T_data2[6] = 0x20;
T_data2[7] = Recv_Packet.data[6];
T_data2[8] = Recv_Packet.data[7];
}
if(0x36 == Recv_Packet.data[0])
{
T_data2[9] = Recv_Packet.data[1];
T_data2[10] = '\0';
GetDlgItem(IDC_EWAYP_LONG)->SetWindowText(T_data2);
T_data3[0] = Recv_Packet.data[2];
T_data3[1] = Recv_Packet.data[3];
T_data3[2] = Recv_Packet.data[4];
T_data3[3] = 0x2e;
T_data3[4] = Recv_Packet.data[5];
T_data3[5] = Recv_Packet.data[6];
T_data3[6] = Recv_Packet.data[7];
T_data3[7] = '\0';
GetDlgItem(IDC_EWAYP_TB)->SetWindowText(T_data3);
}
if(0x46 == Recv_Packet.data[0])
{
T_data4[0] = Recv_Packet.data[1];
T_data4[1] = Recv_Packet.data[2];
T_data4[2] = Recv_Packet.data[3];
T_data4[3] = 0x2e;
T_data4[4] = Recv_Packet.data[4];
T_data4[5] = Recv_Packet.data[5];
T_data4[6] = Recv_Packet.data[6];
T_data4[7] = '\0';
GetDlgItem(IDC_EWAYP_MB)->SetWindowText(T_data4);
}
if(0x56 == Recv_Packet.data[0])
{
T_data5[0] = Recv_Packet.data[1];
T_data5[1] = Recv_Packet.data[2];
T_data5[2] = Recv_Packet.data[3];
T_data5[3] = Recv_Packet.data[4];
T_data5[4] = 0x2e;
T_data5[5] = Recv_Packet.data[5];
T_data5[6] = '\0';
GetDlgItem(IDC_EWAYP_DISTANCE)->SetWindowText(T_data5);
T_data6[0] = Recv_Packet.data[6];
T_data6[1] = Recv_Packet.data[7];
}
if(0x66 == Recv_Packet.data[0])
{
T_data6[2] = Recv_Packet.data[1];
GetDlgItem(IDC_EWAYP_IDNUM)->SetWindowText(T_data6);
T_data7[0] = Recv_Packet.data[2];
T_data7[1] = Recv_Packet.data[3];
T_data7[2] = 0x3A;
T_data7[3] = Recv_Packet.data[4];
T_data7[4] = Recv_Packet.data[5];
T_data7[5] = 0x3A;
T_data7[6] = Recv_Packet.data[6];
T_data7[7] = Recv_Packet.data[7];
T_data7[8] = '\0';
GetDlgItem(IDC_EWAYP_GMT)->SetWindowText(T_data7);
}
}
else
{
MessageBox("id wrong");
OnBtnRecvclear();
}
}
}
/******获取船首向 按钮******/
/******发送远程帧******/
void CNMEA_SRDlg::OnBtnGethead()
{
// TODO: Add your control notification handler code here
PacketStruct Sendremote;
int i;
unsigned char canstatus;
Sendremote.mode = 1;
Sendremote.id = 0x22222222;
Sendremote.rtr = 1;
Sendremote.len = 0;
CAN_ActiveBoard(0);
CAN_Status(0,1,&canstatus);
i = CAN_SendMsg(0,1,&Sendremote);
switch(i)
{
case 0:MessageBox("Send Successfully!");break;
case 2:MessageBox("Broad is not Active!");break;
case 3:MessageBox("Active Wrong!");break;
case 4:MessageBox("Port NO. is Wrong!");break;
default:MessageBox("Wrong!");break;
}
}
/******获取航路点 按钮******/
/******发送远程帧******/
void CNMEA_SRDlg::OnBtnGetwayp()
{
// TODO: Add your control notification handler code here
PacketStruct Sendremote;
int i;
unsigned char canstatus;
Sendremote.mode = 1;
Sendremote.id = 0x33333333;
Sendremote.rtr = 1;
Sendremote.len = 0;
CAN_ActiveBoard(0);
CAN_Status(0,1,&canstatus);
i = CAN_SendMsg(0,1,&Sendremote);
switch(i)
{
case 0:MessageBox("Send Successfully!");break;
case 2:MessageBox("Broad is not Active!");break;
case 3:MessageBox("Active Wrong!");break;
case 4:MessageBox("Port NO. is Wrong!");break;
default:MessageBox("Wrong!");break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -