Mercurial > louis > kiibohd-controller
diff Scan/UARTConnect/connect_scan.h @ 307:ecd2ae35d25c
Initial commit for UARTConnect module
* Keyboard interconnect using two uarts
* Supports daisy chain addressing using a master/slave direction communication scheme
- Still needs more testing
- Functions have been tested alone to be generally working
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sun, 15 Mar 2015 16:58:01 -0700 |
parents | |
children | 66eccdd9ced5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Scan/UARTConnect/connect_scan.h Sun Mar 15 16:58:01 2015 -0700 @@ -0,0 +1,122 @@ +/* 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/>. + */ + +#ifndef __CONNECT_SCAN_H +#define __CONNECT_SCAN_H + +// ----- Includes ----- + +// Project Includes +#include <kll.h> + + + +// ----- Enums ----- + +// Functions +typedef enum Command { + CableCheck = 0, // Comm check + IdRequest = 1, // Slave initialization (request id from master) + IdEnumeration = 2, // Slave initialization (begin enumeration from master) + IdReport = 3, // Slave initialization complete, report id to master + ScanCode = 4, // ScanCode event status change + Animation = 5, // Master trigger animation event (same command is sent back to master when ready) +} 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 receive 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 +// XXX Future work may include an "external capabilities" list in this command +typedef struct IdEnumerationCommand { + Command command; + uint8_t id; +} IdEnumerationCommand; + +// Id Report Command +// Issued by each slave to the master when assigned an Id +// XXX Future work will include an "external capabilities" list in this command +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; + + + +// ----- Functions ----- + +void Connect_setup( uint8_t master ); +void Connect_scan(); + + +#endif // __CONNECT_SCAN_H +