Пример #1
0
//-----------------------------------------------
void UART_IN(void)
{
//static char flag;
char temp,i,count,index;
//int temp_int;
di();
count=rx_counter;
index=rx_wr_index;
ei();
if(count&&(rx_buffer[index_offset(index,-1)])==END)
	{
     temp=rx_buffer[index_offset(index,-3)];
    	if(temp<10)
    		{
    		if(control_check(index_offset(index,-1)))
    			{
    			rx_rd_index=index_offset(index,-3-temp);
    			for(i=0;i<temp;i++)
				{
				UIB[i]=rx_buffer[index_offset(rx_rd_index,i)];
				}
			rx_rd_index=index;
			rx_counter-=count;
			UART_IN_AN();
    			}
    		}

	}
//UART_IN_end:
//ei();
}
Пример #2
0
Файл: main.c Проект: pal73/FAT32
//-----------------------------------------------
void uart_in(void)
{
char temp,i,count;
//#asm("cli")
//disableInterrupts();
if(rx_buffer_overflow)
	{
	rx_wr_index=0;
	rx_rd_index=0;
	rx_counter=0;
	rx_buffer_overflow=0;
	}    
	
if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END)
	{
	//rx_offset++;
	//GPIOD->ODR^=(1<<4);
	//uart_out (3,CMND,1,33,mdr1/**(((char*)&temp_L)+1)*/,mdr2/**(((char*)&temp_L)+2)*/,mdr3/**(((char*)&temp_L)+3)*/);
	temp=rx_buffer[index_offset(rx_wr_index,-3)];
    	if(temp<100) 
    		{
		
    		if(control_check(index_offset(rx_wr_index,-1)))
    			{///uart_out (3,CMND,1,33,mdr1/**(((char*)&temp_L)+1)*/,mdr2/**(((char*)&temp_L)+2)*/,mdr3/**(((char*)&temp_L)+3)*/);
			//GPIOD->ODR^=(1<<4);
    			rx_rd_index=index_offset(rx_wr_index,-3-temp);
    			for(i=0;i<temp;i++)
				{
				UIB[i]=rx_buffer[index_offset(rx_rd_index,i)];
				} 
			rx_rd_index=rx_wr_index;
			rx_counter=0;
			
			/*if(UIB[1]==21)
				{
					char i;
				for(i=0;i<64;i++)
					{
						UIB[2+i]=rx_offset;
					}
				}*/
			uart_in_an();
/**/
    			}
 	
    		} 
    	}	

