stackmat
v1.1.1
Published
Subscribe to events received from a Stackmat timer connected to the browser via the HTML5 Audio API.
Downloads
70
Readme
Stackmat
Subscribe to events received from a Stackmat timer connected to the browser via the HTML5 Audio API.
Both a Typescript-based library and a UMD build are available.
Typescript Usage
Install the library:
npm install stackmat
Subscribe to events and start listening for packets:
import { Stackmat, Packet } from 'stackmat'
const stackmat = new Stackmat()
stackmat.on('started', (packet: Packet) => {
console.log('Timer started')
})
stackmat.on('stopped', (packet: Packet) => {
console.log('Timer stopped at: ' + packet.timeAsString)
})
stackmat.start()
Browser Usage
Import the UMD build:
<script type="text/javascript" src="https://unpkg.com/stackmat"></script>
Subscribe to events and start listening for packets:
<script type="text/javascript">
const stackmat = new Stackmat();
stackmat.on('started', packet => {
console.log('Timer started')
})
stackmat.on('stopped', packet => {
console.log('Timer stopped at: ' + packet.timeAsString)
})
stackmat.start()
</script>
Disconnecting
stackmat.stop()
may be called to stop listening for packets, without unsubscribing from any events.
stackmat.off(TimerEvent?)
may be called to unsubscribe from a specified event, or all events if no specific event is provided.
Events
| TimerEvent
| When Fired
| --- | ---
| packetRecieved | Every time a valid packet is recieved
| timerConnected | Valid packets start being received
| timerDisconnected | Valid packets stop being received
| started | A solve is started, and the timer starts counting up from zero
| stopped | A solve is completed, and the timer is stopped
| reset | The timer is reset to zero
| ready | Both hands are placed on the timer while the timer is in a reset state
| unready | One or both hands are removed before the green light turns on and the timer is in a ready state
| starting | The green light turns on while in a ready state, indicating the solve can be started
| leftHandDown | The left hand is placed on the timer while the timer is in any state
| leftHandUp | The left hand is removed from the timer while the timer is in any state
| rightHandDown | The right hand is placed on the timer while the timer is in any state
| rightHandUp | The right hand is removed from the timer while the timer is in any state
Packet Interface
Each event callback (with the exception of timerConnected
and timerDisconnected
) sends a Packet
with the following properties:
interface Packet {
isValid: boolean
status: PacketStatus
timeInMilliseconds: number
timeAsString: string
isLeftHandDown: boolean
isRightHandDown: boolean
areBothHandsDown: boolean
}
PacketStatus
is an enum representing the internal code sent with each Stackmat packet:
enum PacketStatus {
IDLE = 'I',
STARTING = 'A',
RUNNING = ' ',
STOPPED = 'S',
LEFT_HAND = 'L',
RIGHT_HAND = 'R',
BOTH_HANDS = 'C',
INVALID = 'X',
}