Kim Youngsik / Mbed 2 deprecated 0ROBOFRIEN_FCC_v1_12

Dependencies:   mbed BufferedSerial ConfigFile

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ROBOFRIEN_GUI.cpp Source File

ROBOFRIEN_GUI.cpp

00001 #include "ROBOFRIEN_GUI.h"
00002 #include "GUI_Config.h"
00003 #include "eeprom.h"
00004 #include "BufferedSerial.h"
00005 
00006 #define PC_DEBUG        0
00007 
00008 #if PC_DEBUG
00009     Serial pc(USBTX,USBRX);
00010 #else
00011     BufferedSerial pc(p9, p10);      // tx, rx
00012 #endif
00013 
00014 
00015 uint8_t ISR_Modem_ID_Dept, ISR_Modem_ID_Dest;
00016 uint8_t ISR_Modem_DC_DPN, ISR_Modem_DC_DL;
00017 uint8_t ISR_Modem_DATA[256];
00018 uint8_t ISR_Modem_DC_REQUEST;
00019 uint16_t ISR_Modem_CHKSUM;
00020 uint8_t pc_isr_cnt;
00021 uint8_t isr_modem_data_cnt = 0;
00022 uint8_t pc_parsing_bool = false;
00023 bool pc_Start_Check;
00024 uint8_t model_type1;
00025 uint16_t model_type2;
00026 uint8_t pc_buffer[256],ex_pc_raw_buffer,pc_raw_buffer[256];
00027 uint8_t pc_buffer_cnt=0;
00028 
00029 
00030 void ROBOFRIEN_GUI::pc_rx_update(){
00031     while (pc.readable()){
00032         pc_buffer[1] = pc_buffer[0];
00033         pc_buffer[0] = pc.getc();
00034         // Check SOF //
00035         if (( pc_buffer[1] == 254) & (pc_buffer[0] == 254)){
00036                pc_Start_Check = true;
00037                pc_isr_cnt = 0;
00038         }
00039         else if(pc_Start_Check == true){
00040             if(pc_isr_cnt <= 4){
00041                 switch(pc_isr_cnt){
00042                     case 0: ISR_Modem_ID_Dept = pc_buffer[0]; break;
00043                     case 1: ISR_Modem_ID_Dest = pc_buffer[0]; break;
00044                     case 2: ISR_Modem_DC_REQUEST = pc_buffer[0]; break;
00045                     case 3: ISR_Modem_DC_DPN = pc_buffer[0]; break;
00046                     case 4: ISR_Modem_DC_DL = pc_buffer[0]; isr_modem_data_cnt = 0; break;
00047                 }   
00048             }
00049             else if( pc_isr_cnt > 4 ){
00050                 if ((ISR_Modem_DC_DL >= 1) & (pc_isr_cnt <= (4 + ISR_Modem_DC_DL))) {
00051                     ISR_Modem_DATA[isr_modem_data_cnt] = pc_buffer[0];
00052                     isr_modem_data_cnt++;
00053                 }
00054                 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2) ){
00055                     ISR_Modem_CHKSUM = ((uint16_t)pc_buffer[1] * 256 + pc_buffer[0]);
00056                 }
00057                 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2 + 2) ){
00058                     if((pc_buffer[1] == 255) & (pc_buffer[0] == 255) ){
00059                         pc_Start_Check = false;
00060                         pc_parsing_bool = true;   
00061                     }
00062                 }
00063             }
00064             pc_isr_cnt ++;
00065         }
00066     }    
00067 }
00068 
00069 uint8_t Modem_ID_Dest;
00070 uint8_t Modem_ID_Dept;
00071 uint8_t Modem_DC_DPN;
00072 uint8_t Modem_DC_DL;
00073 uint8_t Modem_DATA[256];
00074 uint8_t Modem_DC_REQUEST;
00075 
00076 bool ROBOFRIEN_GUI::rx_bool(){
00077     if(pc_parsing_bool == true){
00078         pc_parsing_bool = false;
00079         int cal_chksum = 0;
00080         for(int i=0; i< ISR_Modem_DC_DL; i++){
00081             Modem_DATA[i] = ISR_Modem_DATA[i];
00082             cal_chksum +=  ISR_Modem_DATA[i];
00083         }
00084         if (ISR_Modem_CHKSUM == cal_chksum){
00085             return true;   
00086         }else{
00087             return false;   
00088         }
00089     }
00090     else{
00091         return false;   
00092     }
00093 }
00094 void ROBOFRIEN_GUI::Init(){    
00095     pc.baud(115200);
00096     eeprom_init();
00097     /// EEPROM R/W ////
00098     // -------- MODEL -------------- //
00099     model_type1 = eeprom_read(EEPROM_MODEL_TYPE1);
00100     model_type2 = (int)eeprom_read(EEPROM_MODEL_TYPE2_UP) * 256 + eeprom_read(EEPROM_MODEL_TYPE2_DOWN);
00101 
00102     // -------- INPUT - CAP ------------ //
00103     cap_min[0] = (int16_t)eeprom_read(EEPROM_RECV_MIN_1) - 127;
00104     cap_min[1] = (int16_t)eeprom_read(EEPROM_RECV_MIN_2) - 127;
00105     cap_min[2] = (int16_t)eeprom_read(EEPROM_RECV_MIN_3) - 127;
00106     cap_min[3] = (int16_t)eeprom_read(EEPROM_RECV_MIN_4) - 127;
00107     cap_min[4] = (int16_t)eeprom_read(EEPROM_RECV_MIN_5) - 127;
00108     cap_min[5] = (int16_t)eeprom_read(EEPROM_RECV_MIN_6) - 127;
00109     cap_min[6] = (int16_t)eeprom_read(EEPROM_RECV_MIN_7) - 127;
00110     cap_min[7] = (int16_t)eeprom_read(EEPROM_RECV_MIN_8) - 127;
00111 
00112     cap_neu[0] = (int16_t)eeprom_read(EEPROM_RECV_NEU_1) - 127;
00113     cap_neu[1] = (int16_t)eeprom_read(EEPROM_RECV_NEU_2) - 127;
00114     cap_neu[2] = (int16_t)eeprom_read(EEPROM_RECV_NEU_3) - 127;
00115     cap_neu[3] = (int16_t)eeprom_read(EEPROM_RECV_NEU_4) - 127;
00116     cap_neu[4] = (int16_t)eeprom_read(EEPROM_RECV_NEU_5) - 127;
00117     cap_neu[5] = (int16_t)eeprom_read(EEPROM_RECV_NEU_6) - 127;
00118     cap_neu[6] = (int16_t)eeprom_read(EEPROM_RECV_NEU_7) - 127;
00119     cap_neu[7] = (int16_t)eeprom_read(EEPROM_RECV_NEU_8) - 127;
00120 
00121     cap_max[0] = (int16_t)eeprom_read(EEPROM_RECV_MAX_1) - 127;
00122     cap_max[1] = (int16_t)eeprom_read(EEPROM_RECV_MAX_2) - 127;
00123     cap_max[2] = (int16_t)eeprom_read(EEPROM_RECV_MAX_3) - 127;
00124     cap_max[3] = (int16_t)eeprom_read(EEPROM_RECV_MAX_4) - 127;
00125     cap_max[4] = (int16_t)eeprom_read(EEPROM_RECV_MAX_5) - 127;
00126     cap_max[5] = (int16_t)eeprom_read(EEPROM_RECV_MAX_6) - 127;
00127     cap_max[6] = (int16_t)eeprom_read(EEPROM_RECV_MAX_7) - 127;
00128     cap_max[7] = (int16_t)eeprom_read(EEPROM_RECV_MAX_8) - 127;
00129 
00130     // --------- OUTPUT - MOTOR ----------- //
00131     motor_min[0] = (int)eeprom_read(EEPROM_MOTOR_MIN_1_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_1_DOWN);
00132     motor_min[1] = (int)eeprom_read(EEPROM_MOTOR_MIN_2_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_2_DOWN);
00133     motor_min[2] = (int)eeprom_read(EEPROM_MOTOR_MIN_3_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_3_DOWN);
00134     motor_min[3] = (int)eeprom_read(EEPROM_MOTOR_MIN_4_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_4_DOWN);
00135     motor_min[4] = (int)eeprom_read(EEPROM_MOTOR_MIN_5_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_5_DOWN);
00136     motor_min[5] = (int)eeprom_read(EEPROM_MOTOR_MIN_6_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_6_DOWN);
00137 
00138     // --------- OUTPUT - LED ------------ //
00139     headlight_period = eeprom_read(EEPROM_HEADLIGHT_PERIOD);
00140     headlight_dutyrate = eeprom_read(EEPROM_HEADLIGHT_DUTYRATE);
00141     sidelight_period = eeprom_read(EEPROM_SIDELIGHT_PERIOD);
00142     sidelight_dutyrate = eeprom_read(EEPROM_SIDELIGHT_DUTYRATE);
00143 
00144     // --------- GAIN - LIMIT ANGLE ------- //
00145     limit_rollx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_DOWN) - 32767;
00146     limit_pitchx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_DOWN) - 32767;
00147     limit_roll_ratex100 = (int)eeprom_read(EEPROM_LIMIT_RATE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_ROLL_DOWN) - 32767;
00148     limit_pitch_ratex100 = (int)eeprom_read(EEPROM_LIMIT_RATE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_PITCH_DOWN) - 32767;
00149     limit_yaw_ratex100 = (int)eeprom_read(EEPROM_LIMIT_RATE_YAW_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_YAW_DOWN) - 32767;
00150 
00151     // --------- GAIN - GAIN DATA --------- //
00152     for (int i = 0; i < 20; i++) {
00153         gain_px100[i] = (int)eeprom_read(EEPROM_GAIN_P_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_P_DOWN[i]);
00154         gain_dx100[i] = (int)eeprom_read(EEPROM_GAIN_D_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_D_DOWN[i]);
00155         gain_ix100[i] = (int)eeprom_read(EEPROM_GAIN_I_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_I_DOWN[i]);
00156     }
00157     cal_accel_bias[0] = (((int)eeprom_read(EEPROM_AHRS_ROLL_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_ROLL_GAP_DOWN))  - 32767)/10000.0;
00158     cal_accel_bias[1] = (((int)eeprom_read(EEPROM_AHRS_PITCH_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_PITCH_GAP_DOWN))  - 32767)/10000.0;
00159     cal_accel_bias[2] = (((int)eeprom_read(EEPROM_AHRS_YAW_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_YAW_GAP_DOWN))  - 32767)/10000.0;
00160 
00161     // --------- Sensor ----------- ///
00162     mag_x_avg = (float)eeprom_read(EEPROM_AHRS_YAW_X_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_X_GAP_2) - 32767 ;
00163     mag_y_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Y_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Y_GAP_2) - 32767 ;
00164     mag_z_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Z_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Z_GAP_2) - 32767 ;
00165 
00166     declination_angle = (float)(((signed long)eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_UP) * 256 + eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_DOWN))-18000)/100.0;
00167 }
00168 
00169 void trans_configuration_data(int a, int b, int c);
00170 void trans_empty_data(int a, int b);
00171 void trans_flight_data(int a, int b);
00172 void ROBOFRIEN_GUI::Refresh(){
00173     Modem_ID_Dept = ISR_Modem_ID_Dept;
00174     Modem_ID_Dest = ISR_Modem_ID_Dest;
00175     Modem_DC_DPN = ISR_Modem_DC_DPN;
00176     Modem_DC_DL = ISR_Modem_DC_DL;
00177     Modem_DC_REQUEST = ISR_Modem_DC_REQUEST;
00178     DPN_Info = Modem_DC_DPN;
00179     if ((Modem_ID_Dept == 255)&(Modem_ID_Dest == 0)) {
00180         if (Modem_DC_REQUEST == 1) {
00181             /// REQUST - READ FROM FCS ///
00182             if (Modem_DC_DPN == 0) {
00183                 /// FLIGHT DATA ///
00184                 if( (Modem_DATA[1] & 0b00000001) == 0b00000001)button[0] = !button[0];
00185                 if( (Modem_DATA[1] & 0b00000010) == 0b00000010)button[1] = !button[1];
00186                 if( (Modem_DATA[1] & 0b00000100) == 0b00000100)button[2] = !button[2];
00187                 if( (Modem_DATA[1] & 0b00001000) == 0b00001000)button[3] = !button[3];
00188                 if( (Modem_DATA[1] & 0b00010000) == 0b00010000)button[4] = !button[4];
00189                 // Home Point //
00190                 if( Modem_DATA[0] == 0){
00191                     Controller_Joystick[0]  = (Modem_DATA[2]*256 + Modem_DATA[3])-32767;
00192                     Controller_Joystick[1]  = (Modem_DATA[4]*256 + Modem_DATA[5])-32767;
00193                     Controller_Joystick[2]  = (Modem_DATA[6]*256 + Modem_DATA[7])-32767;
00194                     Controller_Joystick[3]  = (Modem_DATA[8]*256 + Modem_DATA[9])-32767;
00195                     Gimbal_Joystick[0]      = (Modem_DATA[10]*256 + Modem_DATA[11])-32767;
00196                     Gimbal_Joystick[1]      = (Modem_DATA[12]*256 + Modem_DATA[13])-32767;
00197                     Gimbal_Joystick[2]      = (Modem_DATA[14]*256 + Modem_DATA[15])-32767;
00198                 }else if(Modem_DATA[0] <= 20){
00199                     Marker_Mode[Modem_DATA[0]-1] = Modem_DATA[2];
00200                     Marker_Lat[Modem_DATA[0]-1] = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
00201                     Marker_Lng[Modem_DATA[0]-1] = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
00202                     Marker_Alt[Modem_DATA[0]-1] = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;                    
00203                     Marker_Speed[Modem_DATA[0]-1] = (long)Modem_DATA[13] * 256 + Modem_DATA[14];
00204                 }else if( Modem_DATA[0] == 21){
00205                     Homepoint_Lat = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
00206                     Homepoint_Lng = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
00207                     Homepoint_Alt = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;
00208                 }
00209 //                trans_flight_data(TO_GCS, Modem_DC_DPN);
00210             }
00211             else {
00212 //                trans_configuration_data(TO_GCS, Modem_DC_DPN, Modem_DATA[0]);
00213             }
00214         }
00215         else {
00216             /// NOT REQUEST - WRITE TO FCS ///
00217 //                trans_empty_data(TO_GCS, Modem_DC_DPN);
00218                 switch (Modem_DC_DPN) { // Check DPN //
00219                 case 0:
00220                     break;
00221                 case 1:     /// Modem ///
00222                     model_type1 = Modem_DATA[0];
00223                     model_type2 = (uint16_t)Modem_DATA[1] * 256 + Modem_DATA[2];
00224                     eeprom_write(EEPROM_MODEL_TYPE1, (int)model_type1);
00225                     eeprom_write(EEPROM_MODEL_TYPE2_UP, (int)model_type2 / 256);
00226                     eeprom_write(EEPROM_MODEL_TYPE2_DOWN, (int)model_type2 % 256);
00227                     eeprom_refresh_bool = true;
00228                     break;
00229                 case 3:     /// RC Receiver ///
00230                     if ((Modem_DATA[0] >= 1) & (Modem_DATA[0] <= 8)) {
00231                         cap_min[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[5] - 127;
00232                         cap_neu[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[6] - 127;
00233                         cap_max[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[7] - 127;
00234                         switch (Modem_DATA[0]) {
00235                         case 1:
00236                             eeprom_write(EEPROM_RECV_MIN_1, cap_min[Modem_DATA[0] - 1] + 127);
00237                             eeprom_write(EEPROM_RECV_NEU_1, cap_neu[Modem_DATA[0] - 1] + 127);
00238                             eeprom_write(EEPROM_RECV_MAX_1, cap_max[Modem_DATA[0] - 1] + 127);
00239                             break;
00240                         case 2:
00241                             eeprom_write(EEPROM_RECV_MIN_2, cap_min[Modem_DATA[0] - 1] + 127);
00242                             eeprom_write(EEPROM_RECV_NEU_2, cap_neu[Modem_DATA[0] - 1] + 127);
00243                             eeprom_write(EEPROM_RECV_MAX_2, cap_max[Modem_DATA[0] - 1] + 127);
00244                             break;
00245                         case 3:
00246                             eeprom_write(EEPROM_RECV_MIN_3, cap_min[Modem_DATA[0] - 1] + 127);
00247                             eeprom_write(EEPROM_RECV_NEU_3, cap_neu[Modem_DATA[0] - 1] + 127);
00248                             eeprom_write(EEPROM_RECV_MAX_3, cap_max[Modem_DATA[0] - 1] + 127);
00249                             break;
00250                         case 4:
00251                             eeprom_write(EEPROM_RECV_MIN_4, cap_min[Modem_DATA[0] - 1] + 127);
00252                             eeprom_write(EEPROM_RECV_NEU_4, cap_neu[Modem_DATA[0] - 1] + 127);
00253                             eeprom_write(EEPROM_RECV_MAX_4, cap_max[Modem_DATA[0] - 1] + 127);
00254                             break;
00255                         case 5:
00256                             eeprom_write(EEPROM_RECV_MIN_5, cap_min[Modem_DATA[0] - 1] + 127);
00257                             eeprom_write(EEPROM_RECV_NEU_5, cap_neu[Modem_DATA[0] - 1] + 127);
00258                             eeprom_write(EEPROM_RECV_MAX_5, cap_max[Modem_DATA[0] - 1] + 127);
00259                             break;
00260                         case 6:
00261                             eeprom_write(EEPROM_RECV_MIN_6, cap_min[Modem_DATA[0] - 1] + 127);
00262                             eeprom_write(EEPROM_RECV_NEU_6, cap_neu[Modem_DATA[0] - 1] + 127);
00263                             eeprom_write(EEPROM_RECV_MAX_6, cap_max[Modem_DATA[0] - 1] + 127);
00264                             break;
00265                         case 7:
00266                             eeprom_write(EEPROM_RECV_MIN_7, cap_min[Modem_DATA[0] - 1] + 127);
00267                             eeprom_write(EEPROM_RECV_NEU_7, cap_neu[Modem_DATA[0] - 1] + 127);
00268                             eeprom_write(EEPROM_RECV_MAX_7, cap_max[Modem_DATA[0] - 1] + 127);
00269                             break;
00270                         case 8:
00271                             eeprom_write(EEPROM_RECV_MIN_8, cap_min[Modem_DATA[0] - 1] + 127);
00272                             eeprom_write(EEPROM_RECV_NEU_8, cap_neu[Modem_DATA[0] - 1] + 127);
00273                             eeprom_write(EEPROM_RECV_MAX_8, cap_max[Modem_DATA[0] - 1] + 127);
00274                             break;
00275                         }
00276                         eeprom_refresh_bool = true;
00277                     }
00278                     break;
00279                 case 4:     // Motor - OUTPUT //
00280                     pwm_info[0] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
00281                     pwm_info[1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
00282                     pwm_info[2] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
00283                     pwm_info[3] = (int)Modem_DATA[7] * 256 + Modem_DATA[8];
00284                     pwm_info[4] = (int)Modem_DATA[9] * 256 + Modem_DATA[10];
00285                     pwm_info[5] = (int)Modem_DATA[11] * 256 + Modem_DATA[12];
00286                     switch (Modem_DATA[0]) {
00287                     case 1:
00288                         motor_min[0] = pwm_info[0];
00289                         eeprom_write(EEPROM_MOTOR_MIN_1_UP, motor_min[0] / 256);
00290                         eeprom_write(EEPROM_MOTOR_MIN_1_DOWN, motor_min[0] % 256);
00291                         eeprom_refresh_bool = true;
00292                         break;
00293                     case 2:
00294                         motor_min[1] = pwm_info[1];
00295                         eeprom_write(EEPROM_MOTOR_MIN_2_UP, motor_min[1] / 256);
00296                         eeprom_write(EEPROM_MOTOR_MIN_2_DOWN, motor_min[1] % 256);
00297                         eeprom_refresh_bool = true;
00298                         break;
00299                     case 3:
00300                         motor_min[2] = pwm_info[2];
00301                         eeprom_write(EEPROM_MOTOR_MIN_3_UP, motor_min[2] / 256);
00302                         eeprom_write(EEPROM_MOTOR_MIN_3_DOWN, motor_min[2] % 256);
00303                         eeprom_refresh_bool = true;
00304                         break;
00305                     case 4:
00306                         motor_min[3] = pwm_info[3];
00307                         eeprom_write(EEPROM_MOTOR_MIN_4_UP, motor_min[3] / 256);
00308                         eeprom_write(EEPROM_MOTOR_MIN_4_DOWN, motor_min[3] % 256);
00309                         eeprom_refresh_bool = true;
00310                         break;
00311                     case 5:
00312                         motor_min[4] = pwm_info[4];
00313                         eeprom_write(EEPROM_MOTOR_MIN_5_UP, motor_min[4] / 256);
00314                         eeprom_write(EEPROM_MOTOR_MIN_5_DOWN, motor_min[4] % 256);
00315                         eeprom_refresh_bool = true;
00316                         break;
00317                     case 6:
00318                         motor_min[5] = pwm_info[5];
00319                         eeprom_write(EEPROM_MOTOR_MIN_6_UP, motor_min[5] / 256);
00320                         eeprom_write(EEPROM_MOTOR_MIN_6_DOWN, motor_min[5] % 256);
00321                         eeprom_refresh_bool = true;
00322                         break;
00323                     }
00324                     break;
00325                 case 5:     // LED - OUTPUT //
00326                     headlight_period = Modem_DATA[0];
00327                     headlight_dutyrate = Modem_DATA[1];
00328                     sidelight_period = Modem_DATA[2];
00329                     sidelight_dutyrate = Modem_DATA[3];
00330                     eeprom_write(EEPROM_HEADLIGHT_PERIOD, headlight_period);
00331                     eeprom_write(EEPROM_HEADLIGHT_DUTYRATE, headlight_dutyrate);
00332                     eeprom_write(EEPROM_SIDELIGHT_PERIOD, sidelight_period);
00333                     eeprom_write(EEPROM_SIDELIGHT_DUTYRATE, sidelight_dutyrate);
00334                     eeprom_refresh_bool = true;
00335                     break;
00336                 case 6:     // AHRS - ROLL , Pitch //
00337                             /// Attitude ///
00338                     if (Modem_DATA[0] == 1) {
00339                         attitude_configuration_bool = true;
00340                     }
00341                     else {
00342                         attitude_configuration_bool = false;
00343                     }
00344                     /// Compass ///
00345                     if (Modem_DATA[7] == 1) {
00346                         Compass_Calibration_Mode = Modem_DATA[7];
00347                     }
00348                     else if (Modem_DATA[7] == 2) {
00349                         Compass_Calibration_Mode = Modem_DATA[7];
00350                     }
00351                     else if(Modem_DATA[7] == 3){
00352                         Compass_Calibration_Mode = Modem_DATA[7];
00353                         declination_angle = (float)(((int)Modem_DATA[10] * 256 + Modem_DATA[11]) - 18000)/100.0;
00354                         eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_UP, (int)((declination_angle+180)*100)/256);
00355                         eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_DOWN, (int)((declination_angle+180)*100)%256);
00356                         eeprom_refresh_bool = true;
00357                     }
00358                     break;
00359                 case 7:     // Limit Angle //
00360                     limit_rollx100 = ((int)Modem_DATA[0] * 256 + Modem_DATA[1]) - 32767;
00361                     limit_pitchx100 = ((int)Modem_DATA[2] * 256 + Modem_DATA[3]) - 32767;
00362                     limit_roll_ratex100 = ((int)Modem_DATA[4] * 256 + Modem_DATA[5]) - 32767;
00363                     limit_pitch_ratex100 = ((int)Modem_DATA[6] * 256 + Modem_DATA[7]) - 32767;
00364                     limit_yaw_ratex100 = ((int)Modem_DATA[8] * 256 + Modem_DATA[9]) - 32767;
00365                     eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_UP, (limit_rollx100 + 32767) / 256);
00366                     eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_DOWN, (limit_rollx100 + 32767) % 256);
00367                     eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_UP, (limit_pitchx100 + 32767) / 256);
00368                     eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_DOWN, (limit_pitchx100 + 32767) % 256);
00369                     eeprom_write(EEPROM_LIMIT_RATE_ROLL_UP, (limit_roll_ratex100 + 32767) / 256);
00370                     eeprom_write(EEPROM_LIMIT_RATE_ROLL_DOWN, (limit_roll_ratex100 + 32767) % 256);
00371                     eeprom_write(EEPROM_LIMIT_RATE_PITCH_UP, (limit_pitch_ratex100 + 32767) / 256);
00372                     eeprom_write(EEPROM_LIMIT_RATE_PITCH_DOWN, (limit_pitch_ratex100 + 32767) % 256);
00373                     eeprom_write(EEPROM_LIMIT_RATE_YAW_UP, (limit_yaw_ratex100 + 32767) / 256);
00374                     eeprom_write(EEPROM_LIMIT_RATE_YAW_DOWN, (limit_yaw_ratex100 + 32767) % 256);
00375                     eeprom_refresh_bool = true;
00376                     break;
00377                 case 8:
00378                     int gain_number = Modem_DATA[0];
00379                     if ((gain_number >= 1) & (gain_number <= 20)) {
00380                         gain_px100[gain_number - 1] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
00381                         gain_dx100[gain_number - 1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
00382                         gain_ix100[gain_number - 1] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
00383                         eeprom_write(EEPROM_GAIN_P_UP[gain_number - 1], gain_px100[gain_number - 1] / 256);
00384                         eeprom_write(EEPROM_GAIN_P_DOWN[gain_number - 1], gain_px100[gain_number - 1] % 256);
00385                         eeprom_write(EEPROM_GAIN_D_UP[gain_number - 1], gain_dx100[gain_number - 1] / 256);
00386                         eeprom_write(EEPROM_GAIN_D_DOWN[gain_number - 1], gain_dx100[gain_number - 1] % 256);
00387                         eeprom_write(EEPROM_GAIN_I_UP[gain_number - 1], gain_ix100[gain_number - 1] / 256);
00388                         eeprom_write(EEPROM_GAIN_I_DOWN[gain_number - 1], gain_ix100[gain_number - 1] % 256);    
00389                         if(gain_number == 20)eeprom_refresh_bool = true;
00390                     }
00391                     break;
00392             }
00393 
00394         }
00395     }
00396 
00397 }
00398 
00399 void ROBOFRIEN_GUI::Trans(){
00400     if ((Modem_ID_Dept == 255)&(Modem_ID_Dest == 0)) {
00401         if (Modem_DC_REQUEST == 1) {
00402             /// REQUST - READ FROM FCS ///
00403             if (Modem_DC_DPN == 0) {
00404                 trans_flight_data(TO_GCS, Modem_DC_DPN);
00405             }
00406             else {
00407                 trans_configuration_data(TO_GCS, Modem_DC_DPN, Modem_DATA[0]);
00408             }
00409         }
00410         else {
00411             /// NOT REQUEST - WRITE TO FCS ///
00412                 trans_empty_data(TO_GCS, Modem_DC_DPN);
00413         }
00414     }
00415 }
00416 void ROBOFRIEN_GUI::trans_empty_data(int id_dest, int data_parse_num) {
00417     uint8_t Packet_SOF[2] = { 254,254 };
00418     uint8_t Packet_Identifier[2];
00419     uint8_t Packet_DC[3];
00420     uint8_t Packet_CHKSUM[2];
00421     uint8_t Packet_EOF[2] = { 255,255 };
00422     // Identifier //
00423     Packet_Identifier[0] = 0;
00424     Packet_Identifier[1] = id_dest;
00425     // Data Control //
00426     Packet_DC[0] = 0;
00427     Packet_DC[1] = (uint8_t)data_parse_num;
00428     int data_length = 0;
00429     Packet_DC[2] = (uint8_t)data_length;
00430 
00431     // CHKSUM //
00432     unsigned int data_checksum = 0;
00433     Packet_CHKSUM[0] = data_checksum / 256;
00434     Packet_CHKSUM[1] = data_checksum % 256;
00435 
00436     // Each Buffer Integrate to modem_buffer ///
00437     uint8_t modem_buffer[11];
00438     modem_buffer[0] = Packet_SOF[0];        modem_buffer[1] = Packet_SOF[1];
00439     modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
00440     modem_buffer[4] = Packet_DC[0];         modem_buffer[5] = Packet_DC[1];         modem_buffer[6] = Packet_DC[2];
00441     modem_buffer[7] = Packet_CHKSUM[0];
00442     modem_buffer[8] = Packet_CHKSUM[1];
00443     modem_buffer[9] = Packet_EOF[0];
00444     modem_buffer[10] = Packet_EOF[1];
00445     TRANS_BUFFER_BUSY = true;
00446     for (int i = 0; i <= 10; i++) {
00447         TRANS_BUF[i] = modem_buffer[i];
00448         TRANS_BUF_LEN = 11;
00449 //        pc.putc(modem_buffer[i]);
00450     }
00451 }
00452 
00453 void ROBOFRIEN_GUI::trans_configuration_data(int id_dest, int data_parse_num, int data_parse_detail_num) {
00454 
00455     uint8_t Packet_SOF[2] = { 254,254 };
00456     uint8_t Packet_Identifier[2];
00457     uint8_t Packet_DC[3];
00458     uint8_t Packet_DATA[16];
00459     uint8_t Packet_CHKSUM[2];
00460     uint8_t Packet_EOF[2] = { 255,255 };
00461     // Identifier //
00462     Packet_Identifier[0] = 0;
00463     Packet_Identifier[1] = id_dest;
00464     // Data Control //
00465     Packet_DC[0] = 0;
00466     Packet_DC[1] = (uint8_t)data_parse_num;
00467     int data_length = 16;
00468     Packet_DC[2] = (uint8_t)data_length;
00469     // DATA  //
00470     switch (data_parse_num) {
00471     case 0:
00472         //// Empty Data ////
00473         for (int i = 0; i <= 15; i++) {
00474             Packet_DATA[i] = 0;
00475         }
00476         break;
00477     case 1:
00478         //// MODEM ////
00479         Packet_DATA[0] = model_type1;
00480         Packet_DATA[1] = model_type2 / 256; Packet_DATA[2] = model_type2 % 256;
00481         for (int i = 3; i <= 15; i++) Packet_DATA[i] = 0;
00482         break;
00483     case 2:
00484         //// Firmware ////
00485         for (int i = 0; i <= 13; i++) {
00486             Packet_DATA[i] = MODEL_INFO[i];
00487         }
00488         float firmware_info;
00489         firmware_info = FIRMWARE_INFO;
00490         Packet_DATA[14] = (uint8_t)(firmware_info * 100 / 256);    Packet_DATA[15] = (uint8_t)((uint32_t)(firmware_info * 100) % 256);
00491         break;
00492     case 3:
00493         //// RC Receiver ////
00494         if (data_parse_detail_num == 0) {
00495             Packet_DATA[0] = data_parse_detail_num; Packet_DATA[1] = 0; Packet_DATA[2] = 0; Packet_DATA[3] = 0; Packet_DATA[4] = 0; Packet_DATA[5] = 0; Packet_DATA[6] = 0; Packet_DATA[7] = 0;
00496         }
00497         else if(data_parse_detail_num <= 8){
00498             Packet_DATA[0] = data_parse_detail_num; Packet_DATA[1] = cap_min[data_parse_detail_num - 1];    Packet_DATA[2] = cap_neu[data_parse_detail_num - 1];    Packet_DATA[3] = cap_max[data_parse_detail_num - 1];    Packet_DATA[4] = 0;
00499             Packet_DATA[5] = cap_min[data_parse_detail_num - 1] + 127;  Packet_DATA[6] = cap_neu[data_parse_detail_num - 1] + 127; Packet_DATA[7] = cap_max[data_parse_detail_num - 1] + 127;
00500         }
00501         else {
00502             for (int i = 0; i <= 7; i++) Packet_DATA[i] = 0;
00503         }
00504         Packet_DATA[8] = raw_cap[0] + 127;  Packet_DATA[9] = raw_cap[1] + 127;  Packet_DATA[10] = raw_cap[2] + 127; Packet_DATA[11] = raw_cap[3] + 127; Packet_DATA[12] = raw_cap[4] + 127; Packet_DATA[13] = raw_cap[5] + 127; Packet_DATA[14] = raw_cap[6] + 127; Packet_DATA[15] = raw_cap[7] + 127;
00505         break;
00506     case 4:
00507         for(int i=0; i<16; i++) Packet_DATA[i] = 0;
00508         break;
00509     case 5:
00510         /////// LED //////////
00511         Packet_DATA[0] = headlight_period;  Packet_DATA[1] = headlight_dutyrate;    Packet_DATA[2] = sidelight_period;  Packet_DATA[3] = sidelight_dutyrate;
00512         break;
00513     case 6:
00514         //// AHRS - Roll , Pitch ///
00515         Packet_DATA[0] = 0;
00516         Packet_DATA[1] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) / 256);
00517         Packet_DATA[2] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) % 256);
00518         Packet_DATA[3] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) / 256);
00519         Packet_DATA[4] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) % 256);
00520         //// AHRS - Yaw ///
00521         Packet_DATA[5] = 0; Packet_DATA[6] = 0;
00522         Packet_DATA[7] = (uint8_t)Compass_Calibration_Mode;
00523         Packet_DATA[8] = (uint8_t)((unsigned long)(yawx100) / 256);
00524         Packet_DATA[9] = (uint8_t)((unsigned long)(yawx100) % 256);
00525         Packet_DATA[10] = (uint8_t)((long)((declination_angle + 180) * 100)/256);
00526         Packet_DATA[11] = (uint8_t)((long)((declination_angle + 180) * 100)%256);
00527         for (int i = 12; i <= 15; i++)Packet_DATA[i] = 0;
00528         break;
00529     case 7:
00530         /// Limit ANGLE ////
00531         Packet_DATA[0] = (limit_rollx100 + 32767) / 256;
00532         Packet_DATA[1] = (limit_rollx100 + 32767) % 256;
00533         Packet_DATA[2] = (limit_pitchx100 + 32767) / 256;
00534         Packet_DATA[3] = (limit_pitchx100 + 32767) % 256;
00535         Packet_DATA[4] = (limit_roll_ratex100 + 32767) / 256;
00536         Packet_DATA[5] = (limit_roll_ratex100 + 32767) % 256;
00537         Packet_DATA[6] = (limit_pitch_ratex100 + 32767) / 256;
00538         Packet_DATA[7] = (limit_pitch_ratex100 + 32767) % 256;
00539         Packet_DATA[8] = (limit_yaw_ratex100 + 32767) / 256;
00540         Packet_DATA[9] = (limit_yaw_ratex100 + 32767) % 256;
00541         for (int i = 10; i <= 15; i++) Packet_DATA[i] = 0;
00542         break;
00543     case 8:
00544         Packet_DATA[0] = data_parse_detail_num;
00545         if ((data_parse_detail_num > 0)&(data_parse_detail_num <= 20)) {
00546             Packet_DATA[1] = gain_px100[data_parse_detail_num - 1] / 256;
00547             Packet_DATA[2] = gain_px100[data_parse_detail_num - 1] % 256;
00548             Packet_DATA[3] = gain_dx100[data_parse_detail_num - 1] / 256;
00549             Packet_DATA[4] = gain_dx100[data_parse_detail_num - 1] % 256;
00550             Packet_DATA[5] = gain_ix100[data_parse_detail_num - 1] / 256;
00551             Packet_DATA[6] = gain_ix100[data_parse_detail_num - 1] % 256;
00552             for (int i = 7; i <= 15; i++) Packet_DATA[i] = 0;
00553         }
00554         else {
00555             for (int i = 1; i <= 15; i++) Packet_DATA[i] = 0;
00556         }
00557         break;
00558     }
00559 
00560     // CHKSUM //
00561     unsigned int data_checksum = 0;
00562     for (int i = 0; i < data_length; i++) {
00563         data_checksum += Packet_DATA[i];
00564     }
00565     Packet_CHKSUM[0] = data_checksum / 256;
00566     Packet_CHKSUM[1] = data_checksum % 256;
00567 
00568     // Each Buffer Integrate to modem_buffer ///
00569     uint8_t modem_buffer[27];
00570     modem_buffer[0] = Packet_SOF[0];        modem_buffer[1] = Packet_SOF[1];
00571 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
00572 modem_buffer[4] = Packet_DC[0];         modem_buffer[5] = Packet_DC[1];         modem_buffer[6] = Packet_DC[2];
00573 for (int i = 0; i < data_length; i++) {
00574     modem_buffer[i + 7] = Packet_DATA[i];
00575 }
00576 modem_buffer[23] = Packet_CHKSUM[0];
00577 modem_buffer[24] = Packet_CHKSUM[1];
00578 modem_buffer[25] = Packet_EOF[0];
00579 modem_buffer[26] = Packet_EOF[1];
00580 TRANS_BUFFER_BUSY = true;
00581 for (int i = 0; i <= 26; i++) {
00582     TRANS_BUF[i] = modem_buffer[i];
00583     TRANS_BUF_LEN = 27;
00584 //    pc.putc(modem_buffer[i]);
00585 }
00586 }
00587 
00588 void ROBOFRIEN_GUI::trans_flight_data(int id_dest, int data_parse_num) {
00589 
00590     uint8_t Packet_SOF[2] = { 254,254 };
00591     uint8_t Packet_Identifier[2];
00592     uint8_t Packet_DC[3];
00593     uint8_t Packet_DATA[73];
00594     uint8_t Packet_CHKSUM[2];
00595     uint8_t Packet_EOF[2] = { 255,255 };
00596     // Identifier //
00597     Packet_Identifier[0] = 0;
00598     Packet_Identifier[1] = id_dest;
00599     // Data Control //
00600     Packet_DC[0] = 0;
00601     Packet_DC[1] = (uint8_t)data_parse_num;
00602     int data_length;
00603     if (data_parse_num == 0) data_length = 73;
00604     else data_length = 16;
00605     Packet_DC[2] = (uint8_t)data_length;
00606     // DATA - Modem & State //
00607     if(Mode1 >= 15) Mode1 = 15;
00608     else if(Mode1 <= 0) Mode1 = 0;
00609     if(Alarm >= 15) Alarm = 15;
00610     else if(Alarm <= 0) Alarm = 0;
00611     if(MissionState >= 15) MissionState = 15;
00612     else if(MissionState <= 0) MissionState = 0;
00613     if(CurrentMarker >= 20) CurrentMarker = 20;
00614     else if(CurrentMarker <= 0) CurrentMarker = 0;
00615     int GainChksum = 0;
00616     for(int i=0; i<20; i++){
00617         GainChksum += (gain_px100[i]>>8);
00618         GainChksum += (gain_px100[i]&0xFF);
00619         GainChksum += (gain_dx100[i]>>8);
00620         GainChksum += (gain_dx100[i]&0xFF);
00621         GainChksum += (gain_ix100[i]>>8);
00622         GainChksum += (gain_ix100[i]&0xFF);
00623     }
00624     HomePointChksum = ((Homepoint_Lat + 90000000)/16777216) + ((Homepoint_Lat + 90000000)%16777216/65536) + ((Homepoint_Lat + 90000000)%65536/256) + ((Homepoint_Lat + 90000000)%256);
00625     HomePointChksum += ((Homepoint_Lng + 180000000)/16777216) + ((Homepoint_Lng + 180000000)%16777216/65536) + ((Homepoint_Lng + 180000000)%65536/256) + ((Homepoint_Lng + 180000000)%256);
00626     HomePointChksum += ((Homepoint_Alt + 10000)/256 + (Homepoint_Alt + 10000)%256);
00627     MarkerChksum = 0;
00628     for(int i=0; i<20; i++){
00629         MarkerChksum += (uint8_t)(Marker_Mode[i]);
00630         MarkerChksum += (uint8_t)((Marker_Lat[i]+90000000)/16777216);
00631         MarkerChksum += (uint8_t)((Marker_Lat[i]+90000000)%16777216/65536);
00632         MarkerChksum += (uint8_t)((Marker_Lat[i]+90000000)%65536/256);
00633         MarkerChksum += (uint8_t)((Marker_Lat[i]+90000000)%256);   
00634         MarkerChksum += (uint8_t)((Marker_Lng[i]+180000000)/16777216);
00635         MarkerChksum += (uint8_t)((Marker_Lng[i]+180000000)%16777216/65536);
00636         MarkerChksum += (uint8_t)((Marker_Lng[i]+180000000)%65536/256);
00637         MarkerChksum += (uint8_t)((Marker_Lng[i]+180000000)%256);
00638         MarkerChksum += (uint8_t)((Marker_Alt[i]+10000)/256);
00639         MarkerChksum += (uint8_t)((Marker_Alt[i]+10000)%256);
00640         MarkerChksum += (uint8_t)(Marker_Speed[i]/256);
00641         MarkerChksum += (uint8_t)(Marker_Speed[i]%256);   
00642     }
00643     Packet_DATA[0] = Mode1 * 16 + Alarm;
00644     Packet_DATA[1] = MissionState;
00645     Packet_DATA[2] = CurrentMarker;
00646     if(Bat1 > 100) Bat1 = 100;
00647     else if(Bat1 < 0) Bat1 = 0;
00648     Packet_DATA[3] = Bat1;
00649     Packet_DATA[4] = GainChksum%256;
00650     Packet_DATA[5] = button[0] * 1 + button[1] * 2 + button[2] * 4 + button[3] * 8 + button[4] * 16;
00651     Packet_DATA[6] = HomePointChksum%256;
00652     Packet_DATA[7] = MarkerChksum % 256;
00653     // DATA - GPS //
00654     unsigned long send_gps_time = utc_time;
00655     Packet_DATA[8] = send_gps_time / 16777216;
00656     Packet_DATA[9] = send_gps_time % 16777216 / 65536;
00657     Packet_DATA[10] = send_gps_time % 65536 / 256;
00658     Packet_DATA[11] = send_gps_time % 256;
00659     signed long send_gps_latitude = latitude + 90000000;
00660     Packet_DATA[12] = send_gps_latitude / 16777216;
00661     Packet_DATA[13] = send_gps_latitude % 16777216 / 65536;
00662     Packet_DATA[14] = send_gps_latitude % 65536 / 256;
00663     Packet_DATA[15] = send_gps_latitude % 256;
00664     signed long send_gps_longitude = longitude + 180000000;
00665     Packet_DATA[16] = send_gps_longitude / 16777216;
00666     Packet_DATA[17] = send_gps_longitude % 16777216 / 65536;
00667     Packet_DATA[18] = send_gps_longitude % 65536 / 256;
00668     Packet_DATA[19] = send_gps_longitude % 256;
00669     signed long send_altitude;
00670     if ((altitude + 10000) < 0) send_altitude = -10000;
00671     else send_altitude = (altitude + 10000);
00672     Packet_DATA[20] = send_altitude / 256;
00673     Packet_DATA[21] = send_altitude % 256;
00674     Packet_DATA[22] = SatNum;
00675     // AHRS //
00676     unsigned long send_roll = rollx100 + 32767;
00677     Packet_DATA[23] = send_roll / 256;
00678     Packet_DATA[24] = send_roll % 256;
00679     unsigned long send_pitch = pitchx100 + 32767;
00680     Packet_DATA[25] = send_pitch / 256;
00681     Packet_DATA[26] = send_pitch % 256;
00682     unsigned long send_yaw = yawx100;
00683     Packet_DATA[27] = send_yaw / 256;
00684     Packet_DATA[28] = send_yaw % 256;
00685     unsigned long send_roll_rate = (roll_ratex100 +32767);
00686     Packet_DATA[29] = send_roll_rate / 256;
00687     Packet_DATA[30] = send_roll_rate % 256;
00688     unsigned long send_pitch_rate = (pitch_ratex100 + 32767);
00689     Packet_DATA[31] = send_pitch_rate / 256;
00690     Packet_DATA[32] = send_pitch_rate % 256;
00691     unsigned long send_yaw_rate = (yaw_ratex100 + 32767);
00692     Packet_DATA[33] = send_yaw_rate / 256;
00693     Packet_DATA[34] = send_yaw_rate % 256;
00694     unsigned long send_velocity_x = (VXx100 + 32767);
00695     Packet_DATA[35] = send_velocity_x / 256;
00696     Packet_DATA[36] = send_velocity_x % 256;
00697     unsigned long send_velocity_y = (VYx100 + 32767);
00698     Packet_DATA[37] = send_velocity_y / 256;
00699     Packet_DATA[38] = send_velocity_y % 256;
00700     unsigned long send_velocity_z = (VZx100 + 32767);
00701     Packet_DATA[39] = send_velocity_z / 256;
00702     Packet_DATA[40] = send_velocity_z % 256;
00703     // CAP and PWM //
00704     Packet_DATA[41] = (cap[0] + 127);
00705     Packet_DATA[42] = (cap[1] + 127);
00706     Packet_DATA[43] = (cap[2] + 127);
00707     Packet_DATA[44] = (cap[3] + 127);
00708     Packet_DATA[45] = (cap[4] + 127);
00709     Packet_DATA[46] = (cap[5] + 127);
00710     Packet_DATA[47] = (cap[6] + 127);
00711     Packet_DATA[48] = (cap[7] + 127);
00712     
00713     // PWM //
00714     for (int i = 49; i <= 56; i++) {
00715         Packet_DATA[i] = pwm[i-49];
00716     }
00717     // DEBUG //
00718     Packet_DATA[57] = (int)((DEBUGx100[0]))/256;
00719     Packet_DATA[58] = (int)((DEBUGx100[0]))%256;
00720     Packet_DATA[59] = (int)((DEBUGx100[1]))/256;
00721     Packet_DATA[60] = (int)((DEBUGx100[1]))%256;
00722     Packet_DATA[61] = (int)((DEBUGx100[2]))/256;
00723     Packet_DATA[62] = (int)((DEBUGx100[2]))%256;
00724     Packet_DATA[63] = (int)((DEBUGx100[3]))/256;
00725     Packet_DATA[64] = (int)((DEBUGx100[3]))%256;
00726     Packet_DATA[65] = (int)((DEBUGx100[4]))/256;
00727     Packet_DATA[66] = (int)((DEBUGx100[4]))%256;
00728     Packet_DATA[67] = (int)((DEBUGx100[5]))/256;
00729     Packet_DATA[68] = (int)((DEBUGx100[5]))%256;
00730     Packet_DATA[69] = (int)((DEBUGx100[6]+32767))/256;
00731     Packet_DATA[70] = (int)((DEBUGx100[6]+32767))%256;
00732     Packet_DATA[71] = (int)((DEBUGx100[7]+32767))/256;
00733     Packet_DATA[72] = (int)((DEBUGx100[7]+32767))%256;
00734     // CHKSUM //
00735     unsigned int data_checksum = 0;
00736     for (int i = 0; i < data_length; i++) {
00737         data_checksum += Packet_DATA[i];
00738     }
00739     Packet_CHKSUM[0] = data_checksum / 256;
00740     Packet_CHKSUM[1] = data_checksum % 256;
00741 
00742     // Each Buffer Integrate to modem_buffer ///
00743     uint8_t modem_buffer[84];
00744     modem_buffer[0] = Packet_SOF[0];        modem_buffer[1] = Packet_SOF[1];
00745     modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
00746     modem_buffer[4] = Packet_DC[0];         modem_buffer[5] = Packet_DC[1];         modem_buffer[6] = Packet_DC[2];
00747     for (int i = 0; i < 73; i++) {
00748         modem_buffer[i + 7] = Packet_DATA[i];
00749     }
00750     modem_buffer[80] = Packet_CHKSUM[0];
00751     modem_buffer[81] = Packet_CHKSUM[1];
00752     modem_buffer[82] = Packet_EOF[0];
00753     modem_buffer[83] = Packet_EOF[1];
00754     TRANS_BUFFER_BUSY = true;
00755     for (int i = 0; i <= 83; i++) {
00756         TRANS_BUF[i] = modem_buffer[i];
00757         TRANS_BUF_LEN = 84;
00758 //        pc.putc(modem_buffer[i]);
00759     }
00760 }
00761 
00762 void ROBOFRIEN_GUI::attitude_calibrate(float in_acc_bias_x, float in_acc_bias_y, float in_acc_bias_z){
00763 //    calibrate_gap_roll += rollAngle;
00764 //    calibrate_gap_pitch += pitchAngle;
00765     cal_accel_bias[0] = in_acc_bias_x;
00766     cal_accel_bias[1] = in_acc_bias_y;
00767     cal_accel_bias[2] = (in_acc_bias_z);
00768     eeprom_write(EEPROM_AHRS_ROLL_GAP_UP, (((unsigned long)(in_acc_bias_x * 10000 + 32767) / 256)));
00769     eeprom_write(EEPROM_AHRS_ROLL_GAP_DOWN, (((unsigned long)(in_acc_bias_x * 10000 + 32767) % 256)));
00770     eeprom_write(EEPROM_AHRS_PITCH_GAP_UP, (((unsigned long)(in_acc_bias_y * 10000 + 32767) / 256)));
00771     eeprom_write(EEPROM_AHRS_PITCH_GAP_DOWN, (((unsigned long)(in_acc_bias_y * 10000 + 32767) % 256)));
00772     eeprom_write(EEPROM_AHRS_YAW_GAP_UP, (((unsigned long)(in_acc_bias_z * 10000 + 32767) / 256)));
00773     eeprom_write(EEPROM_AHRS_YAW_GAP_DOWN, (((unsigned long)(in_acc_bias_z * 10000 + 32767) % 256)));
00774     eeprom_refresh_bool = true;
00775 }
00776 
00777 void ROBOFRIEN_GUI::write_compass_setting_to_eeprom(){
00778     eeprom_write(EEPROM_AHRS_YAW_X_GAP_1, ( (uint32_t)(mag_x_avg + 32767)/256 ) );
00779     eeprom_write(EEPROM_AHRS_YAW_X_GAP_2, ( (uint32_t)(mag_x_avg + 32767)%256 ) );
00780 //    eeprom_write(EEPROM_AHRS_YAW_X_GAP_FLOAT, ( (unsigned long)(mag_x_avg * 100)%100 ) );
00781 //    eeprom_write(EEPROM_AHRS_YAW_X_GAP_3, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%65536/256 ) );
00782 //    eeprom_write(EEPROM_AHRS_YAW_X_GAP_4, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%256 ) );
00783     
00784     eeprom_write(EEPROM_AHRS_YAW_Y_GAP_1, ( (uint32_t)(mag_y_avg + 32767)/256 ) );
00785     eeprom_write(EEPROM_AHRS_YAW_Y_GAP_2, ( (uint32_t)(mag_y_avg + 32767)%256 ) );
00786 //    eeprom_write(EEPROM_AHRS_YAW_Y_GAP_FLOAT, ( (unsigned long)(mag_y_avg * 100)%100 ) );
00787 //    eeprom_write(EEPROM_AHRS_YAW_Y_GAP_3, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%65536/256 ) );
00788 //    eeprom_write(EEPROM_AHRS_YAW_Y_GAP_4, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%256 ) );
00789 
00790     eeprom_write(EEPROM_AHRS_YAW_Z_GAP_1, ( (uint32_t)(mag_z_avg + 32767)/256 ) );
00791     eeprom_write(EEPROM_AHRS_YAW_Z_GAP_2, ( (uint32_t)(mag_z_avg + 32767)%256 ) );
00792     
00793     eeprom_refresh_bool = true;
00794 }
00795 
00796 int eeprom_refresh_cnt = 0;
00797 bool eeprom_refresh_cnt_bool = false;
00798 void ROBOFRIEN_GUI::SET_DATA(){
00799     if( eeprom_refresh_bool == true){
00800         // True 일때, False로 만들고, 10초동안 true로 변경되지 않으면 그때 eeprom_refresh 실시  ( 계속 써서 시스템 망가져서 ~ )
00801         eeprom_refresh_bool = false;
00802         eeprom_refresh_cnt_bool = true;
00803         eeprom_refresh_cnt = 0;
00804     }
00805     if( eeprom_refresh_cnt_bool == true){
00806         eeprom_refresh_cnt ++;
00807         if(eeprom_refresh_cnt > 10){
00808             eeprom_refresh();
00809             eeprom_refresh_cnt = 0;
00810             eeprom_refresh_cnt_bool = false;
00811         }
00812     }
00813 }
00814 
00815 void ROBOFRIEN_GUI::TRANS_BUFFER(){
00816     if(TRANS_BUFFER_BUSY == true){
00817         if( TRANS_BUF_CNT >= TRANS_BUF_LEN){
00818             TRANS_BUF_CNT = 0;
00819             TRANS_BUFFER_BUSY = false;
00820         }else{
00821             #if PC_DEBUG
00822                 pc.putc(TRANS_BUF[TRANS_BUF_CNT]);
00823                 TRANS_BUF_CNT ++;
00824             #else
00825                 if(  (LPC_UART3->LSR & 0x20) ){
00826                     LPC_UART3->THR = TRANS_BUF[TRANS_BUF_CNT];
00827                     TRANS_BUF_CNT ++;                
00828                 }            
00829             #endif
00830 //            }            
00831         }
00832     }else{
00833         TRANS_BUF_CNT = 0;
00834     }
00835 }