Exemplo n.º 1
0
void RS_SendDataPack(serial_driver_t *rs, unsigned char *buf, int len)
{
	U32 etime=GetTickCount();
	DBPRINTF("485 send:%d\n",len);
//// 485收发控制	低电平收,高电平发
	RS485_setmode(TRUE);
	DelayUS(1000);//
	DEBUGTRACE(buf,len);
//	rs->write(0x88);//多发送一个字节,修正485网络干扰
	rs->write_buf(buf,len);
	rs->tcdrain();
	while(rs->get_lsr()!=TIOCSER_TEMT);	//wait for the transmit shift register empty
	DBPRINTF("get_lsr() time:%d\n",GetTickCount()-etime);
//	mmsleep(3*115200/gOptions.RS232BaudRate);
	RS485_setmode(FALSE);
}
Exemplo n.º 2
0
void RS_SendDataPack(serial_driver_t *rs, unsigned char *buf, unsigned short size)
{
	unsigned short cs;
	TMyBuf *packet=bget(1);
	PRSHeader ch=(PRSHeader)(packet->buf);
	memset(packet->buf, 0, sizeof(TRSHeader));
	packet->len=sizeof(TRSHeader)+size;
	ch->HeaderTag[0]=THEDID; ch->HeaderTag[1]=THEDID;
	ch->Cmd=(char)CMD_RS; 
	ch->CmdCheck=0xFF-CMD_RS;
	ch->Len=size;
	memcpy(packet->buf+sizeof(TRSHeader), buf, size);
	ch->CheckSum=in_chksum(packet->buf, packet->len);
#ifdef MAIN_PRG
	if(rs==&st232) 
	{
		int dd=gOptions.RS232BaudRate/10000;
		RS485_setmode(TRUE);
		if(dd>0) dd=4*115200/dd; else dd=4*115200;
		cs=0;
		while(cs<packet->len)
		{ 
			rs->write(packet->buf[cs++]);
			if(cs%256==0) 
			{
				DelayUS(dd);
			}
		}
		rs->flush_output();
//		DelayUS(3000); 		//for 115200
		DelayUS(3000*115200/gOptions.RS232BaudRate);
		RS485_setmode(FALSE);

	}
	else
#endif
	{
		for(cs=0;cs<packet->len;cs++) rs->write(packet->buf[cs]);
		rs->flush_output();
	}
	packet->len=0;
}