⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 485lib.c

📁 The EZ320 utility demonstrates the communication program between host PC and the MR320.
💻 C
📖 第 1 页 / 共 2 页
字号:
   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 + -