1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
/*
LUFA Library
Copyright (C) Dean Camera, 2011.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
#ifndef _TESTANDMEASUREMENT_H_
#define _TESTANDMEASUREMENT_H_
/* Includes: */
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include "Descriptors.h"
#include <LUFA/Version.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/Board/LEDs.h>
/* Macros: */
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1
/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
#define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
#define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
#define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
#define LEDMASK_USB_BUSY LEDS_LED2
#define Req_InitiateAbortBulkOut 0x01
#define Req_CheckAbortBulkOutStatus 0x02
#define Req_InitiateAbortBulkIn 0x03
#define Req_CheckAbortBulkInStatus 0x04
#define Req_InitiateClear 0x05
#define Req_CheckClearStatus 0x06
#define Req_GetCapabilities 0x07
#define Req_IndicatorPulse 0x40
#define TMC_STATUS_SUCCESS 0x01
#define TMC_STATUS_PENDING 0x02
#define TMC_STATUS_FAILED 0x80
#define TMC_STATUS_TRANSFER_NOT_IN_PROGRESS 0x81
#define TMC_STATUS_SPLIT_NOT_IN_PROGRESS 0x82
#define TMC_STATUS_SPLIT_IN_PROGRESS 0x83
#define TMC_MESSAGEID_DEV_DEP_MSG_OUT 0x01
#define TMC_MESSAGEID_DEV_DEP_MSG_IN 0x02
#define TMC_MESSAGEID_DEV_VENDOR_OUT 0x7E
#define TMC_MESSAGEID_DEV_VENDOR_IN 0x7F
/* Type Defines */
typedef struct
{
uint8_t Status;
uint8_t Reserved;
uint16_t TMCVersion;
struct
{
unsigned char ListenOnly : 1;
unsigned char TalkOnly : 1;
unsigned char PulseIndicateSupported : 1;
unsigned char Reserved : 5;
} Interface;
struct
{
unsigned char SupportsAbortINOnMatch : 1;
unsigned char Reserved : 7;
} Device;
uint8_t Reserved2[6];
uint8_t Reserved3[12];
} TMC_Capabilities_t;
typedef struct
{
unsigned char LastMessageTransaction : 1;
unsigned char Reserved : 7;
uint8_t Reserved2[3];
} TMC_DevOUTMessageHeader_t;
typedef struct
{
unsigned char TermCharEnabled : 1;
unsigned char Reserved : 7;
uint8_t TermChar;
uint8_t Reserved2[2];
} TMC_DevINMessageHeader_t;
typedef struct
{
uint8_t MessageID;
uint8_t Tag;
uint8_t InverseTag;
uint8_t Reserved;
uint32_t TransferSize;
union
{
TMC_DevOUTMessageHeader_t DeviceOUT;
TMC_DevINMessageHeader_t DeviceIN;
uint32_t VendorSpecific;
} MessageIDSpecific;
} TMC_MessageHeader_t;
/* Function Prototypes: */
void SetupHardware(void);
void TMC_Task(void);
bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader);
bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader);
void EVENT_USB_Device_Connect(void);
void EVENT_USB_Device_Disconnect(void);
void EVENT_USB_Device_ConfigurationChanged(void);
void EVENT_USB_Device_ControlRequest(void);
#endif
|