123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- /* Copyright (C) 2014-2015 by Jacob Alexander
- *
- * This file is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this file. If not, see <http://www.gnu.org/licenses/>.
- */
-
- #pragma once
-
- // ----- Includes -----
-
- // Project Includes
- #include <kll.h>
-
-
-
- // ----- Enums -----
-
- // Functions
- typedef enum Command {
- CableCheck, // Comm check
-
- IdRequest, // Slave initialization (request id from master)
- IdEnumeration, // Slave initialization (begin enumeration from master)
- IdReport, // Slave initialization complete, report id to master
-
- ScanCode, // ScanCode event status change
- Animation, // Master trigger animation event (same command is sent back to master when ready)
-
- RemoteCapability, // Activate a capability on the given node
- RemoteOutput, // Remote debug output from a given node
- RemoteInput, // Remote command to send to a given node's debug cli
-
- Command_TOP, // Enum bounds
- } Command;
-
- // UART Rx/Tx Status
- typedef enum UARTStatus {
- UARTStatus_Wait = 0, // Waiting Rx: for SYN Tx: for current command copy to finish
- UARTStatus_SYN = 1, // Rx: SYN Received, waiting for SOH
- UARTStatus_SOH = 2, // Rx: SOH Received, waiting for Command
- UARTStatus_Command = 3, // Rx: Command Received, waiting for data
- UARTStatus_Ready = 4, // Tx: Ready to send commands
- } UARTStatus;
-
-
-
- // ----- Structs -----
-
- // UART Connect Commands
-
- // Cable Check Command
- // Called on each UART every few seconds to make sure there is a connection
- // Also used to make sure there aren't any serious problems with the cable with data corruption
- // This command must pass before sending any other commands on the particular UART
- // Each argument is always 0xD2 (11010010)
- typedef struct CableCheckCommand {
- Command command;
- uint8_t numArgs;
- uint8_t firstArg[0];
- } CableCheckCommand;
-
- // Id Request Command
- // Issued by the slave device (non-master) whenever it is powered up
- // Do not issue any commands until given an Id
- // (Except for Cable Check and IdRequestCommand)
- typedef struct IdRequestCommand {
- Command command;
- } IdRequestCommand;
-
- // Id Enumeration Command
- // Issued by the master whenever an Id Request is received
- typedef struct IdEnumerationCommand {
- Command command;
- uint8_t id;
- } IdEnumerationCommand;
-
- // Id Report Command
- // Issued by each slave to the master when assigned an Id
- typedef struct IdReportCommand {
- Command command;
- uint8_t id;
- } IdReportCommand;
-
- // Scan Code Command
- // Sent from the slave to the master whenever there is a scan code state change
- typedef struct ScanCodeCommand {
- Command command;
- uint8_t id;
- uint8_t numScanCodes;
- TriggerGuide firstScanCode[0];
- } ScanCodeCommand;
-
- // Animation Command
- // Initiated by the master whenever an animation id should modify it's state
- // Then after the leaf slave node receives the command, send it back to the master
- // On the way back, each device can begin the animation adjustment
- //
- // The master->leaf command should indicate to each device that it should finish sending the
- // current slave->master data and wait for the leaf->master command
- // This allows for a tighter synchronization of animation events
- typedef struct AnimationCommand {
- Command command;
- uint8_t animationId;
- uint8_t numParams;
- uint8_t firstParam[0];
- } AnimationCommand;
-
- // Remote Capability Command
- // Initiated by the master to trigger a capability on a given node
- // RemoteOutput is enabled while capability is activated
- typedef struct RemoteCapabilityCommand {
- Command command;
- uint8_t id;
- Capability capability;
- uint8_t numArgs;
- uint8_t firstArg[0];
- } RemoteCapabilityCommand;
-
- // Remote Output Command
- // Sends debug output to the master node
- // Uses print command redirection to generate each command message
- typedef struct RemoteOutputCommand {
- Command command;
- uint8_t id;
- uint8_t length;
- uint8_t firstChar[0];
- } RemoteOutputCommand;
-
- // Remote Input Command
- // Sends debug input to given node (usually from master)
- // Uses debug cli to execute command and sends all output using Remote Output Command
- typedef struct RemoteInputCommand {
- Command command;
- uint8_t id;
- uint8_t length;
- uint8_t firstChar[0];
- } RemoteInputCommand;
-
-
-
- // ----- Variables -----
-
- extern uint8_t Connect_id;
- extern uint8_t Connect_master; // Set if master
-
-
-
- // ----- Functions -----
-
- void Connect_setup( uint8_t master );
- void Connect_scan();
-
- void Connect_send_ScanCode( uint8_t id, TriggerGuide *scanCodeStateList, uint8_t numScanCodes );
|