summaryrefslogtreecommitdiffstats
path: root/src/can/can-command.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/can/can-command.hpp')
-rw-r--r--src/can/can-command.hpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/can/can-command.hpp b/src/can/can-command.hpp
new file mode 100644
index 00000000..62b56c1e
--- /dev/null
+++ b/src/can/can-command.hpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2015, 2016 "IoT.bzh"
+ * Author "Romain Forlot" <romain.forlot@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "openxc.pb.h"
+#include "can-signals.hpp"
+
+/**
+ * @brief The type signature for a function to handle a custom OpenXC command.
+ *
+ * @param[in] char* name - the name of the received command.
+ * @param[in] openxc_DynamicField* value - the value of the received command, in a DynamicField. The actual type
+ * may be a number, string or bool.
+ * @param[in] openxc_DynamicField* event - an optional event from the received command, in a DynamicField. The
+ * actual type may be a number, string or bool.
+ * @param[in] CanSignal* signals - The list of all signals.
+ * @param[in] int signalCount - The length of the signals array.
+ */
+typedef void (*CommandHandler)(const char* name, openxc_DynamicField* value,
+ openxc_DynamicField* event, CanSignal* signals, int signalCount);
+
+/* @struct CanCommand
+ * @brief The structure to represent a supported custom OpenXC command.
+ *
+ * @desc For completely customized CAN commands without a 1-1 mapping between an
+ * OpenXC message from the host and a CAN signal, you can define the name of the
+ * command and a custom function to handle it in the VI. An example is
+ * the "turn_signal_status" command in OpenXC, which has a value of "left" or
+ * "right". The vehicle may have separate CAN signals for the left and right
+ * turn signals, so you will need to implement a custom command handler to send
+ * the correct signals.
+ *
+ * Command handlers are also useful if you want to trigger multiple CAN messages
+ * or signals from a signal OpenXC message.
+ */
+typedef struct {
+ const char* generic_name; /*!< generic_name - The name of the command.*/
+ CommandHandler handler; /*!< handler - An function to process the received command's data and perform some
+ * action.*/
+} CanCommand;
+
+/* Public: Return an array of all OpenXC CAN commands enabled in the active
+ * configuration that can write back to CAN with a custom handler.
+ *
+ * * Commands not defined here are handled using a 1-1 mapping from the signals
+ * list.
+ * */
+CanCommand* getCommands();
+
+/* Public: Return the length of the array returned by getCommandCount(). */
+int getCommandCount(); \ No newline at end of file