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); } } }
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; }
/* 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 } } }
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 } } }
inline size_t BT_get_rx(uint8_t* rx_buffer, size_t buffer_size) { return UART_get_rx(&g_bt, rx_buffer, buffer_size); }
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; }