Rev 78 | Rev 91 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 78 | Rev 79 | ||
---|---|---|---|
Line 136... | Line 136... | ||
136 | ToFlightCtrl.BeepTime = BeepTime; // set beeptime |
136 | ToFlightCtrl.BeepTime = BeepTime; // set beeptime |
137 | BeepTime = 0; // reset local beeptime |
137 | BeepTime = 0; // reset local beeptime |
138 | // copy contents of ToFlightCtrl->SPI_TxBuffer |
138 | // copy contents of ToFlightCtrl->SPI_TxBuffer |
139 | memcpy( (u8 *) &(SPI_TxBuffer[2]), (u8 *) &ToFlightCtrl, sizeof(ToFlightCtrl)); |
139 | memcpy( (u8 *) &(SPI_TxBuffer[2]), (u8 *) &ToFlightCtrl, sizeof(ToFlightCtrl)); |
140 | } |
140 | } |
141 | } |
141 | } |
142 | // while RxFIFO not empty |
142 | // while RxFIFO not empty |
143 | while (SSP_GetFlagStatus(SSP0, SSP_FLAG_RxFifoNotEmpty) == SET) |
143 | while (SSP_GetFlagStatus(SSP0, SSP_FLAG_RxFifoNotEmpty) == SET) |
144 | { |
144 | { |
145 | rxdata = SSP0->DR; // catch the received byte |
145 | rxdata = SSP0->DR; // catch the received byte |
146 | // Fill TxFIFO while its not full or end of packet is reached |
146 | // Fill TxFIFO while its not full or end of packet is reached |
147 | while (SSP_GetFlagStatus(SSP0, SSP_FLAG_TxFifoNotFull) == SET) |
147 | while (SSP_GetFlagStatus(SSP0, SSP_FLAG_TxFifoNotFull) == SET) |
148 | { |
148 | { |
149 | if (SPI_TxBufferIndex < SPI_TXBUFFER_LEN) // still data to send ? |
149 | if (SPI_TxBufferIndex < SPI_TXBUFFER_LEN) // still data to send ? |
150 | { |
150 | { |
151 | SSP0->DR = SPI_TxBuffer[SPI_TxBufferIndex]; // send a byte |
151 | SSP0->DR = SPI_TxBuffer[SPI_TxBufferIndex]; // send a byte |
152 | *Ptr_TxChksum += SPI_TxBuffer[SPI_TxBufferIndex]; // update checksum |
152 | *Ptr_TxChksum += SPI_TxBuffer[SPI_TxBufferIndex]; // update checksum |
153 | SPI_TxBufferIndex++; // pointer to next byte |
153 | SPI_TxBufferIndex++; // pointer to next byte |
154 | } |
154 | } |
155 | else // end of packet is reached reset and copy data to tx buffer |
155 | else // end of packet is reached reset and copy data to tx buffer |
156 | { |
156 | { |
157 | SPI_TxBufferIndex = 0; // reset buffer index |
157 | SPI_TxBufferIndex = 0; // reset buffer index |
158 | ToFlightCtrl.Chksum = 0; // initialize checksum |
158 | ToFlightCtrl.Chksum = 0; // initialize checksum |
159 | ToFlightCtrl.BeepTime = BeepTime; // set beeptime |
159 | ToFlightCtrl.BeepTime = BeepTime; // set beeptime |
160 | BeepTime = 0; // reset local beeptime |
160 | BeepTime = 0; // reset local beeptime |
161 | // copy contents of ToFlightCtrl->SPI_TxBuffer |
161 | // copy contents of ToFlightCtrl->SPI_TxBuffer |
162 | memcpy((u8 *) &(SPI_TxBuffer[2]), (u8 *) &ToFlightCtrl, sizeof(ToFlightCtrl)); |
162 | memcpy((u8 *) &(SPI_TxBuffer[2]), (u8 *) &ToFlightCtrl, sizeof(ToFlightCtrl)); |
163 | } |
163 | } |
164 | } |
164 | } |
165 | switch (SPI_State) |
165 | switch (SPI_State) |
166 | { |
166 | { |
167 | case SPI_SYNC1: |
167 | case SPI_SYNC1: |
168 | SPI_RxBufferIndex = 0; // reset buffer index |
168 | SPI_RxBufferIndex = 0; // reset buffer index |
Line 170... | Line 170... | ||
170 | if (rxdata == SPI_RXSYNCBYTE1) |
170 | if (rxdata == SPI_RXSYNCBYTE1) |
171 | { // 1st syncbyte ok |
171 | { // 1st syncbyte ok |
172 | SPI_State = SPI_SYNC2; // step to sync2 |
172 | SPI_State = SPI_SYNC2; // step to sync2 |
173 | } |
173 | } |
174 | break; |
174 | break; |
175 | case SPI_SYNC2: |
175 | case SPI_SYNC2: |
176 | if (rxdata == SPI_RXSYNCBYTE2) |
176 | if (rxdata == SPI_RXSYNCBYTE2) |
177 | { // 2nd Syncbyte ok |
177 | { // 2nd Syncbyte ok |
178 | rxchksum += rxdata; |
178 | rxchksum += rxdata; |
179 | SPI_State = SPI_DATA; |
179 | SPI_State = SPI_DATA; |
180 | } // 2nd Syncbyte does not match |
180 | } // 2nd Syncbyte does not match |
Line 322... | Line 322... | ||
322 | } |
322 | } |
323 | FC.MKFlags |= FromFlightCtrl.Param.Byte[8]; |
323 | FC.MKFlags |= FromFlightCtrl.Param.Byte[8]; |
324 | FC.UBat = FromFlightCtrl.Param.Byte[9]; |
324 | FC.UBat = FromFlightCtrl.Param.Byte[9]; |
325 | Parameter.LowVoltageWarning = FromFlightCtrl.Param.Byte[10]; |
325 | Parameter.LowVoltageWarning = FromFlightCtrl.Param.Byte[10]; |
326 | Parameter.ActiveSetting = FromFlightCtrl.Param.Byte[11]; |
326 | Parameter.ActiveSetting = FromFlightCtrl.Param.Byte[11]; |
327 | DebugOut.Analog[5] = FC.MKFlags; |
327 | DebugOut.Analog[5] = FC.MKFlags; |
328 | break; |
328 | break; |
Line 329... | Line 329... | ||
329 | 329 | ||
330 | #define CHK_POTI_MM(b,a,min,max) { if(a > 250) { if(a == 251) b = FC.Poti1; else if(a == 252) b = FC.Poti2; else if(a == 253) b = FC.Poti3; else if(a == 254) b = FC.Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
330 | #define CHK_POTI_MM(b,a,min,max) { if(a > 250) { if(a == 251) b = FC.Poti1; else if(a == 252) b = FC.Poti2; else if(a == 253) b = FC.Poti3; else if(a == 254) b = FC.Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
331 | case SPI_CMD_PARAMETER1: |
331 | case SPI_CMD_PARAMETER1: |
Line 363... | Line 363... | ||
363 | { // put only new CompassCalState into queue to send via I2C |
363 | { // put only new CompassCalState into queue to send via I2C |
364 | CompassCalState = FromFlightCtrl.Param.Byte[0]; |
364 | CompassCalState = FromFlightCtrl.Param.Byte[0]; |
365 | fifo_put(&CompassCalcStateFiFo, CompassCalState); |
365 | fifo_put(&CompassCalcStateFiFo, CompassCalState); |
366 | } |
366 | } |
367 | Parameter.NaviPH_LoginTime = FromFlightCtrl.Param.Byte[1]; |
367 | Parameter.NaviPH_LoginTime = FromFlightCtrl.Param.Byte[1]; |
368 | NaviData.Variometer = (NaviData.Variometer + 2 * ((s16) FromFlightCtrl.Param.Int[1] - NaviData.Altimeter)) / 2; // provisorisch |
368 | NaviData.Variometer = (NaviData.Variometer + 2 * ((s16) FromFlightCtrl.Param.Int[1] - NaviData.Altimeter)) / 2; // provisorisch |
369 | NaviData.Altimeter = (s16) FromFlightCtrl.Param.Int[1]; // is located at byte 2 and 3 |
369 | NaviData.Altimeter = (s16) FromFlightCtrl.Param.Int[1]; // is located at byte 2 and 3 |
370 | CHK_POTI_MM(Parameter.NaviGpsPLimit,FromFlightCtrl.Param.Byte[4],0,255); |
370 | CHK_POTI_MM(Parameter.NaviGpsPLimit,FromFlightCtrl.Param.Byte[4],0,255); |
371 | CHK_POTI_MM(Parameter.NaviGpsILimit,FromFlightCtrl.Param.Byte[5],0,255); |
371 | CHK_POTI_MM(Parameter.NaviGpsILimit,FromFlightCtrl.Param.Byte[5],0,255); |
372 | CHK_POTI_MM(Parameter.NaviGpsDLimit,FromFlightCtrl.Param.Byte[6],0,255); |
372 | CHK_POTI_MM(Parameter.NaviGpsDLimit,FromFlightCtrl.Param.Byte[6],0,255); |
373 | break; |
373 | break; |
Line 374... | Line 374... | ||
374 | 374 | ||
375 | case SPI_CMD_VERSION: |
375 | case SPI_CMD_VERSION: |
376 | FC_Version.Major = FromFlightCtrl.Param.Byte[0]; |
376 | FC_Version.Major = FromFlightCtrl.Param.Byte[0]; |
Line 393... | Line 393... | ||
393 | DebugOut.Analog[0] = FromFlightCtrl.AngleNick; |
393 | DebugOut.Analog[0] = FromFlightCtrl.AngleNick; |
394 | DebugOut.Analog[1] = FromFlightCtrl.AngleRoll; |
394 | DebugOut.Analog[1] = FromFlightCtrl.AngleRoll; |
395 | DebugOut.Analog[2] = FromFlightCtrl.AccNick; |
395 | DebugOut.Analog[2] = FromFlightCtrl.AccNick; |
396 | DebugOut.Analog[3] = FromFlightCtrl.AccRoll; |
396 | DebugOut.Analog[3] = FromFlightCtrl.AccRoll; |
397 | DebugOut.Analog[11] = FromFlightCtrl.GyroHeading/10;// in deg |
397 | DebugOut.Analog[11] = FromFlightCtrl.GyroHeading/10;// in deg |
398 | Data3D.AngleNick = FromFlightCtrl.AngleNick; // in 0.1 deg |
398 | Data3D.AngleNick = FromFlightCtrl.AngleNick; // in 0.1 deg |
399 | Data3D.AngleRoll = FromFlightCtrl.AngleRoll; // in 0.1 deg |
399 | Data3D.AngleRoll = FromFlightCtrl.AngleRoll; // in 0.1 deg |
400 | Data3D.Heading = FromFlightCtrl.GyroHeading; // in 0.1 deg |
400 | Data3D.Heading = FromFlightCtrl.GyroHeading; // in 0.1 deg |
401 | } // EOF if(SPI_RxBuffer_Request) |
401 | } // EOF if(SPI_RxBuffer_Request) |
402 | } |
402 | } |
Line 403... | Line 403... | ||
403 | 403 | ||
404 | //------------------------------------------------------ |
404 | //------------------------------------------------------ |
405 | void SPI0_GetFlightCtrlVersion(void) |
405 | void SPI0_GetFlightCtrlVersion(void) |