Crate novatel_oem6_service
source · [−]Expand description
Kubos Service for interacting with a NovAtel OEM6 High Precision GNSS Receiver
Configuration
The service can be configured in the /etc/kubos-config.toml
with the following fields:
bus
- Specifies the UART bus the OEM6 is connected toip
- Specifies the service’s IP addressport
- Specifies the port on which the service will be listening for UDP packets
For example:
[novatel-oem6-service]
bus = "/dev/ttyS4"
[novatel-oem6-service.addr]
ip = "127.0.0.1"
port = 8130
Starting the Service
The service should be started automatically by its init script, but may also be started manually:
$ novatel-oem6-service
Kubos OEM6 service started
Listening on: 10.63.1.20:8130
Queries
Ping
Test query to verify service is running without attempting to communicate with the underlying subsystem
{
ping: "pong"
}
ACK
Get the last run mutation
{
ack: AckCommand
}
Errors
Get all errors encountered since the last time this field was queried
{
errors: [String]
}
Power Status
Get the current power state of the system
Note: uptime
is included as an available field in order to conform to
the Kubos Service Outline, but cannot be implemented for this device,
so the value will be 1 if the device is on and 0 if the device is off
{
power {
state: PowerState,
uptime: Int
}
}
Configuration
Get the current configuration of the system
Stretch goal: implement the LOGLIST command
{
config: "Not Implemented"
}
Test Results
Get the test results of the last run test
{
testResults{
success,
telemetryNominal{...},
telemetryDebug{...}
}
}
System Status
Get the current system status and errors
{
systemStatus {
errors: Vec<String>,
status: Vec<String>
}
}
Lock Status
Get current status of position information gathering
{
lockStatus {
positionStatus: SolutionStatus,
positionType: PosVelType,
time {
ms: Int,
week: Int
},
timeStatus: RefTimeStatus,
velocityStatus: SolutionStatus,
velocityType: PosVelType
}
}
Lock Information
Get the last known good position information
{
lockInfo {
position: Vec<Float>,
time {
ms: Int,
week: Int
},
velocity: Vec<Float>
}
}
Telemetry
Get current telemetry information for the system
{
telemetry{
debug {
components: [{
bootVersion: String,
compType: Int,
compileDate: String,
compileTime: String,
hwVersion: String,
model: String,
serialNum: String,
swVersion: String,
}],
numComponents: Int
},
nominal{
lockInfo {...},
lockStatus {...},
systemStatus: {
errors: Vec<String>,
status: Vec<String>
}
}
}
}
Mutations
Errors
Get all errors encountered while processing this GraphQL request
Note: This will only return errors thrown by fields which have already been processed, so it is recommended that this field be specified last.
mutation {
errors: [String]
}
No-Op
Execute a trivial command against the system
mutation {
noop {
errors: String,
success: Boolean
}
}
Set Power State
Control the power state of the system
Note: Power control of the GPS device will be done by the GPSRM service
mutation {
controlPower: "Not Implemented"
}
Configuration
Configure the system
- config: Vector of configuration requests (ConfigStruct)
- option: Configuration operation which should be performed
- hold: For
LOG_*
requests, specifies whether this request should be excluded from removal by future ‘UNLOG_ALL’ requests. ForUNLOG_ALL
requests, specifies whether the ‘hold’ value in previousLOG_*
requests should be ignored. - interval: Interval at which log messages should be generated.
Note: Only applies to
LOG_POSITION_DATA
requests. Ignored otherwise - offset: Offset of interval at which log messages should be generated.
Note: Only applies to
LOG_POSITION_DATA
requests. Ignored otherwise
mutation {
configureHardware(config: [{option: ConfigOption, hold: Boolean, interval: Float, offset: Float},...]) {
config: String
errors: String,
success: Boolean,
}
}
System Self-Test
Run a system self-test
- test: Type of self-test to perform
mutation {
testHardware(test: TestType) {
... on IntegrationTestResults {
errors: String,
success: Boolean,
telemetryNominal{...},
telemetryDebug{...}
}
... on HardwareTestResults {
errors: "Not Implemented",
success: true,
data: Empty
}
}
}
Passthrough
Pass a custom command through to the system
- command: String containing the hex values to be sent (ex. “C3”) It will be converted to a byte array before transfer.
mutation {
issueRawCommand(command: String) {
errors: String,
success: Boolean,
response: String
}
}
Modules
Structs
Input structure for ‘configureHardware’ mutation
Response fields for ‘configureHardware’ mutation
Common response fields structure for requests which don’t return any specific data
Response fields for ‘power’ query
Response fields for ‘testHardware(test: HARDWARE)’ mutation
Response fields for ‘testHardware(test: INTEGRATION)’ mutation
Current system lock information. Used in the response fields of
the lockInfo
query
Response fields for lockStatus
query
Time structure for lockStatus
and lockInfo
response fields
Receiver status
Response fields for systemStatus
query
Response fields for telemetry
query
Response fields for ‘telemetry(telem: NOMINAL)’ query
System component data
Version information about the device, returned as the
telemetryDebug
response field
Enums
Return field for ‘ack’ query
Input field for ‘configureHardware’ mutation
Enum for the positionType
and velocityType
response fields
of the lockStatus
query
Response field for ‘power’ query
Enum for the TimeStatus
response field of the lockStatus
query
Enum for the positionStatus
and velocityStatus
response fields
of the lockStatus
query
Enum for the ‘testHardware’ mutation response union
Input field for ‘testHardware’ mutation