Exemple #1
0
//General UART send function
void sendUART(unsigned char *frame_header, unsigned char *data, unsigned char length)
{
    int i;
    unsigned char checksum=0;

    //send frame header
    for(i = 0; i < FRAME_HEADER_LEN; i++)
    {
        checksum += frame_header[i];
        while(BusyUART1());
        WriteUART1(frame_header[i]);
    }

    //send payload data
    for (i = 0; i < length; i++)
    {
        checksum += data[i];
        while(BusyUART1());
        WriteUART1(data[i]);

    }

    //Send Checksum Data
    while(BusyUART1());
    WriteUART1(0xFF - checksum);
}
Exemple #2
0
//Handle an AT response packet and pass it to the sendUART function
void xbeeHandleATR(unsigned char frame_id, WordVal command, unsigned char *data, unsigned char length)
{
    unsigned char frame_header[5];

    frame_header[RX_API_POS] = AT_RESPONSE;

    frame_header[ATR_FRAME_ID_POS] = frame_id;
    frame_header[ATR_COMMAND_HB_POS] = command.byte.HB;

    frame_header[ATR_COMMAND_LB_POS] = command.byte.LB;
    frame_header[ATR_STATUS_POS] = 0x00;

    CRITICAL_SECTION_START
        //Start Byte
        while(BusyUART1());
        WriteUART1(RX_START);

        //Length High Byte
        while(BusyUART1());
        WriteUART1(0x00);

        //Length Low Byte
        while(BusyUART1());
        WriteUART1(length+FRAME_HEADER_LEN);

        sendUART(frame_header, data, length);

    CRITICAL_SECTION_END
}
Exemple #3
0
void gpsSentenceConfig(void){
	int i,j;
	unsigned char chMsgs [] = "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n\0";
	unsigned char chBaudRt [] = "$PMTK251,19200*22\r\n\0";
	
	// Put some huge delays to wait for GPS power-up without the need of a timer
	for( i = 0; i < 750; i += 1 ){
		for( j = 0; j < 32700; j += 1 )
		{
			Nop();
		}
	}
	
	putsUART1((unsigned int *)chMsgs);
	while(BusyUART1());	

	// Put some huge delays to wait for GPS power-up without the need of a timer
	for( i = 0; i < 150; i += 1 ){
		for( j = 0; j < 32700; j += 1 )
		{
			Nop();
		}
	}
	putsUART1((unsigned int *)chBaudRt);
	while(BusyUART1());
	
}
Exemple #4
0
void broadcast_message(const char * message) {
	while(BusyUART2());		// Wait until previous transmission is finished
	putsUART2 ((unsigned int *)message);
	while(BusyUART2());		// Wait until previous transmission is finished

	while(BusyUART1());		// Wait until previous transmission is finished
	putsUART1 ((unsigned int *)message);
	while(BusyUART1());		// Wait until previous transmission is finished
}
Exemple #5
0
/* Text a phone number */
void gsmText(char *number, char *msg) {

    /* Store the beginning and ending sequences */
    char *prefix = "AT+CMGS=\"";
    char *suffix = "\"\r\n";

    /* Allocate space and then store concatenated text command */
    size_t len1 = strlen(prefix);
    size_t len2 = strlen(number);
    size_t len3 = strlen(suffix);

    char *s = malloc(len1 + len2 + len3 + 1);
    memcpy(s, prefix, len1);
    memcpy(s + len1, number, len2);
    memcpy(s + len1 + len2, suffix, len3 + 1);

    /* Set GSM module to text mode */
    gsmSendCommand("AT+CMGF=1\r");

    /* Set the number */
    gsmSendCommand(s);

    /* Delay to allow GSM module to get ready */
    DELAY_MS(100);
    
    /* Set the message */
    gsmSendCommand(msg);

    /* Send Text */
    while(BusyUART1());
    WriteUART1((unsigned int)CTRL_Z);

    /* Free memory */
    free(s);
}
Exemple #6
0
void copyMidgToUart1() {
    unsigned char buf[MIDG_CHUNKSIZE];
    int i;
    
    unsigned char test[] = MSG_DIV(3,5,2,50);
    midgMsgAppendChecksum( test );
    printToUart1("test of macros: ");
    for ( i = 0; i < 9; i++ ) {
        printToUart1("%u ", (unsigned int)test[i]);
    }
    printToUart1("... that was it.\n");
    
    midgRead(buf);
    
    /*
    // add NUL terminator after bytes
    buf[buf[0]+1] = 0;
    
    // send the number of bytes read from the buffer
    printToUart1("%u:<%s>\r\n\0", buf[0], &buf[1]);
    */
    
    printToUart1("%u:<", buf[0]);
    for ( i = 1; i <= buf[0]; i++ ) {
        putcUART1(buf[i]);
        while(BusyUART1());
    }
    printToUart1(">\r\n\0");
}
Exemple #7
0
void initUART(void) {
    __XC_UART = 1;
    OpenUART1( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT | UART_BRGH_SIXTEEN,
               UART_RX_ENABLE | UART_TX_ENABLE,
               GetPeripheralClock()/16/BAUD_RATE - 1);
    while( BusyUART1()); // Wait until the UART module is free.
    putsUART1("Initializing UART1...\n\r");
}
Exemple #8
0
/**
 * interface_test_uart: Loop n times (a long int), repeating the
 * character 'U' on the UART tx pin.
 */
