/trunk/CamCtrl.c |
---|
30,8 → 30,8 |
if(FromCamCtrl.CamStatus & CAM_STATE_REC_ACTIVE) CamCtrlCharacter = 'R'; |
else if(FromCamCtrl.CamStatus & CAM_STATE_PHOTO_MODE) CamCtrlCharacter = 'P'; |
else if(FromCamCtrl.CamStatus & CAM_STATE_CAM_DISCONN) CamCtrlCharacter = '?'; |
else if(FromCamCtrl.CamStatus & CAM_STATE_OFF) CamCtrlCharacter = '!'; |
else if(FromCamCtrl.CamStatus & CAM_STATE_CAM_DISCONN) CamCtrlCharacter = '?'; |
else if(TrigLogging.CountExternal) CamCtrlCharacter = TrigLogging.CountExternal % 10 + '0'; |
else if(FromCamCtrl.PhotoCount) CamCtrlCharacter = FromCamCtrl.PhotoCount % 10 + '0'; |
else if(FromCamCtrl.CamStatus & CAM_STATE_RDY) CamCtrlCharacter = 'c'; |
50,6 → 50,7 |
void CamCtrl_GetData(u8 timeout) |
{ |
static u8 timing = 250, p63 = 0; |
static u8 force1photo = 0, delay ; // makes one photo when switching from Off to Photo |
if(timing) |
{ |
69,6 → 70,7 |
{ |
ToCamCtrl.CamCommand &= ~CAM_CMD_REC_OFF; |
ToCamCtrl.CamCommand |= CAM_CMD_REC_ON; |
force1photo = 0; |
} |
else |
if(PPM_In[EE_Parameter.CamCtrlModeChannel] < -50) // min |
75,16 → 77,24 |
{ |
ToCamCtrl.CamCommand &= ~CAM_CMD_REC_ON; |
ToCamCtrl.CamCommand |= CAM_CMD_REC_OFF; |
force1photo = 1; |
p63 = 0; |
delay = 5; |
} |
else // Middle |
{ |
if(delay) delay--; |
else |
{ |
if(((UART_VersionInfo.HWMajor >= 30) && TRIGGER_PP_INTERN) || ((UART_VersionInfo.HWMajor < 30) && (FC.StatusFlags2 & FC_STATUS2_OUT1_ACTIVE))) // internal Portpin or Flag |
if(force1photo || ((UART_VersionInfo.HWMajor >= 30) && TRIGGER_PP_INTERN) || ((UART_VersionInfo.HWMajor < 30) && (FC.StatusFlags2 & FC_STATUS2_OUT1_ACTIVE))) // internal Portpin or Flag |
{ |
if(!p63) ToCamCtrl.CamCommand |= CAM_CMD_SHUTTER; // combined with the FC trigger output |
p63 = 1; |
force1photo = 0; |
} |
else p63 = 0; |
} |
} |
} |
I2CBus_Transmission(I2C0, CAM_SLAVE_ADDRESS, &ToCamCtrl, TxBytes, &CamCtrl_UpdateData, RxBytes); |
/trunk/CamCtrl.h |
---|
20,7 → 20,7 |
#define CAM_CMD_REC_ON 0x20 |
#define CAM_CMD_REC_OFF 0x10 |
#define CAM_CMD_SHUTTER 0x08 |
#define CAM_USE_CTRL_INPUT 0x04 // use ControlInput Bit Command |
#define CAM_CMD_RESET_CAM 0x02 |
//FromCamCtrl.Type |
/trunk/main.c |
---|
677,6 → 677,8 |
UART1_PutString("\r\n++++++++++++++++++++++++++++++++++++++++++\r\n\r\n"); |
TransmitAlsoToFC = 0; |
#else |
if(UBX_Setup() == 0) UBX_Setup(); // inits the GPS-Module via ubx -> try twice |
SPI0_GetFlightCtrlVersion(); |
if(FC_Version.Compatible != FC_SPI_COMPATIBLE) |
{ |
695,7 → 697,6 |
} |
else CamCtrlTimeout = 0; // disable CamCtrl communication if external compass is connected |
// +++++++++++++++++++++++++++++++++++++++ |
if(UBX_Setup() == 0) UBX_Setup(); // inits the GPS-Module via ubx -> try twice |
GPS_Init(); |
// ---------- Prepare the isr driven |
// set to absolute lowest priority |
726,7 → 727,7 |
sprintf(msg, " CamCtrl found V%i.%02i \r\n",1 + FromCamCtrl.Version / 100, FromCamCtrl.Version % 100); |
UART1_PutString(msg); |
} |
else UART1_PutString(" No CamCtrl connected \r\n"); |
else if(Compass_I2CPort == NCMAG_PORT_INTERN) UART1_PutString(" No CamCtrl connected \r\n"); |
// ++++++++++++++++++++++++++++++++++++++++++++++ |
for (;;) // the endless main loop |
{ |
/trunk/spi_slave.c |
---|
109,7 → 109,7 |
s32 Kalman_Kompass = 32; |
s32 ToFcGpsZ = 0; |
u8 CompassCalState = 0; |
u8 RequestConfigFromFC = 1; |
u8 RequestConfigFromFC = 0; |
u8 SPI_CommandSequence[] = { SPI_NCCMD_KALMAN, SPI_NCCMD_GPSINFO, SPI_SERIAL_CH, // Achtung: SPI_SERIAL_CH darf nicht am Ende des Arrays stehen (wird gescipped) |
SPI_NCCMD_KALMAN, SPI_NCCMD_HOTT_INFO, |
/trunk/uart1.c |
---|
1029,7 → 1029,7 |
u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms |
{ |
static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7; |
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0; |
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0, crc_Tiny = 0; |
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs; |
if(clear) |
1205,10 → 1205,12 |
NaviData_Tiny.Altimeter = NaviData.Altimeter; |
NaviData_Tiny.GroundSpeed = NaviData.GroundSpeed / 10; |
NaviData_Tiny.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2); |
if(--count_tiny == 0) |
NaviData_Tiny.CamCtrlChar = CamCtrlCharacter; |
if((crc_Tiny != NaviData_Tiny.CamCtrlChar) || (--count_tiny == 0)) |
{ |
sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Tiny, sizeof(NaviData_Tiny)) + 1; |
count_tiny = 200; // just to make sure that it comes sometimes |
crc_Tiny = NaviData_Tiny.CamCtrlChar; |
} |
break; |
default: state = 0; |
/trunk/uart1.h |
---|
185,8 → 185,8 |
s16 Altimeter; // hight according to air pressure |
u8 GroundSpeed; // speed over ground in 10cm/s (2D) (255 = 91km/h) |
u8 OSDStatusFlags; |
u8 CamCtrlChar; // Status from a connected CamCtrl unit: 'R' = REC 'c' = Ready '!' = Error ...etc |
u8 reserve1; |
u8 reserve2; |
} __attribute__((packed)) NaviData_Tiny_t; |
extern NaviData_Tiny_t NaviData_Tiny; |