1 /* Copyright (C) 2014-2015 by Jacob Alexander
3 * This file is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
8 * This file is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this file. If not, see <http://www.gnu.org/licenses/>.
19 // ----- Includes -----
29 typedef enum Command {
30 CableCheck, // Comm check
32 IdRequest, // Slave initialization (request id from master)
33 IdEnumeration, // Slave initialization (begin enumeration from master)
34 IdReport, // Slave initialization complete, report id to master
36 ScanCode, // ScanCode event status change
37 Animation, // Master trigger animation event (same command is sent back to master when ready)
39 RemoteCapability, // Activate a capability on the given node
40 RemoteOutput, // Remote debug output from a given node
41 RemoteInput, // Remote command to send to a given node's debug cli
43 Command_TOP, // Enum bounds
47 typedef enum UARTStatus {
48 UARTStatus_Wait = 0, // Waiting Rx: for SYN Tx: for current command copy to finish
49 UARTStatus_SYN = 1, // Rx: SYN Received, waiting for SOH
50 UARTStatus_SOH = 2, // Rx: SOH Received, waiting for Command
51 UARTStatus_Command = 3, // Rx: Command Received, waiting for data
52 UARTStatus_Ready = 4, // Tx: Ready to send commands
57 // ----- Structs -----
59 // UART Connect Commands
61 // Cable Check Command
62 // Called on each UART every few seconds to make sure there is a connection
63 // Also used to make sure there aren't any serious problems with the cable with data corruption
64 // This command must pass before sending any other commands on the particular UART
65 // Each argument is always 0xD2 (11010010)
66 typedef struct CableCheckCommand {
73 // Issued by the slave device (non-master) whenever it is powered up
74 // Do not issue any commands until given an Id
75 // (Except for Cable Check and IdRequestCommand)
76 typedef struct IdRequestCommand {
80 // Id Enumeration Command
81 // Issued by the master whenever an Id Request is received
82 typedef struct IdEnumerationCommand {
85 } IdEnumerationCommand;
88 // Issued by each slave to the master when assigned an Id
89 typedef struct IdReportCommand {
95 // Sent from the slave to the master whenever there is a scan code state change
96 typedef struct ScanCodeCommand {
100 TriggerGuide firstScanCode[0];
104 // Initiated by the master whenever an animation id should modify it's state
105 // Then after the leaf slave node receives the command, send it back to the master
106 // On the way back, each device can begin the animation adjustment
108 // The master->leaf command should indicate to each device that it should finish sending the
109 // current slave->master data and wait for the leaf->master command
110 // This allows for a tighter synchronization of animation events
111 typedef struct AnimationCommand {
115 uint8_t firstParam[0];
118 // Remote Capability Command
119 // Initiated by the master to trigger a capability on a given node
120 // RemoteOutput is enabled while capability is activated
121 typedef struct RemoteCapabilityCommand {
124 Capability capability;
127 } RemoteCapabilityCommand;
129 // Remote Output Command
130 // Sends debug output to the master node
131 // Uses print command redirection to generate each command message
132 typedef struct RemoteOutputCommand {
136 uint8_t firstChar[0];
137 } RemoteOutputCommand;
139 // Remote Input Command
140 // Sends debug input to given node (usually from master)
141 // Uses debug cli to execute command and sends all output using Remote Output Command
142 typedef struct RemoteInputCommand {
146 uint8_t firstChar[0];
147 } RemoteInputCommand;
151 // ----- Variables -----
153 extern uint8_t Connect_id;
154 extern uint8_t Connect_master; // Set if master
158 // ----- Functions -----
160 void Connect_setup( uint8_t master );
163 void Connect_send_ScanCode( uint8_t id, TriggerGuide *scanCodeStateList, uint8_t numScanCodes );