void interface_test_uart(long int n)
{
	// Enable transmit.
	U1STAbits.UTXEN = 1;
	while(n--)
	{
		while(BusyUART1());
		WriteUART1('U');
	}
}
Exemple #9
0
void gpsFreqConfig(void){
	/*
    unsigned char chFreq [] = "$PMTK300,200,0,0,0,0*2F\r\n\0";	
	putsUART1((unsigned int *)chFreq);
	while(BusyUART1());
    */	
	putsUART1("$PMTK300,999,0,0,0,0*2F\r\n\0");
	while(BusyUART1());
    
}
Exemple #10
0
void SendLong(long num)
{
    unsigned char c1, c10, c100, c1000, c10000, c100000;

    if(num < 0)
    {
	while(BusyUART1());
	WriteUART1('-');
	num = -num;
    }
    else
    {
	while(BusyUART1());
	WriteUART1('+');
    }

    c1 = num % 10;
    num = num / 10;

    c10 = num % 10;
    num = num / 10;

    c100 = num % 10;
    num = num / 10;

    c1000 = num % 10;
    num = num / 10;

    c10000 = num % 10;
    num = num / 10;

    c100000 = num % 10;
    num = num / 10;

    while(BusyUART1());
    WriteUART1('0' + c100000);

    while(BusyUART1());
    WriteUART1('0' + c10000);

    while(BusyUART1());
    WriteUART1('0' + c1000);

    while(BusyUART1());
    WriteUART1('0' + c100);

    while(BusyUART1());
    WriteUART1('0' + c10);

    while(BusyUART1());
    WriteUART1('0' + c1);
}
Exemple #11
0
// UART3 RX ISR
void __attribute__ ((interrupt,no_auto_psv)) _U3RXInterrupt(void)
{
    // Clear the interrupt status of UART1 RX
    U3RX_Clear_Intr_Status_Bit;
    
    if(DataRdyUART3())
    {
        incoming_char = ReadUART3();    // Get the character coming from USB UART
        while(BusyUART1());
        WriteUART1(incoming_char);      // Send the character to the GSM UART
        while(BusyUART3());
        WriteUART3(incoming_char);      // Send the character to the USB UART
    }
}
Exemple #12
0
/* Send command to GSM via UART */
void gsmSendCommand(char *str) {
    while(BusyUART1());
    putsUART1((unsigned int*)str);
    while(BusyUART3());
    putsUART3((unsigned int*)str);
}
Exemple #13
0
void process_cmd(void)
{
	char goodcmd[]	= "- Command Accepted.\n\n\r\0";
	char evilcmd[]	= "- BAD Command.\n\n\r\0";

	char *r = evilcmd;

	if (cmdissued == 1)
	{
		switch(*rbufptr++)
		{
		/*** STEPPER COMMANDS ***/
			case 's':
				putcUART1('s');
				if(*rbufptr++ == 't'){
					putcUART1('t');
					switch(*rbufptr++){
						case 's':{
							putcUART1('s');
							putcUART1(' ');
							// sts command received (start)
							if(*rbufptr++ == ' '){
								// sts parameters [1 or 2]
								if(*rbufptr == '1'){
									r = goodcmd;stepper_enable1=1;
								}else if(*rbufptr++ == '2'){
									r = goodcmd;stepper_enable2=1;
								}	
							}
						}break;
						case 'p':{
							putcUART1('p');
							// stp command received (stop)
							if(*rbufptr++ == ' '){
								// stp parameters [1 or 2]
								if(*rbufptr == '1'){
									r = goodcmd;stepper_enable1=0;
								}else if(*rbufptr++ == '2'){
									r = goodcmd;stepper_enable2=0;
								}	
							}
						}break;
						case 'd':{
							putcUART1('d');
							// std command received (disable)
							if(*rbufptr == ' '){
								*rbufptr++;
								// std parameters [1 or 2]
								if(*rbufptr == '1'){
									r = goodcmd;disable_stepper1();
								}else if(*rbufptr++ == '2'){
									r = goodcmd;disable_stepper2();
								}	
							}else{
								switch(*rbufptr++){
									// stdc command received (direction clockwise)
									case 'c':{
									 if(*rbufptr++ == ' '){
										// stdc parameters [1 or 2]
										if(*rbufptr == '1'){
											r = goodcmd;direction1=1;
										}else if(*rbufptr++ == '2'){
											r = goodcmd;direction2=1;
										}
									 }
									}break;	
									// stdh command received (direction counter clockwise)
									case 'h':{
									 if(*rbufptr++ == ' '){
										// stdh parameters [1 or 2]
										if(*rbufptr == '1'){
											r = goodcmd;direction1=0;
										}else if(*rbufptr++ == '2'){
											r = goodcmd;direction2=0;
										}
									 }
									}break;	
								}
							}
						}break;
						case 'm':{
							putcUART1('m');
								switch(*rbufptr++){
									// stmf command received (Full Step Mode)
									case 'f':{
									 if(*rbufptr++ == ' '){
										// stdc parameters [1 or 2]
										if(*rbufptr == '1'){
											r = goodcmd;mode_step1=1;
										}else if(*rbufptr++ == '2'){
											r = goodcmd;mode_step2=1;
										}
									 }
									}break;	
									// stmh command received (Half Step Mode)
									case 'h':{
									 if(*rbufptr++ == ' '){
										// stdh parameters [1 or 2]
										if(*rbufptr == '1'){
											r = goodcmd;mode_step1=0;
										}else if(*rbufptr++ == '2'){
											r = goodcmd;mode_step2=0;
										}
									 }
									}break;	
								}
						}break;
						case 'f':{
							putcUART1('f');
							r = goodcmd;
						}break;
						// invalid command
						default: r = evilcmd;break;
					}
				}
			break;
			/*** DC MOTOR COMMANDS ***/
			case 'm':
				putcUART1('m');
				if(*rbufptr++ == 'd'){
					putcUART1('d');
					if(*rbufptr++ == 'c'){
						putcUART1('c');
						switch(*rbufptr++){
							case 'r':{
								putcUART1('r');
								// mdcr command received (start)
								if(*rbufptr++ == ' '){
									// mdcr parameters []
									r = goodcmd; SetDCOC1PWM(*rbufptr);
								}
							}break;
							case 'p':{
								putcUART1('p');
								// mdcp command received (start)
								if(*rbufptr++ == ' '){
									// mdcp parameters []
									
								}
							}break;
							case 'i':{
								putcUART1('i');
								// mdci command received (start)
								if(*rbufptr++ == ' '){
									// mdci parameters []
									
								}
							}break;
							case 'd':{
								putcUART1('d');
								// mdcd command received (start)
								if(*rbufptr++ == ' '){
									// mdcd parameters []
									
								}
							}break;
						}
					}
				}
			break;
		}

		rbufptr	= (char*)bufstt;
		wbufptr = rbufptr;

		putsUART1((unsigned int *)r);
		while(BusyUART1());

		cmdissued = 0;
	}
}
Exemple #14
0
/* Finish a command packet by sending the checksum. */
void PushFooterAX() {
    PushUART1(~checksumAX);
    while (BusyUART1()); // UART1 Transmit Shift Register Empty
    SetRX();
}