1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-18 22:05:10 +03:00

Horus internal GPS: cmake changes, more CLI options, ability to send commands to the module

This commit is contained in:
Damjan Adamic 2016-08-30 21:23:20 +02:00
parent 1ef91597ca
commit ff37274e64
7 changed files with 75 additions and 13 deletions

View file

@ -712,7 +712,15 @@ int cliShowJitter(const char ** argv)
int cliGps(const char ** argv) int cliGps(const char ** argv)
{ {
int baudrate = 0; int baudrate = 0;
if (toInt(argv, 1, &baudrate) > 0 && baudrate > 0) { if (argv[1][0] == '$') {
// send command to GPS
gpsSendFrame(argv[1]);
}
else if (!strcmp(argv[1], "trace")) {
gpsTraceEnabled = !gpsTraceEnabled;
}
else if (toInt(argv, 1, &baudrate) > 0 && baudrate > 0) {
gpsInit(baudrate); gpsInit(baudrate);
serialPrint("GPS baudrate set to %d", baudrate); serialPrint("GPS baudrate set to %d", baudrate);
} }

View file

@ -275,7 +275,30 @@ void gpsWakeup()
{ {
uint8_t byte; uint8_t byte;
while (gpsGetByte(&byte)) { while (gpsGetByte(&byte)) {
TRACE_PING("%c", (char)byte);
gpsNewData(byte); gpsNewData(byte);
} }
} }
#if defined(DEBUG)
char hex(uint8_t b) {
return b > 9 ? b + 'A' - 10 : b + '0';
}
void gpsSendFrame(const char * frame)
{
// send given frame, add checksum and CRLF
uint8_t parity = 0;
while (*frame) {
if (*frame != '$') parity ^= *frame;
gpsSendByte(*frame);
++frame;
}
gpsSendByte('*');
gpsSendByte(hex(parity >> 4));
gpsSendByte(hex(parity & 0x0F));
gpsSendByte('\r');
gpsSendByte('\n');
TRACE("parity %02x", parity);
}
#endif // #if defined(DEBUG)

View file

@ -40,4 +40,8 @@ struct gpsdata_t
extern gpsdata_t gpsData; extern gpsdata_t gpsData;
void gpsWakeup(); void gpsWakeup();
#if defined(DEBUG)
void gpsSendFrame(const char * frame);
#endif
#endif // _GPS_H_ #endif // _GPS_H_

View file

@ -464,7 +464,7 @@ void perMain()
bluetoothWakeup(); bluetoothWakeup();
#endif #endif
#if INTERNAL_GPS > 0 #if defined(INTERNAL_GPS)
gpsWakeup(); gpsWakeup();
#endif #endif
} }

View file

@ -1,7 +1,14 @@
set(PCBREV "13" CACHE STRING "PCB Revision") set(PCBREV "13" CACHE STRING "PCB Revision")
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS") set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
option(INTERNAL_GPS_INSTALLED "Internal GPS installed in beta hardware version" NO)
option(DISK_CACHE "Enable SD card disk cache" YES) option(DISK_CACHE "Enable SD card disk cache" YES)
if(${PCBREV} GREATER 10)
option(INTERNAL_GPS "Internal GPS installed" YES)
else()
option(INTERNAL_GPS "Internal GPS installed" NO)
if(NOT INTERNAL_GPS)
message("Internal GPS is optional, use INTERNAL_GPS=YES option to enable it")
endif()
endif()
set(CPU_TYPE STM32F4) set(CPU_TYPE STM32F4)
set(HSE_VALUE 12000000) set(HSE_VALUE 12000000)
@ -52,8 +59,9 @@ if(DISK_CACHE)
set(SRC ${SRC} disk_cache.cpp) set(SRC ${SRC} disk_cache.cpp)
add_definitions(-DDISK_CACHE) add_definitions(-DDISK_CACHE)
endif() endif()
if(INTERNAL_GPS_INSTALLED) if(INTERNAL_GPS)
add_definitions(-DINTERNAL_GPS_INSTALLED) add_definitions(-DINTERNAL_GPS)
message("Internal GPS enabled")
endif() endif()
set(SERIAL2_DRIVER serial2_driver.cpp) set(SERIAL2_DRIVER serial2_driver.cpp)
set(TARGET_SRC set(TARGET_SRC

View file

@ -389,13 +389,12 @@ void hapticOff(void);
void hapticOn(uint32_t pwmPercent); void hapticOn(uint32_t pwmPercent);
// GPS driver // GPS driver
#if PCBREV >= 13 || defined(INTERNAL_GPS_INSTALLED)
#define INTERNAL_GPS 1
#else
#define INTERNAL_GPS 0
#endif
void gpsInit(uint32_t baudrate); void gpsInit(uint32_t baudrate);
uint8_t gpsGetByte(uint8_t * byte); uint8_t gpsGetByte(uint8_t * byte);
#if defined(DEBUG)
extern uint8_t gpsTraceEnabled;
void gpsSendByte(uint8_t byte);
#endif
// Second serial port driver // Second serial port driver
#define SERIAL2 #define SERIAL2

View file

@ -60,9 +60,23 @@ void gpsInit(uint32_t baudrate)
NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure);
} }
#if defined(DEBUG)
uint8_t gpsTraceEnabled = false;
Fifo<uint8_t, 64> gpsTxFifo;
void gpsSendByte(uint8_t byte)
{
while (gpsTxFifo.isFull());
gpsTxFifo.push(byte);
USART_ITConfig(GPS_USART, USART_IT_TXE, ENABLE);
}
#endif // #if defined(DEBUG)
extern "C" void GPS_USART_IRQHandler(void) extern "C" void GPS_USART_IRQHandler(void)
{ {
#if 0 #if defined(DEBUG)
// Send // Send
if (USART_GetITStatus(GPS_USART, USART_IT_TXE) != RESET) { if (USART_GetITStatus(GPS_USART, USART_IT_TXE) != RESET) {
uint8_t txchar; uint8_t txchar;
@ -89,5 +103,11 @@ extern "C" void GPS_USART_IRQHandler(void)
uint8_t gpsGetByte(uint8_t * byte) uint8_t gpsGetByte(uint8_t * byte)
{ {
return gpsRxFifo.pop(*byte); uint8_t result = gpsRxFifo.pop(*byte);
#if defined(DEBUG)
if (gpsTraceEnabled) {
serialPutc(*byte);
}
#endif
return result;
} }