Перенос на новую организацию GONEC
This commit is contained in:
commit
68a15f640a
|
|
@ -0,0 +1,98 @@
|
|||
//
|
||||
// Created by xemon on 01.09.22.
|
||||
//
|
||||
|
||||
#ifndef GNSSPRO04NMEA_GNSSPRO04NMEA_H
|
||||
#define GNSSPRO04NMEA_GNSSPRO04NMEA_H
|
||||
|
||||
#include "SerialPort.h"
|
||||
#include "stddef.h"
|
||||
#include "stdbool.h"
|
||||
|
||||
typedef struct {
|
||||
tSerialPortIO *io;
|
||||
struct {
|
||||
size_t len;
|
||||
char buff[18];
|
||||
} cmd;
|
||||
} tGnssPro04Nmea;
|
||||
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_MESAGE_DTM,
|
||||
GNNS_PRO04_MESAGE_VTG,
|
||||
GNNS_PRO04_MESAGE_RMC,
|
||||
GNNS_PRO04_MESAGE_GSV,
|
||||
GNNS_PRO04_MESAGE_GSA,
|
||||
GNNS_PRO04_MESAGE_GGA,
|
||||
} tGnssPro04NmeaMessageType;
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_NAV_SYSTEM_GPS,
|
||||
GNNS_PRO04_NAV_SYSTEM_GLS,
|
||||
GNNS_PRO04_NAV_SYSTEM_MIX,
|
||||
} tGnssPro04NmeaNavSystemType;
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_COORD_P90,
|
||||
GNNS_PRO04_COORD_W84,
|
||||
} tGnssPro04NmeaCoordType;
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_RATE_01HZ,
|
||||
GNNS_PRO04_RATE_02HZ,
|
||||
GNNS_PRO04_RATE_05HZ,
|
||||
GNNS_PRO04_RATE_10HZ,
|
||||
} tGnssPro04NmeaRateType;
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_NMEA_STANDARD_2 = 2,
|
||||
GNNS_PRO04_NMEA_STANDARD_4 = 4,
|
||||
} tGnssPro04NmeaStandardType;
|
||||
|
||||
typedef enum {
|
||||
GNNS_PRO04_STARTUP_WARM = 'W',
|
||||
GNNS_PRO04_STARTUP_COLD = 'C',
|
||||
GNNS_PRO04_STARTUP_HOT = 'H',
|
||||
} tGnssPro04StartupType;
|
||||
|
||||
|
||||
void GnssPro04Nmea_init(tGnssPro04Nmea *env, tSerialPortIO *io);
|
||||
|
||||
void GnssPro04Nmea_setStandard(tGnssPro04Nmea *env, tGnssPro04NmeaStandardType nmeaStandard);
|
||||
|
||||
void GnssPro04Nmea_setStartType(tGnssPro04Nmea *env, tGnssPro04StartupType startupType);
|
||||
|
||||
void GnssPro04Nmea_setRate(tGnssPro04Nmea *env, tGnssPro04NmeaRateType rate);
|
||||
|
||||
void GnssPro04Nmea_setElevation(tGnssPro04Nmea *env, uint8_t uElevation);
|
||||
|
||||
void GnssPro04Nmea_setSystemType(tGnssPro04Nmea *env, tGnssPro04NmeaNavSystemType system);
|
||||
|
||||
void GnssPro04Nmea_setCoordType(tGnssPro04Nmea *env, tGnssPro04NmeaCoordType coordType);
|
||||
|
||||
void GnssPro04Nmea_setMessageEnabled(tGnssPro04Nmea *env, tGnssPro04NmeaMessageType msg, bool value);
|
||||
|
||||
// Переключение в бинарный протокол
|
||||
void GnssPro04Nmea_switchProtocol(tGnssPro04Nmea *env);
|
||||
|
||||
|
||||
// редефайн для обратной совместимости
|
||||
#define vGnssPro04NmeaInit GnssPro04Nmea_init
|
||||
|
||||
#define vGnssPro04NmeaSetStandard GnssPro04Nmea_setStandard
|
||||
|
||||
#define vGnssPro04NmeaSetStartType GnssPro04Nmea_setStartType
|
||||
|
||||
#define vGnssPro04NmeaSetRate GnssPro04Nmea_setRate
|
||||
|
||||
#define vGnssPro04NmeaSetElevation GnssPro04Nmea_setElevation
|
||||
|
||||
#define vGnssPro04NmeaSetSystemType GnssPro04Nmea_setSystemType
|
||||
|
||||
#define vGnssPro04NmeaSetCoordType GnssPro04Nmea_setCoordType
|
||||
|
||||
#define vGnssPro04NmeaSetMessageEnabled GnssPro04Nmea_setMessageEnabled
|
||||
|
||||
|
||||
#endif //GNSSPRO04NMEA_GNSSPRO04NMEA_H
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
//
|
||||
// Created by xemon on 01.09.22.
|
||||
//
|
||||
|
||||
#include "GnssPro04Nmea.h"
|
||||
#include <Nmea0183Parser.h>
|
||||
#include "AsciiStringAssmeblingUtils.h"
|
||||
|
||||
static char *GNNS_PRO04_MESAGE_NAME[] = {
|
||||
[GNNS_PRO04_MESAGE_DTM] = "DMT",
|
||||
[GNNS_PRO04_MESAGE_VTG] = "VTG",
|
||||
[GNNS_PRO04_MESAGE_RMC] = "RMC",
|
||||
[GNNS_PRO04_MESAGE_GSV] = "GSV",
|
||||
[GNNS_PRO04_MESAGE_GSA] = "GSA",
|
||||
[GNNS_PRO04_MESAGE_GGA] = "GGA",
|
||||
};
|
||||
|
||||
static char *GNNS_PRO04_NAV_SYSTEM_NAME[] = {
|
||||
[GNNS_PRO04_NAV_SYSTEM_GPS] = "GPS",
|
||||
[GNNS_PRO04_NAV_SYSTEM_GLS] = "GLS",
|
||||
[GNNS_PRO04_NAV_SYSTEM_MIX] = "MIX",
|
||||
};
|
||||
|
||||
static char *GNNS_PRO04_COORD_NAME[] = {
|
||||
[GNNS_PRO04_COORD_P90] = "P90",
|
||||
[GNNS_PRO04_COORD_W84] = "W84",
|
||||
};
|
||||
|
||||
static char *GNNS_PRO04_RATE_NAME[] = {
|
||||
[GNNS_PRO04_RATE_01HZ] = "01",
|
||||
[GNNS_PRO04_RATE_02HZ] = "02",
|
||||
[GNNS_PRO04_RATE_05HZ] = "05",
|
||||
[GNNS_PRO04_RATE_10HZ] = "10",
|
||||
};
|
||||
|
||||
void GnssPro04Nmea_Send(tGnssPro04Nmea *env, uint8_t *str, uint16_t len) {
|
||||
SerialPortTransmit(env->io, str, len, 1000);
|
||||
}
|
||||
|
||||
|
||||
#define GnssPro04Nmea_CmdReset(env)\
|
||||
vAsciiStringClean((env)->cmd.buff, &(env)->cmd.len)
|
||||
|
||||
#define GnssPro04Nmea_CmdAddStatic(env, STR)\
|
||||
vAsciiStringAddStatic((char*)(env)->cmd.buff, &(env)->cmd.len, STR)
|
||||
|
||||
#define GnssPro04Nmea_CmdAdd(env, STR, STR_LEN)\
|
||||
vAsciiStringAdd((char*)(env)->cmd.buff, &(env)->cmd.len, STR, STR_LEN);
|
||||
|
||||
#define GnssPro04Nmea_CmdAddDecimalIntAsString(env, number, digits) \
|
||||
vAsciiStringAddDecimalInt((char*)(env)->cmd.buff, &(env)->cmd.len, number, digits)
|
||||
|
||||
#define GnssPro04Nmea_CmdSign(env) \
|
||||
vNmea0183Sign((char*)(env)->cmd.buff, &(env)->cmd.len)
|
||||
|
||||
void GnssPro04Nmea_init(tGnssPro04Nmea *env, tSerialPortIO *io) {
|
||||
env->io = io;
|
||||
vAsciiStringInit(env->cmd.buff, &env->cmd.len, sizeof(env->cmd.buff));
|
||||
}
|
||||
|
||||
void GnssPro04Nmea_CmdSend(tGnssPro04Nmea *env) {
|
||||
GnssPro04Nmea_CmdSign(env);
|
||||
GnssPro04Nmea_CmdAddStatic(env, "\r\n");
|
||||
GnssPro04Nmea_Send(env, (uint8_t *) env->cmd.buff, env->cmd.len);
|
||||
}
|
||||
|
||||
void GnssPro04Nmea_setStandard(tGnssPro04Nmea *env, tGnssPro04NmeaStandardType nmeaStandard) {
|
||||
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,NMEAV");
|
||||
GnssPro04Nmea_CmdAddDecimalIntAsString(env, nmeaStandard, 1);
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GnssPro04Nmea_setRate(tGnssPro04Nmea *env, tGnssPro04NmeaRateType rate) {
|
||||
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,RATE");
|
||||
GnssPro04Nmea_CmdAdd(env, GNNS_PRO04_RATE_NAME[rate], 2);
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
}
|
||||
|
||||
|
||||
void GnssPro04Nmea_setCoordType(tGnssPro04Nmea *env, tGnssPro04NmeaCoordType coordType) {
|
||||
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,DAT");
|
||||
GnssPro04Nmea_CmdAdd(env, GNNS_PRO04_COORD_NAME[coordType], 3);
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
|
||||
}
|
||||
|
||||
void GnssPro04Nmea_setSystemType(tGnssPro04Nmea *env, tGnssPro04NmeaNavSystemType system) {
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,NVS");
|
||||
GnssPro04Nmea_CmdAdd(env, GNNS_PRO04_NAV_SYSTEM_NAME[system], 3);
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
}
|
||||
|
||||
|
||||
void GnssPro04Nmea_setElevation(tGnssPro04Nmea *env, uint8_t uElevation) {
|
||||
if (uElevation < 5 || uElevation > 15) {
|
||||
return; // wrong value
|
||||
}
|
||||
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,ELEV");
|
||||
GnssPro04Nmea_CmdAddDecimalIntAsString(env, uElevation, 2);
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
}
|
||||
|
||||
|
||||
void GnssPro04Nmea_setMessageEnabled(tGnssPro04Nmea *env, tGnssPro04NmeaMessageType msg, bool value) {
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,");
|
||||
GnssPro04Nmea_CmdAdd(env, GNNS_PRO04_MESAGE_NAME[msg], 3);
|
||||
GnssPro04Nmea_CmdAdd(env, value ? " ON" : "OFF", 3);
|
||||
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
}
|
||||
|
||||
void GnssPro04Nmea_setStartType(tGnssPro04Nmea *env, tGnssPro04StartupType startupType) {
|
||||
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,");
|
||||
GnssPro04Nmea_CmdAdd(env, (char *) &startupType, 1);
|
||||
GnssPro04Nmea_CmdAddStatic(env, "START");
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
|
||||
}
|
||||
|
||||
// Переключение в бинарный протокол
|
||||
void GnssPro04Nmea_switchProtocol(tGnssPro04Nmea *env) {
|
||||
GnssPro04Nmea_CmdReset(env);
|
||||
|
||||
GnssPro04Nmea_CmdAddStatic(env, "$GPSGG,SWPROT");
|
||||
|
||||
GnssPro04Nmea_CmdSend(env);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"dep": [
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "GONEC",
|
||||
"repo": "SerialPort"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "GONEC",
|
||||
"repo": "Nmea0183Parser"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "GONEC",
|
||||
"repo": "AsciiStringAssemblingUtils"
|
||||
}
|
||||
],
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"Inc"
|
||||
],
|
||||
"srcs": [
|
||||
"Src/**.c"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue