Kim Youngsik / Mbed 2 deprecated 1TEST_Flight_Protocol_v1

Dependencies:   mbed

Fork of 1TEST_Flight_Protocol by Kim Youngsik

Committer:
skyyoungsik
Date:
Thu Aug 31 05:29:09 2017 +0000
Revision:
3:cf5a27438655
Parent:
2:3fe595ba6a7e
ROBOFRIEN

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyyoungsik 2:3fe595ba6a7e 1 #include "ROBOFRIEN_GUI.h"
skyyoungsik 2:3fe595ba6a7e 2 #include "eeprom.h"
skyyoungsik 2:3fe595ba6a7e 3 #include "Config.h"
skyyoungsik 2:3fe595ba6a7e 4
skyyoungsik 2:3fe595ba6a7e 5
skyyoungsik 2:3fe595ba6a7e 6 Serial pc(USBTX, USBRX);
skyyoungsik 2:3fe595ba6a7e 7
skyyoungsik 2:3fe595ba6a7e 8 uint8_t ISR_Modem_ID_Dept, ISR_Modem_ID_Dest;
skyyoungsik 2:3fe595ba6a7e 9 uint8_t ISR_Modem_DC_DPN, ISR_Modem_DC_DL;
skyyoungsik 2:3fe595ba6a7e 10 uint8_t ISR_Modem_DATA[256];
skyyoungsik 2:3fe595ba6a7e 11 uint8_t ISR_Modem_DC_REQUEST;
skyyoungsik 2:3fe595ba6a7e 12 uint16_t ISR_Modem_CHKSUM;
skyyoungsik 2:3fe595ba6a7e 13 uint8_t pc_isr_cnt;
skyyoungsik 2:3fe595ba6a7e 14 uint8_t isr_modem_data_cnt = 0;
skyyoungsik 2:3fe595ba6a7e 15 uint8_t pc_parsing_bool = false;
skyyoungsik 2:3fe595ba6a7e 16 bool pc_Start_Check;
skyyoungsik 2:3fe595ba6a7e 17 uint8_t model_type1;
skyyoungsik 2:3fe595ba6a7e 18 uint16_t model_type2;
skyyoungsik 2:3fe595ba6a7e 19 uint8_t pc_buffer[256],ex_pc_raw_buffer,pc_raw_buffer[256];
skyyoungsik 2:3fe595ba6a7e 20 uint8_t pc_buffer_cnt=0;
skyyoungsik 2:3fe595ba6a7e 21 int HomePointChksum,MarkerChksum;
skyyoungsik 2:3fe595ba6a7e 22
skyyoungsik 2:3fe595ba6a7e 23 void ROBOFRIEN_GUI::pc_rx_update(){
skyyoungsik 2:3fe595ba6a7e 24 while (pc.readable()){
skyyoungsik 2:3fe595ba6a7e 25 pc_buffer[1] = pc_buffer[0];
skyyoungsik 2:3fe595ba6a7e 26 pc_buffer[0] = pc.getc();
skyyoungsik 2:3fe595ba6a7e 27 // Check SOF //
skyyoungsik 2:3fe595ba6a7e 28 if (( pc_buffer[1] == 254) & (pc_buffer[0] == 254)){
skyyoungsik 2:3fe595ba6a7e 29 pc_Start_Check = true;
skyyoungsik 2:3fe595ba6a7e 30 pc_isr_cnt = 0;
skyyoungsik 2:3fe595ba6a7e 31 }
skyyoungsik 2:3fe595ba6a7e 32 else if(pc_Start_Check == true){
skyyoungsik 2:3fe595ba6a7e 33 if(pc_isr_cnt <= 4){
skyyoungsik 2:3fe595ba6a7e 34 switch(pc_isr_cnt){
skyyoungsik 2:3fe595ba6a7e 35 case 0: ISR_Modem_ID_Dept = pc_buffer[0]; break;
skyyoungsik 2:3fe595ba6a7e 36 case 1: ISR_Modem_ID_Dest = pc_buffer[0]; break;
skyyoungsik 2:3fe595ba6a7e 37 case 2: ISR_Modem_DC_REQUEST = pc_buffer[0]; break;
skyyoungsik 2:3fe595ba6a7e 38 case 3: ISR_Modem_DC_DPN = pc_buffer[0]; break;
skyyoungsik 2:3fe595ba6a7e 39 case 4: ISR_Modem_DC_DL = pc_buffer[0]; isr_modem_data_cnt = 0; break;
skyyoungsik 2:3fe595ba6a7e 40 }
skyyoungsik 2:3fe595ba6a7e 41 }
skyyoungsik 2:3fe595ba6a7e 42 else if( pc_isr_cnt > 4 ){
skyyoungsik 2:3fe595ba6a7e 43 if ((ISR_Modem_DC_DL >= 1) & (pc_isr_cnt <= (4 + ISR_Modem_DC_DL))) {
skyyoungsik 2:3fe595ba6a7e 44 ISR_Modem_DATA[isr_modem_data_cnt] = pc_buffer[0];
skyyoungsik 2:3fe595ba6a7e 45 isr_modem_data_cnt++;
skyyoungsik 2:3fe595ba6a7e 46 }
skyyoungsik 2:3fe595ba6a7e 47 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2) ){
skyyoungsik 2:3fe595ba6a7e 48 ISR_Modem_CHKSUM = ((uint16_t)pc_buffer[1] * 256 + pc_buffer[0]);
skyyoungsik 2:3fe595ba6a7e 49 }
skyyoungsik 2:3fe595ba6a7e 50 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2 + 2) ){
skyyoungsik 2:3fe595ba6a7e 51 if((pc_buffer[1] == 255) & (pc_buffer[0] == 255) ){
skyyoungsik 2:3fe595ba6a7e 52 pc_Start_Check = false;
skyyoungsik 2:3fe595ba6a7e 53 pc_parsing_bool = true;
skyyoungsik 2:3fe595ba6a7e 54 }
skyyoungsik 2:3fe595ba6a7e 55 }
skyyoungsik 2:3fe595ba6a7e 56 }
skyyoungsik 2:3fe595ba6a7e 57 pc_isr_cnt ++;
skyyoungsik 2:3fe595ba6a7e 58 }
skyyoungsik 2:3fe595ba6a7e 59 }
skyyoungsik 2:3fe595ba6a7e 60 }
skyyoungsik 2:3fe595ba6a7e 61
skyyoungsik 2:3fe595ba6a7e 62 uint8_t Modem_ID_Dest;
skyyoungsik 2:3fe595ba6a7e 63 uint8_t Modem_ID_Dept;
skyyoungsik 2:3fe595ba6a7e 64 uint8_t Modem_DC_DPN;
skyyoungsik 2:3fe595ba6a7e 65 uint8_t Modem_DC_DL;
skyyoungsik 2:3fe595ba6a7e 66 uint8_t Modem_DATA[256];
skyyoungsik 2:3fe595ba6a7e 67 uint8_t Modem_DC_REQUEST;
skyyoungsik 2:3fe595ba6a7e 68
skyyoungsik 2:3fe595ba6a7e 69 bool ROBOFRIEN_GUI::rx_bool(){
skyyoungsik 2:3fe595ba6a7e 70 if(pc_parsing_bool == true){
skyyoungsik 2:3fe595ba6a7e 71 pc_parsing_bool = false;
skyyoungsik 2:3fe595ba6a7e 72 int cal_chksum = 0;
skyyoungsik 2:3fe595ba6a7e 73 for(int i=0; i< ISR_Modem_DC_DL; i++){
skyyoungsik 2:3fe595ba6a7e 74 Modem_DATA[i] = ISR_Modem_DATA[i];
skyyoungsik 2:3fe595ba6a7e 75 cal_chksum += ISR_Modem_DATA[i];
skyyoungsik 2:3fe595ba6a7e 76 }
skyyoungsik 2:3fe595ba6a7e 77 if (ISR_Modem_CHKSUM == cal_chksum){
skyyoungsik 2:3fe595ba6a7e 78 return true;
skyyoungsik 2:3fe595ba6a7e 79 }else{
skyyoungsik 2:3fe595ba6a7e 80 return false;
skyyoungsik 2:3fe595ba6a7e 81 }
skyyoungsik 2:3fe595ba6a7e 82 }
skyyoungsik 2:3fe595ba6a7e 83 else{
skyyoungsik 2:3fe595ba6a7e 84 return false;
skyyoungsik 2:3fe595ba6a7e 85 }
skyyoungsik 2:3fe595ba6a7e 86 }
skyyoungsik 2:3fe595ba6a7e 87 void ROBOFRIEN_GUI::Init(){
skyyoungsik 2:3fe595ba6a7e 88 pc.baud(38400);
skyyoungsik 2:3fe595ba6a7e 89 eeprom_init();
skyyoungsik 2:3fe595ba6a7e 90 /// EEPROM R/W ////
skyyoungsik 2:3fe595ba6a7e 91 // -------- MODEL -------------- //
skyyoungsik 2:3fe595ba6a7e 92 model_type1 = eeprom_read(EEPROM_MODEL_TYPE1);
skyyoungsik 2:3fe595ba6a7e 93 model_type2 = (int)eeprom_read(EEPROM_MODEL_TYPE2_UP) * 256 + eeprom_read(EEPROM_MODEL_TYPE2_DOWN);
skyyoungsik 2:3fe595ba6a7e 94
skyyoungsik 2:3fe595ba6a7e 95 // -------- INPUT - CAP ------------ //
skyyoungsik 2:3fe595ba6a7e 96 cap_min[0] = (int16_t)eeprom_read(EEPROM_RECV_MIN_1) - 127;
skyyoungsik 2:3fe595ba6a7e 97 cap_min[1] = (int16_t)eeprom_read(EEPROM_RECV_MIN_2) - 127;
skyyoungsik 2:3fe595ba6a7e 98 cap_min[2] = (int16_t)eeprom_read(EEPROM_RECV_MIN_3) - 127;
skyyoungsik 2:3fe595ba6a7e 99 cap_min[3] = (int16_t)eeprom_read(EEPROM_RECV_MIN_4) - 127;
skyyoungsik 2:3fe595ba6a7e 100 cap_min[4] = (int16_t)eeprom_read(EEPROM_RECV_MIN_5) - 127;
skyyoungsik 2:3fe595ba6a7e 101 cap_min[5] = (int16_t)eeprom_read(EEPROM_RECV_MIN_6) - 127;
skyyoungsik 2:3fe595ba6a7e 102 cap_min[6] = (int16_t)eeprom_read(EEPROM_RECV_MIN_7) - 127;
skyyoungsik 2:3fe595ba6a7e 103 cap_min[7] = (int16_t)eeprom_read(EEPROM_RECV_MIN_8) - 127;
skyyoungsik 2:3fe595ba6a7e 104
skyyoungsik 2:3fe595ba6a7e 105 cap_neu[0] = (int16_t)eeprom_read(EEPROM_RECV_NEU_1) - 127;
skyyoungsik 2:3fe595ba6a7e 106 cap_neu[1] = (int16_t)eeprom_read(EEPROM_RECV_NEU_2) - 127;
skyyoungsik 2:3fe595ba6a7e 107 cap_neu[2] = (int16_t)eeprom_read(EEPROM_RECV_NEU_3) - 127;
skyyoungsik 2:3fe595ba6a7e 108 cap_neu[3] = (int16_t)eeprom_read(EEPROM_RECV_NEU_4) - 127;
skyyoungsik 2:3fe595ba6a7e 109 cap_neu[4] = (int16_t)eeprom_read(EEPROM_RECV_NEU_5) - 127;
skyyoungsik 2:3fe595ba6a7e 110 cap_neu[5] = (int16_t)eeprom_read(EEPROM_RECV_NEU_6) - 127;
skyyoungsik 2:3fe595ba6a7e 111 cap_neu[6] = (int16_t)eeprom_read(EEPROM_RECV_NEU_7) - 127;
skyyoungsik 2:3fe595ba6a7e 112 cap_neu[7] = (int16_t)eeprom_read(EEPROM_RECV_NEU_8) - 127;
skyyoungsik 2:3fe595ba6a7e 113
skyyoungsik 2:3fe595ba6a7e 114 cap_max[0] = (int16_t)eeprom_read(EEPROM_RECV_MAX_1) - 127;
skyyoungsik 2:3fe595ba6a7e 115 cap_max[1] = (int16_t)eeprom_read(EEPROM_RECV_MAX_2) - 127;
skyyoungsik 2:3fe595ba6a7e 116 cap_max[2] = (int16_t)eeprom_read(EEPROM_RECV_MAX_3) - 127;
skyyoungsik 2:3fe595ba6a7e 117 cap_max[3] = (int16_t)eeprom_read(EEPROM_RECV_MAX_4) - 127;
skyyoungsik 2:3fe595ba6a7e 118 cap_max[4] = (int16_t)eeprom_read(EEPROM_RECV_MAX_5) - 127;
skyyoungsik 2:3fe595ba6a7e 119 cap_max[5] = (int16_t)eeprom_read(EEPROM_RECV_MAX_6) - 127;
skyyoungsik 2:3fe595ba6a7e 120 cap_max[6] = (int16_t)eeprom_read(EEPROM_RECV_MAX_7) - 127;
skyyoungsik 2:3fe595ba6a7e 121 cap_max[7] = (int16_t)eeprom_read(EEPROM_RECV_MAX_8) - 127;
skyyoungsik 2:3fe595ba6a7e 122
skyyoungsik 2:3fe595ba6a7e 123 // --------- OUTPUT - MOTOR ----------- //
skyyoungsik 2:3fe595ba6a7e 124 motor_min[0] = (int)eeprom_read(EEPROM_MOTOR_MIN_1_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_1_DOWN);
skyyoungsik 2:3fe595ba6a7e 125 motor_min[1] = (int)eeprom_read(EEPROM_MOTOR_MIN_2_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_2_DOWN);
skyyoungsik 2:3fe595ba6a7e 126 motor_min[2] = (int)eeprom_read(EEPROM_MOTOR_MIN_3_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_3_DOWN);
skyyoungsik 2:3fe595ba6a7e 127 motor_min[3] = (int)eeprom_read(EEPROM_MOTOR_MIN_4_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_4_DOWN);
skyyoungsik 2:3fe595ba6a7e 128
skyyoungsik 2:3fe595ba6a7e 129 // --------- OUTPUT - LED ------------ //
skyyoungsik 2:3fe595ba6a7e 130 headlight_period = eeprom_read(EEPROM_HEADLIGHT_PERIOD);
skyyoungsik 2:3fe595ba6a7e 131 headlight_dutyrate = eeprom_read(EEPROM_HEADLIGHT_DUTYRATE);
skyyoungsik 2:3fe595ba6a7e 132 sidelight_period = eeprom_read(EEPROM_SIDELIGHT_PERIOD);
skyyoungsik 2:3fe595ba6a7e 133 sidelight_dutyrate = eeprom_read(EEPROM_SIDELIGHT_DUTYRATE);
skyyoungsik 2:3fe595ba6a7e 134
skyyoungsik 2:3fe595ba6a7e 135 // --------- GAIN - LIMIT ANGLE ------- //
skyyoungsik 2:3fe595ba6a7e 136 limit_rollx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_DOWN) - 32767;
skyyoungsik 2:3fe595ba6a7e 137 limit_pitchx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_DOWN) - 32767;
skyyoungsik 2:3fe595ba6a7e 138 limit_roll_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_ROLL_DOWN) - 32767;
skyyoungsik 2:3fe595ba6a7e 139 limit_pitch_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_PITCH_DOWN) - 32767;
skyyoungsik 2:3fe595ba6a7e 140 limit_yaw_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_YAW_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_YAW_DOWN) - 32767;
skyyoungsik 2:3fe595ba6a7e 141
skyyoungsik 2:3fe595ba6a7e 142 // --------- GAIN - GAIN DATA --------- //
skyyoungsik 2:3fe595ba6a7e 143 for (int i = 0; i < 20; i++) {
skyyoungsik 2:3fe595ba6a7e 144 gain_px100[i] = (int)eeprom_read(EEPROM_GAIN_P_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_P_DOWN[i]);
skyyoungsik 2:3fe595ba6a7e 145 gain_dx100[i] = (int)eeprom_read(EEPROM_GAIN_D_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_D_DOWN[i]);
skyyoungsik 2:3fe595ba6a7e 146 gain_ix100[i] = (int)eeprom_read(EEPROM_GAIN_I_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_I_DOWN[i]);
skyyoungsik 2:3fe595ba6a7e 147 }
skyyoungsik 3:cf5a27438655 148 cal_accel_bias[0] = (((int)eeprom_read(EEPROM_AHRS_ROLL_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_ROLL_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 3:cf5a27438655 149 cal_accel_bias[1] = (((int)eeprom_read(EEPROM_AHRS_PITCH_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_PITCH_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 3:cf5a27438655 150 cal_accel_bias[2] = (((int)eeprom_read(EEPROM_AHRS_YAW_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_YAW_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 2:3fe595ba6a7e 151
skyyoungsik 2:3fe595ba6a7e 152 // --------- Sensor ----------- ///
skyyoungsik 2:3fe595ba6a7e 153 mag_x_avg = (float)eeprom_read(EEPROM_AHRS_YAW_X_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_X_GAP_2) - 32767 ;
skyyoungsik 2:3fe595ba6a7e 154 mag_y_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Y_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Y_GAP_2) - 32767 ;
skyyoungsik 2:3fe595ba6a7e 155 mag_z_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Z_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Z_GAP_2) - 32767 ;
skyyoungsik 2:3fe595ba6a7e 156
skyyoungsik 2:3fe595ba6a7e 157 declination_angle = (float)(((signed long)eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_UP) * 256 + eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_DOWN))-18000)/100.0;
skyyoungsik 2:3fe595ba6a7e 158 }
skyyoungsik 2:3fe595ba6a7e 159
skyyoungsik 2:3fe595ba6a7e 160 void trans_configuration_data(int a, int b, int c);
skyyoungsik 2:3fe595ba6a7e 161 void trans_empty_data(int a, int b);
skyyoungsik 2:3fe595ba6a7e 162 void trans_flight_data(int a, int b);
skyyoungsik 2:3fe595ba6a7e 163 void ROBOFRIEN_GUI::Refresh(){
skyyoungsik 2:3fe595ba6a7e 164 Modem_ID_Dept = ISR_Modem_ID_Dept;
skyyoungsik 2:3fe595ba6a7e 165 Modem_ID_Dest = ISR_Modem_ID_Dest;
skyyoungsik 2:3fe595ba6a7e 166 Modem_DC_DPN = ISR_Modem_DC_DPN;
skyyoungsik 2:3fe595ba6a7e 167 Modem_DC_DL = ISR_Modem_DC_DL;
skyyoungsik 2:3fe595ba6a7e 168 Modem_DC_REQUEST = ISR_Modem_DC_REQUEST;
skyyoungsik 2:3fe595ba6a7e 169 DPN_Info = Modem_DC_DPN;
skyyoungsik 2:3fe595ba6a7e 170 if ((Modem_ID_Dept == 255)&(Modem_ID_Dest == 0)) {
skyyoungsik 2:3fe595ba6a7e 171 if (Modem_DC_REQUEST == 1) {
skyyoungsik 2:3fe595ba6a7e 172 /// REQUST - READ FROM FCS ///
skyyoungsik 2:3fe595ba6a7e 173 if (Modem_DC_DPN == 0) {
skyyoungsik 2:3fe595ba6a7e 174 /// FLIGHT DATA ///
skyyoungsik 2:3fe595ba6a7e 175 if( (Modem_DATA[1] & 0b00000001) == 0b00000001)button[0] = !button[0];
skyyoungsik 2:3fe595ba6a7e 176 if( (Modem_DATA[1] & 0b00000010) == 0b00000010)button[1] = !button[1];
skyyoungsik 2:3fe595ba6a7e 177 if( (Modem_DATA[1] & 0b00000100) == 0b00000100)button[2] = !button[2];
skyyoungsik 2:3fe595ba6a7e 178 if( (Modem_DATA[1] & 0b00001000) == 0b00001000)button[3] = !button[3];
skyyoungsik 2:3fe595ba6a7e 179 if( (Modem_DATA[1] & 0b00010000) == 0b00010000)button[4] = !button[4];
skyyoungsik 2:3fe595ba6a7e 180 // Home Point //
skyyoungsik 2:3fe595ba6a7e 181 if( Modem_DATA[0] == 0){
skyyoungsik 2:3fe595ba6a7e 182 Homepoint_Lat = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
skyyoungsik 2:3fe595ba6a7e 183 Homepoint_Lng = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
skyyoungsik 2:3fe595ba6a7e 184 Homepoint_Alt = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;
skyyoungsik 2:3fe595ba6a7e 185 }else if(Modem_DATA[0] <= 20){
skyyoungsik 2:3fe595ba6a7e 186 Marker_Mode[Modem_DATA[0]-1] = Modem_DATA[2];
skyyoungsik 2:3fe595ba6a7e 187 Marker_Lat[Modem_DATA[0]-1] = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
skyyoungsik 2:3fe595ba6a7e 188 Marker_Lng[Modem_DATA[0]-1] = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
skyyoungsik 2:3fe595ba6a7e 189 Marker_Alt[Modem_DATA[0]-1] = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;
skyyoungsik 2:3fe595ba6a7e 190 Marker_Speed[Modem_DATA[0]-1] = (long)Modem_DATA[13] * 256 + Modem_DATA[14];
skyyoungsik 2:3fe595ba6a7e 191 }
skyyoungsik 2:3fe595ba6a7e 192 trans_flight_data(TO_GCS, Modem_DC_DPN);
skyyoungsik 2:3fe595ba6a7e 193 }
skyyoungsik 2:3fe595ba6a7e 194 else {
skyyoungsik 2:3fe595ba6a7e 195 trans_configuration_data(TO_GCS, Modem_DC_DPN, Modem_DATA[0]);
skyyoungsik 2:3fe595ba6a7e 196 }
skyyoungsik 2:3fe595ba6a7e 197 }
skyyoungsik 2:3fe595ba6a7e 198 else {
skyyoungsik 2:3fe595ba6a7e 199 /// NOT REQUEST - WRITE TO FCS ///
skyyoungsik 2:3fe595ba6a7e 200 trans_empty_data(TO_GCS, Modem_DC_DPN);
skyyoungsik 2:3fe595ba6a7e 201 switch (Modem_DC_DPN) { // Check DPN //
skyyoungsik 2:3fe595ba6a7e 202 case 0:
skyyoungsik 2:3fe595ba6a7e 203 break;
skyyoungsik 2:3fe595ba6a7e 204 case 1: /// Modem ///
skyyoungsik 2:3fe595ba6a7e 205 model_type1 = Modem_DATA[0];
skyyoungsik 2:3fe595ba6a7e 206 model_type2 = (uint16_t)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 2:3fe595ba6a7e 207 eeprom_write(EEPROM_MODEL_TYPE1, (int)model_type1);
skyyoungsik 2:3fe595ba6a7e 208 eeprom_write(EEPROM_MODEL_TYPE2_UP, (int)model_type2 / 256);
skyyoungsik 2:3fe595ba6a7e 209 eeprom_write(EEPROM_MODEL_TYPE2_DOWN, (int)model_type2 % 256);
skyyoungsik 2:3fe595ba6a7e 210 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 211 break;
skyyoungsik 2:3fe595ba6a7e 212 case 3: /// RC Receiver ///
skyyoungsik 2:3fe595ba6a7e 213 if ((Modem_DATA[0] >= 1) & (Modem_DATA[0] <= 8)) {
skyyoungsik 2:3fe595ba6a7e 214 cap_min[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[5] - 127;
skyyoungsik 2:3fe595ba6a7e 215 cap_neu[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[6] - 127;
skyyoungsik 2:3fe595ba6a7e 216 cap_max[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[7] - 127;
skyyoungsik 2:3fe595ba6a7e 217 switch (Modem_DATA[0]) {
skyyoungsik 2:3fe595ba6a7e 218 case 1:
skyyoungsik 2:3fe595ba6a7e 219 eeprom_write(EEPROM_RECV_MIN_1, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 220 eeprom_write(EEPROM_RECV_NEU_1, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 221 eeprom_write(EEPROM_RECV_MAX_1, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 222 break;
skyyoungsik 2:3fe595ba6a7e 223 case 2:
skyyoungsik 2:3fe595ba6a7e 224 eeprom_write(EEPROM_RECV_MIN_2, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 225 eeprom_write(EEPROM_RECV_NEU_2, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 226 eeprom_write(EEPROM_RECV_MAX_2, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 227 break;
skyyoungsik 2:3fe595ba6a7e 228 case 3:
skyyoungsik 2:3fe595ba6a7e 229 eeprom_write(EEPROM_RECV_MIN_3, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 230 eeprom_write(EEPROM_RECV_NEU_3, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 231 eeprom_write(EEPROM_RECV_MAX_3, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 232 break;
skyyoungsik 2:3fe595ba6a7e 233 case 4:
skyyoungsik 2:3fe595ba6a7e 234 eeprom_write(EEPROM_RECV_MIN_4, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 235 eeprom_write(EEPROM_RECV_NEU_4, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 236 eeprom_write(EEPROM_RECV_MAX_4, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 237 break;
skyyoungsik 2:3fe595ba6a7e 238 case 5:
skyyoungsik 2:3fe595ba6a7e 239 eeprom_write(EEPROM_RECV_MIN_5, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 240 eeprom_write(EEPROM_RECV_NEU_5, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 241 eeprom_write(EEPROM_RECV_MAX_5, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 242 break;
skyyoungsik 2:3fe595ba6a7e 243 case 6:
skyyoungsik 2:3fe595ba6a7e 244 eeprom_write(EEPROM_RECV_MIN_6, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 245 eeprom_write(EEPROM_RECV_NEU_6, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 246 eeprom_write(EEPROM_RECV_MAX_6, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 247 break;
skyyoungsik 2:3fe595ba6a7e 248 case 7:
skyyoungsik 2:3fe595ba6a7e 249 eeprom_write(EEPROM_RECV_MIN_7, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 250 eeprom_write(EEPROM_RECV_NEU_7, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 251 eeprom_write(EEPROM_RECV_MAX_7, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 252 break;
skyyoungsik 2:3fe595ba6a7e 253 case 8:
skyyoungsik 2:3fe595ba6a7e 254 eeprom_write(EEPROM_RECV_MIN_8, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 255 eeprom_write(EEPROM_RECV_NEU_8, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 256 eeprom_write(EEPROM_RECV_MAX_8, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 2:3fe595ba6a7e 257 break;
skyyoungsik 2:3fe595ba6a7e 258 }
skyyoungsik 2:3fe595ba6a7e 259 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 260 }
skyyoungsik 2:3fe595ba6a7e 261 break;
skyyoungsik 2:3fe595ba6a7e 262 case 4: // Motor - OUTPUT //
skyyoungsik 2:3fe595ba6a7e 263 pwm_info[0] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 2:3fe595ba6a7e 264 pwm_info[1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
skyyoungsik 2:3fe595ba6a7e 265 pwm_info[2] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
skyyoungsik 2:3fe595ba6a7e 266 pwm_info[3] = (int)Modem_DATA[7] * 256 + Modem_DATA[8];
skyyoungsik 2:3fe595ba6a7e 267 switch (Modem_DATA[0]) {
skyyoungsik 2:3fe595ba6a7e 268 case 1:
skyyoungsik 2:3fe595ba6a7e 269 motor_min[0] = pwm_info[0];
skyyoungsik 2:3fe595ba6a7e 270 eeprom_write(EEPROM_MOTOR_MIN_1_UP, motor_min[0] / 256);
skyyoungsik 2:3fe595ba6a7e 271 eeprom_write(EEPROM_MOTOR_MIN_1_DOWN, motor_min[0] % 256);
skyyoungsik 2:3fe595ba6a7e 272 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 273 break;
skyyoungsik 2:3fe595ba6a7e 274 case 2:
skyyoungsik 2:3fe595ba6a7e 275 motor_min[1] = pwm_info[1];
skyyoungsik 2:3fe595ba6a7e 276 eeprom_write(EEPROM_MOTOR_MIN_2_UP, motor_min[1] / 256);
skyyoungsik 2:3fe595ba6a7e 277 eeprom_write(EEPROM_MOTOR_MIN_2_DOWN, motor_min[1] % 256);
skyyoungsik 2:3fe595ba6a7e 278 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 279 break;
skyyoungsik 2:3fe595ba6a7e 280 case 3:
skyyoungsik 2:3fe595ba6a7e 281 motor_min[2] = pwm_info[2];
skyyoungsik 2:3fe595ba6a7e 282 eeprom_write(EEPROM_MOTOR_MIN_3_UP, motor_min[2] / 256);
skyyoungsik 2:3fe595ba6a7e 283 eeprom_write(EEPROM_MOTOR_MIN_3_DOWN, motor_min[2] % 256);
skyyoungsik 2:3fe595ba6a7e 284 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 285 break;
skyyoungsik 2:3fe595ba6a7e 286 case 4:
skyyoungsik 2:3fe595ba6a7e 287 motor_min[3] = pwm_info[3];
skyyoungsik 2:3fe595ba6a7e 288 eeprom_write(EEPROM_MOTOR_MIN_4_UP, motor_min[3] / 256);
skyyoungsik 2:3fe595ba6a7e 289 eeprom_write(EEPROM_MOTOR_MIN_4_DOWN, motor_min[3] % 256);
skyyoungsik 2:3fe595ba6a7e 290 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 291 break;
skyyoungsik 2:3fe595ba6a7e 292 }
skyyoungsik 2:3fe595ba6a7e 293 break;
skyyoungsik 2:3fe595ba6a7e 294 case 5: // LED - OUTPUT //
skyyoungsik 2:3fe595ba6a7e 295 headlight_period = Modem_DATA[0];
skyyoungsik 2:3fe595ba6a7e 296 headlight_dutyrate = Modem_DATA[1];
skyyoungsik 2:3fe595ba6a7e 297 sidelight_period = Modem_DATA[2];
skyyoungsik 2:3fe595ba6a7e 298 sidelight_dutyrate = Modem_DATA[3];
skyyoungsik 2:3fe595ba6a7e 299 eeprom_write(EEPROM_HEADLIGHT_PERIOD, headlight_period);
skyyoungsik 2:3fe595ba6a7e 300 eeprom_write(EEPROM_HEADLIGHT_DUTYRATE, headlight_dutyrate);
skyyoungsik 2:3fe595ba6a7e 301 eeprom_write(EEPROM_SIDELIGHT_PERIOD, sidelight_period);
skyyoungsik 2:3fe595ba6a7e 302 eeprom_write(EEPROM_SIDELIGHT_DUTYRATE, sidelight_dutyrate);
skyyoungsik 2:3fe595ba6a7e 303 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 304 break;
skyyoungsik 2:3fe595ba6a7e 305 case 6: // AHRS - ROLL , Pitch //
skyyoungsik 2:3fe595ba6a7e 306 /// Attitude ///
skyyoungsik 2:3fe595ba6a7e 307 if (Modem_DATA[0] == 1) {
skyyoungsik 2:3fe595ba6a7e 308 attitude_configuration_bool = true;
skyyoungsik 2:3fe595ba6a7e 309 }
skyyoungsik 2:3fe595ba6a7e 310 else {
skyyoungsik 2:3fe595ba6a7e 311 attitude_configuration_bool = false;
skyyoungsik 2:3fe595ba6a7e 312 }
skyyoungsik 2:3fe595ba6a7e 313 /// Compass ///
skyyoungsik 2:3fe595ba6a7e 314 if (Modem_DATA[7] == 1) {
skyyoungsik 2:3fe595ba6a7e 315 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 2:3fe595ba6a7e 316 }
skyyoungsik 2:3fe595ba6a7e 317 else if (Modem_DATA[7] == 2) {
skyyoungsik 2:3fe595ba6a7e 318 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 2:3fe595ba6a7e 319 }
skyyoungsik 2:3fe595ba6a7e 320 else if(Modem_DATA[7] == 3){
skyyoungsik 2:3fe595ba6a7e 321 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 2:3fe595ba6a7e 322 declination_angle = (float)(((int)Modem_DATA[10] * 256 + Modem_DATA[11]) - 18000)/100.0;
skyyoungsik 2:3fe595ba6a7e 323 eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_UP, (int)((declination_angle+180)*100)/256);
skyyoungsik 2:3fe595ba6a7e 324 eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_DOWN, (int)((declination_angle+180)*100)%256);
skyyoungsik 2:3fe595ba6a7e 325 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 326 }
skyyoungsik 2:3fe595ba6a7e 327 break;
skyyoungsik 2:3fe595ba6a7e 328 case 7: // Limit Angle //
skyyoungsik 2:3fe595ba6a7e 329 limit_rollx100 = ((int)Modem_DATA[0] * 256 + Modem_DATA[1]) - 32767;
skyyoungsik 2:3fe595ba6a7e 330 limit_pitchx100 = ((int)Modem_DATA[2] * 256 + Modem_DATA[3]) - 32767;
skyyoungsik 2:3fe595ba6a7e 331 limit_roll_rate = ((int)Modem_DATA[4] * 256 + Modem_DATA[5]) - 32767;
skyyoungsik 2:3fe595ba6a7e 332 limit_pitch_rate = ((int)Modem_DATA[6] * 256 + Modem_DATA[7]) - 32767;
skyyoungsik 2:3fe595ba6a7e 333 limit_yaw_rate = ((int)Modem_DATA[8] * 256 + Modem_DATA[9]) - 32767;
skyyoungsik 2:3fe595ba6a7e 334 eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_UP, (limit_rollx100 + 32767) / 256);
skyyoungsik 2:3fe595ba6a7e 335 eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_DOWN, (limit_rollx100 + 32767) % 256);
skyyoungsik 2:3fe595ba6a7e 336 eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_UP, (limit_pitchx100 + 32767) / 256);
skyyoungsik 2:3fe595ba6a7e 337 eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_DOWN, (limit_pitchx100 + 32767) % 256);
skyyoungsik 2:3fe595ba6a7e 338 eeprom_write(EEPROM_LIMIT_RATE_ROLL_UP, (limit_roll_rate + 32767) / 256);
skyyoungsik 2:3fe595ba6a7e 339 eeprom_write(EEPROM_LIMIT_RATE_ROLL_DOWN, (limit_roll_rate + 32767) % 256);
skyyoungsik 2:3fe595ba6a7e 340 eeprom_write(EEPROM_LIMIT_RATE_PITCH_UP, (limit_pitch_rate + 32767) / 256);
skyyoungsik 2:3fe595ba6a7e 341 eeprom_write(EEPROM_LIMIT_RATE_PITCH_DOWN, (limit_pitch_rate + 32767) % 256);
skyyoungsik 2:3fe595ba6a7e 342 eeprom_write(EEPROM_LIMIT_RATE_YAW_UP, (limit_yaw_rate + 32767) / 256);
skyyoungsik 2:3fe595ba6a7e 343 eeprom_write(EEPROM_LIMIT_RATE_YAW_DOWN, (limit_yaw_rate + 32767) % 256);
skyyoungsik 2:3fe595ba6a7e 344 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 345 break;
skyyoungsik 2:3fe595ba6a7e 346 case 8:
skyyoungsik 2:3fe595ba6a7e 347 int gain_number = Modem_DATA[0];
skyyoungsik 2:3fe595ba6a7e 348 if ((gain_number >= 1) & (gain_number <= 20)) {
skyyoungsik 2:3fe595ba6a7e 349 gain_px100[gain_number - 1] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 2:3fe595ba6a7e 350 gain_dx100[gain_number - 1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
skyyoungsik 2:3fe595ba6a7e 351 gain_ix100[gain_number - 1] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
skyyoungsik 2:3fe595ba6a7e 352 eeprom_write(EEPROM_GAIN_P_UP[gain_number - 1], gain_px100[gain_number - 1] / 256);
skyyoungsik 2:3fe595ba6a7e 353 eeprom_write(EEPROM_GAIN_P_DOWN[gain_number - 1], gain_px100[gain_number - 1] % 256);
skyyoungsik 2:3fe595ba6a7e 354 eeprom_write(EEPROM_GAIN_D_UP[gain_number - 1], gain_dx100[gain_number - 1] / 256);
skyyoungsik 2:3fe595ba6a7e 355 eeprom_write(EEPROM_GAIN_D_DOWN[gain_number - 1], gain_dx100[gain_number - 1] % 256);
skyyoungsik 2:3fe595ba6a7e 356 eeprom_write(EEPROM_GAIN_I_UP[gain_number - 1], gain_ix100[gain_number - 1] / 256);
skyyoungsik 2:3fe595ba6a7e 357 eeprom_write(EEPROM_GAIN_I_DOWN[gain_number - 1], gain_ix100[gain_number - 1] % 256);
skyyoungsik 2:3fe595ba6a7e 358 if(gain_number == 20)eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 359 }
skyyoungsik 2:3fe595ba6a7e 360 break;
skyyoungsik 2:3fe595ba6a7e 361 }
skyyoungsik 2:3fe595ba6a7e 362
skyyoungsik 2:3fe595ba6a7e 363 }
skyyoungsik 2:3fe595ba6a7e 364 }
skyyoungsik 2:3fe595ba6a7e 365
skyyoungsik 2:3fe595ba6a7e 366 }
skyyoungsik 2:3fe595ba6a7e 367 void ROBOFRIEN_GUI::trans_empty_data(int id_dest, int data_parse_num) {
skyyoungsik 2:3fe595ba6a7e 368 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 2:3fe595ba6a7e 369 uint8_t Packet_Identifier[2];
skyyoungsik 2:3fe595ba6a7e 370 uint8_t Packet_DC[3];
skyyoungsik 2:3fe595ba6a7e 371 uint8_t Packet_CHKSUM[2];
skyyoungsik 2:3fe595ba6a7e 372 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 2:3fe595ba6a7e 373 // Identifier //
skyyoungsik 2:3fe595ba6a7e 374 Packet_Identifier[0] = 0;
skyyoungsik 2:3fe595ba6a7e 375 Packet_Identifier[1] = id_dest;
skyyoungsik 2:3fe595ba6a7e 376 // Data Control //
skyyoungsik 2:3fe595ba6a7e 377 Packet_DC[0] = 0;
skyyoungsik 2:3fe595ba6a7e 378 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 2:3fe595ba6a7e 379 int data_length = 0;
skyyoungsik 2:3fe595ba6a7e 380 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 2:3fe595ba6a7e 381
skyyoungsik 2:3fe595ba6a7e 382 // CHKSUM //
skyyoungsik 2:3fe595ba6a7e 383 unsigned int data_checksum = 0;
skyyoungsik 2:3fe595ba6a7e 384 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 2:3fe595ba6a7e 385 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 2:3fe595ba6a7e 386
skyyoungsik 2:3fe595ba6a7e 387 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 2:3fe595ba6a7e 388 uint8_t modem_buffer[11];
skyyoungsik 2:3fe595ba6a7e 389 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 2:3fe595ba6a7e 390 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 2:3fe595ba6a7e 391 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 2:3fe595ba6a7e 392 modem_buffer[7] = Packet_CHKSUM[0];
skyyoungsik 2:3fe595ba6a7e 393 modem_buffer[8] = Packet_CHKSUM[1];
skyyoungsik 2:3fe595ba6a7e 394 modem_buffer[9] = Packet_EOF[0];
skyyoungsik 2:3fe595ba6a7e 395 modem_buffer[10] = Packet_EOF[1];
skyyoungsik 2:3fe595ba6a7e 396 for (int i = 0; i <= 10; i++) {
skyyoungsik 2:3fe595ba6a7e 397 pc.putc(modem_buffer[i]);
skyyoungsik 2:3fe595ba6a7e 398 }
skyyoungsik 2:3fe595ba6a7e 399 }
skyyoungsik 2:3fe595ba6a7e 400
skyyoungsik 2:3fe595ba6a7e 401 void ROBOFRIEN_GUI::trans_configuration_data(int id_dest, int data_parse_num, int data_parse_detail_num) {
skyyoungsik 2:3fe595ba6a7e 402
skyyoungsik 2:3fe595ba6a7e 403 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 2:3fe595ba6a7e 404 uint8_t Packet_Identifier[2];
skyyoungsik 2:3fe595ba6a7e 405 uint8_t Packet_DC[3];
skyyoungsik 2:3fe595ba6a7e 406 uint8_t Packet_DATA[16];
skyyoungsik 2:3fe595ba6a7e 407 uint8_t Packet_CHKSUM[2];
skyyoungsik 2:3fe595ba6a7e 408 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 2:3fe595ba6a7e 409 // Identifier //
skyyoungsik 2:3fe595ba6a7e 410 Packet_Identifier[0] = 0;
skyyoungsik 2:3fe595ba6a7e 411 Packet_Identifier[1] = id_dest;
skyyoungsik 2:3fe595ba6a7e 412 // Data Control //
skyyoungsik 2:3fe595ba6a7e 413 Packet_DC[0] = 0;
skyyoungsik 2:3fe595ba6a7e 414 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 2:3fe595ba6a7e 415 int data_length = 16;
skyyoungsik 2:3fe595ba6a7e 416 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 2:3fe595ba6a7e 417 // DATA //
skyyoungsik 2:3fe595ba6a7e 418 switch (data_parse_num) {
skyyoungsik 2:3fe595ba6a7e 419 case 0:
skyyoungsik 2:3fe595ba6a7e 420 //// Empty Data ////
skyyoungsik 2:3fe595ba6a7e 421 for (int i = 0; i <= 15; i++) {
skyyoungsik 2:3fe595ba6a7e 422 Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 423 }
skyyoungsik 2:3fe595ba6a7e 424 break;
skyyoungsik 2:3fe595ba6a7e 425 case 1:
skyyoungsik 2:3fe595ba6a7e 426 //// MODEM ////
skyyoungsik 2:3fe595ba6a7e 427 Packet_DATA[0] = model_type1;
skyyoungsik 2:3fe595ba6a7e 428 Packet_DATA[1] = model_type2 / 256; Packet_DATA[2] = model_type2 % 256;
skyyoungsik 2:3fe595ba6a7e 429 for (int i = 3; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 430 break;
skyyoungsik 2:3fe595ba6a7e 431 case 2:
skyyoungsik 2:3fe595ba6a7e 432 //// Firmware ////
skyyoungsik 2:3fe595ba6a7e 433 for (int i = 0; i <= 13; i++) {
skyyoungsik 2:3fe595ba6a7e 434 Packet_DATA[i] = MODEL_INFO[i];
skyyoungsik 2:3fe595ba6a7e 435 }
skyyoungsik 2:3fe595ba6a7e 436 float firmware_info;
skyyoungsik 2:3fe595ba6a7e 437 firmware_info = FIRMWARE_INFO;
skyyoungsik 2:3fe595ba6a7e 438 Packet_DATA[14] = (uint8_t)(firmware_info * 100 / 256); Packet_DATA[15] = (uint8_t)((uint32_t)(firmware_info * 100) % 256);
skyyoungsik 2:3fe595ba6a7e 439 break;
skyyoungsik 2:3fe595ba6a7e 440 case 3:
skyyoungsik 2:3fe595ba6a7e 441 //// RC Receiver ////
skyyoungsik 2:3fe595ba6a7e 442 if (data_parse_detail_num == 0) {
skyyoungsik 2:3fe595ba6a7e 443 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;
skyyoungsik 2:3fe595ba6a7e 444 }
skyyoungsik 2:3fe595ba6a7e 445 else if(data_parse_detail_num <= 8){
skyyoungsik 2:3fe595ba6a7e 446 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;
skyyoungsik 2:3fe595ba6a7e 447 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;
skyyoungsik 2:3fe595ba6a7e 448 }
skyyoungsik 2:3fe595ba6a7e 449 else {
skyyoungsik 2:3fe595ba6a7e 450 for (int i = 0; i <= 7; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 451 }
skyyoungsik 2:3fe595ba6a7e 452 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;
skyyoungsik 2:3fe595ba6a7e 453 break;
skyyoungsik 2:3fe595ba6a7e 454 case 4:
skyyoungsik 2:3fe595ba6a7e 455 for(int i=0; i<16; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 456 break;
skyyoungsik 2:3fe595ba6a7e 457 case 5:
skyyoungsik 2:3fe595ba6a7e 458 /////// LED //////////
skyyoungsik 2:3fe595ba6a7e 459 Packet_DATA[0] = headlight_period; Packet_DATA[1] = headlight_dutyrate; Packet_DATA[2] = sidelight_period; Packet_DATA[3] = sidelight_dutyrate;
skyyoungsik 2:3fe595ba6a7e 460 break;
skyyoungsik 2:3fe595ba6a7e 461 case 6:
skyyoungsik 2:3fe595ba6a7e 462 //// AHRS - Roll , Pitch ///
skyyoungsik 2:3fe595ba6a7e 463 Packet_DATA[0] = 0;
skyyoungsik 2:3fe595ba6a7e 464 Packet_DATA[1] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) / 256);
skyyoungsik 2:3fe595ba6a7e 465 Packet_DATA[2] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) % 256);
skyyoungsik 2:3fe595ba6a7e 466 Packet_DATA[3] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) / 256);
skyyoungsik 2:3fe595ba6a7e 467 Packet_DATA[4] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) % 256);
skyyoungsik 2:3fe595ba6a7e 468 //// AHRS - Yaw ///
skyyoungsik 2:3fe595ba6a7e 469 Packet_DATA[5] = 0; Packet_DATA[6] = 0;
skyyoungsik 2:3fe595ba6a7e 470 Packet_DATA[7] = (uint8_t)Compass_Calibration_Mode;
skyyoungsik 2:3fe595ba6a7e 471 Packet_DATA[8] = (uint8_t)((unsigned long)(yawx100) / 256);
skyyoungsik 2:3fe595ba6a7e 472 Packet_DATA[9] = (uint8_t)((unsigned long)(yawx100) % 256);
skyyoungsik 2:3fe595ba6a7e 473 Packet_DATA[10] = (uint8_t)((long)((declination_angle + 180) * 100)/256);
skyyoungsik 2:3fe595ba6a7e 474 Packet_DATA[11] = (uint8_t)((long)((declination_angle + 180) * 100)%256);
skyyoungsik 2:3fe595ba6a7e 475 for (int i = 12; i <= 15; i++)Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 476 break;
skyyoungsik 2:3fe595ba6a7e 477 case 7:
skyyoungsik 2:3fe595ba6a7e 478 /// Limit ANGLE ////
skyyoungsik 2:3fe595ba6a7e 479 Packet_DATA[0] = (limit_rollx100 + 32767) / 256;
skyyoungsik 2:3fe595ba6a7e 480 Packet_DATA[1] = (limit_rollx100 + 32767) % 256;
skyyoungsik 2:3fe595ba6a7e 481 Packet_DATA[2] = (limit_pitchx100 + 32767) / 256;
skyyoungsik 2:3fe595ba6a7e 482 Packet_DATA[3] = (limit_pitchx100 + 32767) % 256;
skyyoungsik 2:3fe595ba6a7e 483 Packet_DATA[4] = (limit_roll_rate + 32767) / 256;
skyyoungsik 2:3fe595ba6a7e 484 Packet_DATA[5] = (limit_roll_rate + 32767) % 256;
skyyoungsik 2:3fe595ba6a7e 485 Packet_DATA[6] = (limit_pitch_rate + 32767) / 256;
skyyoungsik 2:3fe595ba6a7e 486 Packet_DATA[7] = (limit_pitch_rate + 32767) % 256;
skyyoungsik 2:3fe595ba6a7e 487 Packet_DATA[8] = (limit_yaw_rate + 32767) / 256;
skyyoungsik 2:3fe595ba6a7e 488 Packet_DATA[9] = (limit_yaw_rate + 32767) % 256;
skyyoungsik 2:3fe595ba6a7e 489 for (int i = 10; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 490 break;
skyyoungsik 2:3fe595ba6a7e 491 case 8:
skyyoungsik 2:3fe595ba6a7e 492 Packet_DATA[0] = data_parse_detail_num;
skyyoungsik 2:3fe595ba6a7e 493 if ((data_parse_detail_num > 0)&(data_parse_detail_num <= 20)) {
skyyoungsik 2:3fe595ba6a7e 494 Packet_DATA[1] = gain_px100[data_parse_detail_num - 1] / 256;
skyyoungsik 2:3fe595ba6a7e 495 Packet_DATA[2] = gain_px100[data_parse_detail_num - 1] % 256;
skyyoungsik 2:3fe595ba6a7e 496 Packet_DATA[3] = gain_dx100[data_parse_detail_num - 1] / 256;
skyyoungsik 2:3fe595ba6a7e 497 Packet_DATA[4] = gain_dx100[data_parse_detail_num - 1] % 256;
skyyoungsik 2:3fe595ba6a7e 498 Packet_DATA[5] = gain_ix100[data_parse_detail_num - 1] / 256;
skyyoungsik 2:3fe595ba6a7e 499 Packet_DATA[6] = gain_ix100[data_parse_detail_num - 1] % 256;
skyyoungsik 2:3fe595ba6a7e 500 for (int i = 7; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 501 }
skyyoungsik 2:3fe595ba6a7e 502 else {
skyyoungsik 2:3fe595ba6a7e 503 for (int i = 1; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 2:3fe595ba6a7e 504 }
skyyoungsik 2:3fe595ba6a7e 505 break;
skyyoungsik 2:3fe595ba6a7e 506 }
skyyoungsik 2:3fe595ba6a7e 507
skyyoungsik 2:3fe595ba6a7e 508 // CHKSUM //
skyyoungsik 2:3fe595ba6a7e 509 unsigned int data_checksum = 0;
skyyoungsik 2:3fe595ba6a7e 510 for (int i = 0; i < data_length; i++) {
skyyoungsik 2:3fe595ba6a7e 511 data_checksum += Packet_DATA[i];
skyyoungsik 2:3fe595ba6a7e 512 }
skyyoungsik 2:3fe595ba6a7e 513 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 2:3fe595ba6a7e 514 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 2:3fe595ba6a7e 515
skyyoungsik 2:3fe595ba6a7e 516 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 2:3fe595ba6a7e 517 uint8_t modem_buffer[27];
skyyoungsik 2:3fe595ba6a7e 518 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 2:3fe595ba6a7e 519 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 2:3fe595ba6a7e 520 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 2:3fe595ba6a7e 521 for (int i = 0; i < data_length; i++) {
skyyoungsik 2:3fe595ba6a7e 522 modem_buffer[i + 7] = Packet_DATA[i];
skyyoungsik 2:3fe595ba6a7e 523 }
skyyoungsik 2:3fe595ba6a7e 524 modem_buffer[23] = Packet_CHKSUM[0];
skyyoungsik 2:3fe595ba6a7e 525 modem_buffer[24] = Packet_CHKSUM[1];
skyyoungsik 2:3fe595ba6a7e 526 modem_buffer[25] = Packet_EOF[0];
skyyoungsik 2:3fe595ba6a7e 527 modem_buffer[26] = Packet_EOF[1];
skyyoungsik 2:3fe595ba6a7e 528 for (int i = 0; i <= 26; i++) {
skyyoungsik 2:3fe595ba6a7e 529 pc.putc(modem_buffer[i]);
skyyoungsik 2:3fe595ba6a7e 530 }
skyyoungsik 2:3fe595ba6a7e 531 }
skyyoungsik 2:3fe595ba6a7e 532
skyyoungsik 2:3fe595ba6a7e 533 void ROBOFRIEN_GUI::trans_flight_data(int id_dest, int data_parse_num) {
skyyoungsik 2:3fe595ba6a7e 534
skyyoungsik 2:3fe595ba6a7e 535 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 2:3fe595ba6a7e 536 uint8_t Packet_Identifier[2];
skyyoungsik 2:3fe595ba6a7e 537 uint8_t Packet_DC[3];
skyyoungsik 2:3fe595ba6a7e 538 uint8_t Packet_DATA[73];
skyyoungsik 2:3fe595ba6a7e 539 uint8_t Packet_CHKSUM[2];
skyyoungsik 2:3fe595ba6a7e 540 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 2:3fe595ba6a7e 541 // Identifier //
skyyoungsik 2:3fe595ba6a7e 542 Packet_Identifier[0] = 0;
skyyoungsik 2:3fe595ba6a7e 543 Packet_Identifier[1] = id_dest;
skyyoungsik 2:3fe595ba6a7e 544 // Data Control //
skyyoungsik 2:3fe595ba6a7e 545 Packet_DC[0] = 0;
skyyoungsik 2:3fe595ba6a7e 546 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 2:3fe595ba6a7e 547 int data_length;
skyyoungsik 2:3fe595ba6a7e 548 if (data_parse_num == 0) data_length = 73;
skyyoungsik 2:3fe595ba6a7e 549 else data_length = 16;
skyyoungsik 2:3fe595ba6a7e 550 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 2:3fe595ba6a7e 551 // DATA - Modem & State //
skyyoungsik 2:3fe595ba6a7e 552 if(Mode1 >= 15) Mode1 = 15;
skyyoungsik 2:3fe595ba6a7e 553 else if(Mode1 <= 0) Mode1 = 0;
skyyoungsik 2:3fe595ba6a7e 554 if(Mode2 >= 15) Mode2 = 15;
skyyoungsik 2:3fe595ba6a7e 555 else if(Mode2 <= 0) Mode2 = 0;
skyyoungsik 2:3fe595ba6a7e 556 if(MissionState >= 15) MissionState = 15;
skyyoungsik 2:3fe595ba6a7e 557 else if(MissionState <= 0) MissionState = 0;
skyyoungsik 2:3fe595ba6a7e 558 if(CurrentMarker >= 20) CurrentMarker = 20;
skyyoungsik 2:3fe595ba6a7e 559 else if(CurrentMarker <= 0) CurrentMarker = 0;
skyyoungsik 2:3fe595ba6a7e 560 HomePointChksum = ((Homepoint_Lat + 90000000)/16777216) + ((Homepoint_Lat + 90000000)%16777216/65536) + ((Homepoint_Lat + 90000000)%65536/256) + ((Homepoint_Lat + 90000000)%256);
skyyoungsik 2:3fe595ba6a7e 561 HomePointChksum += ((Homepoint_Lng + 180000000)/16777216) + ((Homepoint_Lng + 180000000)%16777216/65536) + ((Homepoint_Lng + 180000000)%65536/256) + ((Homepoint_Lng + 180000000)%256);
skyyoungsik 2:3fe595ba6a7e 562 HomePointChksum += ((Homepoint_Alt + 10000)/256 + (Homepoint_Alt + 10000)%256);
skyyoungsik 2:3fe595ba6a7e 563 MarkerChksum = 0;
skyyoungsik 2:3fe595ba6a7e 564 for(int i=0; i<20; i++){
skyyoungsik 2:3fe595ba6a7e 565 MarkerChksum += Marker_Mode[i];
skyyoungsik 2:3fe595ba6a7e 566 MarkerChksum += (Marker_Lat[i]+90000000)/16777216 + (Marker_Lat[i]+90000000)%16777216/65536 + (Marker_Lat[i]+90000000)%65536/256 + (Marker_Lat[i]+90000000)%256;
skyyoungsik 2:3fe595ba6a7e 567 MarkerChksum += (Marker_Lng[i]+180000000)/16777216 + (Marker_Lng[i]+180000000)%16777216/65536 + (Marker_Lng[i]+180000000)%65536/256 + (Marker_Lng[i]+180000000)%256;
skyyoungsik 2:3fe595ba6a7e 568 MarkerChksum += (Marker_Alt[i]+10000)/256 + (Marker_Alt[i]+10000)%256;
skyyoungsik 2:3fe595ba6a7e 569 MarkerChksum += Marker_Speed[i]/256 + Marker_Speed[i]%256;
skyyoungsik 2:3fe595ba6a7e 570 }
skyyoungsik 2:3fe595ba6a7e 571 Packet_DATA[0] = Mode1 * 16 + Mode2;
skyyoungsik 2:3fe595ba6a7e 572 Packet_DATA[1] = MissionState;
skyyoungsik 2:3fe595ba6a7e 573 Packet_DATA[2] = CurrentMarker;
skyyoungsik 2:3fe595ba6a7e 574 Packet_DATA[3] = Bat1;
skyyoungsik 2:3fe595ba6a7e 575 Packet_DATA[4] = Bat2;
skyyoungsik 2:3fe595ba6a7e 576 Packet_DATA[5] = button[0] * 1 + button[1] * 2 + button[2] * 4 + button[3] * 8 + button[4] * 16;
skyyoungsik 2:3fe595ba6a7e 577 Packet_DATA[6] = HomePointChksum%256;
skyyoungsik 2:3fe595ba6a7e 578 Packet_DATA[7] = MarkerChksum % 256;
skyyoungsik 2:3fe595ba6a7e 579 // DATA - GPS //
skyyoungsik 2:3fe595ba6a7e 580 unsigned long send_gps_time = utc_time;
skyyoungsik 2:3fe595ba6a7e 581 Packet_DATA[8] = send_gps_time / 16777216;
skyyoungsik 2:3fe595ba6a7e 582 Packet_DATA[9] = send_gps_time % 16777216 / 65536;
skyyoungsik 2:3fe595ba6a7e 583 Packet_DATA[10] = send_gps_time % 65536 / 256;
skyyoungsik 2:3fe595ba6a7e 584 Packet_DATA[11] = send_gps_time % 256;
skyyoungsik 2:3fe595ba6a7e 585 signed long send_gps_latitude = latitude + 90000000;
skyyoungsik 2:3fe595ba6a7e 586 Packet_DATA[12] = send_gps_latitude / 16777216;
skyyoungsik 2:3fe595ba6a7e 587 Packet_DATA[13] = send_gps_latitude % 16777216 / 65536;
skyyoungsik 2:3fe595ba6a7e 588 Packet_DATA[14] = send_gps_latitude % 65536 / 256;
skyyoungsik 2:3fe595ba6a7e 589 Packet_DATA[15] = send_gps_latitude % 256;
skyyoungsik 2:3fe595ba6a7e 590 signed long send_gps_longitude = longitude + 180000000;
skyyoungsik 2:3fe595ba6a7e 591 Packet_DATA[16] = send_gps_longitude / 16777216;
skyyoungsik 2:3fe595ba6a7e 592 Packet_DATA[17] = send_gps_longitude % 16777216 / 65536;
skyyoungsik 2:3fe595ba6a7e 593 Packet_DATA[18] = send_gps_longitude % 65536 / 256;
skyyoungsik 2:3fe595ba6a7e 594 Packet_DATA[19] = send_gps_longitude % 256;
skyyoungsik 2:3fe595ba6a7e 595 signed long send_altitude;
skyyoungsik 2:3fe595ba6a7e 596 if ((altitude + 10000) < 0) send_altitude = -10000;
skyyoungsik 2:3fe595ba6a7e 597 else send_altitude = (altitude + 10000);
skyyoungsik 2:3fe595ba6a7e 598 Packet_DATA[20] = send_altitude / 256;
skyyoungsik 2:3fe595ba6a7e 599 Packet_DATA[21] = send_altitude % 256;
skyyoungsik 2:3fe595ba6a7e 600 Packet_DATA[22] = SatNum;
skyyoungsik 2:3fe595ba6a7e 601 // AHRS //
skyyoungsik 2:3fe595ba6a7e 602 unsigned long send_roll = rollx100 + 32767;
skyyoungsik 2:3fe595ba6a7e 603 Packet_DATA[23] = send_roll / 256;
skyyoungsik 2:3fe595ba6a7e 604 Packet_DATA[24] = send_roll % 256;
skyyoungsik 2:3fe595ba6a7e 605 unsigned long send_pitch = pitchx100 + 32767;
skyyoungsik 2:3fe595ba6a7e 606 Packet_DATA[25] = send_pitch / 256;
skyyoungsik 2:3fe595ba6a7e 607 Packet_DATA[26] = send_pitch % 256;
skyyoungsik 2:3fe595ba6a7e 608 unsigned long send_yaw = yawx100;
skyyoungsik 2:3fe595ba6a7e 609 Packet_DATA[27] = send_yaw / 256;
skyyoungsik 2:3fe595ba6a7e 610 Packet_DATA[28] = send_yaw % 256;
skyyoungsik 2:3fe595ba6a7e 611 unsigned long send_roll_rate = (roll_ratex100 +32767);
skyyoungsik 2:3fe595ba6a7e 612 Packet_DATA[29] = send_roll_rate / 256;
skyyoungsik 2:3fe595ba6a7e 613 Packet_DATA[30] = send_roll_rate % 256;
skyyoungsik 2:3fe595ba6a7e 614 unsigned long send_pitch_rate = (pitch_ratex100 + 32767);
skyyoungsik 2:3fe595ba6a7e 615 Packet_DATA[31] = send_pitch_rate / 256;
skyyoungsik 2:3fe595ba6a7e 616 Packet_DATA[32] = send_pitch_rate % 256;
skyyoungsik 2:3fe595ba6a7e 617 unsigned long send_yaw_rate = (yaw_ratex100 + 32767);
skyyoungsik 2:3fe595ba6a7e 618 Packet_DATA[33] = send_yaw_rate / 256;
skyyoungsik 2:3fe595ba6a7e 619 Packet_DATA[34] = send_yaw_rate % 256;
skyyoungsik 2:3fe595ba6a7e 620 unsigned long send_velocity_x = (VXx100 + 32767);
skyyoungsik 2:3fe595ba6a7e 621 Packet_DATA[35] = send_velocity_x / 256;
skyyoungsik 2:3fe595ba6a7e 622 Packet_DATA[36] = send_velocity_x % 256;
skyyoungsik 2:3fe595ba6a7e 623 unsigned long send_velocity_y = (VYx100 + 32767);
skyyoungsik 2:3fe595ba6a7e 624 Packet_DATA[37] = send_velocity_y / 256;
skyyoungsik 2:3fe595ba6a7e 625 Packet_DATA[38] = send_velocity_y % 256;
skyyoungsik 2:3fe595ba6a7e 626 unsigned long send_velocity_z = (VZx100 + 32767);
skyyoungsik 2:3fe595ba6a7e 627 Packet_DATA[39] = send_velocity_z / 256;
skyyoungsik 2:3fe595ba6a7e 628 Packet_DATA[40] = send_velocity_z % 256;
skyyoungsik 2:3fe595ba6a7e 629 // CAP and PWM //
skyyoungsik 2:3fe595ba6a7e 630 Packet_DATA[41] = (cap[0] + 127);
skyyoungsik 2:3fe595ba6a7e 631 Packet_DATA[42] = (cap[1] + 127);
skyyoungsik 2:3fe595ba6a7e 632 Packet_DATA[43] = (cap[2] + 127);
skyyoungsik 2:3fe595ba6a7e 633 Packet_DATA[44] = (cap[3] + 127);
skyyoungsik 2:3fe595ba6a7e 634 Packet_DATA[45] = (cap[4] + 127);
skyyoungsik 2:3fe595ba6a7e 635 Packet_DATA[46] = (cap[5] + 127);
skyyoungsik 2:3fe595ba6a7e 636 Packet_DATA[47] = (cap[6] + 127);
skyyoungsik 2:3fe595ba6a7e 637 Packet_DATA[48] = (cap[7] + 127);
skyyoungsik 2:3fe595ba6a7e 638
skyyoungsik 2:3fe595ba6a7e 639 // PWM //
skyyoungsik 2:3fe595ba6a7e 640 for (int i = 49; i <= 56; i++) {
skyyoungsik 2:3fe595ba6a7e 641 Packet_DATA[i] = pwm[i-49];
skyyoungsik 2:3fe595ba6a7e 642 }
skyyoungsik 2:3fe595ba6a7e 643 // DEBUG //
skyyoungsik 2:3fe595ba6a7e 644 Packet_DATA[57] = (int)((DEBUGx100[0]))/256;
skyyoungsik 2:3fe595ba6a7e 645 Packet_DATA[58] = (int)((DEBUGx100[0]))%256;
skyyoungsik 2:3fe595ba6a7e 646 Packet_DATA[59] = (int)((DEBUGx100[1]))/256;
skyyoungsik 2:3fe595ba6a7e 647 Packet_DATA[60] = (int)((DEBUGx100[1]))%256;
skyyoungsik 2:3fe595ba6a7e 648 Packet_DATA[61] = (int)((DEBUGx100[2]))/256;
skyyoungsik 2:3fe595ba6a7e 649 Packet_DATA[62] = (int)((DEBUGx100[2]))%256;
skyyoungsik 2:3fe595ba6a7e 650 Packet_DATA[63] = (int)((DEBUGx100[3]))/256;
skyyoungsik 2:3fe595ba6a7e 651 Packet_DATA[64] = (int)((DEBUGx100[3]))%256;
skyyoungsik 2:3fe595ba6a7e 652 Packet_DATA[65] = (int)((DEBUGx100[4]))/256;
skyyoungsik 2:3fe595ba6a7e 653 Packet_DATA[66] = (int)((DEBUGx100[4]))%256;
skyyoungsik 2:3fe595ba6a7e 654 Packet_DATA[67] = (int)((DEBUGx100[5]))/256;
skyyoungsik 2:3fe595ba6a7e 655 Packet_DATA[68] = (int)((DEBUGx100[5]))%256;
skyyoungsik 2:3fe595ba6a7e 656 Packet_DATA[69] = (int)((DEBUGx100[6]))/256;
skyyoungsik 2:3fe595ba6a7e 657 Packet_DATA[70] = (int)((DEBUGx100[6]))%256;
skyyoungsik 2:3fe595ba6a7e 658 Packet_DATA[71] = (int)((DEBUGx100[7]))/256;
skyyoungsik 2:3fe595ba6a7e 659 Packet_DATA[72] = (int)((DEBUGx100[7]))%256;
skyyoungsik 2:3fe595ba6a7e 660 // CHKSUM //
skyyoungsik 2:3fe595ba6a7e 661 unsigned int data_checksum = 0;
skyyoungsik 2:3fe595ba6a7e 662 for (int i = 0; i < data_length; i++) {
skyyoungsik 2:3fe595ba6a7e 663 data_checksum += Packet_DATA[i];
skyyoungsik 2:3fe595ba6a7e 664 }
skyyoungsik 2:3fe595ba6a7e 665 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 2:3fe595ba6a7e 666 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 2:3fe595ba6a7e 667
skyyoungsik 2:3fe595ba6a7e 668 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 2:3fe595ba6a7e 669 uint8_t modem_buffer[84];
skyyoungsik 2:3fe595ba6a7e 670 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 2:3fe595ba6a7e 671 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 2:3fe595ba6a7e 672 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 2:3fe595ba6a7e 673 for (int i = 0; i < 73; i++) {
skyyoungsik 2:3fe595ba6a7e 674 modem_buffer[i + 7] = Packet_DATA[i];
skyyoungsik 2:3fe595ba6a7e 675 }
skyyoungsik 2:3fe595ba6a7e 676 modem_buffer[80] = Packet_CHKSUM[0];
skyyoungsik 2:3fe595ba6a7e 677 modem_buffer[81] = Packet_CHKSUM[1];
skyyoungsik 2:3fe595ba6a7e 678 modem_buffer[82] = Packet_EOF[0];
skyyoungsik 2:3fe595ba6a7e 679 modem_buffer[83] = Packet_EOF[1];
skyyoungsik 2:3fe595ba6a7e 680 for (int i = 0; i <= 83; i++) {
skyyoungsik 2:3fe595ba6a7e 681 pc.putc(modem_buffer[i]);
skyyoungsik 2:3fe595ba6a7e 682 }
skyyoungsik 2:3fe595ba6a7e 683 }
skyyoungsik 2:3fe595ba6a7e 684
skyyoungsik 3:cf5a27438655 685 void ROBOFRIEN_GUI::attitude_calibrate(float in_acc_bias_x, float in_acc_bias_y, float in_acc_bias_z){
skyyoungsik 3:cf5a27438655 686 // calibrate_gap_roll += rollAngle;
skyyoungsik 3:cf5a27438655 687 // calibrate_gap_pitch += pitchAngle;
skyyoungsik 3:cf5a27438655 688 cal_accel_bias[0] = in_acc_bias_x;
skyyoungsik 3:cf5a27438655 689 cal_accel_bias[1] = in_acc_bias_y;
skyyoungsik 3:cf5a27438655 690 cal_accel_bias[2] = (in_acc_bias_z);
skyyoungsik 3:cf5a27438655 691 eeprom_write(EEPROM_AHRS_ROLL_GAP_UP, (((unsigned long)(in_acc_bias_x * 10000 + 32767) / 256)));
skyyoungsik 3:cf5a27438655 692 eeprom_write(EEPROM_AHRS_ROLL_GAP_DOWN, (((unsigned long)(in_acc_bias_x * 10000 + 32767) % 256)));
skyyoungsik 3:cf5a27438655 693 eeprom_write(EEPROM_AHRS_PITCH_GAP_UP, (((unsigned long)(in_acc_bias_y * 10000 + 32767) / 256)));
skyyoungsik 3:cf5a27438655 694 eeprom_write(EEPROM_AHRS_PITCH_GAP_DOWN, (((unsigned long)(in_acc_bias_y * 10000 + 32767) % 256)));
skyyoungsik 3:cf5a27438655 695 eeprom_write(EEPROM_AHRS_YAW_GAP_UP, (((unsigned long)(in_acc_bias_z * 10000 + 32767) / 256)));
skyyoungsik 3:cf5a27438655 696 eeprom_write(EEPROM_AHRS_YAW_GAP_DOWN, (((unsigned long)(in_acc_bias_z * 10000 + 32767) % 256)));
skyyoungsik 2:3fe595ba6a7e 697 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 698 }
skyyoungsik 2:3fe595ba6a7e 699
skyyoungsik 2:3fe595ba6a7e 700 void ROBOFRIEN_GUI::write_compass_setting_to_eeprom(){
skyyoungsik 2:3fe595ba6a7e 701 eeprom_write(EEPROM_AHRS_YAW_X_GAP_1, ( (uint32_t)(mag_x_avg + 32767)/256 ) );
skyyoungsik 2:3fe595ba6a7e 702 eeprom_write(EEPROM_AHRS_YAW_X_GAP_2, ( (uint32_t)(mag_x_avg + 32767)%256 ) );
skyyoungsik 2:3fe595ba6a7e 703 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_FLOAT, ( (unsigned long)(mag_x_avg * 100)%100 ) );
skyyoungsik 2:3fe595ba6a7e 704 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_3, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%65536/256 ) );
skyyoungsik 2:3fe595ba6a7e 705 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_4, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%256 ) );
skyyoungsik 2:3fe595ba6a7e 706
skyyoungsik 2:3fe595ba6a7e 707 eeprom_write(EEPROM_AHRS_YAW_Y_GAP_1, ( (uint32_t)(mag_y_avg + 32767)/256 ) );
skyyoungsik 2:3fe595ba6a7e 708 eeprom_write(EEPROM_AHRS_YAW_Y_GAP_2, ( (uint32_t)(mag_y_avg + 32767)%256 ) );
skyyoungsik 2:3fe595ba6a7e 709 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_FLOAT, ( (unsigned long)(mag_y_avg * 100)%100 ) );
skyyoungsik 2:3fe595ba6a7e 710 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_3, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%65536/256 ) );
skyyoungsik 2:3fe595ba6a7e 711 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_4, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%256 ) );
skyyoungsik 2:3fe595ba6a7e 712
skyyoungsik 2:3fe595ba6a7e 713 eeprom_write(EEPROM_AHRS_YAW_Z_GAP_1, ( (uint32_t)(mag_z_avg + 32767)/256 ) );
skyyoungsik 2:3fe595ba6a7e 714 eeprom_write(EEPROM_AHRS_YAW_Z_GAP_2, ( (uint32_t)(mag_z_avg + 32767)%256 ) );
skyyoungsik 2:3fe595ba6a7e 715
skyyoungsik 2:3fe595ba6a7e 716 eeprom_refresh();
skyyoungsik 2:3fe595ba6a7e 717 }