//#asm("sei") 
//enableInterrupts();
}
Пример #3
0
static int
select_fd(struct conf *cfp, int sock, int master, int ctrls, int parentfd)
{
	char sockbuf[1024], ptybuf[1024];
	struct timeval timeout, *tp = NULL;
	char *pbp = NULL, *sbp = NULL;
	ssize_t pcc = 0, scc = 0, n;
	int rsel, maxfd;

	(void)non_blocking(sock);
	(void)non_blocking(master);
	(void)non_blocking(ctrls);
	(void)non_blocking(parentfd);

	(void)signal(SIGTTOU, SIG_IGN);

	maxfd = sock    > master  	? sock    	: master;
	if (maxfd < ctrls)
		maxfd = ctrls;
	if (maxfd < pipechld[0])
		maxfd = pipechld[0];
	if (maxfd < parentfd)
		maxfd = parentfd;
	maxfd += 1;

	for (;;) {
		fd_set rset, wset, *omask;	

		FD_ZERO(&rset);
		FD_ZERO(&wset);

		omask = (fd_set *) NULL;

		if (scc) {
			FD_SET(master, &wset);
			omask = &wset;
		} else
			FD_SET(sock, &rset);

		if (pcc >= 0) {
			if (pcc) {
				FD_SET(sock, &wset);
				omask = &wset;
			} else
				FD_SET(master, &rset);
		}

		FD_SET(ctrls, &rset);
		FD_SET(pipechld[0], &rset);
		FD_SET(parentfd, &rset);
	
		/*
		 * Posix.1g defines timeout parameter to const
		 * Linux uses a value-result timeout
		 */
		if (cfp->timeout) {
			timeout.tv_sec  = cfp->timeout;
			timeout.tv_usec = 0;
			tp = &timeout;
        	}

		if ((rsel = select(maxfd, &rset, omask, NULL, tp)) == -1) {
			if (errno == EINTR)
				continue;
			else {
				syslog(LOG_ERR, "selectfd %m"); 
				return -1;
			}
		}

		if (rsel == 0) {
			if (tp) {
				syslog(LOG_INFO, 
					"[%s] session time expired for %s",
					cfp->session,
					get_pwentry(cfp->setuser)->pw_name);
				/*
				 * giving a chance to know timeout
				 * XXX: writen()?
				 */
				(void)write(sock, "\r\nsession timeout\r\n", 
					(size_t)19); 
				return 0;
			} else 
				continue;
		}

		if (FD_ISSET(parentfd, &rset)) {
			char c;

			(void)read(parentfd, &c, 1);

			return 0;
		}

		if (FD_ISSET(pipechld[0], &rset)) {
			pid_t pid;
			int st;
			char c;

			if (pipechld[0] != -1)
				(void)read(pipechld[0], &c, 1);

			while ((pid = waitpid(-1, &st, WNOHANG|WUNTRACED))) {
				if (pid < 0) {
					if (errno == EINTR)
						continue;
					else
						break;
				}

				if (WIFSTOPPED(st)) {
					(void)kill(pid, SIGCONT);
					continue;
				}
			}
		} 

		if (FD_ISSET(ctrls, &rset)) {
			struct schck sck;
	
			n = read(ctrls, &sck, sizeof(sck));
		
			if (n == sizeof(sck))
				(void)control_check(ctrls, &sck, master);
                }

		if (FD_ISSET(sock, &rset)) {
			scc = read(sock, sockbuf, sizeof(sockbuf));
			if (scc < 0 && errno == EWOULDBLOCK)
				scc = 0;
			else {
				if (scc <= 0)
					return (scc) ? -1 : 0;
	
				sbp = sockbuf;
			
				FD_SET(master, &wset);
			}			
		}

		if (FD_ISSET(master, &wset) && scc > 0) {
			n = write(master, sbp, (size_t)scc);
		
			if (n < 0 && errno == EWOULDBLOCK) 
				continue;
			else if (n < 0) 
				return -1;

			if (n > 0) 
				scc -= n, sbp += n;
		}

		if (FD_ISSET(master, &rset)) {
			pcc = read(master, ptybuf, sizeof(ptybuf));
			if (pcc < 0 && errno == EWOULDBLOCK) 
				pcc = 0;
			else {
				if (pcc <= 0) 
					return (pcc) ? -1 : 0;

				pbp = ptybuf;

				FD_SET(sock, &wset);
			}
		}

		if (FD_ISSET(sock, &wset) && pcc > 0) {
			n = write(sock, pbp, (size_t)pcc);

			if (n < 0 && errno == EWOULDBLOCK)
				continue;
			else if (n < 0) 
				return -1;

			if (n > 0) 
				pcc -= n, pbp += n;
		}
	}

	/*
	 * never reached
	 */
	return -1;
}
Пример #4
0
int main(int argc, char** argv) {
	int ref = EXIT_SUCCESS;
	srand(OSTimeGet());
	control_init();
	appTimer = timer_create();

	fgl_texture* tempDispTex = fgl_texture_create(320, 240);
	display* appDisplay = display_create(320, 240, 320, (DISPLAY_FILTER_NEAREST | DISPLAY_FORMAT_RGB565), tempDispTex->data, NULL);
	if(appDisplay == NULL)
		return EXIT_FAILURE;

	fgl_draw_buffer_set(tempDispTex);
	fgl_texture* tempRenderTarget = fgl_draw_buffer_get();
	uint16_t* tempDepth = (uint16_t*)malloc(tempRenderTarget->width * tempRenderTarget->height * 2);
	if(tempDepth != NULL)
		fgl_depth_buffer_set(tempDepth);
	fgl_enable(FGL_DEPTH_TEST);

	fgl_matrix_mode_set(FGL_MATRIX_VIEWPORT);
	fgl_matrix_identity();
	fgl_viewport(0, 0, fgl_fix16_from_int(320), fgl_fix16_from_int(240));
	fgl_matrix_mode_set(FGL_MATRIX_PROJECTION);
	fgl_matrix_identity();
	fgl_perspective((fgl_fix16_pi >> 3), fgl_fix16_div(fgl_fix16_from_int(320), fgl_fix16_from_int(240)), fgl_fix16_one, fgl_fix16_from_int(1024));
	fgl_matrix_mode_set(FGL_MATRIX_VIEW);
	fgl_matrix_identity();
	fgl_translate(fgl_fix16_from_int(0), fgl_fix16_from_int(0), fgl_fix16_from_int(10));
	fgl_matrix_mode_set(FGL_MATRIX_MODEL);
	fgl_matrix_identity();

	fgl_scale(fgl_fix16_from_int(2), fgl_fix16_from_int(2), fgl_fix16_from_int(2));

	fgl_texture* tempTexture = fgl_texture_load_tga("earth.tga");
	fgl_texture_bind(tempTexture);
	fgl_enable(FGL_TEXTURE_2D);

	//fgl_enable(FGL_CULL_FACE);

	int sysref;
	while(appRunning) {
		sysref = _sys_judge_event(NULL);
		if(sysref < 0) {
			ref = sysref;
			break;
		}

		// Control
		control_poll();
		if(control_check(CONTROL_BUTTON_START).pressed && control_check(CONTROL_BUTTON_SELECT).pressed)
			appRunning = false;
		else if(control_check(CONTROL_BUTTON_SELECT).pressed && control_check(CONTROL_BUTTON_SELECT).changed)
			appScreenshot();

		if(control_just_pressed(CONTROL_DPAD_UP)) {
			fgl_matrix_mode_set(FGL_MATRIX_VIEW);
			fgl_translate(fgl_fix16_from_int(0), fgl_fix16_from_int(0), fgl_fix16_from_int(-1));
			fgl_matrix_mode_set(FGL_MATRIX_MODEL);
		}
		if(control_just_pressed(CONTROL_DPAD_DOWN)) {
			fgl_matrix_mode_set(FGL_MATRIX_VIEW);
			fgl_translate(fgl_fix16_from_int(0), fgl_fix16_from_int(0), fgl_fix16_from_int(+1));
			fgl_matrix_mode_set(FGL_MATRIX_MODEL);
		}

		// Draw
		fgl_clear(FGL_COLOR_BUFFER_BIT | FGL_DEPTH_BUFFER_BIT);
		fgl_draw_sphere(16);
		fgl_rotate_y(500);
		display_flip(appDisplay);
	}

	fgl_texture_delete(tempTexture);
	if(tempDepth != NULL)
		free(tempDepth);

	timer_delete(appTimer);
	control_term();
	display_delete(appDisplay);
	return EXIT_SUCCESS;
}
Пример #5
0
@far @interrupt void UARTTxInterrupt (void) {
#else
void UARTTxInterrupt (void) interrupt 17 {
#endif

#ifdef _wrk_	
	
	if (tx_counter){
		--tx_counter;
		UART1->DR=tx_buffer[tx_rd_index];
		if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
	}
	else {
		bOUT_FREE=1;
		UART1->CR2&= ~UART1_CR2_TIEN;
	}
#endif	
}
/*
//-----------------------------------------------
char control_check(char index)
{
char i=0,ii=0,iii;

if(rx_buffer[index]!=END) goto error_cc;

ii=rx_buffer[index_offset(index,-2)];
iii=0;
for(i=0;i<=ii;i++)
	{
	iii^=rx_buffer[index_offset(index,-2-ii+i)];
	}
if (iii!=rx_buffer[index_offset(index,-1)]) goto error_cc;	


success_cc:
return 1;
//goto end_cc;
error_cc:
return 0;
//goto end_cc;

//end_cc:
//return 0;
}

//-----------------------------------------------
char index_offset (signed char index,signed char offset)
{
index=index+offset;
if(index>=RX_BUFFER_SIZE) index-=RX_BUFFER_SIZE; 
if(index<0) index+=RX_BUFFER_SIZE;
return index;
}
*/
#ifdef _wrk_
//-----------------------------------------------
void uart_in(void)
{
char temp,i,count;
//#asm("cli")
disableInterrupts();
if(rx_buffer_overflow)
	{
	rx_wr_index=0;
	rx_rd_index=0;
	rx_counter=0;
	rx_buffer_overflow=0;
	}    
	
if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END)
	{
	//GPIOD->ODR^=(1<<4);
    temp=rx_buffer[index_offset(rx_wr_index,-3)];
    	if(temp<100) 
    		{
    		if(control_check(index_offset(rx_wr_index,-1)))
    			{
			//GPIOD->ODR^=(1<<4);
    			rx_rd_index=index_offset(rx_wr_index,-3-temp);
    			for(i=0;i<temp;i++)
				{
				UIB[i]=rx_buffer[index_offset(rx_rd_index,i)];
				} 
			rx_rd_index=rx_wr_index;
			rx_counter=0;
			uart_in_an();
/**/
    			}
 	
    		} 
    	}	

//#asm("sei") 
enableInterrupts();
} 
Пример #6
0
Файл: ind3.c Проект: pal73/GAVT
//-----------------------------------------------
void UART_IN(void)
{
//static char flag;
char temp,i,count;
//int temp_int;
#asm("cli")
//char* ptr;
//char i=0,t=0;
//int it=0;
//signed long int char_int;
//if(!bRXIN) goto UART_IN_end;
//bRXIN=0;
//count=rx_counter;
//OUT(0x01,0,0,0,0,0);
if(rx_buffer_overflow)
	{
	rx_wr_index=0;
	rx_rd_index=0;
	rx_counter=0;
	rx_buffer_overflow=0;
	}    
	
if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END)
	{
     temp=rx_buffer[index_offset(rx_wr_index,-3)];
    	if(temp<10) 
    		{
    		if(control_check(index_offset(rx_wr_index,-1)))
    			{
    			rx_rd_index=index_offset(rx_wr_index,-3-temp);
    			for(i=0;i<temp;i++)
				{
				UIB[i]=rx_buffer[index_offset(rx_rd_index,i)];
				} 
			rx_rd_index=rx_wr_index;
			rx_counter=0;
			UART_IN_AN();

    			}
 	
    		} 
    	}	

UART_IN_end:
#asm("sei")     
} 

//-----------------------------------------------
void OUT (char num,char data0,char data1,char data2,char data3,char data4,char data5)
{
char i,t=0;
char UOB[10]; 
UOB[0]=data0;
UOB[1]=data1;
UOB[2]=data2;
UOB[3]=data3;
UOB[4]=data4;
UOB[5]=data5;
UOB[6]=0;
UOB[7]=0;
UOB[8]=0;
UOB[9]=0;
for (i=0;i<num;i++)
	{
	t^=UOB[i];
	}    
UOB[num]=num;
t^=UOB[num];
UOB[num+1]=t;
UOB[num+2]=END;

for (i=0;i<num+3;i++)
	{
	putchar(UOB[i]);
	}   	

}