void printMacAddress(void){ if(macFG==TRUE && UCA1BRW == 52){ //when mac address needed, will take from buffer, and print to screen. while(IOTBufferReceive[37]=='\0'); //wait until all received for(i=21;i<=28;i++){ //capture first half of MAC address firstMacBuff[i-21]=IOTBufferReceive[i]; } for(i=30;i<=37;i++){ //capture second half of MAC address secondMacBuff[i-30]=IOTBufferReceive[i]; } lcd_4line(); display_1="Mac Addr:"; macPtr=firstMacBuff; display_2=macPtr; macPtr=secondMacBuff; display_3=macPtr; display_4=" "; Display_Process(); macFG=FALSE; for(i=0;i<40;i++){ //clear IOT buffer so that junk isnt written to terminal after junk-->command IOTBufferReceive[i]='\0'; } IOTIndexReceive=0; } }
void parseIOTData(void){ for(i=0;i<=100-3;i++){ //search through received strings if(receiving[i]=='D'){ if(receiving[i+1]==':'){ if(receiving[i+2]=='2'){ Five_msec_Delay(1); if(receiving[i+3]=='1'){ display_4="Scanning"; Display_Process(); } else if(receiving[i+3]=='4'){ countP=0; //initialize period counter Five_msec_Delay(3); //short delay to allow all characters to enter j=0; for(i=17;receiving[i] != '\r';i++){ //go from beginning of address until 2nd period hit (2nd group) if(receiving[i] == '.'){ countP++; } if(countP >=2){ //stop copying to buffer if 2nd period has been hit (2nd "group" is copied) break; } firstipBuff[j]=receiving[i]; j++; } posL3=(10-j)/2; //center first half of ip address i++; //skip the period for(j=0;receiving[i] != '\r';i++){ secondipBuff[j]=receiving[i]; j++; } posL4=(10-j)/2; //center second half of ip address display_1=SSIDPtr; //from D:25 display_2=" ipaddr "; ipPtr=firstipBuff; display_3=ipPtr; ipPtr=secondipBuff; display_4=ipPtr; lcd_4line(); Display_Process(); Five_msec_Delay(600); //display IP for 3 seconds before screen gets cleared by menus posL1=0; //reset line positions back to beginning posL3=0; posL4=0; } else if(receiving[i+3]=='5'){ Five_msec_Delay(5);//short delay to allow all characters to enter for(i=32;receiving[i] != '\'' && i<=42 ;i++){ //copy SSID until end of quoted name or until max size for LCD is hit SSIDBuff[i-32]=receiving[i]; } SSIDPtr=SSIDBuff; posL1=(10-(i-32))/2; //center SSID //SSID is displayed in D:24 } } else if(receiving[i+2]=='3'){ //clear display once scanning is complete if(receiving[i+3]=='5'){ display_4=" "; Display_Process(); } } else if(receiving[i+2]=='4'){ //detect disassociation --> reassociate by resetting module if(receiving[i+3]=='1'){ uart_puts("AT+CFUN=1\r"); //Get SSID to ncsu PJOUT &= ~IOT_RESET; //reset IOT Five_msec_Delay(10); //wait 50 ms PJOUT |= IOT_RESET; //turn IOT back on (stop reset) } } } } } }
void Menu_Process() { // Handle Menu Display depending on user input switch (menuState) { case HOMEMENU: lcd_4line(); display_1 = home[HOMEITEMBEGIN]; display_2 = home[HOMEITEMFIRST]; display_3 = home[HOMEITEMSECOND]; display_4 = home[HOMEITEMTHIRD]; // get next menuIDX if (NEWHOMEIDX != menuIDX) { unselALL(); menuIDX = NEWHOMEIDX; sel(); } break; // IP Address case IPADDR: lcd_4line(); showIPAddress(); display_1 = "IP:"; display_2 = (char*)ip_address; display_3 = NEXTLINE((char*)ip_address); display_4 = ""; break; // HOME Config case HOMECONFIG: if (!HAVE_SET_UP_HOME) { startConfig(); configHome(); DONE(ONCE_HOME); endConfig(); } else deviceConfigured(); break; // NCSU Config case NCSUCONFIG: if (!HAVE_SET_UP_NCSU) { startConfig(); configNCSU(); DONE(ONCE_NCSU); endConfig(); } else deviceConfigured(); break; default: return; } }
void receive_command(char* command) { BufferString temp_command; temp_command.head = command; temp_command.offset = START_ZERO; if(compare(command, COMMAND_AKNOWLEDGE)) { uca0_transmit_message(AKNOWLEDGE_MESSAGE, NO_OFFSET); } else if(compare(command, SLOW_BAUD)) { uca1_set_current_baud(BAUD_115200); uca0_transmit_message(SLOW_BAUD_MESSAGE, NO_OFFSET); uca1_transmit_message(SLOW_BAUD_COMMAND, NO_OFFSET); five_msec_delay(SECOND + SECOND); uca1_transmit_message(SAVE_COMMAND, NO_OFFSET); five_msec_delay(SECOND); uca1_set_current_baud(BAUD_9600); uca1_transmit_message(RESET_COMMAND, NO_OFFSET); PJOUT &= ~IOT_RESET; five_msec_delay(QUARTER_SECOND); PJOUT |= IOT_RESET; uca0_transmit_message(RESET_MESSAGE, NO_OFFSET); five_msec_delay(QUARTER_SECOND); uca1_transmit_message(G_MAC_COMMAND, NO_OFFSET); } else if(compare(command, FAST_BAUD)) { uca1_set_current_baud(BAUD_9600); uca0_transmit_message(FAST_BAUD_MESSAGE, NO_OFFSET); uca1_transmit_message(FAST_BAUD_COMMAND, NO_OFFSET); five_msec_delay(SECOND + SECOND); uca1_transmit_message(SAVE_COMMAND, NO_OFFSET); five_msec_delay(SECOND); uca1_set_current_baud(BAUD_115200); uca1_transmit_message(RESET_COMMAND, NO_OFFSET); PJOUT &= ~IOT_RESET; five_msec_delay(QUARTER_SECOND); PJOUT |= IOT_RESET; uca0_transmit_message(RESET_MESSAGE, NO_OFFSET); } else if(compare(command, CONNECT_NCSU)) { uca0_transmit_message(CONNECT_NCSU_MESSAGE, NO_OFFSET); uca1_transmit_message(SET_SSID_NCSU_COMMAND, NO_OFFSET); uca1_transmit_message(GET_SSID_NCSU_COMMAND, NO_OFFSET); five_msec_delay(QUARTER_SECOND); uca1_transmit_message(SET_HOST_NAME_COMMAND, NO_OFFSET); uca1_transmit_message(GET_HOST_NAME_COMMAND, NO_OFFSET); five_msec_delay(QUARTER_SECOND); uca1_transmit_message(SET_PRIVACY_MODE_COMMAND, NO_OFFSET); uca1_transmit_message(GET_PRIVACY_MODE_COMMAND, NO_OFFSET); five_msec_delay(QUARTER_SECOND); uca1_transmit_message(SET_NETWORK_MODE_COMMAND, NO_OFFSET); uca1_transmit_message(GET_NETWORK_MODE_COMMAND, NO_OFFSET); uca1_transmit_message(SAVE_COMMAND, NO_OFFSET); uca1_transmit_message(GET_NETWORK_MODE_COMMAND, NO_OFFSET); uca1_transmit_message(SAVE_COMMAND, NO_OFFSET); five_msec_delay(QUARTER_SECOND); uca1_transmit_message(RESET_COMMAND, NO_OFFSET); PJOUT &= ~IOT_RESET; five_msec_delay(QUARTER_SECOND); PJOUT |= IOT_RESET; uca0_transmit_message(RESET_MESSAGE, NO_OFFSET); } else if(compare(command, GET_WIFI_STATUS)) { uca1_transmit_message(GET_WIFI_STATUS_COMMAND, NO_OFFSET); } else if(compare(command, GET_WIFI_IP)) { uca1_transmit_message(GET_WIFI_IP_COMMAND, NO_OFFSET); } // Forward Command else if(find(CAR_FORWARD, temp_command)) { display_1 = CLEAR_LINE; display_2 = command; display_3 = CLEAR_LINE; display_4 = CLEAR_LINE; set_motor_speed(R_FORWARD, (int) (MAX_SPEED * 0.87f)); set_motor_speed(L_FORWARD, MAX_SPEED); lcd_BIG_mid(); five_msec_delay(QUARTER_SECOND); Display_Process(); uca0_transmit_message("SUCCESS", NO_OFFSET); turn_on_motor(R_FORWARD); turn_on_motor(L_FORWARD); if(CH_TO_DIG(command[COMMAND_TIME_POS]) <= 9) five_msec_delay(SECOND * CH_TO_DIG(command[COMMAND_TIME_POS]) / COMMAND_TURN_RATIO); turn_off_motor(R_FORWARD); turn_off_motor(L_FORWARD); lcd_4line(); if(command[COMMAND_LENGTH] == COMMAND_CHAR_SYMBOL) receive_command(command + COMMAND_LENGTH); } // Backward Command else if(find(CAR_BACKWARD, temp_command)) { display_1 = CLEAR_LINE; display_2 = command; display_3 = CLEAR_LINE; display_4 = CLEAR_LINE; lcd_BIG_mid(); five_msec_delay(QUARTER_SECOND); Display_Process(); uca0_transmit_message("SUCCESS", NO_OFFSET); turn_on_motor(R_REVERSE); turn_on_motor(L_REVERSE); five_msec_delay(SECOND * CH_TO_DIG(command[COMMAND_TIME_POS])); turn_off_motor(R_REVERSE); turn_off_motor(L_REVERSE); lcd_4line(); if(command[COMMAND_LENGTH] == COMMAND_CHAR_SYMBOL) receive_command(command + COMMAND_LENGTH); } // Right Command else if(find(CAR_RIGHT, temp_command)) { display_1 = CLEAR_LINE; display_2 = command; display_3 = CLEAR_LINE; display_4 = CLEAR_LINE; lcd_BIG_mid(); five_msec_delay(QUARTER_SECOND); Display_Process(); uca0_transmit_message("SUCCESS", NO_OFFSET); turn_on_motor(R_REVERSE); turn_on_motor(L_FORWARD); if(CH_TO_DIG(command[COMMAND_TIME_POS]) <= 9) five_msec_delay(SECOND * CH_TO_DIG(command[COMMAND_TIME_POS]) / COMMAND_TURN_RATIO); turn_off_motor(R_REVERSE); turn_off_motor(L_FORWARD); lcd_4line(); if(command[COMMAND_LENGTH] == COMMAND_CHAR_SYMBOL) receive_command(command + COMMAND_LENGTH); } // Left Command else if(find(CAR_LEFT, temp_command)) { display_1 = CLEAR_LINE; display_2 = command; display_3 = CLEAR_LINE; display_4 = CLEAR_LINE; lcd_BIG_mid(); five_msec_delay(QUARTER_SECOND); Display_Process(); uca0_transmit_message("SUCCESS", NO_OFFSET); turn_on_motor(R_FORWARD); turn_on_motor(L_REVERSE); if(CH_TO_DIG(command[COMMAND_TIME_POS]) <= 9) five_msec_delay(SECOND * CH_TO_DIG(command[COMMAND_TIME_POS]) / COMMAND_TURN_RATIO); turn_off_motor(R_FORWARD); turn_off_motor(L_REVERSE); lcd_4line(); if(command[COMMAND_LENGTH] == COMMAND_CHAR_SYMBOL) receive_command(command + COMMAND_LENGTH); } else if(find(CAR_LINE_FOLLOW, temp_command)) { is_follow_running = is_follow_running ? FALSE : TRUE; } }