Dual CANbus monitor and instrumentation cluster. Presently tuned for the Nissan Leaf EV.

Dependencies:   SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2_ILI9341 mbed

Fork of CANary_corrupt by Tick Tock

After adding the LPC1768 platform, import as a program and do not select the "update to latest revision" box

User Guide

Eagle Schematic and Board design

/media/uploads/TickTock/canaryr6.zip

/media/uploads/TickTock/canary_sch.jpg

/media/uploads/TickTock/canaryr6brd.jpg

For LCD Rev 1.01:

/media/uploads/TickTock/lcdsch.jpg

For VCD Rev 2.00:

/media/uploads/TickTock/lcdr2.jpg

Parts List

qtyinstancepart #packagesupplierDescription
1BAT3Vhttp://www.ebay.com/itm/10x-CR2032-SMD-Battery-Holder-for-CR2032-Battery-/180938057979?pt=LH_DefaultDomain_0&hash=item2a20bfa8fbLithium 2032 coin battery holder
4C1-C4ECST1DC106R6032Tantalium capacitor 10uF
3FC1-FC3ZF1-20-01-T-WThttp://www.samtec.com/cable-systems/idc-ffc/ffc/zero-insertion.aspx20 conductor 1mm pitch flex cable connector (optional)
1FJ-20-R-08.00-4http://www.samtec.com/cable-systems/idc-ffc/ffc/zero-insertion.aspx8\" 20 conductor 1mm pitch flex connector, end reversed (optional)
2H1-H4(DON'T populate H1-H4 headers - solder mbed directly)
1H5http://www.ebay.com/itm/221186042943?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l26491x12 .1\" pitch header (optional)
1H62x6 .1\" pitch header (optional)
2IC1,IC2VP230LMDSOP8http://www.ebay.com/itm/130488665247?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649canbus transciever
1IC3LM1117-5VSOT2235V regulator
5JP*2 pin .1\" jumper header
1mbedLPC1768http://www.ebay.com/itm/200830573509?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649mbed uC
2Q1,Q22N2222SOT23General purpose NPN transistor
1R1R393M120639K resistor
1R2R103M120610K resistor
4R4-R6R102M12061K resistor
1R3R500M120650 Ohm resistor
2TR1-TR5ZJYS81R5-2PL51TG01http://www.digikey.com/product-detail/en/ZJYS81R5-2PL51T-G01/445-2223-1-ND/765232CM Choke
1Z11N5340BGC1702-15http://www.ebay.com/itm/150878122425?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l26496V, 5W Zener Diode
1Z1DC-DC conveterhttp://www.ebay.com/itm/251142727849?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l264912V-7V, 3W DC-DC converter
1X1USBhttp://www.ebay.com/itm/New-Vertical-USB-2-0-A-pcb-connector-socket-USB-A-Type-/300553895292?pt=LH_DefaultDomain_0&hash=item45fa687d7cvertical USB connector
2LCD0,LCD1TFThttp://www.mikroe.com/add-on-boards/display/tft-proto/320x240 LCD with touch screen
1E0Enclosurehttp://www.shapeways.com/model/1077799/canary.html?li=user-profile&materialId=63d printed enclosure

Assembly

1) LCD Displays

I found ribbon cable is a nice way to organize the wires to the displays. There are two versions of the display and each must be wired differently. The original project used HW REV. 1.01. For that version, you'll need 12 conductors and I connected them in the following order:

1LED+
2LED-
3RST
4SDI
5WR/SCLK
6CS
7X+
8X-
9Y+
10Y-
11VDD
12GND

If, instead, you have HW REV 2.0, you will need 13 conductors with the following order:

1LED+
2LED-
3RST
4SDI
5RS (SCLK)
6WR (DC)
7CS
8X+
9X-
10Y+
11Y-
12VDD
13GND

