Esempio n. 1
0
/* UART task: read and write */
void taskRS232(void* pdata) {
	alt_u32 write_FIFO_space;
	alt_u16 read_FIFO_used;
	alt_u8 data_W8;
	alt_u8 data_R8;
	int enter = 0;
	unsigned p_error;
	alt_up_rs232_dev* rs232_dev;
	// open the RS232 UART port
	rs232_dev = alt_up_rs232_open_dev("/dev/rs232_0");
	if (rs232_dev == NULL)
		alt_printf("Error: could not open RS232 UART\n");
	else
		alt_printf("Opened RS232 UART device\n");
	alt_up_rs232_enable_read_interrupt(rs232_dev);
	while (1) {
		int sw = OSQPend(SWQ, 0, &err);
		if (sw == SW_WRITE) {
			alt_up_rs232_disable_read_interrupt(rs232_dev);
			if (enter == 0) {
				data_W8 = 'A';
				enter = 1;
			} else if (enter == 1) {
				data_W8 = '\n';
				enter = 0;
			}
			write_FIFO_space = alt_up_rs232_get_available_space_in_write_FIFO(
					rs232_dev);
			if (write_FIFO_space >= WRITE_FIFO_EMPTY) {
				alt_up_rs232_write_data(rs232_dev, data_W8);
				alt_printf("write %c to RS232 UART\n", data_W8);
			}
			OSTimeDlyHMSM(0, 0, 1, 0);
			alt_up_rs232_enable_read_interrupt(rs232_dev);
		}
		if (sw == SW_READ) {
			read_FIFO_used = alt_up_rs232_get_used_space_in_read_FIFO(
					rs232_dev);
			if (read_FIFO_used > READ_FIFO_EMPTY) {
				alt_printf("char stored in read_FIFO: %x\n", read_FIFO_used);
				alt_up_rs232_read_data(rs232_dev, &data_R8, &p_error);
				alt_printf("read %x from RS232 UART\n", data_R8);
			}
			OSTimeDlyHMSM(0, 0, 0, 5);
		}
	}
}
Esempio n. 2
0
//Sends the sound file names to android
void send_fnames(char * filenames[], int numfiles)
{
	int i,j;
	int size;
	char * ptr;

	rs_flag = false;

	clear_fifo();

	printf("Sending the message to the Middleman\n");

	for (j = 0; j < numfiles; j++) {
		alt_up_rs232_write_data(uart, 2);
		alt_up_rs232_write_data(uart, j);
		size = strlen(filenames[j]);
		ptr = filenames[j];

		//Make sure there is space
		while(alt_up_rs232_get_available_space_in_write_FIFO(uart) < (size + 2));

		// Now send the actual message to the Middleman
		for (i = 0; i < size; i++) {
			alt_up_rs232_write_data(uart, *(ptr + i));
		}

		wait();
		do {
			if (rs_flag == true) {
				alt_up_rs232_read_data(uart, &data, &parity);
			}

			////////////////////////////

			//TO BE COMMENTED OUT, this is my delay simulation for android
			/*
			testvalue++;
			if (testvalue == 1000000) {
				alt_up_rs232_write_data(uart, (unsigned char)ACK);
				testvalue = 0;
			}
			 */
			/////////////////////////////
		}while(data != ACK);
		clear_fifo();
	}
}
Esempio n. 3
0
/**
 * Sends a byte-length message to the motor controller.
 * @param message - the message to send
 * @param description - the string description of the message, for debugging
 */
