Example #1
0
/**
* @brief ����UART�˿ڲ�����
* @param port �˿ں�, 0~4
* @param baud ������
*/
void UartSetBaudrate(unsigned int port, int baud)
{
	int i; 
	int status; 
	struct termios opt;
	int fd;

	AssertLogReturnVoid(port>=UART_PORTNUM, "invalid port(%d)\n", port);
	fd = FidUart[port];
	AssertLogReturnVoid(-1 == fd, "invalid fid(%d)\n", fd);

	if(tcgetattr(fd, &opt) != 0) {
		ErrorLog("tcgetattr fail\n");
		return;
	}

	for ( i= 0;  i < sizeof(SpeedArray) / sizeof(int);  i++) { 
		if  (baud == NameArray[i]) {     
			tcflush(fd, TCIOFLUSH);     
			cfsetispeed(&opt, SpeedArray[i]);  
			cfsetospeed(&opt, SpeedArray[i]);   
			status = tcsetattr(fd, TCSANOW, &opt);  
			if  (status != 0) {        
				ErrorLog("tcsetattr fail\n");
				return;     
			}    
			tcflush(fd,TCIOFLUSH);   
		}
	}
}
Example #2
0
/**
* @brief �ر�һ���Ѵ򿪵�UART�˿�
* @param port �˿ں�, 0~4
*/
void UartClose(unsigned int port)
{
	AssertLogReturnVoid(port>=UART_PORTNUM, "invalid port(%d)\n", port);
	AssertLogReturnVoid(-1 == FidUart[port], "invalid fid(%d)\n", FidUart[port]);

	close(FidUart[port]);
	FidUart[port] = -1;
}
Example #3
0
/**
* @brief 保存事件
* @param idx 事件分类索引(重要事件,一般事件)
* @param pbuf 储存事件缓存区指针
*/
static void SaveAlarm(unsigned char idx, const alarm_t *pbuf)
{
	alarm_t *pbase;
	char filename[32];
	unsigned char idxbase;
	runstate_t *pstat = RunStateModify();

	AssertLogReturnVoid(idx>=2, "invalid idx(%d)\n", idx);

	if(0 == idx) pbase = AlarmBufferImportant;
	else pbase = AlarmBufferNormal;

	LockSysLock(LockIdAlarm);

	if(RunState.alarm.cur[idx] == RunState.alarm.head[idx])  //empty
		pstat->alarm.cur[idx] = pstat->alarm.head[idx] = 0;

	//pbase[RunState.alarm.cur[idx]] = *pbuf;
	memcpy(pbase+RunState.alarm.cur[idx], pbuf, sizeof(alarm_t));

	AlarmFileName(idx, RunState.alarm.cur[idx], filename);

	idxbase = RunState.alarm.cur[idx] & ALARM_BASEMASK;
	SaveBinFile(filename, ALARM_MAGIC, (unsigned char *)&pbase[idxbase], sizeof(alarm_t)*ALMNUM_PERFILE);

	pstat->alarm.cur[idx]++;
	if(RunState.alarm.cur[idx] == RunState.alarm.head[idx]) pstat->alarm.head[idx]++;

	UnlockSysLock(LockIdAlarm);
}
Example #4
0
static void SavePltData(const sysclock_t *pclk)
{
	char filename[64];
	int len, prd, itemlen;
	plt_filedata_t *pcache;
	unsigned char *pbuf;

	sprintf(filename, "%sdaytest@%02d%02d%02d.db", PLT_FILEPATH, pclk->year, pclk->month, pclk->day);

	itemlen = PltConfig.maxmet*MET_DATA_LEN+PRD_HEAD_LEN;
	len = itemlen*PltConfig.maxprd + FILE_HEAD_LEN;
	AssertLogReturnVoid(len > LEN_FILE_CACHE, "too long file(%d)\n", len);

	pcache = (plt_filedata_t *)PltFileCache;
	pcache->max_prd = PltConfig.maxprd;
	pcache->invaid_prd = PltFileData.invaid_prd;
	pcache->max_met = PltConfig.maxmet;
	pbuf = (unsigned char *)pcache->prd;

	for(prd=0; prd<PltConfig.maxprd; prd++) {
		memcpy(pbuf, &PltFileData.prd[prd], itemlen);
		pbuf += itemlen;
	}

	SaveBinFile(filename, MAGIC_FILE_PLT, PltFileCache, len);
}
Example #5
0
void SetPlMdbFenum(unsigned short mid, unsigned char fenum)
{
	AssertLogReturnVoid(mid < PLC_BASEMETP || mid >= MAX_METER, "invalid mid(%d)\n", mid);

	PlMdbMonth[mid - PLC_BASEMETP].fenum = fenum;
}
Example #6
0
/**
* @brief ����UART�˿�����
* @param port �˿ں�, 0~4
* @param databits ����λ, 5~8
* @param stopbits ֹͣλ, 1~2
* @param parity У��λ
*/
void UartSetParity(unsigned int port, int databits,int stopbits, char parity)
{ 
	struct termios options; 
	int fd;

	AssertLogReturnVoid(port>=UART_PORTNUM, "invalid port(%d)\n", port);
	fd = FidUart[port];
	AssertLogReturnVoid(-1 == fd, "invalid fid(%d)\n", fd);

	if(tcgetattr(fd, &options) != 0) {
		ErrorLog("tcgetattr fail\n");
		return;
	}

	options.c_iflag = 0;

	options.c_cflag &= ~CSIZE; 
	switch (databits) { /*设置数据位数*/
	case 5: options.c_cflag |= CS5; break;
	case 6: options.c_cflag |= CS6; break;	
	case 7:	options.c_cflag |= CS7; break;
	case 8: options.c_cflag |= CS8; break;   
	default: ErrorLog("invalid databits(%d)\n", databits); return;   
	}

	switch (parity) {
	case 'n':
	case 'N':    
		options.c_cflag &= ~PARENB;   /* Clear parity enable */
		options.c_iflag &= ~INPCK;     /* Enable parity checking */ 
		break;  
	case 'o':   
	case 'O':     
		options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/  
		options.c_iflag |= INPCK;             /* Disnable parity checking */ 
		break;  
	case 'e':  
	case 'E':   
		options.c_cflag |= PARENB;     /* Enable parity */    
		options.c_cflag &= ~PARODD;   /* 转换为偶效验*/     
		options.c_iflag |= INPCK;       /* Disnable parity checking */
		break;
	case 'S': 
	case 's':  /*as no parity*/   
	    options.c_cflag &= ~PARENB;
		options.c_cflag &= ~CSTOPB;break;  
	default: ErrorLog("invalid parity(%d)\n", parity); return;
	}

	/* 设置停止位*/  
	switch (stopbits) {
	case 1: options.c_cflag &= ~CSTOPB; break;  
	case 2: options.c_cflag |= CSTOPB; break;
	default: ErrorLog("invalid stopbits(%d)\n", stopbits); return;
	}

	options.c_iflag  &= ~(INLCR|IGNCR|ICRNL|IUCLC);  //add 2007-10-19
	options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/
	options.c_oflag  &= ~OPOST;   /*Output*/

	tcflush(fd, TCIFLUSH);
	options.c_cc[VTIME] = 0; /* 设置超时15 seconds*/   
	options.c_cc[VMIN] = 0; /* Update the options and do it NOW */

	if(tcsetattr(fd, TCSANOW, &options) != 0) {
		ErrorLog("tcsetattr fail\n");
		return;
	}
}