Esempio n. 1
0
void rfid_task() {
	for(;;) {
		char temp;
		rfid_t msg;
		int bytes_read;
		int i;
		// Wait for wakeup from interrupt
		vTaskDelay(portTICK_RATE_MS * 100);
		xSemaphoreTake(rfid_top_sem, portMAX_DELAY);

		/* Wait until we get a 4C (start of header) */
		while(1) {
			bytes_read = UART_get_rx(&g_rfid_uart, (unsigned char*)&temp, 1);
			if(bytes_read == 0) {
				break;
			} else if(temp == 0x4C) {

				bytes_read = UART_get_rx(&g_rfid_uart, (unsigned char*)&temp, 1);
				if(bytes_read == 0 || temp != 0x57) {
					/* Good read */
					break;
				}

				/* Don't care about the transponder type */
				bytes_read = UART_get_rx(&g_rfid_uart, (unsigned char*)&temp, 1);

				/* RXRDY is high when data is available in the receive data buffer/FIFO.
				This bit is cleared by reading the Receive Data Register.	 */
				bytes_read = UART_get_rx(&g_rfid_uart, (unsigned char*)&msg.data, RFID_LEN);
				if(bytes_read != RFID_LEN) {
					break;
				}

				msg.data[RFID_MSG_LEN-1] = '\0';

				/* Pass ID to control unit */
				xQueueSendToBack(g_rfid_queue, &msg, 0);
				vTaskDelay(portTICK_RATE_MS * 1000); //Ignore rfid for a short bit

				/* Break out of while loop */
				break;
			}
		}

		/* Clear the buffer until it's empty */
		while((bytes_read = UART_get_rx(&g_rfid_uart, (unsigned char*)&temp, 1)) > 0);

		MSS_GPIO_enable_irq(MSS_GPIO_1);
	}
}
/**
 * UartRx data ready interrupt handler
 * This function is called whenever there is data available in the UART
 * Rx unit. Note that this function should always empty the UART fifo,
 * else the interrupt keeps active.
 */
static void vSerialRXTask(void *pvParameters)
{
	(void) pvParameters;
	uint8_t rx_data[MAX_RX_DATA_SIZE] = { 0 };
	uint8_t rx_size = 0;

	for(;;){
		rx_size = UART_get_rx(&g_uart, rx_data, sizeof(rx_data));
		for(int i = 0; i < rx_size; i++){
			xQueueSend(xRxQueue, &rx_data[i], 0);
		}
	}
}
Esempio n. 3
0
uint8_t get_key_selection(void)
{

      uint8_t rx_data;
      uint8_t rx_size =0;



           do {
               rx_size = UART_get_rx(&g_stdio_uart, &rx_data,1);
           }while(rx_size == 0);

           //dp_display_text("\n\r Selected fuction is: ");
           UART_send (&g_stdio_uart, &rx_data,sizeof (rx_data));
           return rx_data;

    }
Esempio n. 4
0
/* This function reads the user input such as address and data required for any
 * memory read/write operation
 *
 *  */
		void read_user_input (uint8_t *rx_char_ptr)
		{
		    uint8_t recv_char=0;
		    uint8_t size=0;
		    uint8_t index = 0;
		    for(index = 0; index < 10; index++)
		    {
		    	rx_char[index] = '0';
		    }
		    index = 0;
		    while(recv_char != CHAR_LINE_FEED)  //'\n'
		    {
		      size = UART_get_rx(&g_stdio_uart, &recv_char,1);
			  if(size > 0)
			  {

				  rx_char_ptr[index] = recv_char;
				  UART_send (&g_stdio_uart, (uint8_t *)&recv_char,sizeof(recv_char));
				  index++;
				  size = 0; // clear the rcvd flag
			  }
			}

		}
