TestAndMeasurement.h 4.95 KB
Newer Older
1
2
/*
             LUFA Library
3
     Copyright (C) Dean Camera, 2011.
4
5
              
  dean [at] fourwalledcubicle [dot] com
6
           www.lufa-lib.org
7
8
9
*/

/*
10
  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
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

  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. */
48
		#define LEDMASK_USB_NOTREADY                  LEDS_LED1
49
50

		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
51
		#define LEDMASK_USB_ENUMERATING              (LEDS_LED2 | LEDS_LED3)
52
53

		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
54
		#define LEDMASK_USB_READY                    (LEDS_LED2 | LEDS_LED4)
55
56

		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
57
		#define LEDMASK_USB_ERROR                    (LEDS_LED1 | LEDS_LED3)
58
		
59
60
61
		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
		#define LEDMASK_USB_BUSY                      LEDS_LED2

62
63
64
65
66
67
68
69
70
		#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
		
71
72
73
74
75
76
77
78
79
80
81
		#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
82
83
84
85
86

	/* Type Defines */
		typedef struct
		{
			uint8_t  Status;
87
			uint8_t  Reserved;
88
89
90
91
92
93
94
95

			uint16_t TMCVersion;
			
			struct
			{
				unsigned char ListenOnly             : 1;
				unsigned char TalkOnly               : 1;
				unsigned char PulseIndicateSupported : 1;
96
				unsigned char Reserved               : 5;
97
98
99
100
101
			} Interface;
			
			struct
			{
				unsigned char SupportsAbortINOnMatch : 1;
102
				unsigned char Reserved               : 7;
103
104
			} Device;
			
105
106
			uint8_t Reserved2[6];
			uint8_t Reserved3[12];			
107
		} TMC_Capabilities_t;
108
109
110
111
112
113
114
115
		
		typedef struct
		{
			unsigned char LastMessageTransaction : 1;
			unsigned char Reserved               : 7;

			uint8_t Reserved2[3];
		} TMC_DevOUTMessageHeader_t;
116
117
118

		typedef struct
		{
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
			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;
140
		} TMC_MessageHeader_t;
141

142
143
144
	/* Function Prototypes: */
		void SetupHardware(void);
		void TMC_Task(void);
145
146
		bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader);
		bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader);
147
148
149
150

		void EVENT_USB_Device_Connect(void);
		void EVENT_USB_Device_Disconnect(void);
		void EVENT_USB_Device_ConfigurationChanged(void);
151
		void EVENT_USB_Device_ControlRequest(void);
152
153

#endif
154