mirror of
https://github.com/adrcs/ip400.git
synced 2025-04-20 18:53:43 +03:00
Updated to Rev 04b
This commit is contained in:
parent
d6aad28fb1
commit
3b7d1e5993
|
@ -49,6 +49,7 @@
|
||||||
#define GPS_FIX_LEN 20 // gps fix length
|
#define GPS_FIX_LEN 20 // gps fix length
|
||||||
#define GPS_BFR_SIZE 140 // GPS buffer size
|
#define GPS_BFR_SIZE 140 // GPS buffer size
|
||||||
|
|
||||||
|
#if __ENABLE_GPS
|
||||||
// NMEA GGA Sentence fields
|
// NMEA GGA Sentence fields
|
||||||
char *nmeaMsgTag = "RMC"; // sentence we are processing
|
char *nmeaMsgTag = "RMC"; // sentence we are processing
|
||||||
enum {
|
enum {
|
||||||
|
@ -68,6 +69,35 @@ enum {
|
||||||
NMEA_STATE_MSG, // in the message
|
NMEA_STATE_MSG, // in the message
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define N_NMEA_SEN 14 // number of NMEA sentences
|
||||||
|
enum {
|
||||||
|
NMEA_CMD_DISABLED=0, // disabled
|
||||||
|
NMEA_CMD_ONCE, // once per fix
|
||||||
|
NMEA_CMD_2FIX, // once every 2 fixes
|
||||||
|
NMEA_CMD_3FIX, // once every 3 fixes
|
||||||
|
NMEA_CMD_4FIX, // once every 4 fixes
|
||||||
|
NMEA_CMD_5FIX, // once every 5 fixes
|
||||||
|
};
|
||||||
|
|
||||||
|
char *nmeaCmd = "$PMTK314"; // command
|
||||||
|
uint8_t senCmds[N_NMEA_SEN] = {
|
||||||
|
NMEA_CMD_DISABLED, // 0:GLL disabled
|
||||||
|
NMEA_CMD_ONCE, // 1: RMC once
|
||||||
|
NMEA_CMD_DISABLED, // 2: VTG disabled
|
||||||
|
NMEA_CMD_DISABLED, // 3: GGA disabled
|
||||||
|
NMEA_CMD_DISABLED, // 4: GSA disabled
|
||||||
|
NMEA_CMD_DISABLED, // 5: GSV disabled
|
||||||
|
NMEA_CMD_DISABLED, // 6 not used
|
||||||
|
NMEA_CMD_DISABLED, // 7
|
||||||
|
NMEA_CMD_DISABLED, // 13
|
||||||
|
NMEA_CMD_DISABLED, // 14
|
||||||
|
NMEA_CMD_DISABLED, // 15
|
||||||
|
NMEA_CMD_DISABLED, // 16
|
||||||
|
NMEA_CMD_DISABLED, // 17
|
||||||
|
NMEA_CMD_DISABLED // 18
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
// hemispheres
|
// hemispheres
|
||||||
enum {
|
enum {
|
||||||
N_HEMI=0, // North
|
N_HEMI=0, // North
|
||||||
|
@ -97,6 +127,7 @@ uint8_t GPSProcBuf[GPS_BFR_SIZE];
|
||||||
uint8_t *GPSBufPtr;
|
uint8_t *GPSBufPtr;
|
||||||
uint8_t GPSMsgSize;
|
uint8_t GPSMsgSize;
|
||||||
uint8_t NMEAState;
|
uint8_t NMEAState;
|
||||||
|
char cmdBuf[MAX_BEACON];
|
||||||
//
|
//
|
||||||
BOOL haveGPSFix = FALSE;
|
BOOL haveGPSFix = FALSE;
|
||||||
BOOL gpsEchoReady=FALSE;
|
BOOL gpsEchoReady=FALSE;
|
||||||
|
@ -108,6 +139,7 @@ char *gpsFlds[GPS_BFR_SIZE];
|
||||||
|
|
||||||
// fwd Refs in this module in GPS mode
|
// fwd Refs in this module in GPS mode
|
||||||
BOOL processGPSMessage(uint8_t *GPSMsgBuf, uint8_t bufferSize);
|
BOOL processGPSMessage(uint8_t *GPSMsgBuf, uint8_t bufferSize);
|
||||||
|
void sendGPSCmd(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//fwd refs w/o GPS
|
//fwd refs w/o GPS
|
||||||
|
@ -158,6 +190,11 @@ void Beacon_Task_exec(void)
|
||||||
}
|
}
|
||||||
timerCtrValue = timerInitValue;
|
timerCtrValue = timerInitValue;
|
||||||
|
|
||||||
|
#if __ENABLE_GPS
|
||||||
|
// send a command to the GPS every beacon interval
|
||||||
|
sendGPSCmd();
|
||||||
|
#endif
|
||||||
|
|
||||||
// start with the header
|
// start with the header
|
||||||
beacon_hdr.setup.flags = setup_memory.params.setup_data.flags;
|
beacon_hdr.setup.flags = setup_memory.params.setup_data.flags;
|
||||||
beacon_hdr.setup.txPower = setup_memory.params.radio_setup.outputPower;
|
beacon_hdr.setup.txPower = setup_memory.params.radio_setup.outputPower;
|
||||||
|
@ -288,6 +325,37 @@ void GPS_Task_exec(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __ENABLE_GPS
|
#if __ENABLE_GPS
|
||||||
|
/*
|
||||||
|
* Send a command to the GPS device to limit traffic
|
||||||
|
*/
|
||||||
|
void sendGPSCmd(void)
|
||||||
|
{
|
||||||
|
uint8_t cksum = 0;
|
||||||
|
char *buf = cmdBuf;
|
||||||
|
strcpy(buf, nmeaCmd);
|
||||||
|
buf += strlen(nmeaCmd);
|
||||||
|
|
||||||
|
for(int j=1;j<strlen(nmeaCmd);j++)
|
||||||
|
cksum ^= nmeaCmd[j];
|
||||||
|
|
||||||
|
for(int i=0;i<N_NMEA_SEN;i++) {
|
||||||
|
*buf = ',';
|
||||||
|
cksum ^= *buf++;
|
||||||
|
*buf = senCmds[i] + '0';
|
||||||
|
cksum ^= *buf++;
|
||||||
|
}
|
||||||
|
|
||||||
|
*buf++ = '*';
|
||||||
|
hex2ascii(cksum, buf);
|
||||||
|
buf += 2;
|
||||||
|
|
||||||
|
*buf++ = '\r';
|
||||||
|
*buf++ = '\n';
|
||||||
|
*buf = '\0';
|
||||||
|
uint16_t buflen = buf - cmdBuf;
|
||||||
|
|
||||||
|
LPUART_Send_String(cmdBuf, buflen);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Process an inbound GPS message
|
* Process an inbound GPS message
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -191,6 +191,12 @@ BOOL Chat_Task_exec(void)
|
||||||
|
|
||||||
// escape key: get a destination call sign
|
// escape key: get a destination call sign
|
||||||
case KEY_ESC:
|
case KEY_ESC:
|
||||||
|
if(destEnt) {
|
||||||
|
strcpy(dest_call, BROADCAST);
|
||||||
|
USART_Print_string("Destination set to broadcast\r\n");
|
||||||
|
destEnt=FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if(keyPos == 0) {
|
if(keyPos == 0) {
|
||||||
USART_Print_string("%s->", entCall);
|
USART_Print_string("%s->", entCall);
|
||||||
dp = dest_call;
|
dp = dest_call;
|
||||||
|
|
|
@ -237,8 +237,12 @@ void USART_Print_string(char *format, ...)
|
||||||
// Transmit completed: trigger semaphore
|
// Transmit completed: trigger semaphore
|
||||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||||
{
|
{
|
||||||
|
#if __ENABLE_GPS
|
||||||
|
// Not interested in LPUART
|
||||||
|
if(huart->Instance == LPUART1)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
|
|
||||||
xSemaphoreGiveFromISR(txCompleted, &xHigherPriorityTaskWoken);
|
xSemaphoreGiveFromISR(txCompleted, &xHigherPriorityTaskWoken);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -269,6 +273,14 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __ENABLE_GPS
|
#if __ENABLE_GPS
|
||||||
|
// send a string to the LPUART
|
||||||
|
void LPUART_Send_String(char *str, uint16_t len)
|
||||||
|
{
|
||||||
|
// send using interrupt
|
||||||
|
HAL_UART_Transmit_IT(&hlpuart1, (const uint8_t *)str, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// receive a byte with DMA, wait for DMA completed interrupt
|
// receive a byte with DMA, wait for DMA completed interrupt
|
||||||
void LPUART_Receive_char(void)
|
void LPUART_Receive_char(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,13 +39,28 @@ int ascii2Dec(char *dec)
|
||||||
return retval*sgn;
|
return retval*sgn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nibble to ascii
|
||||||
|
char nib2ascii(uint8_t nib)
|
||||||
|
{
|
||||||
|
char anib = (char)(nib + '0');
|
||||||
|
anib = (anib > '9') ? anib+('A'-'9') : anib;
|
||||||
|
return anib;
|
||||||
|
}
|
||||||
|
|
||||||
|
// hex to ascii
|
||||||
|
void hex2ascii(uint8_t hex, char *buf)
|
||||||
|
{
|
||||||
|
*buf++= nib2ascii(hex>>4);
|
||||||
|
*buf = nib2ascii(hex & 0xf);
|
||||||
|
}
|
||||||
|
|
||||||
// see if an entry is floating point
|
// see if an entry is floating point
|
||||||
BOOL isfloat(char *val)
|
BOOL isfloat(char *val)
|
||||||
{
|
{
|
||||||
while(*val)
|
while(*val)
|
||||||
if(*val++ == '.')
|
if(*val++ == '.')
|
||||||
return TRUE;
|
return 1U;
|
||||||
return FALSE;
|
return 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert an ascii string to a double
|
// convert an ascii string to a double
|
||||||
|
|
Loading…
Reference in a new issue