First I connected all the GND connections (2 GND & IM0, IM1, IM3 for REV1.01 or 2 GND, RD, & IM0 for REV2.00). Do not connect the bottom GND until you have the ribbon cable connected. After making all the ribbon cable connections (connecting the GND of the ribbon cable to the bottom GND pad), solder the GND bar from the previous step to the back of the bottom GND connection. Finally, make a connection from the back side 3.3V pin to IM2 for REV1.01 or to IM1,IM2,&IM3 for REV2.00. Take a break and repeat for the second display.

Examples of REV1.01 boards:

/media/uploads/TickTock/lcdtop.jpg /media/uploads/TickTock/lcdbot.jpg

Examples of REV2.00:

/media/uploads/TickTock/rev2front.jpg /media/uploads/TickTock/rev2back.jpg

Once the two displays are complete combine all wires except CS0, CS1, X+, X-, Y+, and Y-. Connect X- of the left display to X+ of the right. Similarly connect Y- of the left display to Y+ of the right. Insulate any exposed wires.

2) PCB

Refer to the schematics to place all the components on the board. If you plan to install into the CANary 3D enclosure, DO NOT install the battery holder or the socket for the mbed and, instead, connect two wires to the VB and GND pads nearby. You will have to install the battery holder against the back wall to avoid interfering with the right-hand display and the mbed will have to be directly soldered. I have not found a socket with a low enough profile to fit in the space provided (depth of enclosure is limited by the space behind the center console). Also, I recommend keeping as much lead as possible on the Zener diode (bending it as shown to clear the back wall). Although it is operating well within parameters, the Zener gets quite hot during extended operation and the leads help dissipate the heat and keep it away from the PCB and other components.Update: Several Zeners have failed resulting in damage to some users boards so I recommend using a DC-DC converter instead to bring the 12V down to 7V.

/media/uploads/TickTock/pcbtop.jpg /media/uploads/TickTock/pcbbot.jpg

Once the PCB is populated, solder the LCDs to the PCB. CS0 connects to the right display and CS1 connects to the left. /media/uploads/TickTock/brddis.jpg

Update: The Zener diodes tended to fail after a few months so I am recommending removing them and replacing with a DC-DC converter. This will run cooler and waste less energy, too. To install, remove the left display panel to gain access to the Zener. From there, the Zener can be removed and it's pads used to connect to the DC-DC converter. I recommend setting the output voltage on the bench before installing since the trim pot is tricky to reach once installed. Set it to 7V. The input can be connected to the left pad previously occupied by the zener and the output can connect to the right. GND(-) can be connected to the bottom right pad on the 2x6 header below the flex cable connector. Make sure the GND wire lies flat so it doesn't interfere with the connection of the flex cable. /media/uploads/TickTock/dcdcinst2.jpg

Once soldered in place, the DC-DC converter can easily be mounted to the back wall with double sided tape above the battery holder. /media/uploads/TickTock/dcdcinst3.jpg

3) Testing

1)First step is to buzz out all connections from the LCDs to the pins in the main board
2)Next check the touch screen connections. On the main board, place an Ohm meter across X+ and X-. You should read 700 Ohms. Repeat for Y+ and Y-. Then test the resistance from X+ to Y+. With nothing touching the screens, it should read >100K Ohms and <1K when touching either screen.
3)When all connections are checked, solder in the mbed. Download and install the touch2 program http://mbed.org/users/TickTock/code/touch2/ to test the basic operation of the mbed and touch screens.
tips:
Touch screen is sensitive - excess flux on X+,X-,Y+,Y- connection on mbed can result in flakey operation
If touch is not working, double-check the LCD0_CS and LCD1_CS are not swapped. LCD0_CS must connect to the CS of the LCD that has X- & Y- connected to the mbed. LCD1_CS must connect to the CS of the LCD that has X+ & Y+ connected to the mbed.
4)Once touch2 works, it is time to connect to the OBD connector. I highly recommend double checking all connections from the OBD to the PCB with the cable in place before connecting to the Leaf. Buzz out all the pins in the OBS to make sure none are shorting to each other, Check that the 12V goes to the Zener (and nothing else) and the switched 12V to the resistor divider (and nothing else). Test the ground connection properly connects to ground and nothing else.
5)Once you are confident there are no shorts or wrong connections from the OBD connector, take a deep breath and plug it into your leaf. Touch2 program should come up and function. Unplug and install the latest CANary firmware. If you have the REV2.00 LCD boards, you will need to edit the precompile.h file in the TOUCH_TFTx2_w9341 library and set USE_ILI9341 to 1. Test all features before installing into the enclosure (gids, cellpair, menu system, logging) since installing and removing from the enclosure is a PITA.

