📄 tc12.c
字号:
#include "tc12mes.h"
//
// TITLE:
//
// DESCRIPTION:
// definination of the icu
// REFER to none
//
// FILENAME:
// tc12.c
//
// AUTHOR(S):
// Andrew Dai(mailto:andrew.x.dai@gmail.com )
//
// CREATION DATE:
// date from: 2007-5-11
//
// MODIFICATION HISTORY:
//
//
//
void
showPacket()
{
;
}
int
checkupPacket()
{
return (peth->h_proto==SCOOTMRK?TRUE:FALSE);
}
int
onPacket()
{
TC12_packet_header_type *p1;
TC12_message_type *p2;
void *p3;
showPacket();
ptemp = packet_r_buf; /* resolve DATALINK layer header, length=14 bytes */
peth = (struct ethhdr *)ptemp;
memcpy(ScootData.DMAC,peth->h_dest,6);
memcpy(ScootData.SMAC,peth->h_source,6);
memcpy(ScootData.DATA,ptemp,bytes_received);
ptemp+= sizeof(struct ethhdr); /* resolve TC12_packet header, length=6 bytes */
p1=(TC12_packet_header_type *)ptemp;
TC12_MessageCounter=p1->message_counter;
#if LEVEL(2)
printf("message_counter=%02x\n",p1->message_counter);
printf("packet_counter=%02x\n",p1->packet_counter);
printf("first_packet=%02x\n",p1->first_packet);
printf("last_packet=%02x\n",p1->last_packet);
printf("reserver=%02x\n",p1->reserver);
printf("bytes following=%02x\n",p1->bytes);
#endif
if(p1->bytes<4) return TRUE; /* length of TC12_message >=<4 */
ptemp+= sizeof(TC12_packet_header_type); /* resolve TC12_message header, length=2 bytes */
p2=(TC12_message_type *)ptemp;
#if LEVEL(2)
printf("TC12_message_type=%02x\n",*p2);
#endif
switch (*p2)
{
case TC12_announcement:
if (checkDestInList())
{
memcpy(ScootMac,ScootData.SMAC,6);
sendTC12_acknowledgement();
}
case TC12_acknowledgement:
case TC12_configuration:
case TC12_checked_data:
case TC12_control_data:
case TC12_reply_data:
case TC12_error_message:
case TC12_up_down_load_request:
case TC12_up_down_load_reply:
case TC12_up_down_load_error:
case TC12_up_down_load_request2:
default:
;
}
}
void
generatePacketHeader()
{
ptemp = packet_s_buf;
bzero(ptemp,MAXLINE);
peth = (struct ethhdr *)ptemp;
memcpy(peth->h_dest, ScootMac,6);
memcpy(peth->h_source, MyMac,6);
peth->h_proto=(size_2)SCOOTMRK;
}
void
sendTC12_acknowledgement() /* Connecting to scoot */
{
TC12_packet_header_type *p1;
TC12_message_type *p2;
TC12_acknowledgement_message_type *p3;
generatePacketHeader();
ptemp = packet_s_buf;
ptemp+= sizeof(struct ethhdr); /* resolve TC12_packet header, length=6 bytes */
p1=(TC12_packet_header_type *)ptemp;
p1->message_counter=TC12_MessageCounter;
p1->packet_counter=0;
p1->first_packet=1;
p1->last_packet=1;
p1->reserver=0;
p1->bytes=15;
ptemp+= sizeof(TC12_packet_header_type); /* resolve TC12_acknowledgement_message, length=2 bytes */
p3=(TC12_acknowledgement_message_type *)ptemp;
p3->message_type=TC12_acknowledgement;
p3->instation_number=PCNUM; /* instation_number */
p3->major_version=MAJORVERSION;
p3->minor_version=MINORVERSION;
p3->mains_input_failed=FALSE; /* frequency from mains input in-phase with battery-backed clock */
struct tm *local;
local=getDateTime();
#if LEVEL(3)
printf("year=%d, mon=%d, day=%d, hour=%d, min=%d, sec=%d\n", \
local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);
#endif
p3->year=local->tm_year+1900; /* 年份,其值等于实际年份减去1900 */
p3->month=local->tm_mon+1; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
p3->day=local->tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
p3->hour=local->tm_hour; /* 时 - 取值区间为[0,23] */
p3->minute=local->tm_min; /* 分 - 取值区间为[0,59] */
p3->second=local->tm_sec; /* 秒 – 取值区间为[0,59] */
p3->hundredths=50; /* ??? */
#if LEVEL(3)
printf("size of TC12_acknowledgement_message_type=%d\n",sizeof(TC12_acknowledgement_message_type));
printHex(p3,sizeof(TC12_acknowledgement_message_type),"TC12_acknowledgement_message packet=");
printf("message_counter=%02x\n",p1->message_counter);
printf("packet_counter=%02x\n",p1->packet_counter);
printf("first_packet=%02x\n",p1->first_packet);
printf("last_packet=%02x\n",p1->last_packet);
printf("reserver=%02x\n",p1->reserver);
printf("bytes following=%02x\n",p1->bytes);
#endif
bytes_tosend=sizeof(struct ethhdr);
bytes_tosend+=sizeof(TC12_packet_header_type);
bytes_tosend+=sizeof(TC12_acknowledgement_message_type);
// socket_addr_len=sizeof(packet_addr); /* ??? this line cause to sendto failure */
sendto(packet_fd, (char *)packet_s_buf, bytes_tosend, 0, (SA *)&packet_addr, socket_addr_len);
#if LEVEL(2)
printHex(packet_r_buf,bytes_received,"generate packet=");
#endif
}
void
sendR2() /* Getting configure */
{
}
int
checkDestInList()
{
sprintf(tmpstr,"PC%03u",PCNUM);
return (strstr(ScootData.DMAC, tmpstr)?TRUE:FALSE);
}
struct tm *
getDateTime()
{
time_t t;
t=time(NULL);
return localtime(&t);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -