📄 485lib.c
字号:
HM_SUSPEND(1);
*f_size = (buf[8]-'0')*100 + (buf[9]-'0')*10 + buf[10]-'0';
*e_size = (buf[5]-'0')*100 + (buf[6]-'0')*10 + buf[7]-'0';
*t_size = (buf[2]-'0')*100 + (buf[3]-'0')*10 + buf[4]-'0';
if (cc == ACK) return(5);
else if (cc == ETX) return(0);
return(cc);
}
int HM_ups(int port,char addr)
{
unsigned char temp_buff[256],cc;
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
cc=HM_send_485_cmd('F',"",addr,temp_buff); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
return(HM_ret_resp1(cc));
}
int HM_exe_size(int port,char addr,int size)
{
unsigned char temp_buff[256],cc;
int i;
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
sprintf(temp_buff,"%3d",size);
for (i=0;i<3;i++) if (temp_buff[i] == ' ') temp_buff[i] = '0';
cc=HM_send_485_cmd('F',temp_buff,addr,temp_buff); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
switch (cc)
{
case ETX : switch(temp_buff[2])
{
case 0 : return(0);
case 1 : return(0x40);
case 2 : return(0x41);
default : return(5);
}
default : return(HM_ret_resp1(cc));
}
}
int HM_keypad(int port,char addr,int status)
{
unsigned char temp_buff[256],cc;
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
temp_buff[0] = status+'0';
temp_buff[1] = 0;
cc=HM_send_485_cmd('K',temp_buff,addr,temp_buff); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
return(HM_ret_resp1(cc));
}
int HM_set_tab(char cmd,int port,char addr,char *str)
{
unsigned char cc;
unsigned char temp_buff[256];
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
cc=HM_send_485_cmd(cmd,str,addr,temp_buff); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
switch (cc)
{
case ETX : switch(temp_buff[2])
{
case 00 : return(0);
case 01 : return(2);
default : return(5);
}
default : if (temp_buff[0]==ESC && temp_buff[1]=='C'){
switch(temp_buff[2]){ //just patchs
case 0: return(0);
case 1: return(2);
default:return(5);
}
}
return(HM_ret_resp1(cc));
}
}
int HM_set_tab1(char cmd,int port,char addr,char *str,int len)
{
unsigned char cc;
unsigned char temp_buff[256];
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
cc=HM_send_485_cmd1(cmd,str,addr,temp_buff,len); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
switch (cc)
{
case ETX : switch(temp_buff[2])
{
case 00 : return(0);
case 01 : return(2);
default : return(5);
}
default : return(HM_ret_resp1(cc));
}
}
int HM_term_tab(int port,char addr,char *str)
{
return(HM_set_tab1('T',port,addr,str,15));
}
int HM_comm_tab(int port,char addr,char *str)
{
return(HM_set_tab('C',port,addr,str));
}
int HM_dev_tab(int port,char addr,char *str)
{
return(HM_set_tab('V',port,addr,str));
}
int HM_bar_tab(int port,char addr,char *str)
{
return(HM_set_tab('B',port,addr,str));
}
int HM_date_time(int port,char addr,char *str)
{
return(HM_set_tab('M',port,addr,str));
}
int HM_password(int port,char addr,char *str)
{
return(HM_set_tab('P',port,addr,str));
}
int HM_key_alias(int port,char addr,char key,char type,char *alias)
{
unsigned char temp_buff[256];
sprintf(temp_buff,"%c%c%s",key,type,alias);
return(HM_set_tab('S',port,addr,temp_buff));
}
int HM_download(int port,char addr,char *fname)
{
FILE *ptr;
int j,i,kk=0,HM_read_pack(),pks;
unsigned char buff[256],buff1[256],cc,fname1[80];
// unsigned char HM_send_pack();
if ( (ptr=fopen(fname,"rb")) == NULL )
return(0x30);
for (j=0,i=-1;j<(int)strlen(fname);j++)
{
if ((fname[j] == 92) || (fname[j] == 58)) i=j;
}
i++;
strcpy(fname1,fname+i);
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]);
cc=HM_send_485_cmd('L',fname1,addr,buff); // 3.0
if (cc != ACK) goto end_download;
fseek(ptr,0L,SEEK_SET);
strcpy(fname,fname1);
pks= (HM_pack_size-7) >> 1;
HM_pack_cnt=0L;
HM_total_byte = 0L;
rd_pack:
if (HM_enable_ESC == 1)
if ((kbhit()!=0) && ((cc=getch())== 27))
goto end_download;
kk = fread(buff,1,pks,ptr);
HM_pack(buff,kk,buff1);
// kk = HM_read_pack(ptr,buff);
if (kk == 0) goto end_pack; else HM_total_byte += (long)kk;
cc=HM_send_485_cmd('Y',buff1,addr,buff); // new // 3.0
// cc=HM_send_pack(buff,addr); // old
if (cc == ACK)
{
HM_pack_cnt++;
if (HM_dnl_disp == 1) HM_dnl_sub(fname1);
goto rd_pack;
}
else goto end_download;
end_pack:
cc=HM_send_485_cmd('Z',"",addr,buff); // new // 3.0
// sprintf(buff,"%c",EOT); // old
// cc=HM_send_pack(buff); // old
end_download:
serclose(CURR_PORT);
HM_SUSPEND(1);
fclose(ptr);
switch(cc)
{
case 2 : return(2);
case ACK : return(0);
case NAK : return(3);
case 255 : return(4);
case 254 : return(5);
case 253 : return(6);
case 27 : return(8);
}
return(5);
}
int HM_read_pack(FILE *ptr,unsigned char *str) // 3.0
{
int kk,jj;
unsigned char buff[256];
kk = (HM_pack_size-7) >> 1;
jj = fread(buff,1,kk,ptr);
return(HM_pack(buff,jj,str));
}
int HM_upload(int port,char addr,char *fname)
{
FILE *ptr;
int f_tag,j,kk=0,tag=1,nak_cnt=0;
unsigned char buff[256],buff1[256],fname1[60],cc,bbb[40],dd;
sprintf(bbb,"01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");
strcpy(fname1,fname);
j=0;
while ((fname[j] != '.') && (fname[j] != 0)) j++;
j--;
f_tag=0;
while ((ptr=fopen(fname1,"r")) != NULL)
{
fclose(ptr);
if (f_tag > 37) return(0x33);
fname1[j] = bbb[f_tag++];
}
/************* ESC 4 filename ***********************/
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]);
HM_pack_cnt = 0L;
HM_total_byte = 0L;
cc = HM_send_485_cmd('U',fname,addr,buff); // new // 3.0
if (strcmp(fname,fname1) == 0) f_tag = 0; else f_tag = 1;
ptr=fopen(fname1,"wb");
if (cc == ACK) // new // 3.0
{
while (tag)
{
cc = HM_send_485_cmd('Y',"",addr,buff); // new // 3.0
switch (cc)
{
case ETX : if (buff[1] == 'Y')
{
j=HM_unpack(buff+2,buff1); // new
fwrite(buff1,j,1,ptr); // new
nak_cnt=0;
HM_pack_cnt++;
HM_total_byte+=(long)j;
if (HM_upl_disp == 1) HM_upl_sub(fname1);
}
else if (buff[1] == 'Z') tag = 0;
break;
case NAK : if (++nak_cnt > HM_retry) tag = 0;
HM_time_delay(HM_NAK_delay);
break;
default : tag = 0; break;
}
if (HM_enable_ESC == 1)
if ((kbhit()!=0) && ((dd=getch())== 27))
{
tag = 0;
dd = cc;
}
}
}
serclose(CURR_PORT);
HM_SUSPEND(1);
fclose(ptr);
switch(cc)
{
case ETX : return(0);
case EOT : return(0x30);
case NAK : return(3);
case 255 : return(4);
case 254 : return(5);
case 253 : return(6);
case 27 : return(8);
}
return(5);
}
int HM_ret_resp1(unsigned char cc)
{
switch(cc)
{
case ACK : return(0);
case NAK : return(3);
case 255 : return(4);
case 254 : return(5);
case 253 : return(6);
}
return(5);
}
unsigned char HM_send_485_cmd(char type,unsigned char *buff,char addr,unsigned char *str) // 3.0
{
unsigned char cc;
int nak_cnt=0,tag=1;
while (tag)
{
HM_send_esc(type,addr,buff); // 3.0
tag=0;
cc = HM_resp_485(str); // 3.0
if ((cc == NAK) && (++nak_cnt < HM_retry))
{
HM_time_delay(HM_NAK_delay);
tag=1;
}
}
HM_time_delay(HM_ESC_delay);
return(cc);
}
unsigned char HM_send_esc(char type,char addr,char *buff) // 3.0
{
unsigned char cs,cc;
int ii;
sersend(CURR_PORT,(int)STX);
sersend(CURR_PORT,(int)ESC);
sersend(CURR_PORT,(int)type);
if (HM_disp_cmd == 1) printf("\nPC:STX ESC %c",type);
cs = ESC+type;
for(ii=0;buff[ii];ii++)
{
cs += buff[ii];
if (HM_disp_cmd == 1) printf("%c",buff[ii]);
sersend(CURR_PORT,(int)buff[ii]);
}
cs = cs + ii + 2 + addr + 0x80; // 3.0
cc = ((cs & 0xf0) >> 4) | 0x40;
if (HM_disp_cmd == 1) printf("%c",cc);
sersend(CURR_PORT,(int)cc);
cc = (cs & 0x0f) | 0x40;
if (HM_disp_cmd == 1) printf("%c",cc);
sersend(CURR_PORT,(int)cc);
if (HM_disp_cmd == 1) printf(" %x",addr+0x80);
sersend(CURR_PORT,(int)addr+0x80);
if (HM_RF == 1)
{ sersend(CURR_PORT,(int)0x0d);
sersend(CURR_PORT,(int)0x0a);
if (HM_disp_cmd == 1) printf("%.2x %.2x",0x0d,0x0a);
}
return(1);
}
unsigned char HM_send_485_cmd1(char type,unsigned char *buff,char addr,unsigned char *str,int len) // 3.0
{
unsigned char cc;
int nak_cnt=0,tag=1;
while (tag)
{
HM_send_esc1(type,addr,buff,len); // 3.0
tag=0;
cc = HM_resp_485(str); // 3.0
if ((cc == NAK) && (++nak_cnt < HM_retry))
{
HM_time_delay(HM_NAK_delay);
tag=1;
}
}
HM_time_delay(HM_ESC_delay);
return(cc);
}
unsigned char HM_send_esc1(char type,char addr,unsigned char *buff,int len) // 3.0
{
unsigned char cs,cc;
int ii;
sersend(CURR_PORT,(int)STX);
sersend(CURR_PORT,(int)ESC);
sersend(CURR_PORT,(int)type);
if (HM_disp_cmd == 1) printf("\nPC:STX ESC %c",type);
cs = ESC+type;
for(ii=0;ii<len;ii++)
{
cs += buff[ii];
if (HM_disp_cmd == 1) printf("%c",buff[ii]);
sersend(CURR_PORT,(int)buff[ii]);
}
cs = cs + ii + 2 + addr + 0x80; // 3.0
cc = ((cs & 0xf0) >> 4) | 0x40;
if (HM_disp_cmd == 1) printf("%c",cc);
sersend(CURR_PORT,(int)cc);
cc = (cs & 0x0f) | 0x40;
if (HM_disp_cmd == 1) printf("%c",cc);
sersend(CURR_PORT,(int)cc);
if (HM_disp_cmd == 1) printf(" %x",addr+0x80);
sersend(CURR_PORT,(int)addr+0x80);
if (HM_RF == 1)
{ sersend(CURR_PORT,(int)0x0d);
sersend(CURR_PORT,(int)0x0a);
if (HM_disp_cmd == 1) printf("%.2x %.2x",0x0d,0x0a);
}
return(1);
}
int isprint1(char ch)
{
if ((ch >= 32) && (ch <= 128)) return(1);
return(0);
}
unsigned char HM_resp_485(unsigned char *str) // 3.0
{
int i=0,j,nak_cnt=0;
long cnt,pt,st,et;
unsigned char cc,cs,cs1,cs2,cs3;
if (HM_disp_cmd == 1) printf("\nMR 360:");
do
{
st = time(&st);
cnt=0L;
do
{
cc=(unsigned char)serrecv(CURR_PORT);
if (cc != 255) break;
pt = time(&et) - st;
if(pt > HM_timeout)
{
if (i == 0) return(255);
else return(254);
}
} while(1);
if (HM_disp_cmd == 1)
{
if (isprint1(cc)) printf("%c",cc); else printf(" %.2x ",cc);
}
switch(cc)
{
case NAK : return(NAK);
case ACK : return(ACK);
case EOT : return(EOT);
case STX : cs = 0;
i = 0;
break;
case ETX : cs2 = str[--i];
cs1 = str[--i];
str[i] = 0;
for (j=0,cs=0;j<i;j++) cs += str[j];
cs += i; // 3.0
cs3 = ((cs1 & 0x0f) << 4) + (cs2 & 0x0f);
if (cs == cs3)
{
if (HM_disp_cmd == 1) printf("\nPC:ACK ",ACK);
HM_time_delay(HM_ACK_delay);
sersend(CURR_PORT,(int)ACK);
return(ETX);
}
if (HM_disp_cmd == 1) printf("\nPC:NAK ",NAK);
sersend(CURR_PORT,(int)NAK);
if (++nak_cnt >= HM_retry) return(253);
else
HM_time_delay(HM_NAK_delay);
break;
default : str[i++] = cc;
cs += cc;
if (i>=255) return(254);
break;
}
} while(1);
}
int HM_uploadclose(int port,char addr)
{
unsigned char temp_buff[256],cc;
if ((port < 1) || (port > 4)) return(2); else CURR_PORT = port-1;
HM_SUSPEND(0);
serinit(CURR_PORT,HM_COM_para[CURR_PORT]); // initial COM parameter
cc=HM_send_485_cmd('8',"",addr,temp_buff); // 3.0
serclose(CURR_PORT);
HM_SUSPEND(1);
return(HM_ret_resp1(cc));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -