Subversion Repositories NaviCtrl

Rev

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)