void MotorHandler::send(char message, const char *description) {
	alt_u32 write_space;
	// Check for write space.
	write_space = alt_up_rs232_get_available_space_in_write_FIFO(motor_dev);
	if (write_space >= WRITE_FIFO_EMPTY) {
		// If space, write.
		int status = alt_up_rs232_write_data(motor_dev, message);
		MOTORHANDLER_LOG(printf("MotorHandler [message: 0x%02x, description: %s]\n", message, description));
		// Log errors.
		if (status != OK) MOTORHANDLER_LOG(printf("MotorHandler [error: cannot write]\n"));
	} else {
		// If no space, wait and retry.
		MOTORHANDLER_LOG(printf("MotorHandler [message: 0x%02x, description: %s, error: no write space; retrying]\n", message, description));
		OSTimeDlyHMSM(0, 0, 0, 10);
		send(message, description);
	}
}
Esempio n. 4
0
void send_filenames(char * filenames[], int numfiles)
{
	int i,j;
	int size;
	char * ptr;

	clear_fifo();

	printf("Sending the message to the Middleman\n");

	//Start with header
	alt_up_rs232_write_data(uart, (unsigned char) HEAD);

	//Function protocol
	alt_up_rs232_write_data(uart, (unsigned char) 3);

	//NumFiles
	alt_up_rs232_write_data(uart, (unsigned char) numfiles);

	/*
	wait();
	alt_up_rs232_read_data(uart, &data, &parity);
	printf("%d files.\n", (int)data);
	 */

	for (j = 0; j < numfiles; j++) {

		size = strlen(filenames[j]);
		ptr = filenames[j];

		//Make sure there is space
		while(alt_up_rs232_get_available_space_in_write_FIFO(uart) < ((size * 2) + 2));

		// Start with the number of bytes in our message
		alt_up_rs232_write_data(uart, (unsigned char)size);

		// Now send the actual message to the Middleman
		for (i = 0; i < size; i++) {
			alt_up_rs232_write_data(uart, *(ptr + i));

			//Send ETX
			alt_up_rs232_write_data(uart, (unsigned char) ETX);

		}

		alt_up_rs232_write_data(uart, (unsigned char) ETB);

		wait();
		//emulate_ack();
		emulate_ack2();

		wait();
		alt_up_rs232_read_data(uart, &data, &parity);
		//printf("%d\n", (int)data);
		if (data != ACK) {
			printf("Error, Acknowledge was not received.\n");
		}
		else
			printf("Acknowledge received.\n");

		clear_fifo();

		if (j == (numfiles - 1)) {
			//End of Transmission
			alt_up_rs232_write_data(uart, (unsigned char) EOT);
		}
	}
	wait();
	alt_up_rs232_read_data(uart, &data, &parity);
	printf("I received %d\n", (int)data);

}
int main() {
	int i;

	//1 for receiving file from middleman, 2 for sending to middleman
	int mode;



	//Num char in filename array
	int numFileName;
	//Num bytes in file
	int numBytesFile;

	//Num characters in file array
	int numFile;

	char* listName;



	//File to send or receive (likely a piece of it)
	unsigned char fileName[MAX_FILENAME];

	//variable to hold data received from uart
	unsigned char data;
	//parity bit for reading (not using parity atm, but still need the bit)
	unsigned char parity;


	short int handle;
	//handle for the file to create/access
	int connected = 0;
	//Variable to keep track of whether the SD CARD is connected or not.

	while (1) {
		alt_up_sd_card_dev *device_reference = NULL;
		device_reference = alt_up_sd_card_open_dev(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_NAME);

		printf("UART Initialization\n");
		alt_up_rs232_dev* uart = alt_up_rs232_open_dev("/dev/rs232_0");


		if(!alt_up_sd_card_is_FAT16()){
			printf("SD CARD is not FAT16 Format\n");
		}

		if (device_reference != NULL) {

			while (alt_up_sd_card_is_Present()) {

				printf("Clearing read buffer to start\n");
				while (alt_up_rs232_get_used_space_in_read_FIFO(uart)) {
					alt_up_rs232_read_data(uart, &data, &parity);
				}

				// Now receive the instruction from the Middleman
				printf("Waiting for instruction to come from the Middleman\n");
				while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0)
					;

				// First byte is the mode, 1 for receiving file from middleman, 2 for sending to middleman
				alt_up_rs232_read_data(uart, &data, &parity);
				mode = (int) data;
				//mode -= 48;

				printf("Mode:%d\n", mode);

				//Receive file from middleman and save to SD
				if (mode == 1) {

					printf("Waiting for num char:\n");
					// The second byte is the number of characters in the file name
					while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0);
					alt_up_rs232_read_data(uart, &data, &parity);
					numFileName = (int) data;
					//numFileName -= 48;

					//Now receive the file name
					printf("About to receive %d characters:\n\n", numFileName);
					printf("Filename received:");
					for (i = 0; i < numFileName; i++) {
						while (alt_up_rs232_get_used_space_in_read_FIFO(uart)== 0);
						alt_up_rs232_read_data(uart, &data, &parity);
						fileName[i] = data;
						printf("%c", data);
					}
					printf("\n");
					fileName[i] = '.';
					fileName[i+1] = 't';
					fileName[i+2] = 'x';
					fileName[i+3] = 't';
					fileName[i+4]= '\0';
					//
					// TODO:
					// USE THAT FILENAME TO MAKE A NEW FILE ON SD CARD HERE

					handle = alt_up_sd_card_fopen(fileName, 1);
					if(handle < 0){
						//TODO: File can't be opened, do something about it
						printf("send had a neg handle \n\n");
					}
					else{
						// The 4 bytes after filename is the number of bytes in the file
						//
						// SHIFT BYTES LEFT AND CONCATENATE TO ACCOUNT FOR SEVERAL BYTES WORTH OF FILE
						// WRITE FIRST 4 BYTES OF FILE AS SIZE OF FILE IN BYTES
						while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0);
						alt_up_rs232_read_data(uart, &data, &parity);
						alt_up_sd_card_write(handle, data);
						numBytesFile = (int) data;
						numBytesFile = numBytesFile << 8;

						while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0);
						alt_up_rs232_read_data(uart, &data, &parity);
						alt_up_sd_card_write(handle, data);
						numBytesFile += (int) data;
						numBytesFile = numBytesFile << 8;

						while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0);
						alt_up_rs232_read_data(uart, &data, &parity);
						alt_up_sd_card_write(handle, data);
						numBytesFile += (int) data;
						numBytesFile = numBytesFile << 8;

						while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0);
						alt_up_rs232_read_data(uart, &data, &parity);
						alt_up_sd_card_write(handle, data);
						numBytesFile += (int) data;

						//WRITE BYTES TO SD CARD
						printf("About to receive %d file chars:\n\n",numBytesFile);
						for (i = 0; i < numBytesFile; i++) {

							while (alt_up_rs232_get_used_space_in_read_FIFO(uart)== 0);
							alt_up_rs232_read_data(uart, &data, &parity);
							alt_up_sd_card_write(handle, data);
						}
						printf("File done\n");

						alt_up_sd_card_fclose(handle);

					}


					//This bracket ends receiving a file
				}

				//Send file to middleman from SD
				else if (mode == 2) {

					printf("Waiting for num char:\n");
					// The second byte is the number of characters in the file name
					while (alt_up_rs232_get_used_space_in_read_FIFO(uart) == 0)
						;
					alt_up_rs232_read_data(uart, &data, &parity);
					numFileName = (int) data;
					//numFileName -= 48;

					//Now receive the file name
					printf("About to receive %d characters:\n\n", numFileName);
					printf("Filename received:");
					for (i = 0; i < numFileName; i++) {
						while (alt_up_rs232_get_used_space_in_read_FIFO(uart)
								== 0)
							;
						alt_up_rs232_read_data(uart, &data, &parity);

						fileName[i] = data;

						printf("%c", data);
					}
					printf("\n");

					fileName[i] = '.';
					fileName[i+1] = 't';
					fileName[i+2] = 'x';
					fileName[i+3] = 't';
					fileName[i+4]= '\0';


					handle = alt_up_sd_card_fopen(fileName, 0);

					if (handle == -1) {
						//SEND ANDROID AN ASCII 2 TO LET THEM KNOW TO RECEIVE FILE NAME
						alt_up_rs232_write_data(uart, 50);
						printf("neg handle");
						if(alt_up_sd_card_find_first(".",listName) ==-1){
							//SEND ANDROID AN ASCII 2 TO LET THEM KNOW THERES NO FILE NAMES
							alt_up_rs232_write_data(uart, 50);
							printf("no files");
						}
						else{
							//SEND ANDROID LIST OF FILE NAMES
							printf("some files");
							i=0;
							for(i = 0; listName[i] != '.'; i++){
								alt_up_rs232_write_data(uart, listName[i]);
							}
							alt_up_rs232_write_data(uart, 32);
							while(alt_up_sd_card_find_next(listName)!=-1){
								i=0;
								for(i = 0; listName[i] != '.'; i++){
									alt_up_rs232_write_data(uart, listName[i]);
								}
								alt_up_rs232_write_data(uart, 32);
							}
							alt_up_rs232_write_data(uart, 1);
							printf("done files");
						}
					} else {

						//SEND ANDROID AN ASCII 1 TO LET THEM KNOW TO RECEIVE A FILE
						alt_up_rs232_write_data(uart, 49);



						// SHIFT BYTES LEFT AND CONCATENATE TO ACCOUNT FOR SEVERAL BYTES WORTH OF FILE
						// WRITE FIRST 4 BYTES OF FILE AS SIZE OF FILE IN BYTES

						data = alt_up_sd_card_read(handle);
						alt_up_rs232_write_data(uart, data);
						numFile = (int) data;
						numFile = numFile << 8;

						data = (int) alt_up_sd_card_read(handle);
						alt_up_rs232_write_data(uart, data);
						numFile += (int) data;
						numFile = numFile << 8;

						data = (int) alt_up_sd_card_read(handle);
						alt_up_rs232_write_data(uart, data);
						numFile += (int) data;
						numFile = numFile << 8;

						data = (int) alt_up_sd_card_read(handle);
						alt_up_rs232_write_data(uart, data);
						numFile += (int) data;

						printf("About to send %d file bytes\n", numFile);
						while (numFile > 0) {

							while(alt_up_rs232_get_available_space_in_write_FIFO(uart) == 0);

							data = alt_up_sd_card_read(handle);
							alt_up_rs232_write_data(uart, data);

							numFile--;



						}

						// WRITE A "FILE DONE" STRING OR WHATEVER WE DECIDE
						printf("sending end bits\n");
					//	alt_up_rs232_write_data(uart, 1);


						//
						//
						//
						alt_up_sd_card_fclose(handle);

					}

					//This bracket ends sending a file
				}

				//Something broke
				else {
					printf("Wrong mode, something broke, starting over\n");
				}
			}
		}

		else {
			printf("Card Reader is not working\n");
		}
	}
	return 0;
	//end main
}