//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); }
//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 }
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()); }
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 }
/* 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); }
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"); }
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"); }
/** * 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'); } }
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()); }
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); }
// 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 } }
/* Send command to GSM via UART */ void gsmSendCommand(char *str) { while(BusyUART1()); putsUART1((unsigned int*)str); while(BusyUART3()); putsUART3((unsigned int*)str); }
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; } }
/* Finish a command packet by sending the checksum. */ void PushFooterAX() { PushUART1(~checksumAX); while (BusyUART1()); // UART1 Transmit Shift Register Empty SetRX(); }