/media/uploads/TickTock/pcbdone.jpg /media/uploads/TickTock/functioning.jpg

4) Enclosure

The 3D printer leaves a lot of powder behind - I used a strong spray of water to get it out of all the cracks. The enclosure comes with a rather rough finish. I recommend convincing yourself you like it, then simply lightly sand then paint before assembly. Sanding is very difficult - the nylon is very nicely fused and doesn't want to sand. I tried sandblasting and that didn't work either. I had some limited success with filler and then sanding, but only on the outside - it is too difficult to sand the face. /media/uploads/TickTock/enclosure.jpg

5) Final Assembly

Make sure you are well rested with lots of patience before attempting assembly. It is a puzzle figuring out how to get both displays and the PCB in place. Enclosure was too expensive for me to keep iterating to optimize for assembly. I ended up snipping the thin display posts shorter and using various tools to push the displays into place. Also, some USB connectors are taller than others. If you have one of the taller ones, you will have to deflect the back wall a bit while inserting the PCB (being careful not to bend the housing) to get it to it's opening in the back wall. Do use a screw in the provided post to secure the PCB as USB insertion will otherwise dislodge it.

I added an additional safety line which wraps around the center post to prevent the enclosure from becoming a projectile in the event of an accident. /media/uploads/TickTock/safety.jpg Installed: /media/uploads/TickTock/installed.jpg