Esempio n. 5
0
void modify_mem_data (uint16_t addr,uint8_t ByteCount){

 uint16_t   mem_addr,mem_data;

 uint8_t recv_char=0;
 uint8_t size, index = 0;
 uint16_t input_data;

 uint8_t   i=0;
 uint8_t   m=0;
 uint8_t   key;

 /* Clear the buffer before getting any new data */
 for(index = 0; index < 10; index++)
			{
				rx_char[index] = '0';
			}
index = 0;

  mem_addr = addr;

 dp_display_text("Enter New data(0x10fe,1234, 0b1010110)\r\n");

 for ( i=0; i <= ByteCount ;i++) {
	dp_display_text("\r\n");
	dp_display_value(i,DEC);
	dp_display_text("\t");
	dp_display_value(mem_addr,HEX);
	dp_display_text(":");
	mem_data= HW_get_16bit_reg(mem_addr);
	dp_display_value(mem_data,HEX);
	dp_display_text("->");
	key = get_key_selection();
	if ( key == CHAR_ESC){  // ESC key == exit from writing
		return;
	}else if ( key == CHAR_LINE_FEED) // Return key, move to next address
	{
	  mem_addr = mem_addr + 1;
	} else

	{
		rx_char[0] = key;  // put the previosly rxvd character to buffer;

		index = 1;
					while(recv_char != CHAR_LINE_FEED)  //'\n'
					{
					  size = UART_get_rx(&g_stdio_uart, &recv_char,1);
					  if(size > 0)
					  {

						  rx_char[index] = recv_char;
						  UART_send (&g_stdio_uart, (uint8_t *)&recv_char,sizeof(recv_char));
						  index++;
						  size = 0; // clear the rcvd flag
					  }
					}

					rx_char_ptr = rx_char;
					xatoi ( &rx_char_ptr, &input_data);
					HW_set_16bit_reg(mem_addr,input_data);
					mem_addr = mem_addr + 1;
					recv_char = '-';  // DUMMY VALUE TO CHANGE THE DETECTION OF NEW LINE CHAR

	}


	}

 }
Esempio n. 6
0
inline size_t BT_get_rx(uint8_t* rx_buffer, size_t buffer_size) {
    return UART_get_rx(&g_bt, rx_buffer, buffer_size);
}
Esempio n. 7
0
int main(){
	pwm_init();
	MSS_GPIO_init();
	range_init();
	MSS_GPIO_config(MSS_GPIO_31, MSS_GPIO_OUTPUT_MODE);
	UART_init(&g_uart, COREUARTAPB0_BASE_ADDR, 162, (DATA_8_BITS | NO_PARITY));

	uint8_t buff[BUFFER_SIZE];
	int offset = 0;
	size_t received;
	int joyx, joyy, cx, cy, start, fire;
	int startDown = 0;
	int mode = 0; // 0 for manual, 1 for automatic
	uint8_t tx[100];
	int txSize;
	firing = 0;
	curr_angle = 0;

	MSS_GPIO_set_output(MSS_GPIO_31, 0);

	/*while(1) {
		wheel2(255);
		//wheel4(255);
		//wheel2(-255);
		//wheel3(255);
		//wheel4(-255);
	}*/
	while (1) {
		while (!(received = UART_get_rx(&g_uart, buff+offset, sizeof(buff)-offset)));
		offset += received;
		//printf("Received: %d\n\r", received);
		if (buff[offset-1] == '\0') { // message fully received
			//printf("%s\n\r", buff);
			if (6 != sscanf(buff, "%d %d %d %d %d %d", &joyx, &joyy, &cx, &cy, &fire, &start)) {
				bzero(buff, BUFFER_SIZE);
				continue;
			}
			offset = 0;

			if (start && !startDown) {
				mode = !mode;
				startDown = 1;
			}
			if (!start && startDown)
				startDown = 0;

			joyx = joyx * .65;
			joyy = joyy * .65;

			if (joyx < 0)
				joyx -= 150;
			else if (joyx > 0)
				joyx += 150;
			if (joyy < 0)
				joyy -= 150;
			else if (joyy > 0)
				joyy += 150;

			printf("JoyX: %3d, JoyY: %3d, CX: %3d, CY: %3d, Fire: %d, Start: %d\n\r", joyx, joyy, cx, cy, fire, start);

			wheel1(joyy);
			wheel2(joyx);
			wheel3(joyy);
			wheel4(joyx);

			moveTurret(cy);

			if (fire && !firing) {
				start_gun();
			}

			if (firing && fire_counter <= FIRE_TIME)
				fire_counter++;
			if (!fire && firing && fire_counter >= FIRE_TIME)
				stop_gun();

		}
		else continue;
		txSize = sprintf(tx, "%d %d", mode, get_range()) + 1;
		UART_send(&g_uart, tx, txSize);
	}
	/*while(1){
		set_gun_angle(0);
		wheel1(-255);
    }*/
    return 0;
}