#include "debug.h" #include "MDR32F9Qx_port.h" #include "MDR32F9Qx_can.h" #include "selftesting.h" #include "bupdatastorage.h" #include "kmonshelf.h" #include "config.h" #include "otherlib.h" #include "math.model/flightController/flightController.h" // РкаÑеÑÑве оÑладоÑного CAN иÑполÑзÑеÑÑÑ CAN1 #define CAN_DEBUG MDR_CAN1 // ÐлобалÑнÑй ÑкземплÑÑ Ð¾ÑладоÑной ÑÑÑÑкÑÑÑÑ debug_output debug_vars; /********************************************************************************************************* debug_can - УнивеÑÑалÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²Ñвода пеÑеменнÑÑ Ð»Ñбого Ñипа в CAN **********************************************************************************************************/ void debug_can(unsigned short id, void* data, unsigned char size) { CAN_TxMsgTypeDef Tx_msg; // СÑÑÑкÑÑÑа CAN ÑообÑÐµÐ½Ð¸Ñ unsigned int i = 0; // СÑеÑÑик unsigned int Buffer_number; // ÐÐ¾Ð¼ÐµÑ Ñвободного бÑÑеÑа TimeoutType timeout; // ТаймаÑÑ ÐºÐ¾Ð½ÑÑÐ¾Ð»Ñ Tx_msg.ID = CAN_STDID_TO_EXTID(id); Tx_msg.PRIOR_0 = DISABLE; Tx_msg.IDE = CAN_ID_STD; Tx_msg.DLC = size; Tx_msg.Data[0] = 0; Tx_msg.Data[1] = 0; // ÐаполнÑем ÑообÑение for (i = 0; i < size; i++) *((unsigned char*)Tx_msg.Data + i) = *((unsigned char*)data + i); // СпÑоÑим какой из бÑÑеÑов Ñвободен Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Buffer_number = CAN_GetDisabledBuffer (CAN_DEBUG); // ÐладÑм ÑообÑение в нÑжнÑй бÑÑÐµÑ Ð¸ ждем оÑпÑавки CAN_Transmit(CAN_DEBUG, Buffer_number, &Tx_msg); // Ðжидаем конÑа пеÑедаÑи, либо пÑевÑÑÐµÐ½Ð¸Ñ Ð²Ñемени Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ setTimeout (&timeout, 1); while(((CAN_GetBufferStatus(CAN_DEBUG, Buffer_number) & CAN_STATUS_TX_REQ) != RESET) && (timeoutStatus(&timeout) != TIME_IS_UP)); // Ðне завиÑимоÑÑи Ð¾Ñ Ñого, ÑдалоÑÑ Ð¾ÑпÑавиÑÑ Ð¸Ð»Ð¸ неÑ, оÑвобождаем бÑÑÐµÑ CAN_BufferRelease (CAN_DEBUG, Buffer_number); } /********************************************************************************************************* debug_can_full_struct - ÐÑвод вÑей ÑÑÑÑкÑÑÑÑ Ð¾ÑладоÑной инÑоÑмаÑии **********************************************************************************************************/ void debug_can_full_struct (void) { // ÐаблокиÑÑем попÑÑÐºÑ Ð¿ÐµÑедаÑи, еÑли CAN оÑклÑÑен аппаÑаÑно ÑпилÑкой или пÑогÑаммно Ñеле if(SelfTesting_STATUS(ST_pin1) == ST_OK || SelfTesting_STATUS(ST_POW_BIM) != ST_OK) return; debug_can(0x524, &debug_vars.DistanceToTDP, 8); debug_can(0x529, &debug_vars.TimeToHorTarget, 8); debug_can(0x530, &debug_vars.TimeToTD, 8); debug_can(0x511, &debug_vars.TDP_Lat, 8); debug_can(0x512, &debug_vars.TDP_Lon, 8); debug_can(0x515, &debug_vars.Alt2model, 8); debug_can(0x516, &debug_vars.SNSalt, 8); debug_can(0x521, &debug_vars.rtU_XYZi_Lat, 8); debug_can(0x522, &debug_vars.rtU_XYZi_Lon, 8); debug_can(0x523, &debug_vars.rtU_XYZi_Alt, 8); debug_can(0x526, &debug_vars.Relief_height, 2); debug_can(0x527, &debug_vars.SysState, 2); debug_can(0x532, &debug_vars.radioLatitude, 8); debug_can(0x533, &debug_vars.radioLongitude, 8); debug_can(0x534, &debug_vars.radioUpdatedIndex, 1); debug_can(0x535, &debug_vars.leftBimCommand, 1); debug_can(0x536, &debug_vars.rightBimCommand, 1); } /********************************************************************************************************* debug_prepare_data - ÐодгоÑовка оÑладоÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ðº вÑÐ²Ð¾Ð´Ñ **********************************************************************************************************/ void debug_prepare_data (void) { debug_vars.DistanceToTDP = (double)rtY.horizontalDistance; // ÐиÑÑанÑÐ¸Ñ Ð´Ð¾ ÑоÑки пÑиземлениÑ, м debug_vars.TimeToHorTarget = (double)rtY.horizontalTime; // ÐÑÐµÐ¼Ñ Ð¿Ð¾Ð»ÐµÑа Ñо ÑоÑки пÑÐ¸Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ пÑÑмой, Ñек debug_vars.TimeToTD = (double)rtY.verticalTime; // ÐÑÐµÐ¼Ñ Ð´Ð¾ оÑкÑÑÑÐ¸Ñ Ð¿Ð°ÑаÑÑÑа, Ñек debug_vars.leftBimCommand = (uint8_t)rtY.leftStrap; // Ðоманда Ð¾Ñ Ð¼Ð°Ñмодели Ð»ÐµÐ²Ð¾Ð¼Ñ ÐÐ¸Ð¼Ñ debug_vars.rightBimCommand = (uint8_t)rtY.rightStrap; // Ðоманда Ð¾Ñ Ð¼Ð°Ñмодели пÑÐ°Ð²Ð¾Ð¼Ñ ÐÐ¸Ð¼Ñ debug_vars.TDP_Lat = Bup_getTouchdownPointLatitude(); // ШиÑоÑа ÑоÑки пÑÐ¸Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ debug_vars.TDP_Lon = Bup_getTouchdownPointLongitude(); // ÐолгоÑа ÑоÑки пÑÐ¸Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ debug_vars.Alt2model = Bup_getCurrentPointAltitude(); // ÐÑÑоÑа пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² меÑÑÑ debug_vars.SNSalt = SNS_position.Struct.Pos_alt; // ÐÑÑоÑа в Ñом виде в коÑоÑом пÑинимаем Ð¾Ñ Ð¡ÐС debug_vars.rtU_XYZi_Lat = Bup_getCurrentPointLatitude(); // ШиÑоÑа пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² гÑадÑÑÑ debug_vars.rtU_XYZi_Lon = Bup_getCurrentPointLongitude(); // ÐолгоÑа пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² гÑадÑÑÑ debug_vars.rtU_XYZi_Alt = Bup_getCurrentPointAltitude(); // ÐÑÑоÑа пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² меÑÑÑ debug_vars.Relief_height = Bup_getCurrentPointRelief(); // ÐÑÑоÑа ÑелÑеÑа под нами в меÑÑÐ°Ñ debug_vars.SysState = systemState; // СоÑÑоÑние ÑиÑÑÐµÐ¼Ñ (из SelfTesing) debug_vars.radioLatitude = Bup_getRadioPointLatitude(); // ШиÑоÑа ÑоÑки пÑÐ¸Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ ÑадиоÑÑанÑии debug_vars.radioLongitude = Bup_getRadioPointLongitude(); // ÐолгоÑа ÑоÑки пÑÐ¸Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ ÑадиоÑÑанÑии debug_vars.radioUpdatedIndex = Bup_getRadioPointUpdateIndex(); // ÐÐ½Ð´ÐµÐºÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ð¾Ñ ÑадиоÑÑанÑии }