Committer:
TickTock
Date:
Wed Jul 01 22:21:52 2015 +0000
Revision:
208:bfb6b68d1677
Parent:
146:88f7bda79d8e
Added option to auto delete logs older that a configurable number of days.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TickTock 146:88f7bda79d8e 1 /*
TickTock 146:88f7bda79d8e 2 **************************************************************************************************************
TickTock 146:88f7bda79d8e 3 * NXP USB Host Stack
TickTock 146:88f7bda79d8e 4 *
TickTock 146:88f7bda79d8e 5 * (c) Copyright 2008, NXP SemiConductors
TickTock 146:88f7bda79d8e 6 * (c) Copyright 2008, OnChip Technologies LLC
TickTock 146:88f7bda79d8e 7 * All Rights Reserved
TickTock 146:88f7bda79d8e 8 *
TickTock 146:88f7bda79d8e 9 * www.nxp.com
TickTock 146:88f7bda79d8e 10 * www.onchiptech.com
TickTock 146:88f7bda79d8e 11 *
TickTock 146:88f7bda79d8e 12 * File : usbhost_lpc17xx.h
TickTock 146:88f7bda79d8e 13 * Programmer(s) : Ravikanth.P
TickTock 146:88f7bda79d8e 14 * Version :
TickTock 146:88f7bda79d8e 15 *
TickTock 146:88f7bda79d8e 16 **************************************************************************************************************
TickTock 146:88f7bda79d8e 17 */
TickTock 146:88f7bda79d8e 18
TickTock 146:88f7bda79d8e 19 #ifndef USBHOST_LPC17xx_H
TickTock 146:88f7bda79d8e 20 #define USBHOST_LPC17xx_H
TickTock 146:88f7bda79d8e 21
TickTock 146:88f7bda79d8e 22 /*
TickTock 146:88f7bda79d8e 23 **************************************************************************************************************
TickTock 146:88f7bda79d8e 24 * INCLUDE HEADER FILES
TickTock 146:88f7bda79d8e 25 **************************************************************************************************************
TickTock 146:88f7bda79d8e 26 */
TickTock 146:88f7bda79d8e 27
TickTock 146:88f7bda79d8e 28 #include "usbhost_inc.h"
TickTock 146:88f7bda79d8e 29
TickTock 146:88f7bda79d8e 30 /*
TickTock 146:88f7bda79d8e 31 **************************************************************************************************************
TickTock 146:88f7bda79d8e 32 * PRINT CONFIGURATION
TickTock 146:88f7bda79d8e 33 **************************************************************************************************************
TickTock 146:88f7bda79d8e 34 */
TickTock 146:88f7bda79d8e 35
TickTock 146:88f7bda79d8e 36 #define PRINT_ENABLE 0
TickTock 146:88f7bda79d8e 37
TickTock 146:88f7bda79d8e 38 #if PRINT_ENABLE
TickTock 146:88f7bda79d8e 39 #define PRINT_Log(...) printf(__VA_ARGS__)
TickTock 146:88f7bda79d8e 40 #define PRINT_Err(rc) printf("ERROR: In %s at Line %u - rc = %d\n", __FUNCTION__, __LINE__, rc)
TickTock 146:88f7bda79d8e 41
TickTock 146:88f7bda79d8e 42 #else
TickTock 146:88f7bda79d8e 43 #define PRINT_Log(...) do {} while(0)
TickTock 146:88f7bda79d8e 44 #define PRINT_Err(rc) do {} while(0)
TickTock 146:88f7bda79d8e 45
TickTock 146:88f7bda79d8e 46 #endif
TickTock 146:88f7bda79d8e 47
TickTock 146:88f7bda79d8e 48 /*
TickTock 146:88f7bda79d8e 49 **************************************************************************************************************
TickTock 146:88f7bda79d8e 50 * GENERAL DEFINITIONS
TickTock 146:88f7bda79d8e 51 **************************************************************************************************************
TickTock 146:88f7bda79d8e 52 */
TickTock 146:88f7bda79d8e 53
TickTock 146:88f7bda79d8e 54 #define DESC_LENGTH(x) x[0]
TickTock 146:88f7bda79d8e 55 #define DESC_TYPE(x) x[1]
TickTock 146:88f7bda79d8e 56
TickTock 146:88f7bda79d8e 57
TickTock 146:88f7bda79d8e 58 #define HOST_GET_DESCRIPTOR(descType, descIndex, data, length) \
TickTock 146:88f7bda79d8e 59 Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, \
TickTock 146:88f7bda79d8e 60 (descType << 8)|(descIndex), 0, length, data)
TickTock 146:88f7bda79d8e 61
TickTock 146:88f7bda79d8e 62 #define HOST_SET_ADDRESS(new_addr) \
TickTock 146:88f7bda79d8e 63 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_ADDRESS, \
TickTock 146:88f7bda79d8e 64 new_addr, 0, 0, NULL)
TickTock 146:88f7bda79d8e 65
TickTock 146:88f7bda79d8e 66 #define USBH_SET_CONFIGURATION(configNum) \
TickTock 146:88f7bda79d8e 67 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_CONFIGURATION, \
TickTock 146:88f7bda79d8e 68 configNum, 0, 0, NULL)
TickTock 146:88f7bda79d8e 69
TickTock 146:88f7bda79d8e 70 #define USBH_SET_INTERFACE(ifNum, altNum) \
TickTock 146:88f7bda79d8e 71 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, SET_INTERFACE, \
TickTock 146:88f7bda79d8e 72 altNum, ifNum, 0, NULL)
TickTock 146:88f7bda79d8e 73
TickTock 146:88f7bda79d8e 74 /*
TickTock 146:88f7bda79d8e 75 **************************************************************************************************************
TickTock 146:88f7bda79d8e 76 * OHCI OPERATIONAL REGISTER FIELD DEFINITIONS
TickTock 146:88f7bda79d8e 77 **************************************************************************************************************
TickTock 146:88f7bda79d8e 78 */
TickTock 146:88f7bda79d8e 79
TickTock 146:88f7bda79d8e 80 /* ------------------ HcControl Register --------------------- */
TickTock 146:88f7bda79d8e 81 #define OR_CONTROL_CLE 0x00000010
TickTock 146:88f7bda79d8e 82 #define OR_CONTROL_BLE 0x00000020
TickTock 146:88f7bda79d8e 83 #define OR_CONTROL_HCFS 0x000000C0
TickTock 146:88f7bda79d8e 84 #define OR_CONTROL_HC_OPER 0x00000080
TickTock 146:88f7bda79d8e 85 /* ----------------- HcCommandStatus Register ----------------- */
TickTock 146:88f7bda79d8e 86 #define OR_CMD_STATUS_HCR 0x00000001
TickTock 146:88f7bda79d8e 87 #define OR_CMD_STATUS_CLF 0x00000002
TickTock 146:88f7bda79d8e 88 #define OR_CMD_STATUS_BLF 0x00000004
TickTock 146:88f7bda79d8e 89 /* --------------- HcInterruptStatus Register ----------------- */
TickTock 146:88f7bda79d8e 90 #define OR_INTR_STATUS_WDH 0x00000002
TickTock 146:88f7bda79d8e 91 #define OR_INTR_STATUS_RHSC 0x00000040
TickTock 146:88f7bda79d8e 92 /* --------------- HcInterruptEnable Register ----------------- */
TickTock 146:88f7bda79d8e 93 #define OR_INTR_ENABLE_WDH 0x00000002
TickTock 146:88f7bda79d8e 94 #define OR_INTR_ENABLE_RHSC 0x00000040
TickTock 146:88f7bda79d8e 95 #define OR_INTR_ENABLE_MIE 0x80000000
TickTock 146:88f7bda79d8e 96 /* ---------------- HcRhDescriptorA Register ------------------ */
TickTock 146:88f7bda79d8e 97 #define OR_RH_STATUS_LPSC 0x00010000
TickTock 146:88f7bda79d8e 98 #define OR_RH_STATUS_DRWE 0x00008000
TickTock 146:88f7bda79d8e 99 /* -------------- HcRhPortStatus[1:NDP] Register -------------- */
TickTock 146:88f7bda79d8e 100 #define OR_RH_PORT_CCS 0x00000001
TickTock 146:88f7bda79d8e 101 #define OR_RH_PORT_PRS 0x00000010
TickTock 146:88f7bda79d8e 102 #define OR_RH_PORT_CSC 0x00010000
TickTock 146:88f7bda79d8e 103 #define OR_RH_PORT_PRSC 0x00100000
TickTock 146:88f7bda79d8e 104
TickTock 146:88f7bda79d8e 105
TickTock 146:88f7bda79d8e 106 /*
TickTock 146:88f7bda79d8e 107 **************************************************************************************************************
TickTock 146:88f7bda79d8e 108 * FRAME INTERVAL
TickTock 146:88f7bda79d8e 109 **************************************************************************************************************
TickTock 146:88f7bda79d8e 110 */
TickTock 146:88f7bda79d8e 111
TickTock 146:88f7bda79d8e 112 #define FI 0x2EDF /* 12000 bits per frame (-1) */
TickTock 146:88f7bda79d8e 113 #define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI)
TickTock 146:88f7bda79d8e 114
TickTock 146:88f7bda79d8e 115 /*
TickTock 146:88f7bda79d8e 116 **************************************************************************************************************
TickTock 146:88f7bda79d8e 117 * TRANSFER DESCRIPTOR CONTROL FIELDS
TickTock 146:88f7bda79d8e 118 **************************************************************************************************************
TickTock 146:88f7bda79d8e 119 */
TickTock 146:88f7bda79d8e 120
TickTock 146:88f7bda79d8e 121 #define TD_ROUNDING (USB_INT32U) (0x00040000) /* Buffer Rounding */
TickTock 146:88f7bda79d8e 122 #define TD_SETUP (USB_INT32U)(0) /* Direction of Setup Packet */
TickTock 146:88f7bda79d8e 123 #define TD_IN (USB_INT32U)(0x00100000) /* Direction In */
TickTock 146:88f7bda79d8e 124 #define TD_OUT (USB_INT32U)(0x00080000) /* Direction Out */
TickTock 146:88f7bda79d8e 125 #define TD_DELAY_INT(x) (USB_INT32U)((x) << 21) /* Delay Interrupt */
TickTock 146:88f7bda79d8e 126 #define TD_TOGGLE_0 (USB_INT32U)(0x02000000) /* Toggle 0 */
TickTock 146:88f7bda79d8e 127 #define TD_TOGGLE_1 (USB_INT32U)(0x03000000) /* Toggle 1 */
TickTock 146:88f7bda79d8e 128 #define TD_CC (USB_INT32U)(0xF0000000) /* Completion Code */
TickTock 146:88f7bda79d8e 129
TickTock 146:88f7bda79d8e 130 /*
TickTock 146:88f7bda79d8e 131 **************************************************************************************************************
TickTock 146:88f7bda79d8e 132 * USB STANDARD REQUEST DEFINITIONS
TickTock 146:88f7bda79d8e 133 **************************************************************************************************************
TickTock 146:88f7bda79d8e 134 */
TickTock 146:88f7bda79d8e 135
TickTock 146:88f7bda79d8e 136 #define USB_DESCRIPTOR_TYPE_DEVICE 1
TickTock 146:88f7bda79d8e 137 #define USB_DESCRIPTOR_TYPE_CONFIGURATION 2
TickTock 146:88f7bda79d8e 138 #define USB_DESCRIPTOR_TYPE_INTERFACE 4
TickTock 146:88f7bda79d8e 139 #define USB_DESCRIPTOR_TYPE_ENDPOINT 5
TickTock 146:88f7bda79d8e 140 /* ----------- Control RequestType Fields ----------- */
TickTock 146:88f7bda79d8e 141 #define USB_DEVICE_TO_HOST 0x80
TickTock 146:88f7bda79d8e 142 #define USB_HOST_TO_DEVICE 0x00
TickTock 146:88f7bda79d8e 143 #define USB_REQUEST_TYPE_CLASS 0x20
TickTock 146:88f7bda79d8e 144 #define USB_RECIPIENT_DEVICE 0x00
TickTock 146:88f7bda79d8e 145 #define USB_RECIPIENT_INTERFACE 0x01
TickTock 146:88f7bda79d8e 146 /* -------------- USB Standard Requests -------------- */
TickTock 146:88f7bda79d8e 147 #define SET_ADDRESS 5
TickTock 146:88f7bda79d8e 148 #define GET_DESCRIPTOR 6
TickTock 146:88f7bda79d8e 149 #define SET_CONFIGURATION 9
TickTock 146:88f7bda79d8e 150 #define SET_INTERFACE 11
TickTock 146:88f7bda79d8e 151
TickTock 146:88f7bda79d8e 152 /*
TickTock 146:88f7bda79d8e 153 **************************************************************************************************************
TickTock 146:88f7bda79d8e 154 * TYPE DEFINITIONS
TickTock 146:88f7bda79d8e 155 **************************************************************************************************************
TickTock 146:88f7bda79d8e 156 */
TickTock 146:88f7bda79d8e 157
TickTock 146:88f7bda79d8e 158 typedef struct hcEd { /* ----------- HostController EndPoint Descriptor ------------- */
TickTock 146:88f7bda79d8e 159 volatile USB_INT32U Control; /* Endpoint descriptor control */
TickTock 146:88f7bda79d8e 160 volatile USB_INT32U TailTd; /* Physical address of tail in Transfer descriptor list */
TickTock 146:88f7bda79d8e 161 volatile USB_INT32U HeadTd; /* Physcial address of head in Transfer descriptor list */
TickTock 146:88f7bda79d8e 162 volatile USB_INT32U Next; /* Physical address of next Endpoint descriptor */
TickTock 146:88f7bda79d8e 163 } HCED;
TickTock 146:88f7bda79d8e 164
TickTock 146:88f7bda79d8e 165 typedef struct hcTd { /* ------------ HostController Transfer Descriptor ------------ */
TickTock 146:88f7bda79d8e 166 volatile USB_INT32U Control; /* Transfer descriptor control */
TickTock 146:88f7bda79d8e 167 volatile USB_INT32U CurrBufPtr; /* Physical address of current buffer pointer */
TickTock 146:88f7bda79d8e 168 volatile USB_INT32U Next; /* Physical pointer to next Transfer Descriptor */
TickTock 146:88f7bda79d8e 169 volatile USB_INT32U BufEnd; /* Physical address of end of buffer */
TickTock 146:88f7bda79d8e 170 } HCTD;
TickTock 146:88f7bda79d8e 171
TickTock 146:88f7bda79d8e 172 typedef struct hcca { /* ----------- Host Controller Communication Area ------------ */
TickTock 146:88f7bda79d8e 173 volatile USB_INT32U IntTable[32]; /* Interrupt Table */
TickTock 146:88f7bda79d8e 174 volatile USB_INT32U FrameNumber; /* Frame Number */
TickTock 146:88f7bda79d8e 175 volatile USB_INT32U DoneHead; /* Done Head */
TickTock 146:88f7bda79d8e 176 volatile USB_INT08U Reserved[116]; /* Reserved for future use */
TickTock 146:88f7bda79d8e 177 volatile USB_INT08U Unknown[4]; /* Unused */
TickTock 146:88f7bda79d8e 178 } HCCA;
TickTock 146:88f7bda79d8e 179
TickTock 146:88f7bda79d8e 180 /*
TickTock 146:88f7bda79d8e 181 **************************************************************************************************************
TickTock 146:88f7bda79d8e 182 * EXTERN DECLARATIONS
TickTock 146:88f7bda79d8e 183 **************************************************************************************************************
TickTock 146:88f7bda79d8e 184 */
TickTock 146:88f7bda79d8e 185
TickTock 146:88f7bda79d8e 186 extern volatile HCED *EDBulkIn; /* BulkIn endpoint descriptor structure */
TickTock 146:88f7bda79d8e 187 extern volatile HCED *EDBulkOut; /* BulkOut endpoint descriptor structure */
TickTock 146:88f7bda79d8e 188 extern volatile HCTD *TDHead; /* Head transfer descriptor structure */
TickTock 146:88f7bda79d8e 189 extern volatile HCTD *TDTail; /* Tail transfer descriptor structure */
TickTock 146:88f7bda79d8e 190 extern volatile USB_INT08U *TDBuffer; /* Current Buffer Pointer of transfer descriptor */
TickTock 146:88f7bda79d8e 191
TickTock 146:88f7bda79d8e 192 /*
TickTock 146:88f7bda79d8e 193 **************************************************************************************************************
TickTock 146:88f7bda79d8e 194 * FUNCTION PROTOTYPES
TickTock 146:88f7bda79d8e 195 **************************************************************************************************************
TickTock 146:88f7bda79d8e 196 */
TickTock 146:88f7bda79d8e 197
TickTock 146:88f7bda79d8e 198 void Host_Init (void);
TickTock 146:88f7bda79d8e 199
TickTock 146:88f7bda79d8e 200 extern "C" void USB_IRQHandler(void) __irq;
TickTock 146:88f7bda79d8e 201
TickTock 146:88f7bda79d8e 202 USB_INT32S Host_EnumDev (void);
TickTock 146:88f7bda79d8e 203
TickTock 146:88f7bda79d8e 204 USB_INT32S Host_ProcessTD(volatile HCED *ed,
TickTock 146:88f7bda79d8e 205 volatile USB_INT32U token,
TickTock 146:88f7bda79d8e 206 volatile USB_INT08U *buffer,
TickTock 146:88f7bda79d8e 207 USB_INT32U buffer_len);
TickTock 146:88f7bda79d8e 208
TickTock 146:88f7bda79d8e 209 void Host_DelayUS ( USB_INT32U delay);
TickTock 146:88f7bda79d8e 210 void Host_DelayMS ( USB_INT32U delay);
TickTock 146:88f7bda79d8e 211
TickTock 146:88f7bda79d8e 212
TickTock 146:88f7bda79d8e 213 void Host_TDInit (volatile HCTD *td);
TickTock 146:88f7bda79d8e 214 void Host_EDInit (volatile HCED *ed);
TickTock 146:88f7bda79d8e 215 void Host_HCCAInit (volatile HCCA *hcca);
TickTock 146:88f7bda79d8e 216
TickTock 146:88f7bda79d8e 217 USB_INT32S Host_CtrlRecv ( USB_INT08U bm_request_type,
TickTock 146:88f7bda79d8e 218 USB_INT08U b_request,
TickTock 146:88f7bda79d8e 219 USB_INT16U w_value,
TickTock 146:88f7bda79d8e 220 USB_INT16U w_index,
TickTock 146:88f7bda79d8e 221 USB_INT16U w_length,
TickTock 146:88f7bda79d8e 222 volatile USB_INT08U *buffer);
TickTock 146:88f7bda79d8e 223
TickTock 146:88f7bda79d8e 224 USB_INT32S Host_CtrlSend ( USB_INT08U bm_request_type,
TickTock 146:88f7bda79d8e 225 USB_INT08U b_request,
TickTock 146:88f7bda79d8e 226 USB_INT16U w_value,
TickTock 146:88f7bda79d8e 227 USB_INT16U w_index,
TickTock 146:88f7bda79d8e 228 USB_INT16U w_length,
TickTock 146:88f7bda79d8e 229 volatile USB_INT08U *buffer);
TickTock 146:88f7bda79d8e 230
TickTock 146:88f7bda79d8e 231 void Host_FillSetup( USB_INT08U bm_request_type,
TickTock 146:88f7bda79d8e 232 USB_INT08U b_request,
TickTock 146:88f7bda79d8e 233 USB_INT16U w_value,
TickTock 146:88f7bda79d8e 234 USB_INT16U w_index,
TickTock 146:88f7bda79d8e 235 USB_INT16U w_length);
TickTock 146:88f7bda79d8e 236
TickTock 146:88f7bda79d8e 237
TickTock 146:88f7bda79d8e 238 void Host_WDHWait (void);
TickTock 146:88f7bda79d8e 239
TickTock 146:88f7bda79d8e 240
TickTock 146:88f7bda79d8e 241 USB_INT32U ReadLE32U (volatile USB_INT08U *pmem);
TickTock 146:88f7bda79d8e 242 void WriteLE32U (volatile USB_INT08U *pmem,
TickTock 146:88f7bda79d8e 243 USB_INT32U val);
TickTock 146:88f7bda79d8e 244 USB_INT16U ReadLE16U (volatile USB_INT08U *pmem);
TickTock 146:88f7bda79d8e 245 void WriteLE16U (volatile USB_INT08U *pmem,
TickTock 146:88f7bda79d8e 246 USB_INT16U val);
TickTock 146:88f7bda79d8e 247 USB_INT32U ReadBE32U (volatile USB_INT08U *pmem);
TickTock 146:88f7bda79d8e 248 void WriteBE32U (volatile USB_INT08U *pmem,
TickTock 146:88f7bda79d8e 249 USB_INT32U val);
TickTock 146:88f7bda79d8e 250 USB_INT16U ReadBE16U (volatile USB_INT08U *pmem);
TickTock 146:88f7bda79d8e 251 void WriteBE16U (volatile USB_INT08U *pmem,
TickTock 146:88f7bda79d8e 252 USB_INT16U val);
TickTock 146:88f7bda79d8e 253
TickTock 146:88f7bda79d8e 254 #endif